📄 ypbpr.c
字号:
//**********************************************************************************************************
// The Software is proprietary, confidential, and valuable to Realtek Semiconductor
// Corporation ("Realtek"). All rights, including but not limited to copyrights,
// patents, trademarks, trade secrets, mask work rights, and other similar rights and interests,
// are reserved to Realtek. Without prior written consent from Realtek, copying, reproduction,
// modification, distribution, or otherwise is strictly prohibited. The Software shall be
// kept strictly in confidence, and shall not be disclosed to or otherwise accessed by
// any third party. @ <2003> - <2008> The Software is provided "AS IS" without any warranty of any kind,
// express, implied, statutory or otherwise.
//**********************************************************************************************************
//----------------------------------------------------------------------------------------------------
// ID Code : YPbPr.c No.0000
// Update Note :
//----------------------------------------------------------------------------------------------------
#define __YPBPR__
#include "Common\Header\Include.h"
#if(_SCALER_SERIES_TYPE == _RTD2472D_SERIES)
#if(_YPBPR_SUPPORT == _ON)
//--------------------------------------------------
// Description : Search mode for YPbPr
// Input Value : None
// Output Value : YPbPr Mode number
//--------------------------------------------------
BYTE CYPbPrSearchMode(void)
{
BYTE cnt, modetemp = _MODE_NOSUPPORT;
for(cnt=0;cnt<_MAX_YPBPR_MODE;cnt++)
{
if(CYPbPrCompareMode(cnt) == _TRUE)
{
modetemp = cnt;
break;
}
}
return modetemp;
}
//--------------------------------------------------
// Description : Compare mode in YPbPr mode table
// Input Value : Mode number
// Output Value : Return _TRUE if get an available mode
//--------------------------------------------------
bit CYPbPrCompareMode(BYTE ucModeCnt)
{
if(abs(stModeInfo.IVFreq - tYPBPR_MODE_TABLE[ucModeCnt].IVFreq) > tYPBPR_MODE_TABLE[ucModeCnt].IVFreqTolerance)
{
return _FALSE;
}
if(abs(stModeInfo.IHFreq - tYPBPR_MODE_TABLE[ucModeCnt].IHFreq) > tYPBPR_MODE_TABLE[ucModeCnt].IHFreqTolerance)
{
return _FALSE;
}
if(abs(stModeInfo.IVTotal - tYPBPR_MODE_TABLE[ucModeCnt].IVTotal) > 1) //cyyeh 20080310
{
return _FALSE;
}
return _TRUE;
}
//--------------------------------------------------
// Description : Get mode information for YPbPr
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CYPbPrGetModeInfo(void)
{
stModeInfo.IHTotal = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHTotal;
stModeInfo.IHStartPos = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHStartPos;
stModeInfo.IHWidth = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHWidth;
stModeInfo.IVStartPos = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IVStartPos;
stModeInfo.IVHeight = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IVHeight;
stModeUserData.Clock = stModeInfo.IHTotal;
stModeUserData.Phase = 0;
stModeUserData.HPosition = stModeInfo.IHStartPos;
stModeUserData.VPosition = stModeInfo.IVStartPos;
// Test
stModeUserData.CenterClock = stModeInfo.IHTotal;
stModeUserData.CenterHPos = stModeInfo.IHStartPos;
stModeUserData.CenterVPos = stModeInfo.IVStartPos;
}
//--------------------------------------------------
// Description : Start up settings for YPbPr
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CYPbPrStartUp(void)
{
CScalerCodeW(tYPBPR_TABLE_SET_SCALER);
CScalerSetByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_G_CLAMP_START_00);
CScalerSetByte(_SYNC_PROC_DATA_PORT_5D, tYPBPR_CLAMP_POSITION_TABLE[(stModeInfo.ModeCurr * 2)]);
CScalerSetByte(_SYNC_PROC_DATA_PORT_5D, tYPBPR_CLAMP_POSITION_TABLE[(stModeInfo.ModeCurr * 2 + 1)]);
CScalerSetByte(_SYNC_PROC_DATA_PORT_5D, tYPBPR_CLAMP_POSITION_TABLE[(stModeInfo.ModeCurr * 2)]);
CScalerSetByte(_SYNC_PROC_DATA_PORT_5D, tYPBPR_CLAMP_POSITION_TABLE[(stModeInfo.ModeCurr * 2 + 1)]);
}
//--------------------------------------------------
// Description : Setup YPbPr mode
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CYPbPrSetupMode(void)
{
// Get information from mode table, such as IHTotal, IHStartPos, IHWidth, IVStartPos, IVHeight.
CYPbPrGetModeInfo();
// Start up settings of VGA mode.
CModeStartUpVGA();
// Start up settings of YPbPR mode.
CYPbPrStartUp();
// Get scaling option, Capture window setup, Scaling setup, Display setup
CModeSetupDisplay();
// Setup color processing
CModeSetupColorProcess();
CAdjustAdcGainOffset();
#if(_NEW_ADC == _FALSE)
// V010 Patch Note (1) : Adjust ADC Clock Modify
CAdjustAdcClock(stModeUserData.Clock,0);//cyyeh 20080222
#else
CAdjustAdcClock(stModeUserData.Clock);
#endif
CAdjustADCSetting();
CAdjustPhase(stModeUserData.Phase);
CAdjustHPosition();
CAdjustVPosition();
CScalerPageSelect(_PAGE2);
CScalerSetBit(_P2_POWER_ON_OFF_CTRL_A7, ~(_BIT3 | _BIT2 | _BIT1 | _BIT0), 0x00);
switch(stModeInfo.ModeCurr)
{
case 0: //576i
case 1: //480i
case 5: //1080i 50Hz
case 6: //1080i 60Hz
CScalerSetBit(_SCALE_CTRL_32, ~_BIT7, _BIT7);
CScalerSetBit(_VGIP_ODD_CTRL_13, ~_BIT0, _BIT0);
CFrameSyncFineTune(_ODD);
break;
}
//Anderson 080130 for Field Merge & FRC Support Start
//V403 modify Start
#if(_FRC_SUPPORT == _ON)
if(!GET_FRCSTATUS())
{
CModeSetFIFOForFrameSync();
#else
{
#endif
pData[0] = CFrameSyncDo();
if(pData[0] == 2)
{
CModeResetMode();
return;
}
}
//V403 modify End
//V403 modify End
// Issac-04-12 Begin //V403 modify
#if((_MEMORY_WORK_TYPE == _OD_ON_FRC_ON) || (_MEMORY_WORK_TYPE == _OD_OFF_FRC_ON))
else
{
#if(_FIELD_MERGE_SUPPORT == _ON)
if(GET_FIELDMERGE_MODE())
CScalerSetBit(_VGIP_SIGINV_11, ~_BIT4, _BIT4);
#endif
// Disable video compensation & IVS-to-DVS-delay control by ODD when FRC
CScalerSetBit(_SCALE_CTRL_32, ~_BIT7, 0);
CScalerSetBit(_FS_DELAY_FINE_TUNING_43, ~_BIT1, 0);
}
#endif
// Issac-04-12 End
//Anderson 080130 for Field Merge Support & FRC End
CModeSetupEtcs(_FUNCTION_ENABLE);
#if(_NEW_ADC == _FALSE)
// V010 Patch Note (1) : Adjust ADC Clock Modify
CAdjustAdcClock(stModeUserData.Clock,1);
CAdjustAdcClock(stModeUserData.Clock,2);
#endif
}
#endif // End of #if(_YPBPR_SUPPORT == _ON)
#endif // End of #if(_SCALER_SERIES_TYPE == _RTD2472D_SERIES)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -