cfs400.c

来自「这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,」· C语言 代码 · 共 602 行 · 第 1/2 页

C
602
字号
	CASE_SET_SCANCONVERTER_PROPERTY_DELAY(escHorizontalScaleStep, HSS)	CASE_SET_SCANCONVERTER_PROPERTY_DELAY(escVerticalScaleStep, VSS)	CASE_SET_SCANCONVERTER_PROPERTY_DELAY(escHorizontalPanPosition, HPP)	CASE_SET_SCANCONVERTER_PROPERTY_DELAY(escVerticalPanPosition, VPP)	case escAccessRegister:		if(pdwSizeOut)			*pdwSizeOut = sizeof(ADDR_DATA);		if( dwSizeIn < sizeof(ADDR_DATA) )			return E_INVALID_PROPERTY_BUFFER;		IScanConverter_Write(pIScanConverter,			((ADDR_DATA*)pData)->Addr,			(WORD*)&((ADDR_DATA*)pData)->Data);		return Q_OK;	case escResetDefault:		IScanConverter_Read(pIScanConverter, FS400_SCR, (WORD*)&wData);		wData |= SCR_RESET;		IScanConverter_Write(pIScanConverter, FS400_SCR, (WORD*)&wData);		break;	case escChromaFilter:		IScanConverter_Read(pIScanConverter, FS400_HCRS, (WORD*)&wData);		if( Value )			wData |= HCRS_CBP;      // insert chroma bandpass filter		else			wData &= ~HCRS_CBP;     // bypass chroma bandpass filter		IScanConverter_Write(pIScanConverter, FS400_HCRS, (WORD*)&wData);		break;	case escLumaFilter:		IScanConverter_Read(pIScanConverter, FS400_HCRS, (WORD*)&wData);		if( Value )			wData |= HCRS_LNTCH;    // insert luminance notch filter		else			wData &= ~HCRS_LNTCH;   // bypass luminance notch filter		IScanConverter_Write(pIScanConverter, FS400_HCRS, (WORD*)&wData);		break;	case escNtscPedestal:		IScanConverter_Read(pIScanConverter, FS400_HCRS, (WORD*)&wData);		if( Value )			wData |= HCRS_PEDSTL;   // insert US NTSC black pedestal		else			wData &= ~HCRS_PEDSTL;  // bypass black pedestal		IScanConverter_Write(pIScanConverter, FS400_HCRS, (WORD*)&wData);		break;	case escOutputFormat:		this->ReqOutputFormat = Value;		Cfs400__SetOutputFormat(pIScanConverter, this->ReqOutputFormat);		break;	case escFlicker:		IScanConverter_Read(pIScanConverter, FS400_SCR, (WORD*)&wData);\		wData &= ~SCR_FLK_MASK;		wData |= SCR_RSTCALC | (( Value ) << SCR_FLK_SHIFT);		IScanConverter_Write(pIScanConverter, FS400_SCR, (WORD*)&wData);\		break;	case escZoom:		IScanConverter_Read(pIScanConverter, FS400_HCRES, (WORD*)&wData);		if( Value )			wData |= HCRES_ZOOM;    // enable zoom		else			wData &= ~HCRES_ZOOM;   // disable zoom		IScanConverter_Write(pIScanConverter, FS400_HCRES, (WORD*)&wData);		break;	case escMacrovision:		IScanConverter_EnableMacrovision(pIScanConverter, Value);		break;	case escTvStandard:		IScanConverter_SetTVStandard(pIScanConverter, Value);		break;	default:		return E_NOT_SUPPORTED;	}	return Q_OK;}/****f* HwLib/IScanConverter_GetProperty  * USAGE *	QRESULT IScanConverter_GetProperty(IScanConverter* pIScanConverter, *		DWORD PropSet, DWORD PropId, DWORD* pdwSize, void* pData) *	QRESULT Cfs400__GetProperty(IScanConverter* pIScanConverter, *		DWORD PropSet, DWORD PropId, DWORD* pdwSize, void* pData) * PARAMETERS *	IN IScanConverter* pIScanConverter - pointer to the ScanConverter object/********************************************************************************************/#define CASE_GET_SCANCONVERTER_PROPERTY(x, y)\case x:\	IScanConverter_Read(pIScanConverter, FS400_##y, (WORD*)&Value);\	break;QRESULT Cfs400__GetProperty( IScanConverter* pIScanConverter,	DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut){	// SCANCONVERTER_SET use DWORD for changing information and size condition is already checked	Cfs400* this = (Cfs400*) pIScanConverter;	WORD wData;	DWORD Value;	switch(PropId)	{	CASE_GET_SCANCONVERTER_PROPERTY(escBrightness, BRT)	CASE_GET_SCANCONVERTER_PROPERTY(escContrast, CON)	CASE_GET_SCANCONVERTER_PROPERTY(escSaturation,CSC)	CASE_GET_SCANCONVERTER_PROPERTY(escSharpness,SHP)	CASE_GET_SCANCONVERTER_PROPERTY(escHwOutputHorzOffsShadow, HOHOS)	CASE_GET_SCANCONVERTER_PROPERTY(escHwOutputVertOffsShadow, HOVOS)	CASE_GET_SCANCONVERTER_PROPERTY(escTVPixels, TVP)	CASE_GET_SCANCONVERTER_PROPERTY(escTVLines, TVL)	CASE_GET_SCANCONVERTER_PROPERTY(escHorizontalPositionOffset, HPO)	CASE_GET_SCANCONVERTER_PROPERTY(escVerticalPositionOffset, VPO)	CASE_GET_SCANCONVERTER_PROPERTY(escHorizontalScaleStep, HSS)	CASE_GET_SCANCONVERTER_PROPERTY(escVerticalScaleStep, VSS)	CASE_GET_SCANCONVERTER_PROPERTY(escHorizontalPanPosition, HPP)	CASE_GET_SCANCONVERTER_PROPERTY(escVerticalPanPosition, VPP)	case escAccessRegister:		if(pdwSizeOut)			*pdwSizeOut = sizeof(ADDR_DATA);		if( dwSizeIn < sizeof(ADDR_DATA) )			return E_INVALID_PROPERTY_BUFFER;		IScanConverter_Read(pIScanConverter,			((ADDR_DATA*)pData)->Addr,			(WORD*)&((ADDR_DATA*)pData)->Data);		return Q_OK;	case escChromaFilter:		IScanConverter_Read(pIScanConverter, FS400_HCRS, (WORD*)&wData);		Value = wData & HCRS_CBP; // check chroma bandpass filter		break;	case escLumaFilter:		IScanConverter_Read(pIScanConverter, FS400_HCRS, (WORD*)&wData);		Value = wData & HCRS_LNTCH;       // check luminance notch filter		break;	case escNtscPedestal:		IScanConverter_Read(pIScanConverter, FS400_HCRS, (WORD*)&wData);		Value = wData & HCRS_PEDSTL;      // check US NTSC black pedestal		break;	case escOutputFormat:		Value = this->ReqOutputFormat;		break;	case escFlicker:		IScanConverter_Read(pIScanConverter, FS400_SCR, (WORD*)&wData);		Value = (wData & SCR_FLK_MASK) >> SCR_FLK_SHIFT;		break;	case escZoom:		IScanConverter_Read(pIScanConverter, FS400_HCRES, (WORD*)&wData);		Value = wData & HCRES_ZOOM;		break;	case escMacrovision:		Value = this->CurrentMacrovision;		break;	case escTvStandard:		Value = this->CurrentTvStandard;		break;	default:		return E_NOT_SUPPORTED;	}	*(DWORD*)pData = Value;	QDbgLog((QLOG_TRACE, QDebugLevelTrace,		TEXT("   <-- Cfs400__GetProperty: set=%x id=%x flags=%x sz=%x value=%x"),		PropSet, PropId, Flags, dwSizeIn, Value));	return Q_OK;}/****f* HwLib/IScanConverter_SetTVStandard * USAGE *	BOOL IScanConverter_SetTVStandard( IScanConverter* pIScanConverter, DWORD TvStandard) *	BOOL Cfs400__SetTVStandard(IScanConverter* pIScanConverter, DWORD TvStandard) * DESCRIPTION *	IScanConverter_SetTVStandard - sets the Tv standard to hardware. * PARAMETERS *	IN IScanConverter* pIScanConverter - pointer to the ScanConverter object *	IN DWORD TvStandard - SET_PAL or SET_NTSC/********************************************************************************************/BOOL Cfs400__SetTVStandard(IScanConverter* pIScanConverter, DWORD TvStandard){	Cfs400* this = (Cfs400*) pIScanConverter;	SHORT wData;	Cfs400__Read(pIScanConverter, FS400_HCRS, (WORD*)&wData);	if(TvStandard == SET_NTSC)		wData &= ~(HCRS_PALNTSC | HCRS_TVCLK_MASK | HCRS_PROGINT);	else if(TvStandard == SET_PAL)		wData = (wData & ~(HCRS_TVCLK_MASK | HCRS_PROGINT)) | HCRS_PALNTSC;	else if(TvStandard == SET_480P)	{		wData = (wData & ~(HCRS_PALNTSC | HCRS_TVCLK_MASK)) |			(HCRS_PROGINT | HCRS_TVCLK1);		QDbgLog((QLOG_TRACE, QDebugLevelWarning,			TEXT("Cfs400__SetTVStandard: 480P TV Standard %x"), TvStandard));	}	else	{		QDbgLog((QLOG_TRACE, QDebugLevelWarning,			TEXT("Cfs400__SetTVStandard: UNKNOWN TV Standard %x"), TvStandard));		return FALSE;	}	Cfs400__Write(pIScanConverter, FS400_HCRS, (WORD*)&wData);	this->CurrentTvStandard = TvStandard;	Cfs400__EnableMacrovision(pIScanConverter, CURRENT_MACROVISION);	return TRUE;}/****f* HwLib/IScanConverter_SetOutputFormat * USAGE *	void IScanConverter_SetOutputFormat( IScanConverter* pIScanConverter, DWORD OutputFormat) *	void Cfs400__SetOutputFormat(IScanConverter* pIScanConverter, DWORD OutputFormat) * DESCRIPTION *	IScanConverter_SetOutputFormat -  * PARAMETERS *	IN IScanConverter* pIScanConverter - pointer to the ScanConverter object *	IN  DWORD OutputFormat - /********************************************************************************************/void Cfs400__SetOutputFormat(IScanConverter* pIScanConverter, DWORD OutputFormat){	Cfs400* this = (Cfs400*) pIScanConverter;	WORD wData;	QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT("Cfs400__SetOutputFormat %x Curr=%x Req=%x"),		OutputFormat, this->CurrentOutputFormat, this->ReqOutputFormat ));	if( this->CurrentOutputFormat == OutputFormat )		return;	IScanConverter_Read(pIScanConverter, FS400_HCRS, (WORD*)&wData);	if( OutputFormat == COMPOSITE )		wData = (wData & ~(HCRS_OFMT_MASK | HCRS_LOWPWR)) | HCRS_OFMT_COMP;	else if( OutputFormat == COMPONENT_RGB )		wData = (wData & ~(HCRS_OFMT_MASK | HCRS_LOWPWR)) | HCRS_OFMT_RGB;	else if( OutputFormat == COMPONENT_YUV )		wData = (wData & ~(HCRS_OFMT_MASK | HCRS_LOWPWR)) | HCRS_OFMT_YUV;	else    // OUTPUT_OFF		wData |= HCRS_LOWPWR;	IScanConverter_Write(pIScanConverter, FS400_HCRS, (WORD*)&wData);	this->CurrentOutputFormat = OutputFormat;}DWORD Cfs400__GetOutputFormat(IScanConverter* pIScanConverter){	Cfs400* this = (Cfs400*) pIScanConverter;	return this->ReqOutputFormat;}QRESULT Cfs400__Test(IScanConverter* pIScanConverter){	//	Cfs400* this = (Cfs400*) pIScanConverter;	WORD wData, wOldData;	int Error = 0;	if( !IScanConverter_Read(pIScanConverter, FS400_BRT, (WORD*)&wOldData) )		Error++;	wData = 0x55;	if( !IScanConverter_Write(pIScanConverter, FS400_BRT, (WORD*)&wData) )		Error++;	wData = 0;	if( !IScanConverter_Read(pIScanConverter, FS400_BRT, (WORD*)&wData) )		Error++;	if( wData != 0x55)		Error++;	if( !IScanConverter_Write(pIScanConverter, FS400_BRT, (WORD*)&wOldData) )		Error++;	if (Error)		OSsprintf(g_InfoError, TEXT("Focus Write/Read Error") );	return Error ? E_TEST_SCANCONVERTER_FAILED : Q_OK;}#else	// ! FS400_OBJECTvoid Cfs400__CreateInstance(void **ppv, DWORD dwInstance){	*ppv = NULL;}#endif	// FS400_OBJECT

⌨️ 快捷键说明

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