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

📄 ctvenc.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
📖 第 1 页 / 共 3 页
字号:
/****f* HwLib/ITvEncoder_WriteN * USAGE *	void ITvEncoder_WriteN(ITvEncoder* pITvEncoder, DWORD addr, BYTE* pData, int n) *	void CTvEncoder__WriteN(ITvEncoder* pITvEncoder, DWORD addr, BYTE* pData, int n) * DESCRIPTION *	ITvEncoder_WriteN - writes "n" consecutive bytes from buffer "pData" in registers of *	TvEncoder starting from address "addr". * RETURN VALUE *	TRUE /********************************************************************************************/BOOL CTvEncoder__WriteN(ITvEncoder* pITvEncoder, DWORD addr, BYTE* pData, int n){	CTvEncoder *this = (CTvEncoder*) pITvEncoder;	II2C_Write(this->m_pII2C, (BYTE)addr, pData, n);	QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT("WriteTvEncoder at %x = %x"), addr, *pData));	return TRUE;}/****f* HwLib/ITvEncoder_ReadN * USAGE *	void ITvEncoder_ReadN(ITvEncoder* pITvEncoder, DWORD addr, BYTE* pData, int n) *	void CTvEncoder__ReadN(ITvEncoder* pITvEncoder, DWORD addr, BYTE* pData, int n) * DESCRIPTION *	ITvEncoder_ReadN - reads "n" consecutive bytes from registers of TvEncoder starting *	from address "addr" in buffer "pData". * RETURN VALUE *	TRUE /********************************************************************************************/BOOL CTvEncoder__ReadN(ITvEncoder* pITvEncoder, DWORD addr, BYTE* pData, int n){	CTvEncoder *this = (CTvEncoder*) pITvEncoder;	II2C_Read(this->m_pII2C, (BYTE)addr, pData, n);	QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT("ReadTvEncoder at %x = %x"), addr, *pData));	return TRUE;}/****f* HwLib/CTvEncoder_Check * USAGE *	NOT PRESENT in ITvEncoder interface *	void CTvEncoder__Check(ITvEncoder* pITvEncoder) * DESCRIPTION *	CTvEncoder_Check - finds, based on I2C base address, what specific TvEncoder *	is present on the board (AD7175, AD7170, AD7177, AD7178, BT869, BT865) and keeps the *	specific identifier in m_bEncoderRegs. If no I2C TvEncoder is present m_bEncoderRegs is 0. *	CTvEncoder__Check is called by ITvEncoder_Init.  * PARAMETERS *	IN ITvEncoder* pITvEncoder - pointer to the TvEncoder object * RETURN VALUE *	TRUE if any of I2C TvEncoders is present. *	FALSE if no I2C TvEncoder is present./********************************************************************************************/BOOL CTvEncoder__Check(ITvEncoder* pITvEncoder){	CTvEncoder *this = (CTvEncoder*) pITvEncoder;	BYTE byte = 0x55;	// Let's assume that is 7175A or 7170	II2C_SetI2CAddress( this->m_pII2C, AD7175_WRITE_ADDR, AD7175_READ_ADDR, 0);	II2C_Write(this->m_pII2C, 1, &byte, 1);	byte = 0;	II2C_Read(this->m_pII2C, 1, &byte, 1);	QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT("byte %x"), byte));	if (byte == 0x55)	{		// let's differentiate between AD7175A and 7170		II2C_Read(this->m_pII2C, 0,&byte,1);		if (byte & 0x20)		{			this->m_bEncoderRegs = AD7175_ID;			QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: AD7175A") ));		}		else		{			this->m_bEncoderRegs = AD7170_ID;			QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: AD7170") ));		}		return TRUE;	}	else	{		// It isn't 7175A or 7170. Let's try AD7177(without Macrovision)		QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: AD7177 ?") ));		II2C_SetI2CAddress( this->m_pII2C, AD7177_WRITE_ADDR, AD7177_READ_ADDR, 0);		this->m_bEncoderRegs = AD7177_ID;	// from 0 - 30 or 0x00 - 0x1e		byte = 0x55;		II2C_Write(this->m_pII2C, 1,&byte,1);		byte = 0;		II2C_Read(this->m_pII2C, 1,&byte,1);		if (byte == 0x55)		{			QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: AD7177") ));			return TRUE;		}		else		{			// It isn't 7177. Let's try AD7178(with Macrovision)			QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: AD7178 ?") ));			II2C_SetI2CAddress( this->m_pII2C, AD7178_WRITE_ADDR,  AD7178_READ_ADDR, 0);			// actually 36 registers. For now in order to distinguish 7175A let's put 37 !!			this->m_bEncoderRegs = AD7178_ID;	// from 0 - 35 or 0x00 - 0x23			byte = 0x55;			II2C_Write(this->m_pII2C, 1,&byte,1);			byte = 0;			II2C_Read(this->m_pII2C, 1,&byte,1);			if (byte == 0x55)			{				QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: AD7178") ));				return TRUE;			}			else			{				// It isn't 7178. Let's try BT869				QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: BT869 ?") ));				II2C_SetI2CAddress( this->m_pII2C, BT869_WRITE_ADDR,  BT869_READ_ADDR, 0);				this->m_bEncoderRegs = BT869_ID;				II2C_Read(this->m_pII2C, 0,&byte,1);	// read the chip version				if (byte == 0x22)				{					QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: BT869") ));					return TRUE;				}				else				{					// It isn't BT869. Let's try BT865	//EngSui					QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: BT865 ?") ));					II2C_SetI2CAddress( this->m_pII2C, BT865_WRITE_ADDR, BT865_READ_ADDR, 0);					this->m_bEncoderRegs = BT865_ID;					// reset the chip to make ESTATUS = 0, then read chip version					II2C_Write(this->m_pII2C, BT865_MAPREG(0x53),&byte,1);					II2C_Read(this->m_pII2C, 0,&byte,1);	// any addr will read back chip version					if(byte == BT865_ID)					{						QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: BT865 found") ));						return TRUE;					}					else					{						QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("   CheckTVEn: No TV Encoder") ));						II2C_SetI2CAddress( this->m_pII2C, 0, 0, 0);						this->m_bEncoderRegs = 0;						return FALSE;					}				}			}		}	}}/****f* HwLib/ITvEncoder_SetRegistry * USAGE *	void ITvEncoder_SetRegistry(ITvEncoder* pITvEncoder, REGISTRY_TABLE* pRegistry) *	void CTvEncoder__SetRegistry(ITvEncoder* pITvEncoder, REGISTRY_TABLE* pRegistry) * DESCRIPTION *	ITvEncoder_SetRegistry - sets specific variables for TvEncoder object, like using extended *	modes or field invert. *	It is called by CQuasarBoard_SetRegistry. * PARAMETERS *	IN ITvEncoder* pITvEncoder - pointer to the TvEncoder object *	IN REGISTRY_TABLE* pRegistry - pointer to a table containing initial values for EM8400./********************************************************************************************/void CTvEncoder__SetRegistry(ITvEncoder* pITvEncoder, REGISTRY_TABLE* pRegistry){	CTvEncoder *this = (CTvEncoder*) pITvEncoder;	this->pRegistry = pRegistry;	this->InvertField = pRegistry->InvertField;}/****f* HwLib/ITvEncoder_InitTvEncoder * USAGE *	void ITvEncoder_InitTvEncoder(ITvEncoder* pITvEncoder) *	void CTvEncoder__InitTvEncoder(ITvEncoder* pITvEncoder) * DESCRIPTION *	ITvEncoder_InitTvEncoder is implemented by CAD7170__InitTvEncoder, CAD7175__InitTvEncoder *	CAD7177__InitTvEncoder, CEM840X__InitTvEncoder, CEM847X__InitTvEncoder . *	The registers of TvEncoder are written with values from a specific TVRegsTable. *	Usually the TvEncoder is programmed in slave mode, 8 bit, CCIR601, DACs disabled. *	It is called by ITvEncoder_Init and IDecoderBoard_HwReset. * PARAMETERS *	IN ITvEncoder* pITvEncoder - pointer to the TvEncoder object/********************************************************************************************/void CTvEncoder__InitTvEncoder(ITvEncoder* pITvEncoder){}/****f* HwLib/ITvEncoder_ProgramTV * USAGE *	void ITvEncoder_ProgramTV(ITvEncoder* pITvEncoder, DWORD TvMaster, *		DWORD nbits, DWORD ccir, DWORD TvStandard, DWORD DacsEnable) *	void CTvEncoder__ProgramTV(ITvEncoder* pITvEncoder, DWORD TvMaster, *		DWORD nbits, DWORD ccir, DWORD TvStandard, DWORD DacsEnable) * DESCRIPTION *	ITvEncoder_ProgramTV is implemented by CAD7170__ProgramTV, CAD7175__ProgramTV *	CAD7177__ProgramTV, CEM840X__ProgramTV, CEM847X__ProgramTV. *	The synchronization signals (HSync, VSync) can be provided by any of: *		- MpegDecoder from EM8400, *		- TvEncoder from EM8400, *		- an external TvEncoder. *	We can choose any of them to be master ( to generate the VSync, HSync ) and in the  *	same time forcing the other ones to be slave. *	It is called by IDecoderBoard_VidSetVGATV * PARAMETERS *	IN ITvEncoder* pITvEncoder - pointer to the TvEncoder object *	IN DWORD TvMaster - 1 for master ( TvEncoder generates the VSync and HSync), 0 for slave *	IN DWORD nbits - 8bits(Y,U,Y,V) or 16(YU,YV) bits per clock *	IN DWORD ccir - CCIR_601 or CCIR_656 *	IN DWORD TvStandard - one of SET_NTSC,SET_PAL,SET_PAL60 *	IN DWORD DacsEnable - 0 for TV DACs power off, 1 for TV DACs power off * SEE ALSO *	IDecoder_QuasarMaster, IDecoder_QuasarSlave/********************************************************************************************/void CTvEncoder__ProgramTV(ITvEncoder* pITvEncoder, DWORD TvMaster,	DWORD nbits, DWORD ccir, DWORD TvStandard, DWORD DacsEnable){	CTvEncoder *this = (CTvEncoder*) pITvEncoder;	this->CurrentTvStandard = TvStandard;	this->TvDacsEnable = DacsEnable;}/****f* HwLib/ITvEncoder_SetTVStandard * USAGE *	void ITvEncoder_SetTVStandard(ITvEncoder* pITvEncoder, DWORD StandardTV) *	void CTvEncoder__SetTVStandard(ITvEncoder* pITvEncoder, DWORD StandardTV) * DESCRIPTION *	ITvEncoder_SetTVStandard is implemented by CAD7170__SetTVStandard, CAD7175__SetTVStandard *	CAD7177__SetTVStandard, CSigmaTv__SetTVStandard. *	This function modifies the internal TVRegsTable according to "StandardTV" and takes care *	also about changing the macrovision values, but doesn't	program the hardware. *	It is called by ITvEncoder_ProgramTV, who programs the hardware with the new values. * PARAMETERS *	IN ITvEncoder* pITvEncoder - pointer to the TvEncoder object *	IN DWORD StandardTV - one of SET_NTSC,SET_PAL,SET_PAL60/********************************************************************************************/void CTvEncoder__SetTVStandard(ITvEncoder* pITvEncoder, DWORD StandardTV){	CTvEncoder *this = (CTvEncoder*) pITvEncoder;	this->CurrentTvStandard = StandardTV;}/****f* HwLib/ITvEncoder_GetCurrentTVStandard * USAGE *	void ITvEncoder_GetCurrentTVStandard(ITvEncoder* pITvEncoder) *	void CTvEncoder__GetCurrentTVStandard(ITvEncoder* pITvEncoder) * DESCRIPTION *	ITvEncoder_GetCurrentTVStandard returns the current TV standard already programmed *	in TvEncoder (SET_NTSC, SET_PAL, SET_PAL60). *	ITvEncoder_GetCurrentTVStandard is called by IDecoderBoard_VideoHwPlay.  * PARAMETERS *	IN ITvEncoder* pITvEncoder - pointer to the TvEncoder object/********************************************************************************************/DWORD CTvEncoder__GetCurrentTVStandard(ITvEncoder* pITvEncoder){	CTvEncoder *this = (CTvEncoder*) pITvEncoder;	return this->CurrentTvStandard;}/****f* HwLib/ITvEncoder_GetCurrentMacrovision * USAGE *	void ITvEncoder_GetCurrentMacrovision(ITvEncoder* pITvEncoder) *	void CTvEncoder__GetCurrentMacrovision(ITvEncoder* pITvEncoder) * DESCRIPTION *	ITvEncoder_GetCurrentMacrovision returns the current level of macrovision already *	programmed in TvEncoder. * PARAMETERS *	IN ITvEncoder* pITvEncoder - pointer to the TvEncoder object/********************************************************************************************/DWORD CTvEncoder__GetCurrentMacrovision(ITvEncoder* pITvEncoder){	CTvEncoder *this = (CTvEncoder*) pITvEncoder;	return this->CurrentMacrovision;}/****f* HwLib/ITvEncoder_SetCurrentYcYuvRgb * USAGE *	void ITvEncoder_SetCurrentYcYuvRgb(ITvEncoder* pITvEncoder, DWORD YcYuvRgb) *	void CTvEncoder__SetCurrentYcYuvRgb(ITvEncoder* pITvEncoder, DWORD YcYuvRgb) *	void CAD7170__SetCurrentYcYuvRgb(ITvEncoder* pITvEncoder, DWORD YcYuvRgb) *	void CAD7175__SetCurrentYcYuvRgb(ITvEncoder* pITvEncoder, DWORD YcYuvRgb) *	void CAD7177__SetCurrentYcYuvRgb(ITvEncoder* pITvEncoder, DWORD YcYuvRgb) *	void CEM847X__SetCurrentYcYuvRgb(ITvEncoder* pITvEncoder, DWORD YcYuvRgb) * DESCRIPTION *	ITvEncoder_SetCurrentYcYuvRgb selects the output signal for TV: COMPONENT_YUV, *	COMPONENT_RGB, COMPOSITE. *	ITvEncoder_SetCurrentYcYuvRgb is called by IDecoderBoard_SelectOutputForVideo.  * PARAMETERS *	IN ITvEncoder* pITvEncoder - pointer to the TvEncoder object *	IN DWORD YcYuvRgb - one of supported values COMPONENT_YUV, COMPONENT_RGB, COMPOSITE * SEE ALSO *	ITvEncoder_GetCurrentYcYuvRgb

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -