📄 video.c
字号:
//----------------------------------------------------------------------------------------------------
// ID Code : Video.c No.0002
// Update Note :
//
//----------------------------------------------------------------------------------------------------
#define __VIDEO__
#include "Core\Header\Include.h"
//#include "Core\Header\Tv.h"
#if(_VIDEO_SUPPORT == _ON)
BYTE ucSearchCount = 0;
/**
* CVideoInitial
* initial video source
* set saturation,hue,backlight,sharpness, only called by CVideoIsExist
* @param <none>
* @return {none}
*
*/
//================================================================================================
/////////////////////////////////////////////////
void CVideoInitial(void)
{
// gmi_CI2CWriteIfPllDM(_TV_PAL_I, _TUNER_MUTE_OFF, _NORMAL_MODE);
// gmi_CSetTuner(_ADDR_TUNER, 4300);
// CTimerDelayXms(200);
CScalerSetBit(_SYNC_CTRL_49, ~(_BIT1 | _BIT0), _BIT0); // Measure HS/VS source select Video8/Video16
CScalerCodeW(VideoInit);
CScalerCodeW(VideoAdcInit);
gmi_CInitialVDC();
CScalerPageSelect(_PAGE8);
CScalerSetBit(_P8_VIDEO_CTRL1_A1, ~_BIT0, 0x00);
CScalerSetBit(_P8_INOUT_CTRL_A4, ~(_BIT1|_BIT4|_BIT5), _BIT4|_BIT5); // Force Only 4:2:2 Format Output for 3580 !!
CInitInputSource();
CVideoSoftReset();
// CVideoSelectInput(_GET_INPUT_SOURCE());
}
//--------------------------------------------------
void CVideoSetVDCConBriCustomer(void)
{
CVideoSetContrast(GET_CONTRAST());
#if(_VIDEO_AUTO_WHITE_BLANCE == _ENABLE)
CVideoSetVDCBrightness(GET_VDC_OFFSET());
#else
CVideoSetVDCBrightness(0x88);
#endif
}
void CSetVideoParameter(void)
{
switch (ucVideoType)
{
case ZNTSC:
CScalerCodeW(RTD2610_NTSC_M_ini);
break;
case ZPAL_I:
CScalerCodeW(RTD2610_PAL_I_ini);
break;
case ZPAL_M:
CScalerCodeW(RTD2610_PAL_M_ini);
break;
case ZPAL_N:
CScalerCodeW(RTD2610_PAL_CN_ini);
break;
case ZNTSC_443:
CScalerCodeW(RTD2610_NTSC_443_ini);
break;
case ZSECAM:
CScalerCodeW(RTD2610_SECAM_ini);
break;
case ZPAL_60:
CScalerCodeW(RTD2610_PAL_60_ini);
break;
case ZNTSC_50:
//CScalerCodeW(RTD2610_NTSC_50_ini);
break;
}
if(_GET_INPUT_SOURCE() == _SOURCE_VIDEO_SV)
{
CScalerPageSelect(_PAGE8);
CScalerSetByte(_P8_YCSEP_CTRL_E0, 0x03); // YC Seperate Control:1D
}
if((ucVideoType == ZSECAM )&&(_SOURCE_VIDEO_SV == _GET_INPUT_SOURCE()))
CScalerSetBit(_P8_OUTPUT_CTRL_A7, 0xf0, 0x08); //set bit0-3 as 0x8
else
CScalerSetBit(_P8_OUTPUT_CTRL_A7, 0xf0, 0x00); //set bit0-3 as 0x0
if (ucVideoType == ZPAL_60) // willy added for pal 60 only
CScalerSetBit(_P9_VS_TC_E7, 0xbf, 0x40);
else
CScalerSetBit(_P9_VS_TC_E7, 0xbf, 0x00);
if(ucVideoType == ZNTSC_50)
CScalerSetBit(_P8_YCSEP_CTRL_E0, 0xF8, 0x03);
}
//--------------------------------------------------
// Description : Check if video signal is locked
// Input Value : None
// Output Value : Return _TRUE if video signal is locked
//--------------------------------------------------
bit CVdcIsLocked(void)
{
return gmi_CModeLocked();
}
//--------------------------------------------------
// Description : Disable 2610 output
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CVideoOutputDisable(void)
{
}
//--------------------------------------------------
// Description : Eisable 2610 output
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CVideoOutputEnable(void)
{
}
//--------------------------------------------------
// Description : Soft Reset 2610
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CVideoSoftReset(void)
{
CScalerPageSelect(_PAGE8);
CScalerSetByte(_P8_SOFT_RESET_CF, 0x01);
CTimerDelayXms(10);
CScalerSetByte(_P8_SOFT_RESET_CF, 0x00);
}
//--------------------------------------------------
// Description : Set 2610 Saturation
// Input Value : saturationNone
// Output Value : None
//--------------------------------------------------
void CVideoSetVDCSaturation(BYTE ucValue)
{
CScalerPageSelect(_PAGE8);
#if(1)
CScalerSetByte(_P8_SATURATION1_AA, ucValue);
#else
BYTE moderesult;
WORD temp;
CScalerRead(_P8_MODE_DET_STATUS_D3, 1, &moderesult, _NON_AUTOINC);
CTimerDelayXms(20);
moderesult &=0x07;
//for PAL sat/1.414
temp =((WORD)(ucValue*100));
if(ucVideoType >= ZPAL_M && ucVideoType <= ZPAL_I)
{
ucValue=(temp/141);
}
CScalerSetByte(_P8_SATURATION1_AA,ucValue);
#endif
}
//--------------------------------------------------
// Description : Set 2610 Contrast
// Input Value : ucValue
// Output Value : None
//--------------------------------------------------
void CVideoSetVDCContrast(BYTE ucValue)
{
CScalerPageSelect(_PAGE8);
CScalerSetByte(_P8_CONTRAST1_A8,ucValue);
}
//--------------------------------------------------
// Description : Set 2610 Brightness
// Input Value : ucValue
// Output Value : None
//--------------------------------------------------
void CVideoSetVDCBrightness(BYTE ucValue)
{
CScalerPageSelect(_PAGE8);
CScalerSetByte(_P8_BRIGHTNESS1_A9,ucValue);
}
//--------------------------------------------------
#if(_VIDEO_TV_SUPPORT)
void CSetTvColor(BYTE ucColorMode)
{
if(_GET_INPUT_SOURCE() != _SOURCE_VIDEO_TV)
return;
switch(ucColorMode)
{
case _TV_NTSC_M:
case _TV_NTSC_4_BG:
case _TV_NTSC_4_DK:
case _TV_NTSC_4_I:
ucColorMode = 0x00;
break;
case _TV_PAL_M:
ucColorMode = 0x01;
break;
case _TV_PAL_BG:
case _TV_PAL_I:
case _TV_PAL_DK:
ucColorMode = 0x06;
break;
case _TV_PAL_N:
ucColorMode = 0x03;
break;
case _TV_SECAM_BG:
case _TV_SECAM_DK:
case _TV_SECAM_L:
case _TV_SECAM_LL:
ucColorMode = 0x07;
break;
}
CScalerPageSelect(_PAGE8); // TV disable auto mode
CScalerSetByte(0xD2, ucColorMode);
}
#endif // #if(_VIDEO_TV_SUPPORT)
//--------------------------------------------------
// Description : Display video set color process
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CSetVideoColor(void)
{
// Setup color conversion
CModeSetupColorConversion();//jerry20070605
CEepromLoadColorTempData();
CEepromLoadBriConData();
CEepromLoadHueSatData();
//adjust customer color mode
#if(_AdjustCustomerColorMode == _ENABLE)
CAdjustCustomerColorMode();
#endif
CAdjustContrast();
CAdjustBrightness();
CAdjustBacklight();
CAdjustPeakingCoding();
CVideoSetSaturation(GET_SATURATION());
gmi_CAdjustVDCHue(GET_HUE());
CVideoSetVDCConBriCustomer();
stSystemData.Sharpness &= 0xF0;
CAdjustSharpnessForScaleUp();
CPowerADCAPLLOff();
CVideoSetVDCBrightness(0x88);
if (_GET_INPUT_SOURCE() == _SOURCE_VIDEO_TV)
CVideoSetVDCContrast(0x5C);
else
CVideoSetVDCContrast(0x90);
CAccAdjust(GET_DCC_MODE()); // set DCC mode
#if(_ICM_FUNC)
// ICM on
CScalerPageSelect(_PAGE7);
CScalerSetByte(_P7_ICM_CTRL_D0, 0xdc);
SET_ICM_SAT_R(12);
CAdjustMZHueSat(0);
SET_ICM_SAT_G(12);
CAdjustMZHueSat(1);
SET_ICM_SAT_B(12);
CAdjustMZHueSat(2);
SET_ICM_SAT_Y(8);
CAdjustMZHueSat(3);
SET_ICM_SAT_C(8);
CAdjustMZHueSat(4);
#endif
}
/**
* CVideoDisplaySet
* Setup VGA display
* set video display
* @param <none>
* @return {none}
*
*/
/*
void SetDHToal(void)
{
//BYTE ucDHTotalL;
//CScalerSetByte(_DISP_ACCESS_PORT_2A, 0x01);
//CScalerRead(_DISP_DATA_PORT_2B, 1, &ucDHTotalL, _NON_AUTOINC);
//ucDHTotalL += 1;
//CScalerSetByte(_DISP_ACCESS_PORT_2A, 0x01);
//CScalerSetByte(_DISP_DATA_PORT_2B, ucDHTotalL);
CScalerSetByte(_DISP_ACCESS_PORT_2A, 0x01);
CScalerRead(_DISP_DATA_PORT_2B, 1, &pData[1], _NON_AUTOINC);
pData[0] = 0x01;
pData[1] = pData[1] + 1;
CScalerWrite(_DISP_ACCESS_PORT_2A, 2, pData, _AUTOINC);
}*/
//--------------------------------------------------
// Description : Display video set process
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CVideoDisplaySet(void)
{
BYTE field;//, temp;
BYTE ucScale = 0;
WORD iDHTotal;
WORD ustemp;
// CPowerLightPowerOff();
CVideoOutputEnable();
CScalerCodeW(tVIDEO_TABLE_SET_SCALER);
CScalerSetByte(_IPH_ACT_WID_H_16, 0x8A);//double clk input & Swap V8/V6-C-port MSB to LSB sequence into LSB to MSB
CSetVideoParameter();
CVideoSoftReset();
if(CTimerPollingEventProc(60, CMiscModeMeasurePollingEvent))
CModeMeasureData();
#if(_VIDEO_TV_SUPPORT)
if(_GET_INPUT_SOURCE() == _SOURCE_VIDEO_TV)
{
// No signal show snow noise
CScalerPageSelect(_PAGE8);
CScalerSetBit(_P8_OUTPUT_CTRL_A7, ~(_BIT4|_BIT5), 0x80);
CScalerPageSelect(_PAGE9);
CScalerSetByte(_P9_C_LOCK_CONF_B6, (ucVideoType == ZSECAM) ? 0xFB : 0x6B);
CSetTvColor(ucTVType);
// add for tv
CScalerPageSelect(_PAGE8);
CScalerSetByte(0xE1, 0x65);
CScalerSetByte(0xE2, 0x00);
}
else
#endif
{
CScalerPageSelect(_PAGE8); // TV enable auto mode
CScalerSetByte(0xD2, 0x80);
CScalerPageSelect(_PAGE9);
CScalerSetByte(_P9_C_LOCK_CONF_B6, 0x6B);
}
//#endif
// ucAV_Mode_Curr = (ucMode_Curr_2610 > 0x04) ? 50 : 60;
if(ucVideoType > ZPAL_60)
{
field = _VIDEO_50HZ;
iDHTotal = Panel[ucPanelSelect]->PalDHTotal;
// CTimerDelayXms(100); //HLD1104
// CScalerSetByte(_DISP_ACCESS_PORT_2A,0x0f);//DOU
//CScalerSetByte(_DISP_DATA_PORT_2B,0x25);
//CScalerSetByte(_DISP_ACCESS_PORT_2A,0x11);
//CScalerSetByte(_DISP_DATA_PORT_2B,0x2b);
//CScalerSetByte(_DISP_ACCESS_PORT_2A,0x13);
//CScalerSetByte(_DISP_DATA_PORT_2B,0xE9);
// CScalerSetByte(_DISP_ACCESS_PORT_2A,0x22);//DOU
//CScalerSetByte(_DISP_DATA_PORT_2B,0xa4);
}
else
{
field = _VIDEO_60HZ;
iDHTotal = Panel[ucPanelSelect]->NtscDHTotal;
/*
CScalerSetByte(_DISP_ACCESS_PORT_2A,0x0f);
CScalerSetByte(_DISP_DATA_PORT_2B,0x28);//0x2c
CScalerSetByte(_DISP_ACCESS_PORT_2A,0x11);
CScalerSetByte(_DISP_DATA_PORT_2B,0x28);//0x2c
CScalerSetByte(_DISP_ACCESS_PORT_2A,0x13);
CScalerSetByte(_DISP_DATA_PORT_2B,0xe9);//0x84
CScalerSetByte(_DISP_ACCESS_PORT_2A,0x22);
CScalerSetByte(_DISP_DATA_PORT_2B,0xa4);
*/
}
stModeInfo.IHTotal = tVIDEO_TABLE_INPUT_INFO[field][0];
stModeInfo.IHStartPos = tVIDEO_TABLE_INPUT_INFO[field][1];
stModeInfo.IHWidth = tVIDEO_TABLE_INPUT_INFO[field][2];
stModeInfo.IVStartPos = tVIDEO_TABLE_INPUT_INFO[field][3];
stModeInfo.IVHeight = tVIDEO_TABLE_INPUT_INFO[field][4];
stModeInfo.IHFreq = 157; // For PAL and NTSC. We can use sync processor to measure the actual value.
stDisplayInfo.DHWidth = CCalcPanelWdith();//Panel[ucPanelSelect]->DHWidth;
stDisplayInfo.DVHeight = Panel[ucPanelSelect]->DVHeight;
stDisplayInfo.DVStartPos = Panel[ucPanelSelect]->DVStartPos;
stDisplayInfo.DHTotal = iDHTotal;//Panel[ucPanelSelect]->DHTotal;
// Get scaling information
ucScale = 0;
if(stModeInfo.IVHeight < stDisplayInfo.DVHeight) ucScale |= _BIT0; // bit 0 : V scale-up
if(stModeInfo.IVHeight > stDisplayInfo.DVHeight) ucScale |= _BIT1; // bit 1 : V scale-down
if(stModeInfo.IHWidth < stDisplayInfo.DHWidth) ucScale |= _BIT2; // bit 2 : H scale-up
if(stModeInfo.IHWidth > stDisplayInfo.DHWidth) ucScale |= _BIT3; // bit 3 : H scale-down
ucHStartBias = 100;
ucVStartBias = 0;
ucVStartBias = CAdjustIVS2DVSDelay(ucScale);
if(ucVStartBias > stModeInfo.IVStartPos)
ucVStartBias = stModeInfo.IVStartPos;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -