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

📄 video.c

📁 RTD2662板卡源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//----------------------------------------------------------------------------------------------------
// 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 + -