📄 osdfunc.c
字号:
// Description: Send "ONLY 1" value to frame control area. Add by zhang_dc
// Input: control value
// Output: None
//----------------------------------------------------
void COsdFxPWMCtlCommand(BYTE ucAddr, BYTE ucByte, BYTE ucValue)
{
if(ucByte == _WRITE_BYTEALL)
return;
pData[0] = 0x00 | ((ucByte&0x03)<<6);
pData[1] = ucAddr;
CScalerWrite(_OSD_ADDR_MSB_90, LENGTH(2), pData, _AUTOINC);
pData[0] = ucValue;
CScalerWrite(_OSD_DATA_PORT_92, LENGTH(1), pData, _NON_AUTOINC);
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxLoadIcon(BYTE ucRow, BYTE ucCol, BYTE code *pArray)
{
COsdFxLoadText(ucRow, ucCol, 0, pArray);
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxChange1bitColor(BYTE ucRow, BYTE ucCol, BYTE ucSizeW, BYTE ucSizeH, BYTE ucForegroundColor, BYTE ucBackgroundColor)
{
BYTE cntY, temp;
temp = ((ucForegroundColor & 0x0f) << 4) | (ucBackgroundColor & 0x0f);
for(cntY=0;cntY<ucSizeH;cntY++)
{
COsdFxCalcStartAddress(ucRow + cntY, ucCol, _WRITE_BYTE2);
CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, temp, _NON_AUTOINC);
}
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxChange2bitColor(BYTE ucRow, BYTE ucCol, BYTE ucSizeW, BYTE ucSizeH, BYTE ucColor0, BYTE ucColor1, BYTE ucColor2, BYTE ucColor3)
{
BYTE cntY, temp;
temp = 0xa0 | ((ucColor3 & 0x07) << 1) | ((ucColor0 & 0x04) >> 2);
for(cntY=0;cntY<ucSizeH;cntY++)
{
COsdFxCalcStartAddress(ucRow + cntY, ucCol, _WRITE_BYTE0);
CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, temp, _NON_AUTOINC);
}
temp = ((ucColor0 & 0x03) << 6) | ((ucColor2 & 0x07) << 3) | (ucColor1 & 0x07);
for(cntY=0;cntY<ucSizeH;cntY++)
{
COsdFxCalcStartAddress(ucRow + cntY, ucCol, _WRITE_BYTE2);
CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, temp, _NON_AUTOINC);
}
}
/*
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxChange4bitLUTColor(BYTE ucRow, BYTE ucCol, BYTE ucSizeW, BYTE ucSizeH, BYTE ucColor0)
{
BYTE ucCntY, ucTemp;
ucTemp = 0x90 | (ucColor0 & 0x0f);
for(ucCntY=0;ucCntY<ucSizeH;ucCntY++)
{
COsdFxCalcStartAddress(ucRow + ucCntY, ucCol, _WRITE_BYTE0);
CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, ucTemp, _NON_AUTOINC);
}
ucTemp = 0x00;
for(ucCntY=0;ucCntY<ucSizeH;ucCntY++)
{
COsdFxCalcStartAddress(ucRow + ucCntY, ucCol, _WRITE_BYTE2);
CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, ucTemp, _NON_AUTOINC);
}
}
*/
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxDrawWindow(WORD usXStart, WORD usYStart, WORD usXEnd, WORD usYEnd, BYTE *pStyle)
{
BYTE cnt0, cnt1;
cnt0 = CScalerGetBit(_OVERLAY_CTRL_6C, _BIT0);
pData[0] = (cnt0 == 0x00) ? 0xc1 : 0xe1;
pData[1] = ((*(pStyle)) * 4) + 1;
CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);
pData[0] = ((usXStart & 0x03F) << 2);
pData[1] = (((usYStart & 0x007) << 5) | ((usXStart & 0x7C0) >> 6));
pData[2] = (usYStart >> 3);
pData[3] = ((usXEnd & 0x03F) << 2);
pData[4] = (((usYEnd & 0x007) << 5) | ((usXEnd & 0x7C0) >> 6));
pData[5] = (usYEnd >> 3);
CScalerWrite(_OSD_DATA_PORT_92, 6, pData, _NON_AUTOINC);
CTimerDelayXms(40);
for(cnt1=0;cnt1<2;cnt1++)
{
pData[0] = 0xc1;
pData[1] = ((*(pStyle)) * 4) + (cnt1 * 3);
CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);
for(cnt0=0;cnt0<3;cnt0++)
pData[cnt0] = (*(pStyle + ((cnt1 * 3) + cnt0) + 1));
CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
}
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxHLine(BYTE ucRow, BYTE ucCol, BYTE ucLength, BYTE ucValue, BYTE ucIndicate)
{
COsdFxCalcStartAddress(ucRow, ucCol, ucIndicate);
if(ucIndicate == _WRITE_BYTEALL)
CScalerWriteAmount(_OSD_DATA_PORT_92, ucLength * 3, ucValue, _NON_AUTOINC);
else
CScalerWriteAmount(_OSD_DATA_PORT_92, ucLength, ucValue, _NON_AUTOINC);
}
/*
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxVLine(BYTE ucRow, BYTE ucCol, BYTE ucLength, BYTE ucValue, BYTE ucIndicate)
{
BYTE cnt;
for(cnt=0;cnt<ucLength;cnt++)
{
COsdFxCalcStartAddress(ucRow + cnt, ucCol, ucIndicate);
if(ucIndicate == _WRITE_BYTEALL)
CScalerWriteAmount(_OSD_DATA_PORT_92, 3, ucValue, _NON_AUTOINC);
else
CScalerWriteAmount(_OSD_DATA_PORT_92, 1, ucValue, _NON_AUTOINC);
}
}
*/
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxSetPosition(WORD usOsdActWidth, WORD usOsdActHeight, BYTE ucHPos, BYTE ucVPos, BYTE ucPar)
{
if(ucHPos > _OSD_HPOSITION_RANGE)
ucHPos = _OSD_HPOSITION_RANGE;
if(ucVPos > _OSD_VPOSITION_RANGE)
ucVPos = _OSD_VPOSITION_RANGE;
usOsdActWidth = _OSD_HPOSITION_OFFSET + (LWORD)((ucHPos)*((Panel.DHEndPos - Panel.DHStartPos)/4 - usOsdActWidth/4 - 4)) / _OSD_HPOSITION_RANGE;
usOsdActHeight = _OSD_VPOSITION_OFFSET + (LWORD)((_OSD_VPOSITION_RANGE - ucVPos)*((Panel.DVEndPos - Panel.DVStartPos)/4 - usOsdActHeight/4 - 6)) / _OSD_VPOSITION_RANGE;
CScalerSetBit(_OSD_SCRAMBLE_93, 0xf8, 0x02);
pData[0] = CScalerGetBit(_OVERLAY_CTRL_6C, _BIT0);
pData[0] = (pData[0] == 0x00) ? 0xe0 : 0xc0;
pData[1] = 0x00;
CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);
pData[0] = usOsdActHeight >> 1;
pData[1] = (BYTE)(usOsdActWidth >> 2);
pData[2] = ((BYTE)(usOsdActWidth & 0x0003) << 6) | ((usOsdActHeight & 0x01) << 5) | ucPar;
CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
CTimerWaitForEvent(_EVENT_DEN_STOP);
CTimerWaitForEvent(_EVENT_DEN_STOP);
CScalerSetBit(_OSD_SCRAMBLE_93, 0xf8, 0x05);
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
WORD COsdFxGetAdcClockRange(BYTE ucPar)
{
WORD delta;
if(ucPar == _GET_CLOCKRANGE_MAX)
{
CAdjustCheckAdcClockRange(stModeUserCenterData.CenterClock, &delta);
if(delta > _CLOCK_BIAS)
return (stModeUserCenterData.CenterClock + _CLOCK_BIAS);
else
return (stModeUserCenterData.CenterClock + delta);
}
else if(ucPar == _GET_CLOCKRANGE_MIN)
{
CAdjustCheckAdcClockRange(stModeUserCenterData.CenterClock, &delta);
if(delta > _CLOCK_BIAS)
return (stModeUserCenterData.CenterClock - _CLOCK_BIAS);
else
return (stModeUserCenterData.CenterClock - delta);
}
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
WORD COsdFxGetHPositionRange(BYTE ucPar)
{
if(ucPar == _GET_HPOSITIONRANGE_MAX)
return (stModeUserCenterData.CenterHPos + _HPOSITION_BIAS);
else if(ucPar == _GET_HPOSITIONRANGE_MIN)
return (stModeUserCenterData.CenterHPos - _HPOSITION_BIAS);
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
WORD COsdFxGetVPositionRange(BYTE ucPar)
{
if(ucPar == _GET_VPOSITIONRANGE_MAX)
return (stModeUserCenterData.CenterVPos + _VPOSITION_BIAS);
else if(ucPar == _GET_VPOSITIONRANGE_MIN)
return (stModeUserCenterData.CenterVPos - _VPOSITION_BIAS);
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
WORD COsdFxDetOverRange(WORD ucValue, WORD ucMax, WORD ucMin, BYTE ucSymbol)
{
switch(ucSymbol)
{
case _DET_OVERRANGE_MAX:
if (ucValue >= ucMax)
{
return ucMax;
}
else
{
#if (_SLIDER_MAX_SHARPNESS > 3 && _VIDEO_TYPE == _VIDEO_5150)
if (bVideoSharpness)
{
ucValue +=_SLIDER_STEP_SHARPNESS;
if (ucValue%_SLIDER_STEP_SHARPNESS)
{
return ucMax;
}
}
else
ucValue++;
#else
ucValue++;
#endif
return ucValue;
}
break;
case _DET_OVERRANGE_MIN:
if (ucValue <= ucMin)
{
return ucMin;
}
else
{
#if (_SLIDER_MAX_SHARPNESS > 3 && _VIDEO_TYPE == _VIDEO_5150)
if (bVideoSharpness)
{
ucValue -=_SLIDER_STEP_SHARPNESS;
if (ucValue%_SLIDER_STEP_SHARPNESS)
{
return ucMin;
}
}
else
ucValue--;
#else
ucValue--;
#endif
return ucValue;
}
}
}
WORD COsdFxDetOverRangeForVdcSharpness(WORD ucValue, WORD ucMax, WORD ucMin, BYTE ucSymbol)
{
switch(ucSymbol)
{
case _DET_OVERRANGE_MAX:
if (ucValue >= ucMax)
{
return ucMax;
}
else
{
ucValue +=_SLIDER_STEP_SHARPNESS;
if (ucValue%_SLIDER_STEP_SHARPNESS)
{
return ucMax;
}
return ucValue;
}
break;
case _DET_OVERRANGE_MIN:
if (ucValue <= ucMin)
{
return ucMin;
}
else
{
ucValue -=_SLIDER_STEP_SHARPNESS;
if (ucValue%_SLIDER_STEP_SHARPNESS)
{
return ucMin;
}
return ucValue;
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -