📄 mode.c
字号:
}
}
else
{
CScalerSetBit(_MEAS_HS_PERIOD_H_52, ~_BIT5, 0x00);
modecnt = _MODE_NOSUPPORT;
}
}
CScalerSetBit(_SYNC_SELECT_47, ~_BIT0, 0x00);
// If no mode found, set to mode 0
if(modecnt >= _MAX_PRESET_MODE)
{
modecnt = 0;
}
// We don't support input image large than 2048 active pixel or less than 240 active lines.
// added deep color mode limitation
if(GET_DEEPCOLORMODE())
{
CScalerPageSelect(_PAGE2);
CScalerRead( _P2_TMDS_DPC0_B4 , 1 ,&pData[3] , _NON_AUTOINC);
CTimerDelayXms(5);
temp = pData[3] & 0x07;
if(temp == 0x05)
{ //30 bit 1920
if((stModeInfo.IHWidth > 2560) || (stModeInfo.IVHeight < 240))
{
modecnt = _MODE_NOSUPPORT;
}
}
else if(temp == 0x06) //36 bit
{
if((stModeInfo.IHWidth > 3072) || (stModeInfo.IVHeight < 240))
{
modecnt = _MODE_NOSUPPORT;
}
}
else if(temp == 0x07) //48 bit
{
if((stModeInfo.IHWidth > 4096) || (stModeInfo.IVHeight < 240))
{
modecnt = _MODE_NOSUPPORT;
}
}
}
else
{
if((stModeInfo.IHWidth > 2048) || (stModeInfo.IVHeight < 240))
modecnt = _MODE_NOSUPPORT;
}
return modecnt;
}
//--------------------------------------------------
// Description : Compare mode for DVI
// Input Value : Mode number
// Output Value : Retrun _TRUE if it's correspondence
//--------------------------------------------------
bit CModeCompareModeDVI(BYTE ucModeCnt)
{
//cyyeh 20080108 fix for deep color mode
if(stModeInfo.IHWidth != tINPUTMODE_PRESET_TABLE[ucModeCnt].IHWidth)
{
if(abs(stModeInfo.IHWidth - tINPUTMODE_PRESET_TABLE[ucModeCnt].IHWidth) <= 3)
return _TRUE;
else
return _FALSE;
}
if(stModeInfo.IVHeight != tINPUTMODE_PRESET_TABLE[ucModeCnt].IVHeight)
return _FALSE;
if(abs(stModeInfo.IVFreq - tINPUTMODE_PRESET_TABLE[ucModeCnt].IVFreq) > tINPUTMODE_PRESET_TABLE[ucModeCnt].IVFreqTolerance)
return _FALSE;
return _TRUE;
}
#endif // End of #if((_TMDS_SUPPORT == _ON) || (_HDMI_SUPPORT == _ON)||(_DP_SUPPORT == _ON))
//----------------------------------------------------------------------------------------------------
// Mode Display Functions
//----------------------------------------------------------------------------------------------------
//--------------------------------------------------
// Description : Display active mode process
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CModeDisplayActiveMode(void)
{
switch(GET_INPUTSOURCE_TYPE())
{
case _SOURCE_VGA:
//Anderson 080422 for FRC Support Start
#if(_FRC_SUPPORT == _ON)
SET_FRCRGBIN();//RGB Input
#endif
CModeSetupModeVGA();
break;
#if(_YPBPR_SUPPORT == _ON)
case _SOURCE_YPBPR:
#if(_FRC_SUPPORT == _ON)
CLR_FRCRGBIN();//YUV Input
#endif
CYPbPrSetupMode();
break;
#endif
//cyyeh//eagleeyes
#if((_TMDS_SUPPORT == _ON) || (_HDMI_SUPPORT == _ON)||(_DP_SUPPORT == _ON))
case _SOURCE_DVI:
case _SOURCE_HDMI:
case _SOURCE_DP:
#if(_FRC_SUPPORT == _ON)
if(!CHdmiFormatDetect())//Input source is the HDMI format//Anderson 20080710
SET_FRCRGBIN();//RGB Input
#endif
CModeSetupModeDVI();
break;
#endif
#if(_VIDEO_SUPPORT == _ON)
case _SOURCE_VIDEO8:
#if(_FRC_SUPPORT == _ON)
CLR_FRCRGBIN();//YUV Input
#endif
CVideoDisplaySet();
break;
#endif
//Anderson 080422 for FRC Support End
}
}
//--------------------------------------------------
// Description : Sum Of Difference
// Input Value : None
// Output Value : None
//--------------------------------------------------
#if(_MODE_COMPARE_BY_SOD == _ON)
// Issac-03-13-Begin
DWORD CModeCheckMaxSOD(void)
{
if (CAutoMeasurePositionV(_MIN_NOISE_MARGIN) != _ERROR_SUCCESS) return _FALSE;
if (CAutoMeasurePositionH(_MIN_NOISE_MARGIN + 0x10) != _ERROR_SUCCESS) return _FALSE;
// Set threshold for Clock Search
CScalerSetByte(_DIFF_THRESHOLD_79, 0x18);
g_usHEndPos = g_usHEndPos + 1 - g_usHStartPos;
if(g_usHEndPos > (stModeInfo.IHWidth + 2))
{
((DWORD *)pData)[0] = 0;
}
else
{
BYTE temp;
((DWORD *)pData)[0] = CAutoPhaseSearch(_COLOR_SELECT, _HWAUTO_STEP_16, HWAUTOSTEPNUM(4), HWAUTOSTEPSTART(0), &temp);
if (0xffffffffL == ((DWORD *)pData)[0]) return 0;
}
// SOD is too small to make mode decision
if (((DWORD *)pData)[0] < ((DWORD)stModeInfo.IHWidth << 10)) ((DWORD *)pData)[0] = 0;
return ((DWORD *)pData)[0];
}
// Issac-03-13-End
BYTE code CModeSeparateConfuseMode(BYTE *Mode)
{
BYTE ucMode=stModeInfo.ModeCurr;
BYTE ucMode_SEL,i;
BYTE Temp;
bit bDoSodMode=_FALSE;
DWORD dwCurr_AOD, dwMax_AOD;
dwMax_AOD = 0;
ucNoCheckFS = _TRUE;
for(i=0; i<4; i++)
{
if(stModeInfo.ModeCurr == *(Mode+i))
{
bDoSodMode=_TRUE;
break;
}
}
if(bDoSodMode == _TRUE)
{
stModeInfo.ModeCurr=_MODE_NOSIGNAL;
for(i=0; i<4; i++)
{
Temp=*(Mode+i);
if(Temp!=stModeInfo.ModeCurr)
{
stModeInfo.ModeCurr = Temp;
CModeGetModeTableInfo();
stModeUserData.Clock = stModeInfo.IHTotal;
CModeStartUpVGA();
CAdjustAdcGainOffset();
#if(_NEW_ADC == _FALSE)
CAdjustAdcClock(stModeUserData.Clock, 0);
//CAdjustAdcClock(stModeUserData.Clock, 1);
//CAdjustAdcClock(stModeUserData.Clock, 2);
#else
CAdjustAdcClock(stModeUserData.Clock);
#endif
CAdjustADCSetting();
CAdjustPhase(0);
dwCurr_AOD = CModeCheckMaxSOD();
if( dwCurr_AOD>dwMax_AOD )
{
dwMax_AOD = dwCurr_AOD;
ucMode_SEL = stModeInfo.ModeCurr;
}
}
stModeInfo.ModeCurr = ucMode;
if( dwMax_AOD != 0 ) // sod information are vaild
{
ucMode = ucMode_SEL;
}
}
} //ARKIN 0525 FOR REDUCE 640X480 MODE SEARCH TIMING
ucNoCheckFS = _FALSE;
return(ucMode);
}
// 0523 index3
BYTE code ModeConfuseTable[][4]=
{
{
_MODE_1152x720_60HZ,
_MODE_1152x720_60HZ,
_MODE_1280x720_60HZ_CVT,
_MODE_1280x720_60HZ_CVT,
},
{
_MODE_1280x768_60HZ,
_MODE_1280x768_60HZ,
_MODE_1366x768_60HZ,
_MODE_1366x768_60HZ,
},
{
_MODE_1024x768_75HZ,
_MODE_1024x768_75HZ,
_MODE_1280x768_75HZ,
_MODE_1280x768_75HZ,
},
};
#endif
//--------------------------------------------------
// Description : Setup VGA mode
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CModeSetupModeVGA(void)
{
BYTE option = 0;
#if(_MODE_COMPARE_BY_SOD==_TRUE)
BYTE i;
//if((GET_INPUTSYNC_TYPE() == _CS_STATE)||(GET_INPUTSYNC_TYPE() == _SOG_STATE))
{
for( i=0;i<(sizeof(ModeConfuseTable)/4);i++ )
{
option=CModeSeparateConfuseMode(ModeConfuseTable[i]);
if(option!=stModeInfo.ModeCurr)
{
stModeInfo.ModeCurr=option;
break;
}
}
}
#endif
//0804 sephinroth start
//if(stModeInfo.ModeCurr == _MODE_1280x768_60HZ)
//{
// if(stModeInfo.Polarity != _SYNC_HN_VP) stModeInfo.ModeCurr=_MODE_1366x768_60HZ;
//}
//0804 sephinroth end
// Get information from mode table, such as IHTotal, IHStartPos, IHWidth, IVStartPos, IVHeight.
// Load mode user data from eeprom
bUndoFirstAuto=CEepromSearchAndLoadSavedTiming();
CModeGetModeTableInfo();
#if(_PARTIAL_DISPLAY == _ON)
if (stModeInfo.ModeCurr == _MODE_720x400_70HZ || stModeInfo.ModeCurr == _MODE_640x350_70HZ) //for 24w dos mode
{
CScalerSetBit(_VGIP_SIGINV_11, 0xff, 0x80);
CScalerSetBit(_VGIP_ODD_CTRL_13, 0xff, 0x10);
}
#endif
// Start up settings of VGA mode.
CModeStartUpVGA();
// 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();
CModeModifyVTotal();
CAdjustVPosition();
#if(_OSD_TYPE == _BENQ_OSD)
ucDdcciVPositionRatio=AlignMapToPercent(stModeUserData.VPosition,COsdFxGetVPositionRangeBenq(_MAX),COsdFxGetVPositionRangeBenq(_MIN));
#else
ucDdcciVPositionRatio=AlignMapToPercent(stModeUserData.VPosition,COsdFxGetVPositionRangeGeneric(_MAX),COsdFxGetVPositionRangeGeneric(_MIN));
#endif
#if(_ADC_OFFSET_ADJUSTING == _ADJUST_BY_HW_OFF_LINE)
COsdDispShowFactoryModeValue();
#endif
//Anderson 080130 for Field Merge & FRC Support Start
#if(_FRC_SUPPORT == _ON)
if(!GET_FRCSTATUS())
{
CModeSetFIFOForFrameSync();
#else
{
#endif
pData[0] = CFrameSyncDo();
if(pData[0] == 2)
{
CModeResetMode();
return;
}
}
//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
//Anderson 080130 for Field Merge & FRC Support End
CDcrSetBoundary();//0902 sephinroth DCR
CModeSetupEtcs(_FUNCTION_ENABLE);
#if(_NEW_ADC == _FALSE)
// V010 Patch Note (1) : Adjust ADC Clock Modify
CAdjustAdcClock(stModeUserData.Clock,1);
CAdjustAdcClock(stModeUserData.Clock,2);
#endif
}
#if((_TMDS_SUPPORT == _ON) || (_HDMI_SUPPORT == _ON)||(_DP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -