📄 cdigpvr.c
字号:
this->BoardAudioRate = Rate & ~FORCED_HW_UPDATE; // use most significant bit to force programming QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT(" CSony__AudioSetSampleRate= %lu"), this->BoardAudioRate)); Pio_Sel48_44 = PIO10; // 1/0 is 48/44.1 Pio_Sel512_256 = PIO11; // 1/0 is 512/256 switch(this->BoardAudioRate) { case 44100: Val_Sel48_44 = 0; Val_Sel512_256 = 0; break; case 88200: Val_Sel48_44 = 0; Val_Sel512_256 = 1; break; case 48000: Val_Sel48_44 = 1; Val_Sel512_256 = 0; break; case 96000: Val_Sel48_44 = 1; Val_Sel512_256 = 1; break; default: return E_NOT_SUPPORTED; } IDecoder_WritePIO(this->m_pIDecoder, Pio_Sel48_44, Val_Sel48_44); IDecoder_WritePIO(this->m_pIDecoder, Pio_Sel512_256, Val_Sel512_256); return IDecoder_SetAudioSampleRate(this->m_pIDecoder, this->BoardAudioRate);}QRESULT CSony__PrepareLBCCapture(IDecoderBoard* pIDecoderBoard, DWORD config){ // add specific PIOs needed ?! return Q_OK;}void CDigPvr__InitVtable(IDecoderBoard* pIDecoderBoard){ CQuasarBoard* this = (CQuasarBoard*) pIDecoderBoard; this->lpVtbl->UpdateOverlay = CVE2000__UpdateOverlay; this->lpVtbl->SetCustomTvHdtv = CVE2000__SetCustomTvHdtv; this->lpVtbl->SelectVClk = C847xBrd__SelectVClk; if( (this->PciSubsystemID == 0x06) || // SONY_HAC (this->PciSubsystemID == 0x0a) ) // SONY_HVC { this->lpVtbl->HwReset = CVE2000__HwReset; this->lpVtbl->AudioSetSampleRate = CSony__AudioSetSampleRate; this->lpVtbl->PrepareLBCCapture = CSony__PrepareLBCCapture; } else { this->lpVtbl->HwReset = CDigPvr__HwReset; this->lpVtbl->AudioSetSampleRate = C847xBrd__AudioSetSampleRate; this->lpVtbl->PrepareLBCCapture = CDigPvr__PrepareLBCCapture; } this->lpVtbl->WriteDataToLBC = C847xBrd__WriteDataToLBC; this->lpVtbl->ReadDataFromLBC = C847xBrd__ReadDataFromLBC; this->lpVtbl->PrepareVideoIn = C847xBrd__PrepareVideoIn;#if defined SM2288_OBJECT this->lpVtbl->EnableLBCInterrupt = CSm2288PvrBrd__EnableLBCInterrupt;#endif // SM2288_OBJECT this->lpVtbl->VidSetVGATV = C847xDigBrd__VidSetVGATV; this->AudioPropertyList[eaInOutConfig].fnSet = (PFUNCT)CDigPvr__SetAudioProperty; this->AudioPropertyList[eaInOutConfig].fnGet = (PFUNCT)CDigPvr__GetAudioProperty;}QRESULT CDigPvr__SpecificCreateInstance(IDecoderBoard* pIDecoderBoard, DWORD dwInstance){ CQuasarBoard* this = (CQuasarBoard*) pIDecoderBoard; DWORD i2s, Value; this->BoardCapabilities |= ( MPEG_CAPABILITY_TV_YUV_COMPONENT | MPEG_CAPABILITY_TV_RGB_COMPONENT | MPEG_CAPABILITY_HDTV_OUTPUT ); this->pRegistry->Ccir_656 = CCIR_656; this->pRegistry->SyncEnable = 0; // by default disable VS,HS,VVLD for 656 this->pRegistry->TvOut = SET_TV | SET_NTSC | SET_ONETOONE; this->TvOut = SET_TV; // SONY_HVC doesn't have Csii168, Csaa7174, TvTuner if ( this->PciSubsystemID != 0x0a ) { // Create also Csii168 instance if( ModCreateInstance (dwInstance, &CLSID_CSII168, &IID_IDVITRANSMITTER, (void**)&this->m_pIDviTransmitter) != NOERROR ) { return Q_FAIL; } IDviTransmitter_Init(this->m_pIDviTransmitter); IDviTransmitter_InitPropertySet(this->m_pIDviTransmitter, this->pPropSetList, sizeof(PROPERTY_SET_ITEM)); this->BoardCapabilities |= MPEG_CAPABILITY_DVI; // Create also Csaa7174 instance if( ModCreateInstance (dwInstance, &CLSID_CSAA7114, &IID_IVIDEODECODER, (void**)&this->m_pIVideoDecoder) != NOERROR ) { return Q_FAIL; } IVideoDecoder_Init(this->m_pIVideoDecoder); IVideoDecoder_InitPropertySet(this->m_pIVideoDecoder, this->pPropSetList, sizeof(PROPERTY_SET_ITEM)); // Create also TvTuner instance if( ModCreateInstance (dwInstance, &CLSID_CTVTUNER, &IID_ITVTUNER, (void**)&this->m_pITvTuner) != NOERROR ) { return Q_FAIL; } ITvTuner_Init(this->m_pITvTuner); ITvTuner_InitPropertySet(this->m_pITvTuner, this->pPropSetList, sizeof(PROPERTY_SET_ITEM)); }#if defined SM2288_OBJECT/* if ( this->PciSubsystemID == 0x12 ) { // Create also CVW2010 instance if( ModCreateInstance (dwInstance, &CLSID_CVW2010, &IID_IMPEGENCODER, (void**)&this->m_pIMpegEncoder) != NOERROR ) { return Q_FAIL; } } else*/ { // Create also Csm2288 instance if( ModCreateInstance (dwInstance, &CLSID_CSM2288, &IID_IMPEGENCODER, (void**)&this->m_pIMpegEncoder) != NOERROR ) { return Q_FAIL; } } IMpegEncoder_Init(this->m_pIMpegEncoder); IMpegEncoder_InitPropertySet(this->m_pIMpegEncoder, this->pPropSetList, sizeof(PROPERTY_SET_ITEM)); { // initialize some parameters for transfering the encoder microcode emeXferUcodeParameters_type XferUcodeParams; CommonSymbolTable* pQ = (CommonSymbolTable*)this->pQ; XferUcodeParams.SysPhysAddr = this->HwLibConf.OsdDmaBuffPhysAddr; XferUcodeParams.SysLinAddr = (DWORD)this->HwLibConf.OsdDmaBuffLinAddr; XferUcodeParams.SysSizeInBytes = 0x8000; // 32k XferUcodeParams.DramAddr = (IDecoder_ReadDM(this->m_pIDecoder, pQ->OSD_BuffStart_Hi.addr)<<16) | (IDecoder_ReadDM(this->m_pIDecoder, pQ->OSD_BuffStart_Lo.addr)); XferUcodeParams.DramSizeInBytes = 0x8000; // 32k IDecoder_SetProperty(this->m_pIMpegEncoder, MPEG_ENCODER_SET, emeXferUcodeParameters, 0, &XferUcodeParams, sizeof(emeXferUcodeParameters_type), NULL); }#endif // SM2288_OBJECT // overwrite necessary values CDigPvr__InitVtable(pIDecoderBoard); this->DeviceId = VENTURA2000_DEVICEID; this->BoardVersion = PVR_DIGITAL; if (this->PciSubsystemID == 0x06) this->BoardVersion = SONY_HAC; if (this->PciSubsystemID == 0x0a) this->BoardVersion = SONY_HVC; this->SubId = (this->BoardVersion>>8);#ifdef DEBUG if( ((this->PciSubsystemID != 0xFF) || ((IDecoder_ReadReg(this->m_pIDecoder, DRAM_startup) & 0x3C) != MDCFG_ANLG_DIG_PVR)) && ((this->PciSubsystemID != 0x02) || (this->PciSubsystemVendorID != 0x1033)) ) { if( (this->PciSubsystemID != 0x06) && // SONY_HAC (this->PciSubsystemID != 0x0a) ) // SONY_HVC QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("\n\nERROR: Create PVR DIGITAL is FORCED !") )); }#endif i2s = IDecoder_ReadReg(this->m_pIDecoder, DRAM_startup) & MD5; Value = i2s ? I2S_SCkinJDA1CK_Jda1CkinGCK_ScinOUT_DamckOUT: JDA1_SCkinJDA1CK_Jda1CkinGCK_ScinOUT_DamckOUT; if( (this->PciSubsystemID == 0x06) || // SONY_HAC (this->PciSubsystemID == 0x0a) ) // SONY_HVC { // remove VCXO capability until eHwVcxoPio is decided this->BoardCapabilities &= ~MPEG_CAPABILITY_AUDIO_VCXO; Value = I2S_SCkinSCIN_Jda1CkinGCK_ScinIN_DamckIN; // trick for 96kHz support CQuasar__AudioSampleRateSupport(this->m_pIDecoder, 1); } if( this->PciSubsystemID == 0x05 ) { // PVR8500 - use external DAC Value = I2S_SCkinJDA1CK_Jda1CkinGCK_ScinOUT_DamckOUT; } IDecoder_SetProperty(this->m_pIDecoder, DECODER_SET, edecAudioInOutConfig, 0, &Value, sizeof(DWORD), NULL); Value = 24; IDecoder_SetProperty(this->m_pIDecoder, DECODER_SET, edecAudioDacBitsPerSample, 0, &Value, sizeof(DWORD), NULL); return Q_OK;}#endif // DIGITAL_PVR_BRD#if (defined DIGITAL_PVR_BRD || defined PVR8500_BRD) && !defined ANY_BRDQRESULT CreateInstance(DWORD* pInstance, void* pHwLibConf){ QRESULT qr = CommonCreateInstance(pInstance, pHwLibConf); if( QSUCCEEDED(qr) ) qr = CDigPvr__SpecificCreateInstance(g_pIDecoderBoard[*pInstance], *pInstance); if( QFAILED(qr) ) { CQuasarBoard__DeleteObjects(g_pIDecoderBoard[*pInstance]); g_pIDecoderBoard[*pInstance] = 0; return E_CREATE_INSTANCE_FAILED; } return Q_OK;}#endif // (DIGITAL_PVR_BRD || PVR8500_BRD) && !ANY_BRD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -