📄 adjust_customer.c
字号:
/*===========================================================
* Copyright (c) Realtek Semiconductor Corporation, 2005
* All rights reserved.
* ========================================================== */
/*==================== File Description ===================== */
/**
* @file
* This file is osd control declaration related functions.
*
* @author $Author: forster $
* @date $Date: 2006-03-21 20:24:23 +0800 (?熸?浜? 21 涓夋? 2006) $
* @version $Revision: 451 $
* @ingroup Auto
*/
/**
* @addtogroup Auto
* @{
*/
#define _ADJUST_CUSTOMER_C
/*===================== Module dependency ================== */
#include "Core\Header\Include.h"
//--------------------------------------------------
// Description : Adjust sharpness
// Input Value : None
// Output Value : None
//--------------------------------------------------
//--------------------------------------------------
// Description : Adjust color precessing brightness
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CAdjustBrightness(void)
{
if(_GET_INPUT_SOURCE() == _SOURCE_VGA)
{
pData[0] = (0 + stConBriData.Brightness - 50) + stColorTempData.ColorTemp[0];
pData[1] = (0 + stConBriData.Brightness - 50) + stColorTempData.ColorTemp[1];
pData[2] = (0 + stConBriData.Brightness - 50) + stColorTempData.ColorTemp[2];
}
else
{
pData[0] = (0x80 + stConBriData.Brightness - 78);
pData[1] = (0x80 + stConBriData.Brightness - 78);
pData[2] = (0x80 + stConBriData.Brightness - 78);
}
CAdjustSetBrightness();
CAdjustBacklight();
}
//--------------------------------------------------
// Description : Adjust color processing contrast
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CAdjustContrast(void)
{
BYTE cnt;
if(_GET_INPUT_SOURCE() == _SOURCE_VGA)
{
for(cnt=0;cnt<3;cnt++)
{
//pData[cnt] = (((WORD)stColorTempData.ColorTemp[cnt] * stConBriData.Contrast / 128) > 255) ? 255 : (BYTE)((WORD)stColorTempData.ColorTemp[cnt] * stConBriData.Contrast / 128);
pData[cnt] = (BYTE)(((WORD)stColorTempData.ColorTemp[cnt+3] * (stConBriData.Contrast+_CONTRAST_MIN) / 128) > 255) ? 255 : (BYTE)((WORD)stColorTempData.ColorTemp[cnt+3] * (stConBriData.Contrast+_CONTRAST_MIN) / 128);
}
}
else
{
pData[0] = (0x80 + stConBriData.Contrast - 38);
pData[1] = (0x80 + stConBriData.Contrast - 38);
pData[2] = (0x80 + stConBriData.Contrast - 38);
}
CAdjustSetContrast();
}
#if (sRGB_Color_Enhance == _ENABLE)
void CAdjustYpbprhue(BYTE ucYPbPrhue)
{
CAdjustSaturationHue(ucYPbPrhue, _FALSE);
}
void CAdjustYpbprSaturation(BYTE ucYPbPrSaturation)
{
WORD PB, PR ;
BYTE temp;
temp=ucYPbPrSaturation;
if(_GET_INPUT_SOURCE() == _SOURCE_YPBPR)
{
PR = (temp <= 50) ? ((WORD)stYPbPrData.YPbPrGain[_RED] + ((50 - temp) << 2)) :
((WORD)stYPbPrData.YPbPrGain[_RED] - (temp - 50));
PB = (temp <= 50) ? ((WORD)stYPbPrData.YPbPrGain[_BLUE] + ((50 - temp) << 2)) :
((WORD)stYPbPrData.YPbPrGain[_BLUE] - (temp - 50));
if(HIBYTE(PB)>0)
PB = HIBYTE(PB) < 0x02 ? 0x00FF : 0 ;
if (HIBYTE(PR)>0)
PR = HIBYTE(PR) < 0x02 ? 0x00FF : 0 ;
#if(_ADC1_INPUT_SWAP_RG == _ON)
pData[1] = PR;
pData[0] = stYPbPrData.YPbPrGain[_GREEN];
pData[2] = PB;
#elif(_ADC1_INPUT_SWAP_RB == _ON)
pData[2] = PR;
pData[1] = stYPbPrData.YPbPrGain[_GREEN];
pData[0] = PB;
#elif(_ADC1_INPUT_SWAP_GB == _ON)
pData[0] = PR;
pData[2] = stYPbPrData.YPbPrGain[_GREEN];
pData[1] = PB;
#else
pData[0] = PR;
pData[1] = stYPbPrData.YPbPrGain[_GREEN];
pData[2] = PB;
#endif
//CAdjustSetYpbprSaturation();//eric 20070613
CAdjustSaturationHue(ucYPbPrSaturation, _TRUE);
}
//Lewis, adjust sRGB domain
CAdjustSaturationHue(ucYPbPrSaturation, _TRUE);
}
#else
// cftsai 20061031 modify
INT16 code RR[]=
{
-155,-149,-143,-138,-132,-127,-121,-116,-111,-105,
-100, -95, -90, -85, -80, -75, -71, -66, -62, -57,
-53, -49, -45, -40, -36, -33, -29, -25, -22, -18,
-15, -12, -8, -5, -2, 0, 2, 5, 7, 10,
12, 14, 16, 18, 20, 22, 24, 25, 26, 28,
29, 30, 31, 32, 32, 33, 33, 34, 34, 34,
34, 34, 34, 33, 33, 32, 32, 31, 30, 29,
28
};
INT16 code RG[]=
{
-100, -99, -98, -96, -95, -93, -92, -90, -88, -86,
-84, -81, -79, -77, -74, -72, -69, -66, -63, -60,
-57, -54, -51, -47, -44, -40, -36, -33, -29, -25,
-21, -17, -13, -8, -4, 0, 4, 9, 13, 18,
23, 28, 33, 38, 43, 48, 53, 58, 64, 69,
74, 80, 86, 91, 97, 102, 108, 114, 120, 126,
132, 138, 144, 150, 156, 162, 168, 174, 180, 186,
193
};
INT16 code RB[]=
{
255, 249, 242, 235, 227, 220, 213, 206, 199, 192,
184, 177, 170, 162, 155, 148, 140, 133, 125, 118,
110, 103, 96, 88, 81, 73, 66, 58, 51, 44,
36, 29, 21, 14, 7, 0, -7, -14, -21, -28,
-35, -42, -49, -56, -63, -70, -77, -84, -91, -97,
-104, -110, -117, -123, -130, -136, -142, -148, -154, -160,
-166, -172, -178, -184, -189, -195, -200, -205, -211, -216,
-221
};
INT16 code GR[]=
{
162 ,157 ,152 ,147 ,142 ,137 ,132 ,127 ,
122 ,117 ,113 ,108 ,103 ,98 ,93 ,88 ,
84 ,79 ,74 ,70 ,65 ,60 ,56 ,51 ,
47 ,42 ,38 ,33 ,29 ,25 ,20 ,16 ,
12 ,8 ,4 ,0 ,-4 ,-7 ,-11 ,-15 ,
-19 ,-23 ,-27 ,-30 ,-34 ,-37 ,-41 ,-44 ,
-48 ,-51 ,-54 ,-57 ,-60 ,-63 ,-66 ,-69 ,
-72 ,-75 ,-77 ,-80 ,-83 ,-85 ,-87 ,-90 ,
-92 ,-94 ,-96 ,-98 ,-100,-102,-104
};
INT16 code GG[]=
{
-9 ,-7 ,-6 ,-4 ,-3 ,-2 ,-1 ,0 ,
1 ,2 ,3 ,3 ,4 ,5 ,5 ,6 ,
6 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,
7 ,7 ,6 ,6 ,5 ,5 ,4 ,3 ,
2 ,2 ,1 ,0 ,-1 ,-2 ,-3 ,-5 ,
-6 ,-8 ,-9 ,-11,-13,-15,-16,-18,
-20,-23,-25,-27,-29,-32,-34,-37,
-39,-42,-45,-48,-51,-53,-56,-60,
-63,-66,-69,-72,-76,-79,-83
};
INT16 code GB[]=
{
-152,-149,-145,-142,-138,-135,-131,-127,
-123,-120,-116,-112,-108,-103,-99 ,-95 ,
-91 ,-86 ,-82 ,-77 ,-73 ,-68 ,-64 ,-59 ,
-54 ,-49 ,-45 ,-40 ,-35 ,-30 ,-25 ,-20 ,
-15 ,-10 ,-5 ,0 ,5 ,10 ,15 ,20 ,
26 ,31 ,36 ,42 ,47 ,52 ,58 ,63 ,
69 ,74 ,79 ,85 ,90 ,96 ,101 ,107 ,
112 ,117 ,123 ,128 ,134 ,139 ,144 ,150 ,
155 ,160 ,166 ,171 ,176 ,181 ,187
};
INT16 code BR[]=
{
-172, -169, -165, -162 , -158, -154, -150, -146, -142, -138,
-133, -129, -124,-120,-115,-110,-105,-100,-95,-90,
-85,-80,-75,-69,-64,-58,-53,-47,-41,-35,
-30,-24,-18,-12,-6,0,6,12,18,24,
31,37,44,50,57,63,70,76,83,89,
96,103,109,116,123,130,136,143,150,157,
163,170,177,183,190,197,204,210,217,224,
230
};
INT16 code BG[]=
{
193 ,186 ,180 ,174 ,168 ,162 ,156 ,150 ,
144 ,138 ,132 ,126 ,120 ,114 ,108 ,102 ,
97 ,91 ,86 ,80 ,74 ,69 ,64 ,58 ,
53 ,48 ,43 ,38 ,33 ,28 ,23 ,18 ,
13 ,9 ,4 ,0 ,-4 ,-8 ,-13 ,-17 ,
-21 ,-25 ,-29 ,-33 ,-36 ,-40 ,-44 ,-47 ,
-51 ,-54 ,-57 ,-60 ,-63 ,-66 ,-69 ,-72 ,
-74 ,-77 ,-79 ,-81 ,-84 ,-86 ,-88 ,-90 ,
-92 ,-93 ,-95 ,-96 ,-98 ,-99 ,-100
};
INT16 code BB[]=
{
-20 ,-17, -14, -12, -9, -7, -5, -3,
-1 ,0 ,1 ,3 ,4 ,5 ,6 ,7 ,
8 ,9 ,9 ,10 ,10 ,10 ,10 ,10 ,
10 ,10 ,9 ,9 ,8 ,7 ,6 ,5 ,
4 ,3 ,1 ,0 ,-1 ,-3 ,-5 ,-7 ,
-9 ,-12 ,-14 ,-17 ,-20 ,-22 ,-25 ,-29 ,
-32 ,-35 ,-39 ,-42 ,-46 ,-50 ,-53 ,-57 ,
-62 ,-66 ,-70 ,-75 ,-79 ,-84 ,-88 ,-93 ,
-98 ,-103,-108,-114,-119,-124,-130
};
void CAdjustYpbprhue(BYTE ucYPbPrhue)
{
BYTE uchue ;
uchue = ucYPbPrhue *0.7 ;
//Write R
pData[0] = ((RR[uchue] >> 8) & 0x01); // RRH
pData[1] = (RR[uchue] & 0xff); // RRL
pData[2] = ((RG[uchue] >> 8) & 0x01); // RGH
pData[3] = (RG[uchue] & 0xff); // RGL
pData[4] = ((RB[uchue] >> 8) & 0x01); // RBH
pData[5] = (RB[uchue] & 0xff); // RBL
CAdjustSetYpbprRhue();
//Write G
pData[0] = ((GR[uchue] >> 8) & 0x01); // GRH
pData[1] = (GR[uchue] & 0xff); // GRL
pData[2] = ((GG[uchue] >> 8) & 0x01); // GGH
pData[3] = (GG[uchue] & 0xff); // GGL
pData[4] = ((GB[uchue] >> 8) & 0x01); // GBH
pData[5] = (GB[uchue] & 0xff); // GBL
CAdjustSetYpbprGhue();
//Write B
pData[0] = ((BR[uchue] >> 8) & 0x01); // BRH
pData[1] = (BR[uchue] & 0xff); // BRL
pData[2] = ((BG[uchue] >> 8) & 0x01); // BGH
pData[3] = (BG[uchue] & 0xff); // BGL
pData[4] = ((BB[uchue] >> 8) & 0x01); // BBH
pData[5] = (BB[uchue] & 0xff); // BBL
CAdjustSetYpbprBhue();
CScalerSetBit(_COLOR_CTRL_62, 0xff, 0x80); // cftsai 20061031 added, ready to write
}
void CAdjustYpbprSaturation(BYTE ucYPbPrSaturation)
{
WORD PB, PR ;
PR = (WORD)stYPbPrData.YPbPrGain[_RED] * (100 - ucYPbPrSaturation) /(WORD)50 ;
PB = (WORD)stYPbPrData.YPbPrGain[_BLUE] * (100 - ucYPbPrSaturation) /(WORD)50 ;
if(HIBYTE(PB)>0)
PB = 0x00FF ;
if (HIBYTE(PR)>0)
PR = 0x00FF ;
#if(_ADC_INPUT_SWAP_RG == _ON)
pData[1] = PR;
pData[0] = stYPbPrData.YPbPrGain[_GREEN];
pData[2] = PB;
#elif(_ADC_INPUT_SWAP_RB == _ON)
pData[2] = PR;
pData[1] = stYPbPrData.YPbPrGain[_GREEN];
pData[0] = PB;
#elif(_ADC_INPUT_SWAP_GB == _ON)
pData[0] = PR;
pData[2] = stYPbPrData.YPbPrGain[_GREEN];
pData[1] = PB;
#else
pData[0] = PR;
pData[1] = stYPbPrData.YPbPrGain[_GREEN];
pData[2] = PB;
#endif
CAdjustSetYpbprSaturation();
}
#endif // sRGB_Color_Enhance end
#if(_AdjustCustomerColorMode==_ENABLE)
void CAdjustCustomerColorMode(void)
{
#if(_COLOR_PREFERENCE == _PANASONIC_STYLE)
// Brightness_R,Brightness_G,Brightness_B,Contrast_R,Contrast_G,Contrast_B,Sharpness_Num
// VDC_Contrast,VDC_Brightness,VDC_Saturation,VDC_Hue,VDC_Shaprness
BYTE code ColorType[][12] = {
// CVBS,SV
// B_R B_G B_B C_R C_G C_B Sharp VD_Con VD_Bri VD_Sat VD_Hue VD_Sharp
0x80, 0x80, 0x7F, 0x87, 0x80, 0x7A, 6, 38, 0x78, 64, 46, 0x17,
// TV
// B_R B_G B_B C_R C_G C_B Sharp VD_Con VD_Bri VD_Sat VD_Hue VD_Sharp
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 6, 52, 0x85, 52, 47, 0x17,
//0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 6, 33, 0x85, 58, 46, 0x17,
// YPbPr , HDMI
// B_R B_G B_B C_R C_G C_B Sharp VD_Con VD_Bri VD_Sat VD_Hue VD_Sharp
0x80, 0x80, 0x7F, 0xB3, 0xAA, 0xA2, 6, 38, 0x78, 50, 50, 0x17,
//0x80, 0x80, 0x7F, 0xB3, 0xAA, 0xA2, 6, 38, 0x78, 50, 50, 0x17,
};
if(!bSourceVideo())
{
pData[0] = ColorType[2][0];
pData[1] = ColorType[2][1];
pData[2] = ColorType[2][2];
pData[3] = ColorType[2][3];
pData[4] = ColorType[2][4];
pData[5] = ColorType[2][5];
CScalerSetByte(_CB_ACCESS_PORT_64, 0x80);
CScalerWrite(_CB_DATA_PORT_65, 6, pData, _NON_AUTOINC);
CScalerSetByte(_CB_ACCESS_PORT_64, 0x00);
SET_PEAKING_CORING(ColorType[2][6]);
SET_CONTRAST(ColorType[2][7]);
//SET_YPbPrSaturation(ColorType[2][9]);
//SET_YPbPrHue(ColorType[2][10]);
SET_SATURATION(ColorType[2][9]);
SET_HUE(ColorType[2][10]);
CEepromSaveSystemData();
CAdjustPeakingFilter(GET_PEAKING_CORING());
CAdjustContrast();
//CAdjustYpbprSaturation(GET_YPbPrSaturation());
//CAdjustYpbprhue(GET_YPbPrHue());
CAdjustYpbprSaturation(GET_SATURATION());
CAdjustYpbprhue(GET_HUE());
CScalerSetBit(_COLOR_CTRL_62, 0xFF, _BIT2);
}
else
{
if(_GET_INPUT_SOURCE() == _SOURCE_VIDEO_TV)
{
pData[0] = ColorType[1][0];
pData[1] = ColorType[1][1];
pData[2] = ColorType[1][2];
pData[3] = ColorType[1][3];
pData[4] = ColorType[1][4];
pData[5] = ColorType[1][5];
CScalerSetByte(_CB_ACCESS_PORT_64, 0x80);
CScalerWrite(_CB_DATA_PORT_65, 6, pData, _NON_AUTOINC);
CScalerSetByte(_CB_ACCESS_PORT_64, 0x00);
SET_PEAKING_CORING(ColorType[1][6]);
SET_CONTRAST(ColorType[1][7]);
SET_SATURATION(ColorType[1][9]);
SET_HUE(ColorType[1][10]);
CVideoSetVDCBrightness(ColorType[1][8]);
I2CByteWrite(0x80,_VIDEO_DEVICE,ColorType[1][11]);
CEepromSaveSystemData();
}
else
{
pData[0] = ColorType[0][0];
pData[1] = ColorType[0][1];
pData[2] = ColorType[0][2];
pData[3] = ColorType[0][3];
pData[4] = ColorType[0][4];
pData[5] = ColorType[0][5];
CScalerSetByte(_CB_ACCESS_PORT_64, 0x80);
CScalerWrite(_CB_DATA_PORT_65, 6, pData, _NON_AUTOINC);
CScalerSetByte(_CB_ACCESS_PORT_64, 0x00);
SET_PEAKING_CORING(ColorType[0][6]);
SET_CONTRAST(ColorType[0][7]);
SET_SATURATION(ColorType[0][9]);
SET_HUE(ColorType[0][10]);
CVideoSetVDCBrightness(ColorType[0][8]);
I2CByteWrite(0x80,_VIDEO_DEVICE,ColorType[0][11]);
CEepromSaveSystemData();
}
CAdjustPeakingFilter(GET_PEAKING_CORING());
CVideoSetContrast(GET_CONTRAST());
CVideoSetSaturation(GET_SATURATION());
gmi_CAdjustVDCHue(GET_HUE());
}
#endif
#if(sRGB_Color_Enhance == _ENABLE)
CVideoSetSaturation(GET_SATURATION());
gmi_CAdjustVDCHue(GET_HUE());
CScalerSetBit(_COLOR_CTRL_62, ~_BIT2, _BIT2); // enable sRGB
#endif
}
#endif
#if(_VIDEO_AUTO_WHITE_BLANCE == _ENABLE)
#define _VIDEO_SATURATION_MAX 0xFF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -