?? em86xx.cpp
字號:
// (video_profile.MPEGProfile == Profile_MPEG2_SD) ? "Profile_MPEG2_SD" :// (video_profile.MPEGProfile == Profile_MPEG4_SD) ? "Profile_MPEG4_SD" :// (video_profile.MPEGProfile == Profile_MPEG4_HD) ? "Profile_MPEG4_HD" :// (video_profile.MPEGProfile == Profile_DIVX3_HD) ? "Profile_DIVX3_HD" :// (video_profile.MPEGProfile == Profile_DIVX3_SD) ? "Profile_DIVX3_SD" :// (video_profile.MPEGProfile == Profile_WMV_816P) ? "Profile_WMV_816P" :// "UNKNOWN"));//// if(useHwDemux){// DemuxProgramId = 0;// video_buffer_count = 0;// audio_buffer_count = 0;// spu_buffer_count = 0;//// demuxProfile.BitstreamFIFOSize = DEMUX_BITSTREAM_FIFO_SIZE;// demuxProfile.XferFIFOCount = DEMUX_XFER_BUFFER_COUNT;// demuxProfile.DemuxID = 0;// demuxProfile.DemuxProgram0 = 0;// demuxProfile.DemuxProgram1 = 0xFF;//// status = DCCOpenDemuxSource(m_pDCC, &demuxProfile, &m_pDemuxSource);//// if(status != RM_OK) {// RMDBGLOG((ENABLE, "!!!!! Error DCCOpenDemuxSource : %s !!!!!\n", RMstatusToString(status)));// }// else {// status = DCCGetDemuxSourceInfo(m_pDemuxSource, &m_hw_demux, &m_hw_demux_program0, &m_hw_demux_program1);// if(status != RM_OK) {// RMDBGLOG((ENABLE, "!!!!! Error DCCGetDemuxSourceInfo : %s !!!!!\n", RMstatusToString(status)));// }// }//// RMDBGLOG((QBDBG, "HARDWARE DEMUXING\n"));// }// else {// DemuxProgramId = 0;// video_buffer_count = video_xfer_fifo_buffer_count;// audio_buffer_count = audio_xfer_fifo_buffer_count;// spu_buffer_count = SPU_XFER_FIFO_BUFFER_COUNT;// RMDBGLOG((QBDBG, "SOFTWARE DEMUXING\n"));// }//// RMDBGLOG((QBDBG, "DemuxProgramId = %lu\n", DemuxProgramId));////#ifndef NO_STC// {// // open first stc module// struct DCCStcProfile stc_profile;// stc_profile.STCID = 0;// stc_profile.master = Master_STC;//// stc_profile.stc_timer_id = 0;// stc_profile.stc_time_resolution = MPEG2_TIR;//// stc_profile.stc_offset = 0;//// stc_profile.video_timer_id = 1;// stc_profile.video_time_resolution = MPEG2_TIR;// stc_profile.video_offset = 0;//// stc_profile.audio_timer_id = 2;// stc_profile.audio_time_resolution = MPEG2_TIR;// stc_profile.audio_offset = 0;//// RMDBGLOG((ENABLE, "!!!!! Opening STC !!!!!\n" ));// status = DCCSTCOpen(m_pDCC, &stc_profile, &m_pStcSource);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "!!!!! Error DCCSTCOpen : %s !!!!!\n", RMstatusToString(status)));// return status;// }// }//#endif//// // VIDEO// m_videoMode = (RMdvdVideoMode) -1;//// video_profile.BitstreamFIFOSize = video_bts_fifo_size;// video_profile.XferFIFOCount = video_buffer_count;// video_profile.DemuxProgramID = DemuxProgramId;// video_profile.SPUBitstreamFIFOSize = SPU_BITSTREAM_FIFO_SIZE;// video_profile.SPUXferFIFOCount = spu_buffer_count;//#ifndef NO_STC// video_profile.STCID = 0;//#endif// status = DCCOpenVideoDecoderSource(m_pDCC, &video_profile, &m_pVideoSource);//// RMDBGLOG((QBDBG, "Opening video decoder : \n\tVIDEO bts fifo size : %lu,\n\tVIDEO buffer count : %lu\n\tSPU BTS fifo size : %lu\n\tSPU buffer count : %lu\n",// video_profile.BitstreamFIFOSize, video_profile.XferFIFOCount, video_profile.SPUBitstreamFIFOSize, video_profile.SPUXferFIFOCount));// if (RMFAILED(status)) {// RMDBGLOG((ENABLE,"!!!!!! Cannot open video decoder source %s !!!!!!\n", RMstatusToString(status)));// return status;// }//// status = DCCSetVideoDecoderSourceCodec(m_pVideoSource, m_video_codec);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE,"!!!!!! Cannot set video codec %s !!!!!!\n", RMstatusToString(status)));// return status;// }//// status = DCCGetScalerModuleID(m_pDCC, DCCRoute_Main, DCCSurface_Video, 0, &m_surfaceID);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "!!!!!! Cannot get surface to display video source %s !!!!!!\n", RMstatusToString(status)));// return status;// }//// status = DCCSetSurfaceSource(m_pDCC, m_surfaceID, m_pVideoSource);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "!!!!!! Cannot set the surface source %s !!!!!!\n", RMstatusToString(status)));// return status;// }//// // AUDIO// audio_profile.BitstreamFIFOSize = audio_bts_fifo_size;// audio_profile.XferFIFOCount = audio_buffer_count;// audio_profile.DemuxProgramID = DemuxProgramId;//#ifndef NO_STC// audio_profile.STCID = 0;//#endif//// RMDBGLOG((QBDBG, "Opening audio decoder : \n\tAUDIO bts fifo size : %lu,\n\tAUDIO buffer count : %lu\n",// audio_profile.BitstreamFIFOSize, audio_profile.XferFIFOCount));// status = DCCOpenAudioDecoderSource(m_pDCC, &audio_profile, &m_pAudioSource);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "!!!!!! Cannot open audio decoder %s !!!!!!\n", RMstatusToString(status)));// return status;// }//// status = DCCGetVideoDecoderSourceInfo(m_pVideoSource, &m_video_decoder, &m_spu_decoder, &m_video_timer);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "!!!!!! Error getting video decoder source information %s !!!!!!\n", RMstatusToString(status)));// return status;// }//// status = DCCGetAudioDecoderSourceInfo(m_pAudioSource, &m_audio_decoder, &m_audio_engine, &m_audio_timer);// RMDBGLOG((QBDBG, "!!!!!! Timers : audio = %lu, video = %lu !!!!!!\n", m_audio_timer, m_video_timer));// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "!!!!!! Error getting audio decoder source information %s !!!!!!\n", RMstatusToString(status)));// return status;// }//////// if(useHwDemux){// enum DemuxProgram_TimerSync_type TimerSync;// struct Demux_InputParameters_type InParam;//// TimerSync = DemuxProgram_TimerSync_FirstPcrOnly;// //TimerSync = DemuxProgram_TimerSync_Pcr;// status = RUASetProperty(m_pInstance, m_hw_demux_program0, RMDemuxProgramPropertyID_TimerSync,// &TimerSync, sizeof(TimerSync), 0);//// if(status != RM_OK){// RMDBGLOG((ENABLE, "!!!!!! Demux, failed to set : RMDemuxProgramPropertyID_TimerSync !!!!!!\n"));// }//// if (dvd){// // program HwDemux for DVD input// InParam.SourceType = SourceType_dvd;// }// else if(profile == MPEG2_TRANSPORT_PROFILE){ // m2t// InParam.SourceType = SourceType_m2t;// }// else { // m1s /m2p /vcd// InParam.SourceType = SourceType_m1s;// }//// RMDBGLOG((QBDBG,"HW demux source type = %s\n",// (InParam.SourceType==SourceType_dvd)?"SourceType_dvd":(InParam.SourceType==SourceType_m2t)?"SourceType_m2t":(InParam.SourceType==SourceType_m1s)?"SourceType_m1s":"UNKNOWN"));// // first PCR received from HwDemux will program the video and audio timers//// InParam.Spi = No_Spi;// status = RUASetProperty(m_pInstance, m_hw_demux, RMDemuxPropertyID_InputParameters,// &InParam, sizeof(InParam), 0);//// if(status != RM_OK){// RMDBGLOG((ENABLE, "!!!!!! Demux, failed to set : RMDemuxPropertyID_InputParameters !!!!!!\n"));// }//// if (dvd || vcd){// // program HwDemux with default streamId/SubstreamId// struct DemuxProgram_ProgramParameters_type ProgrParam;// ProgrParam.VideoSID = 0xE0;// if(dvd) {// ProgrParam.AudioSID = 0xBD;// ProgrParam.AudioSSID = 0x80;// ProgrParam.SubpictureSID = 0xBD;// ProgrParam.SubpictureSSID = 0x20;// }// else {// ProgrParam.AudioSID = 0;// ProgrParam.AudioSSID = 0;// ProgrParam.SubpictureSID = 0;// ProgrParam.SubpictureSSID = 0;// }//// status = RUASetProperty(m_pInstance, m_hw_demux_program0, RMDemuxProgramPropertyID_ProgramParameters,// &ProgrParam, sizeof(ProgrParam), 0);//// if(status != RM_OK){// RMDBGLOG((ENABLE, "!!!!!! Demux, failed to set : RMDemuxProgramPropertyID_ProgramParameters !!!!!!\n"));// }//// m_SendTitleKey = false;// }//// // program HwDemux to send all the streams// m_demuxOutCtrl.Video = TRUE;// m_demuxOutCtrl.Audio = TRUE;// m_demuxOutCtrl.Subpicture = TRUE;// m_demuxOutCtrl.VideoPts = TRUE;// m_demuxOutCtrl.AudioPts = TRUE;// m_demuxOutCtrl.SubpicturePts = TRUE;// m_demuxOutCtrl.Trigger = Trigger_None;// //m_demuxOutCtrl.Trigger = Trigger_VideoPts;// //m_demuxOutCtrl.Trigger = Trigger_AudioPts;// //m_demuxOutCtrl.Trigger = Trigger_VideoOrAudioPts;// //m_demuxOutCtrl.Trigger = Trigger_PayloadUnitStartIndicator;// status = RUASetProperty(m_pInstance, m_hw_demux_program0, RMDemuxProgramPropertyID_OutputControl,// &m_demuxOutCtrl, sizeof(m_demuxOutCtrl), 0);//// if(status != RM_OK){// RMDBGLOG((ENABLE, "!!!!!! Demux, failed to set : RMDemuxProgramPropertyID_OutputControl !!!!!!\n"));// }////// }////#ifndef NO_STC// DCCSTCSetTime(m_pStcSource, 0, MPEG2_TIR);// status = DCCSTCSetSpeed(m_pStcSource, 1, 1);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "Cannot set the speed factor %s\n", RMstatusToString(status)));// }//#else// DCCSetSystemTimeBase(m_pDCC, m_video_timer, 0);// DCCSetSystemTimeBase(m_pDCC, m_audio_timer, 0);//// status = DCCSetSystemTimeSpeedFactor(m_pDCC, m_video_timer, 1, 1);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "Cannot set the speed factor for video %s\n", RMstatusToString(status)));// }//// status = DCCSetSystemTimeSpeedFactor(m_pDCC, m_audio_timer, 1, 1);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "Cannot set the speed factor for audio %s\n", RMstatusToString(status)));// }//#endif//// // CC// RMuint32 nCCFifoID = EMHWLIB_MODULE(CCFifo, 0);// m_CC.EntryCount = 80;//// status = RUAExchangeProperty(m_pInstance, nCCFifoID, RMCCFifoPropertyID_DRAMSize,// &m_CC.EntryCount, sizeof(m_CC.EntryCount),// &m_CC.UncachedSize, sizeof(m_CC.UncachedSize));// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "Cannot get the required DRAM size for CC %s\n", RMstatusToString(status)));// }//#ifndef NO_STC// DCCSTCGetModuleId(m_pStcSource, &m_CC.STCModuleId);//#endif// m_CC.UncachedAddress = RUAMalloc(m_pInstance, 0, RUA_DRAM_UNCACHED, m_CC.UncachedSize);//// status = RUASetProperty(m_pInstance, nCCFifoID, RMCCFifoPropertyID_Open, &m_CC, sizeof(m_CC), 0);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "Cannot open CCFifo %s\n", RMstatusToString(status)));// }//// status = RUASetProperty(m_pInstance, EMHWLIB_MODULE(DispMainMixer, 0), RMGenericPropertyID_CCFifo, &nCCFifoID, sizeof(nCCFifoID), 0);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "Cannot set CCFifo on main mixer %s\n", RMstatusToString(status)));// }//// status = RUASetProperty(m_pInstance, EMHWLIB_MODULE(DispMainMixer, 0), RMGenericPropertyID_Validate, NULL, 0, 0);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "Cannot validate mixer settings %s\n", RMstatusToString(status)));// }//// status = RUASetProperty(m_pInstance, m_video_decoder, RMGenericPropertyID_CCFifo, &nCCFifoID, sizeof(nCCFifoID), 0);// if (RMFAILED(status)) {// RMDBGLOG((ENABLE, "Cannot set CCFifo on video decoder %s\n", RMstatusToString(status)));// }//// // set default values// SetVolume(m_volume);// SetBrightness(m_brightness);// SetContrast(m_contrast);// SetSaturation(m_saturation);// SetTVType(m_tvType, m_scalingMode);//// m_videoOnly = FALSE;// m_speed = 256;//// RMDBGLOG((QBDBG, "*********************************** Em86xx decoder : finish OpenDecoder ***********************************\n"));// return status;//}////RMstatus RMem86xxDecoder::Close()//{// RMstatus status = RM_OK;//// RMDBGLOG((QBDBG, "*********************************** Em86xx decoder : Close *********************************** \n"));////#if 0// Stop();//#else// // fix endless loop: Stop failure -> CleanallAndExit -> Close -> Stop failure ....// RMDBGLOG((QBDBG, "*********************************** Em86xx decoder : Stop in Close ***********************************\n"));// if(m_pDemuxSource != NULL){// RUASetProperty(m_pInstance, m_hw_demux_program0, RMDemuxProgramPropertyID_OutputControl,// &m_demuxOutCtrl, sizeof(m_demuxOutCtrl), 0);// status = DCCStopDemuxSource(m_pDemuxSource);// if(status != RM_OK){// RMDBGLOG((ENABLE, "!!!!!! Error DCCStopDemuxSource - %s !!!!!!\n", RMstatusToString(status)));// }// }//// if(m_pAudioSource != NULL){// status = DCCStopAudioSource(m_pAudioSource);// if(status != RM_OK){// RMDBGLOG((ENABLE, "!!!!!! Error DCCStopAudioSource - %s !!!!!!\n", RMstatusToString(status)));// }// }//// if(m_pVideoSource != 0){// status = DCCStopVideoSource(m_pVideoSource, DCCStopMode_BlackFrame);// if(status != RM_OK){// RMDBGLOG((ENABLE, "!!!!!! Error DCCStopVideoSource - %s !!!!!!\n", RMstatusToString(status)));// }// }//// SetMacrovisionLevel(0);//// m_isFirstSystemTimeStamp = TRUE;// RMDBGLOG((QBDBG, "*********************************** Em86xx decoder : Stop in Close finish ***********************************\n"));//#endif////#ifndef WITH_MONO// if(m_ctrl != 0){// status = RMFCloseControlInterface(m_ctrl);// m_ctrl = 0;// }//#endif//// status = CloseDecoder();//// if(m_pBufferPool != 0){// status = RUAClosePool(m_pBufferPool);// m_pBufferPool = NULL;// if (status != RM_OK) {// RMDBGLOG((ENABLE, "Error closing demux DMA pool: %s\n", RMstatusToString(status)));// }// }//// if(m_pAudioBufferPool != 0){// status = RUAClosePool(m_pAudioBufferPool);// m_pAudioBufferPool = NULL;// if (status != RM_OK) {// RMDBGLOG((ENABLE, "Error closing audio DMA pool: %s\n", RMstatusToString(status)));// }// m_audioFormat.audioType = CURACAO_AUDIO_UNKNOWN;// }//// if(m_pVideoBufferPool != 0){// status = RUAClosePool(m_pVideoBufferPool);// m_pVideoBufferPool = NULL;// if (status != RM_OK) {// RMDBGLOG((ENABLE, "Error closing video DMA pool: %s\n", RMstatusToString(status)));// }// }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -