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 + -
显示快捷键?