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

📄 ypbpr.c

📁 realtek LCD monitor, TV开发源代码
💻 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 + -