⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdigpvr.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -