?? em86xx.cpp
字號:
m_MpegParams.OutputDualMode = m_dualMode; m_MpegParams.OutputSpdif = m_SPDIFMode; m_MpegParams.OutputLfe = (m_AudioChannels == 6 ? TRUE : FALSE); m_MpegParams.OutputChannels = (m_AudioChannels == 6 ? Audio_Out_Ch_LCRLsRs : Audio_Out_Ch_LR); err = DCCSetAudioMpegFormat((struct DCCAudioSource *)m_pAudioSource, &m_MpegParams); } else if (parameters.audioType == CURACAO_AUDIO_AC3){ RMDBGLOG((QBDBG, "Codec : AC3\n")); m_Ac3Params.CompMode = CompMode_line_out; m_Ac3Params.DynScaleHi = 0x10000000; m_Ac3Params.DynScaleLo = 0x10000000; m_Ac3Params.PcmScale = 0x10000000; m_Ac3Params.OutputSurround20 = SurroundAsStream; m_Ac3Params.OutputLfe = (m_AudioChannels == 6 ? TRUE : FALSE); m_Ac3Params.OutputChannels = (m_AudioChannels == 6 ? Ac3_LCRLsRs : Ac3_LR); m_Ac3Params.OutputDualMode = m_dualMode; m_Ac3Params.OutputSpdif = OutputSpdif_Compressed; m_Ac3Params.OutputSpdif = m_SPDIFMode; err = DCCSetAudioAc3Format(m_pAudioSource, &m_Ac3Params); } else if (parameters.audioType == CURACAO_AUDIO_DTS){ RMDBGLOG((QBDBG, "Codec : DTS\n"));#ifdef GUI_REFID_3 m_DtsParams.OutputSpdif = OutputSpdif_NoDecodeCompressed;#else m_DtsParams.OutputSpdif = m_SPDIFMode;#endif m_DtsParams.OutputDualMode = m_dualMode; m_DtsParams.OutputChannels = (m_AudioChannels == 6 ? Dts_LCRLsRs : Dts_LR); err = DCCSetAudioDtsFormat(m_pAudioSource, &m_DtsParams); } else { enum AudioDecoder_Codec_type codec; DCCAudioDecoderFormat DCCformat; switch (parameters.audioType){ case CURACAO_AUDIO_MLP: RMDBGLOG((QBDBG, "Codec : DVD AUDIO\n")); codec = AudioDecoder_Codec_DVDA; break; case CURACAO_AUDIO_AAC: RMDBGLOG((QBDBG, "Codec : AAC\n")); codec = AudioDecoder_Codec_AAC; break; case CURACAO_AUDIO_UNKNOWN: default: RMDBGLOG((QBDBG, "Cannot set audio format : Unknown audio type\n")); return RM_ERROR; } DCCformat.Codec = codec; err = DCCSetAudioDecoderSourceFormat(m_pAudioSource, &DCCformat); } if (RMFAILED(err)) { RMDBGLOG((ENABLE, "!!!!!! Cannot set audio decoder format %s !!!!!!\n", RMstatusToString(err))); return err; } } err = DCCPlayAudioSource(m_pAudioSource); if(err != RM_OK){ RMDBGLOG((ENABLE, "!!!!!! Error DCCPlayAudioSource - %s !!!!!!\n", RMstatusToString(err))); CleanallAndExit(); }#ifndef NO_STC#else // set video STC to audio STC struct DisplayBlock_STBInfo_in_type stb_in; struct DisplayBlock_STBInfo_out_type stb_out; stb_in.STBNumber = m_video_timer; RUAExchangeProperty(m_pInstance, DisplayBlock, RMDisplayBlockPropertyID_STBInfo, &stb_in, sizeof(stb_in), &stb_out, sizeof(stb_out)); struct DisplayBlock_STBValue_type stb_value; stb_value.STBNumber = m_audio_timer; stb_value.Value = stb_out.Value; RUASetProperty(m_pInstance, DisplayBlock, RMDisplayBlockPropertyID_STBValue, &stb_value, sizeof(stb_value), 0); DCCSetSystemTimeScale(m_pDCC, m_audio_timer, MPEG2_TIR);#endif if(m_pDemuxSource != NULL){ // restore audio RUASetProperty(m_pInstance, m_hw_demux_program0, RMDemuxProgramPropertyID_OutputControl, &m_demuxOutCtrl, sizeof(m_demuxOutCtrl), 0); DCCPlayDemuxSource(m_pDemuxSource); } RMMemcpy((void*)&m_audioFormat, (void*)¶meters, sizeof(typeCuracaoAudioParameters)); m_isFirstSystemTimeStamp = TRUE; if (m_bHDMItv) { UpdateHDMIAudioFormat(); } return RM_OK;}RMstatus RMem86xxDecoder::SetSubpicturePalette(RMuint8 sppal[16*4]){ RMstatus status; struct SpuDecoder_Palette_type spu_lut; RMuint32 i; RMDBGLOG((QBDBG, "Set spu palette ...\n")); for (i=0; i<16*4; i++) { spu_lut.LUT[i] = *(sppal+i);// DVD format: 0, Y,Cr,Cb } status = RUASetProperty(m_pInstance, m_spu_decoder, RMSpuDecoderPropertyID_Palette, &spu_lut, sizeof(spu_lut), 0); if(status != RM_OK){ RMDBGLOG((ENABLE, "!!!!!! Error SpuDecoder set palette - %s !!!!!!\n", RMstatusToString(status))); CleanallAndExit(); } RMDBGLOG((QBDBG, "done with palette ...\n")); return status;}RMstatus RMem86xxDecoder::SubPictureHilight (RMuint16 leftb, RMuint16 topb, RMuint16 rightb, RMuint16 bottomb, RMuint32 wColor, RMuint32 wContrast){ RMstatus status; RMDBGLOG((QBDBG, "Set highlight :\n\tleft : %d,\n\tright : %d,\n\ttop : %d,\n\tbottom : %d,\n\tcolor : 0x%lx,\n\tcontrast : %lu ...\n", leftb, rightb, topb, bottomb, wColor, wContrast)); // Fix for DVD-Audio test disc ATD_001 Version 1.0// m_hiLight.leftb = leftb+9; m_hiLight.leftb = leftb; m_hiLight.topb = topb; m_hiLight.rightb = rightb; m_hiLight.bottomb = bottomb; m_hiLight.color = wColor; m_hiLight.contrast = wContrast; m_hiLight.pts = 0x1FFFFffffULL; m_hiLight.on = m_HighlightOn; if (!m_HighlightOn) { // work-around for bug 3951 (spu cmd fifo is full when HilightOn() is called) // Since the highlight is currently off right now, we'll just save the data. // The data is sent again when highlight is enabled with HilightOn() anyway. // This saves us one entry for the spu cmd fifo status = RM_OK; } else status = RUASetProperty(m_pInstance, m_spu_decoder, RMSpuDecoderPropertyID_Hilight, &m_hiLight, sizeof(m_hiLight), 0); RMDBGLOG((QBDBG, "... done with hilights, res = %s\n", RMstatusToString(status))); return status;}RMstatus RMem86xxDecoder::SubPictureOn (RMbool On){ RMstatus status; if(m_SubpictureOn != On){ RMDBGLOG((QBDBG, "spu: %s -> %s ...\n", m_SubpictureOn ? "ON" : "OFF", On ? "ON" : "OFF")); status = RUASetProperty(m_pInstance, m_spu_decoder, RMSpuDecoderPropertyID_SubpictureOn, &On, sizeof(On), 0); if(status == RM_OK){ m_SubpictureOn = On; RMDBGLOG((QBDBG, "... suceeded\n")); } else RMDBGLOG((QBDBG, "... failed\n")); } else status = RM_OK; return status;}RMstatus RMem86xxDecoder::HilightOn (RMbool On){ RMstatus status; if(m_HighlightOn != On){ RMDBGLOG((QBDBG, "hilight : %s -> %s ...\n", m_HighlightOn ? "ON" : "OFF", On ? "ON" : "OFF")); m_hiLight.on = On; status = RUASetProperty(m_pInstance, m_spu_decoder, RMSpuDecoderPropertyID_Hilight, &m_hiLight, sizeof(m_hiLight), 0); if(status == RM_OK){ m_HighlightOn = On; RMDBGLOG((QBDBG, "... succeeded\n")); } else RMDBGLOG((QBDBG, "... failed\n")); } else status = RM_OK; return status;}RMstatus RMem86xxDecoder::VideoMode (RMuint32 PTS, RMdvdVideoMode videoMode, RMbool bForce/* = FALSE*/){ RMstatus err; RMuint8 ar_x, ar_y; if (m_videoMode == videoMode && !bForce) return RM_OK; m_videoMode = videoMode; enum SpuDecoder_StreamType_type SpuStreamType; struct SurfaceAspectRatio_type SurfaceAspectRatio; SurfaceAspectRatio.type = EMhwlibAspectRatio_Display; RMDBGLOG((QBDBG, "********* SET VIDEO MODE ******************\n")); switch (m_videoMode) { case RM_DVD_VIDEO_4_3__16_9_ZOOM_ON: // crop top and bottom RMDBGLOG((QBDBG, "SetAspectRatioAndZoom RM_DVD_VIDEO_4_3__16_9_ZOOM_ON\r\n")); SurfaceAspectRatio.ar.X = 4; SurfaceAspectRatio.ar.Y = 3; ar_x = 16; ar_y = 9; SpuStreamType = SpuDecoder_StreamType_4by3; break; case RM_DVD_VIDEO_4_3__16_9_ZOOM_OFF: // black band on sides RMDBGLOG((QBDBG, "SetAspectRatioAndZoom RM_DVD_VIDEO_4_3__16_9_ZOOM_OFF\r\n")); SurfaceAspectRatio.ar.X = 4; SurfaceAspectRatio.ar.Y = 3; ar_x = 16; ar_y = 9; SpuStreamType = SpuDecoder_StreamType_4by3; break; case RM_DVD_VIDEO_16_9__16_9_RECT: RMDBGLOG((QBDBG, "SetAspectRatioAndZoom RM_DVD_VIDEO_16_9__16_9_RECT\r\n")); SurfaceAspectRatio.ar.X = 16; SurfaceAspectRatio.ar.Y = 9; ar_x = 16; ar_y = 9; SpuStreamType = SpuDecoder_StreamType_Wide; break; case RM_DVD_VIDEO_16_9__4_3_PANSCAN: RMDBGLOG((QBDBG, "SetAspectRatioAndZoom RM_DVD_VIDEO_16_9__4_3_PANSCAN\r\n")); SurfaceAspectRatio.ar.X = 16; SurfaceAspectRatio.ar.Y = 9; ar_x = 4; ar_y = 3; m_scalingMode = EMhwlibScalingMode_PanScan; SpuStreamType = SpuDecoder_StreamType_PanScan; m_blackstrip.Horizontal = 0; m_blackstrip.Vertical = 0; break; case RM_DVD_VIDEO_16_9__4_3_LETTERBOX: RMDBGLOG((QBDBG, "SetAspectRatioAndZoom RM_DVD_VIDEO_16_9__4_3_LETTERBOX\r\n")); SurfaceAspectRatio.ar.X = 16; SurfaceAspectRatio.ar.Y = 9; ar_x = 4; ar_y = 3; m_scalingMode = EMhwlibScalingMode_LetterBox; SpuStreamType = SpuDecoder_StreamType_Letterbox; m_blackstrip.Horizontal = 4096; m_blackstrip.Vertical = 4096; break; default: case RM_DVD_VIDEO_4_3__4_3_RECT: RMDBGLOG((QBDBG, "SetAspectRatioAndZoom RM_DVD_VIDEO_4_3__4_3_RECT\r\n")); SurfaceAspectRatio.ar.X = 4; SurfaceAspectRatio.ar.Y = 3; ar_x = 4; ar_y = 3; m_scalingMode = EMhwlibScalingMode_LetterBox; SpuStreamType = SpuDecoder_StreamType_4by3; m_blackstrip.Horizontal = 0; m_blackstrip.Vertical = 0; break; }#if 0 Stop(TRUE); if (m_speed == 256) Play(); else if (m_speed > 0) Forward(m_speed, FALSE); else // if (m_speed < 0) Backward(-m_speed, FALSE);#endif RUASetProperty(m_pInstance, m_surfaceID, RMGenericPropertyID_ScalingMode, &m_scalingMode, sizeof(m_scalingMode), 0); RUASetProperty(m_pInstance, m_surfaceID, RMGenericPropertyID_BlackStripMode, &m_blackstrip, sizeof(m_blackstrip), 0); RUASetProperty(m_pInstance, m_surfaceID, RMGenericPropertyID_Validate, NULL, 0, 0); DCCSetRouteDisplayAspectRatio(m_pDCC, DCCRoute_Main, ar_x, ar_y); RUASetProperty(m_pInstance, m_spu_decoder, RMSpuDecoderPropertyID_StreamType, &SpuStreamType, sizeof(SpuStreamType), 0); if ( m_hw_demux_program0 ) { err = RUASetProperty(m_pInstance, m_hw_demux_program0, RMDemuxProgramPropertyID_VideoInbandSurfaceAspectRatio, &SurfaceAspectRatio, sizeof(SurfaceAspectRatio), 0); if (RMFAILED(err)) RMDBGLOG((QBDBG, "VideoInbandSurfaceAspectRatio failed\r\n")); err = RUASetProperty(m_pInstance, m_hw_demux_program0, RMDemuxProgramPropertyID_VideoInbandScalingMode, &m_scalingMode, sizeof(m_scalingMode), 0); if (RMFAILED(err)) RMDBGLOG((QBDBG, "VideoInbandScalingMode failed\r\n")); } else { err = RUASetProperty(m_pInstance, m_video_decoder, RMVideoDecoderPropertyID_InbandSurfaceAspectRatio, &SurfaceAspectRatio, sizeof(SurfaceAspectRatio), 0); if (RMFAILED(err)) RMDBGLOG((QBDBG, "InbandSurfaceAspectRatio failed\r\n")); err = RUASetProperty(m_pInstance, m_video_decoder, RMVideoDecoderPropertyID_InbandScalingMode, &m_scalingMode, sizeof(m_scalingMode), 0); if (RMFAILED(err)) RMDBGLOG((QBDBG, "InbandScalingMode failed\r\n")); }#ifdef GUI_REFID_3 if (m_connector == DCCVideoConnector_SVIDEO || m_connector == DCCVideoConnector_COMPONENT) { if (m_videoMode == RM_DVD_VIDEO_16_9__4_3_PANSCAN) ScaleDisplay(DispMainVideoScaler, 0, 0, 4096, 4096); else if (m_standard == EMhwlibTVStandard_NTSC_M) ScaleDisplay(DispMainVideoScaler, 3, 0, (4096 * 714) / 720, 4096); else if (m_standard == EMhwlibTVStandard_PAL_BG) ScaleDisplay(DispMainVideoScaler, 9, 0, (4096 * 702) / 720, 4096); }#endif return RM_OK;}RMstatus RMem86xxDecoder::WaitForEOS(RMbool audio, RMbool video, RMuint32 timeout){ static struct RUAEvent e[4]; struct RUAEvent* pEvents = e; RMuint32 nEvents = 0; struct InbandCommand_type InbandCmd, InbandCmd_seq; InbandCmd.Tag = EMhwlibInbandCommand_EOS | INBAND_COMMAND_TYPE_BYTECOUNT | INBAND_COMMAND_ACTION_CONTINUE | INBAND_COMMAND_NO_COORDINATE; InbandCmd.Coordinate = 0; InbandCmd_seq.Tag = 0; InbandCmd_seq.Coordinate = 0; if(video) { // display e[nEvents].ModuleID = EMHWLIB_MODULE(DisplayBlock, 0); e[nEvents].Mask = EMHWLIB_DISPLAY_EVENT_ID(m_surfaceID); RUAResetEvent(m_pInstance, &e[nEvents]); RUASetProperty(m_pInstance, e[nEvents].ModuleID, RMGenericPropertyID_EnableEvent, &e[nEvents].Mask, sizeof(e[nEvents].Mask), 0); nEvents++; e[nEvents].ModuleID = m_video_decoder; e[nEvents].Mask = RUAEVENT_INBAND_COMMAND; RUAResetEvent(m_pInstance, &e[nEvents]); if (m_pDemuxSource == NULL) { InbandCmd.Tag = INBAND_COMMAND_TAG_END_SEQUENCE | INBAND
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -