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

📄 cad7175.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
字号:
/******************************************************************************//*  CAd7175.c : Implementation of the AD7175A interface*  REALmagic Quasar Hardware Library*  Created by Aurelia Popa-Radu*  Copyright Sigma Designs Inc*  Sigma Designs Proprietary and confidential*  Created on 8/27/99*  Description:/******************************************************************************//****h* HwLib/CAD7175_implementation * NAME *	HwLib/CAD7175_implementation * COPYRIGHT *  Copyright Sigma Designs Inc *  Sigma Designs Proprietary and confidential * DESCRIPTION *  CAD7175 implementation of the ITvEncoder interface: *  void CAD7175__Init(ITvEncoder* pITvEncoder) *  void CAD7175__InitTvEncoder(ITvEncoder* pITvEncoder) *  void CAD7175__ProgramTV(ITvEncoder* pITvEncoder, *		DWORD TvMaster, DWORD nbits, DWORD ccir, DWORD TvStandard, DWORD DacsEnable) *  void CAD7175__SetNTSCSubcarrier(ITvEncoder* pITvEncoder, DWORD value) *  void CAD7175__SetPALSubcarrier(ITvEncoder* pITvEncoder, DWORD value) *  void CAD7175__SetTVStandard(ITvEncoder* pITvEncoder, DWORD TvStandard) *  void CAD7175__SetCurrentYcYuvRgb(ITvEncoder* pITvEncoder, DWORD YcYuvRgb) *  void CAD7175__SendCCData(ITvEncoder* pITvEncoder, BYTE field, BYTE* Data) *  void CAD7175__ShowCloseCaption(ITvEncoder* pITvEncoder) *  void CAD7175__HideCloseCaption(ITvEncoder* pITvEncoder) *  void CAD7175__DisableTVBlackout(ITvEncoder* pITvEncoder)/******************************************************************************/#include "pch.h"#if defined AD7175_OBJECT#include "ci2c.h"#include "ctvenc.h"#include "cad7175.h"BYTE init7175Regs[] = {	0x00,	//	0x00= 00 Mode Reg 0	0x7F,	//	0x01= 01 Mode Reg 1 - power down	0x1F,	//	0x02= 02 Subcarrier Frequency Reg0	0x7C,	//	0x03= 03 Subcarrier Frequency Reg1	0xF0,	//	0x04= 04 Subcarrier Frequency Reg2	0x21,	//	0x05= 05 Subcarrier Frequency Reg3	0x00,	//	0x06= 06 Subcarrier Phase Reg	0x04,	//	0x07= 07 Timing reg 0 - 8 bit, slave, mode 2, blackout	0x00,	//	0x08= 08 Closed Captioning Ext Reg0	0x00,	//	0x09= 09 Closed Captioning Ext Reg1	0x00,	//	0x0a= 10 Closed Captioning Reg0	0x00,	//	0x0b= 11 Closed Captioning Reg1	0x73,	//	0x0c= 12 Timing reg 1 - some delays	0x08,	//	0x0d= 13 Mode Reg 2 - not lower power mode, enable color, CCIR 601	0x00,	//	0x0e= 14 Pedestal Control Reg0	0x00,	//	0x0f= 15 Pedestal Control Reg1	0x00,	//	0x10= 16 Pedestal Control Reg2	0x00,	//	0x11= 17 Pedestal Control Reg3	0x40,	//	0x12= 18 mode reg 3};////////////////////////////////////////////////////////////////////////////void CAD7175__Init(ITvEncoder* pITvEncoder){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	// Initialize virtual table with proper functions	this->VTable.Write				= CTvEncoder__Write;	this->VTable.Read				= CTvEncoder__Read;	this->VTable.WriteN				= CTvEncoder__WriteN;	this->VTable.ReadN				= CTvEncoder__ReadN;	this->VTable.InitTvEncoder		= CAD7175__InitTvEncoder;	this->VTable.ProgramTV			= CAD7175__ProgramTV;	this->VTable.SetTVStandard		= CAD7175__SetTVStandard;	this->VTable.EnableMacrovision	= CAD7175__EnableMacrovision;	this->VTable.SendCCData			= CAD7175__SendCCData;	this->VTable.ShowCloseCaption	= CAD7175__ShowCloseCaption;	this->VTable.HideCloseCaption	= CAD7175__HideCloseCaption;	this->VTable.DisableTVBlackout	= CAD7175__DisableTVBlackout;	this->VTable.SetPALSubcarrier	= CAD7175__SetPALSubcarrier;	this->VTable.SetNTSCSubcarrier	= CAD7175__SetNTSCSubcarrier;	this->VTable.SetCurrentYcYuvRgb	= CAD7175__SetCurrentYcYuvRgb;	this->TVRegsTable = init7175Regs;}void CAD7175__InitTvEncoder(ITvEncoder* pITvEncoder){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	if (this->TVRegsTable == NULL)	return;	//VG	*(this->TVRegsTable + 0) = AD_LUMA_FILTER_EXTENDED_MODE;	*(this->TVRegsTable + 1) = 0x7F;	*(this->TVRegsTable + 7) = 0x04;	// 8 bit, slave, mode 2, blackout	*(this->TVRegsTable + 0xc) = 0x73;	// timing	OSPutDword(this->NTSC_SubcarrierFrequency, this->TVRegsTable+2);	II2C_Write((II2C*)this->m_pII2C, 0, this->TVRegsTable, 18);		// without Macrovision}void CAD7175__ProgramTV(ITvEncoder* pITvEncoder, DWORD TvMaster,	DWORD nbits, DWORD ccir, DWORD TvStandard, DWORD DacsEnable){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	this->TvDacsEnable = DacsEnable;	if(DacsEnable)		*(this->TVRegsTable + 1) = this->CC_Enable;	// Power up DACs of TVEncoder	else		*(this->TVRegsTable + 1) = 0x7F;			// Power down DACs of TVEncoder	if(nbits == 8)		nbits = 0x00;	else		nbits = 0x40;	*(this->TVRegsTable + 0xc) = 0x00;	// timing	if( (ccir & CCIR_MASK) == CCIR_656 )	{		*(this->TVRegsTable + 7) = (BYTE)(0x00 | TvMaster | nbits);	// BlackOut, mode 0	}	else	// CCIR_601	{		*(this->TVRegsTable + 7) = (BYTE)(0x04 | TvMaster | nbits);	// BlackOut, mode 2		if( TvMaster )			*(this->TVRegsTable + 0xc) = 0x73;	// timing	}	CAD7175__SetTVStandard(pITvEncoder, TvStandard);	switch(this->YcYuvRgb)	{	case COMPONENT_YUV:		*(this->TVRegsTable + 0) |= 0x40;	// select component output YUV or RGB		*(this->TVRegsTable + 0xd) = 0x48;	// select YUV component		break;	case COMPONENT_RGB:		*(this->TVRegsTable + 0) |= 0x40;	// select component output YUV or RGB		*(this->TVRegsTable + 0xd) = 0x08;	// select RGB component		break;	case COMPOSITE:	default:		*(this->TVRegsTable + 0) |= 0x00;	// select YC output		*(this->TVRegsTable + 0xd) = 0x08;	// don't care ?		break;	}	// let's write the first 14 TV registers	II2C_Write((II2C*)this->m_pII2C, 0, this->TVRegsTable, 0x0e);}void CAD7175__SetNTSCSubcarrier(ITvEncoder* pITvEncoder, DWORD value){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	this->NTSC_SubcarrierFrequency = value;	OSPutDword(this->NTSC_SubcarrierFrequency, this->TVRegsTable+2);	if (this->CurrentTvStandard == SET_NTSC)		II2C_Write((II2C*)this->m_pII2C, 2, this->TVRegsTable+2, 4);}void CAD7175__SetPALSubcarrier(ITvEncoder* pITvEncoder, DWORD value){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	this->PAL_SubcarrierFrequency = value;	OSPutDword(this->PAL_SubcarrierFrequency, this->TVRegsTable+2);	if ( (this->CurrentTvStandard == SET_PAL) || (this->CurrentTvStandard == SET_PAL60) )		II2C_Write((II2C*)this->m_pII2C, 2,this->TVRegsTable+2,4);}void CAD7175__SetTVStandard(ITvEncoder* pITvEncoder, DWORD TvStandard){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	if( TvStandard == SET_PAL )	{		// PAL-B,D,G,H,I settings		*(this->TVRegsTable + 0) = 0x01 | AD_LUMA_FILTER_EXTENDED_MODE;		OSPutDword(this->PAL_SubcarrierFrequency, this->TVRegsTable+2);	}	else if( TvStandard == SET_PAL60 )	{		// PAL-60 settings		*(this->TVRegsTable + 0) = 0x02 | AD_LUMA_FILTER_EXTENDED_MODE;		OSPutDword(this->PAL_SubcarrierFrequency, this->TVRegsTable+2);	}	else	{		// NTSC settings		*(this->TVRegsTable + 0) = 0x00 | AD_LUMA_FILTER_EXTENDED_MODE;		OSPutDword(this->NTSC_SubcarrierFrequency, this->TVRegsTable+2);	}	this->CurrentTvStandard = TvStandard;	CAD7175__EnableMacrovision( pITvEncoder, CURRENT_MACROVISION );}void CAD7175__SetCurrentYcYuvRgb(ITvEncoder* pITvEncoder, DWORD YcYuvRgb){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	this->YcYuvRgb = YcYuvRgb;	*(this->TVRegsTable + 0) &= ~0x040;		// clear mask	switch(this->YcYuvRgb)	{	case COMPONENT_YUV:		*(this->TVRegsTable + 0) |= 0x40;	// select component output YUV or RGB		*(this->TVRegsTable + 0xd) = 0x48;	// select YUV component		break;	case COMPONENT_RGB:		*(this->TVRegsTable + 0) |= 0x40;	// select component output YUV or RGB		*(this->TVRegsTable + 0xd) = 0x08;	// select RGB component		break;	case COMPOSITE:	default:		*(this->TVRegsTable + 0) |= 0x00;	// select YC output		*(this->TVRegsTable + 0xd) = 0x08;	// don't care ?		break;	}	// update to hardware	II2C_Write((II2C*)this->m_pII2C, 0, this->TVRegsTable + 0, 1);	II2C_Write((II2C*)this->m_pII2C, 0xd, this->TVRegsTable + 0xd, 1);} void CAD7175__SendCCData(ITvEncoder* pITvEncoder, BYTE field, BYTE* Data){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	if ( (this->CC_Enable == 0) || (this->CC_UserEnable == 0) )		return;	if( field & 0x80 )	// line21_switch = 1 -> valid data	{		if( (field & 0x01) == 0)		{			this->CC_FieldEnable |= AD_ECCF1;			II2C_Write((II2C*)this->m_pII2C, 0x0a, Data, 2);		// CloseCaption registers		}		else		{			this->CC_FieldEnable |= AD_ECCF2;			II2C_Write((II2C*)this->m_pII2C, 0x08, Data, 2);		// Extended data		}	}	else				// line21_switch = 0 -> invalid data	{		if( (field & 0x01) == 0)			this->CC_FieldEnable &= ~AD_ECCF1;		else			this->CC_FieldEnable &= ~AD_ECCF2;	}	II2C_Write((II2C*)this->m_pII2C, 0x01, &(this->CC_FieldEnable), 1);	QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT("_%x "), this->CC_FieldEnable));}void CAD7175__ShowCloseCaption(ITvEncoder* pITvEncoder){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	BYTE Byte = 0;	this->CC_Enable = (this->CC_UserEnable) ? (AD_ECCF1 | AD_ECCF2):0;	this->CC_FieldEnable = this->CC_Enable;	II2C_Read((II2C*)this->m_pII2C, 0x01, &Byte, 1);	Byte |= this->CC_Enable;	II2C_Write((II2C*)this->m_pII2C, 0x01, &Byte, 1);}void CAD7175__HideCloseCaption(ITvEncoder* pITvEncoder){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	BYTE Byte = 0;	this->CC_Enable = 0;	this->CC_FieldEnable = 0;	II2C_Read((II2C*)this->m_pII2C, 0x01, &Byte, 1);	Byte &= ~(AD_ECCF1 | AD_ECCF2);	II2C_Write((II2C*)this->m_pII2C, 0x01, &Byte, 1);}void CAD7175__DisableTVBlackout(ITvEncoder* pITvEncoder){	CTvEncoder* this = (CTvEncoder*) pITvEncoder;	*(this->TVRegsTable + 7) |= 8;					// disable BlackOut for TV	II2C_Write((II2C*)this->m_pII2C, 7, this->TVRegsTable + 7, 1);}#else	// ! AD7175_OBJECTvoid CAD7175__Init(ITvEncoder* pITvEncoder){}#endif	// AD7175_OBJECT

⌨️ 快捷键说明

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