/*===========================================================
 * 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"

/*======================= Private Types ===================== */

/*======================== Definitions ====================== */

/*========================== Variables ====================== */
/*=================== Local Functions Phototype ==============*/
//static void CAdjustSetSharpnessTable(BYTE code *pArray0, BYTE code *pArray1);


//--------------------------------------------------
// Description  : Adjust sharpness
// Input Value  : None
// Output Value : None
//--------------------------------------------------
/*
void CAdjustSharpness(void)
{
    CAdjustSetSharpnessTable(tSU_COEF_TABLE[stSystemData.Sharpness & 0x0f], tSU_COEF_TABLE[stSystemData.Sharpness & 0x0f]);
}

//--------------------------------------------------
// Description  : Set Sharpness Table
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CAdjustSetSharpnessTable(BYTE code *pArray0, BYTE code *pArray1)
{
    CScalerSetByte(_FILTER_CTRL_35, 0xb0);
    CScalerWrite(_FILTER_ACCESS_PORT_36, 128, pArray0, _NON_AUTOINC);
    CScalerSetByte(_FILTER_CTRL_35, 0xc0);
    CScalerWrite(_FILTER_ACCESS_PORT_36, 128, pArray1, _NON_AUTOINC);
    CScalerSetByte(_FILTER_CTRL_35, 0x00);
}
*/

//20081126, x.hu, PQ finetune
#if (_PQ_FINETUNE)
unsigned char CAdjustSliderReflectToReg
(unsigned char ucSliderLow, unsigned char ucSliderMid, unsigned char ucSliderHigh, unsigned char ucSliderTarget, 
unsigned char ucRegLow, unsigned char ucRegMid, unsigned char ucRegHigh)
{
	unsigned int temp;
	unsigned char slider;
	
	if (ucSliderLow>ucSliderMid || ucSliderMid>ucSliderHigh)
		return ucRegMid;
	if (ucSliderTarget>ucSliderHigh)
		return ucRegMid;
	if (ucSliderTarget<ucSliderLow)
		return ucRegMid;
	if (ucRegLow>ucRegMid || ucRegMid>ucRegHigh)
		return ucRegMid;
	if (ucSliderHigh>ucRegHigh)
		return ucRegMid;
	if (ucSliderTarget==ucSliderHigh)
		return ucRegHigh;
	if (ucSliderTarget==ucSliderLow)
		return ucRegLow;		

	//caculate ucRegTarget according to ucSliderTarget
	if (ucSliderTarget == ucSliderMid)
		return ucRegMid;
	
	//DebugPrintf("input: %d, ", ucSliderLow);
	//DebugPrintf("%d, ", ucSliderMid);
	//DebugPrintf("%d, ", ucSliderHigh);
	//DebugPrintf("%d, ", ucSliderTarget);
	//DebugPrintf("%d, ", ucRegLow);
	//DebugPrintf("%d, ", ucRegMid);
	//DebugPrintf("%d\n", ucRegHigh);


	if (ucSliderTarget < ucSliderMid)
	{
		//current slider setting positiion is lower than ucSliderMid
		slider = ucSliderTarget-ucSliderLow;
		temp = ucRegMid-ucRegLow;
		temp *= slider;
		temp /= ucSliderMid-ucSliderLow;
		temp += ucRegLow;
	}
	else
	{
		//current slider setting positiion is higher than ucSliderMid
		slider = ucSliderTarget-ucSliderMid;
		temp = ucRegHigh-ucRegMid;
		temp *= slider;
		temp /= ucSliderHigh-ucSliderMid;
		temp += ucRegMid;
	}

	//DebugPrintf("return: %d\n",  (unsigned char)temp);

	return (unsigned char)temp;
		
}

unsigned char CAdjustColortempReflectToReg
(unsigned char ucColortempTarget, 
unsigned char ucRegLow, unsigned char ucRegMid, unsigned char ucRegHigh)
{
	unsigned int temp;
	unsigned char slider;
	
	//DebugPrintf("ct input: %d, ", ucRegLow);
	//DebugPrintf("%d, ", ucRegMid);
	//DebugPrintf("%d\n", ucRegHigh);

	if (ucRegLow>ucRegMid || ucRegMid>ucRegHigh)
		return ucRegMid;

	//caculate ucRegTarget according to ucSliderTarget
	if (ucColortempTarget == 50)
		return ucRegMid;
	
	if (ucColortempTarget < 50)
	{
		//current slider setting positiion is lower than ucSliderMid
		slider = ucColortempTarget;
		temp = ucRegMid-ucRegLow;
		temp *= slider;
		temp /= 50;
		temp += ucRegLow;
	}
	else
	{
		//current slider setting positiion is higher than ucSliderMid
		slider = ucColortempTarget-50;
		temp = ucRegHigh-ucRegMid;
		temp *= slider;
		temp /= 50;
		temp += ucRegMid;
	}

	//DebugPrintf("ct return: %d\n",  (unsigned char)temp);

	return (unsigned char)temp;
		
}
#endif 
//--------------------------------------------------
// Description  : Adjust color precessing brightness
// Input Value  : None
// Output Value : None
//--------------------------------------------------
//20081126, x.hu, PQ finetune
#if (_PQ_FINETUNE)
void CAdjustBrightness(void)
{
	unsigned char slider;

	slider = COsdCtrlGetBrightness();
	
	pData[0] = CAdjustSliderReflectToReg(0, 50, 100, slider, 0, 128+9, 255);	//pData[0] = CAdjustSliderReflectToReg(0, 50, 100, slider, 88, 128, 168);
		
	pData[1] = pData[0];
	pData[2] = pData[0];
    
	CAdjustSetBrightness();

	CAdjustHLWindowBrightness(pData[0]);
}

#else

void CAdjustBrightness(void)
{
	//czl 071128
	//pData[0] = pData[1] = pData[2] = 78+COsdCtrlGetBrightness()-10;
#if (_PANEL_TYPE==_SHARP_LVDS_LQ150)
	pData[0] = pData[1] = pData[2] = 78+COsdCtrlGetBrightness()-4-6+10;
#elif (_PANEL_TYPE==_SAMSUNG_LVDS_19_WXGA)
	pData[0] = pData[1] = pData[2] = 78+COsdCtrlGetBrightness()+10;
#else	//if (_PANEL_TYPE==_SHARP_LVDS_LQ150)
    ////modified by xyw 080303 at jpe
    if(COsdCtrlGetBrightness()<=10) 
    pData[0] = pData[1] = pData[2] = 3*COsdCtrlGetBrightness();
	else if(COsdCtrlGetBrightness()<=20)
	pData[0] = pData[1] = pData[2] = 28+COsdCtrlGetBrightness()+2*(COsdCtrlGetBrightness()-10);	
	else if(COsdCtrlGetBrightness()<=30)
	pData[0] = pData[1] = pData[2] = 48+COsdCtrlGetBrightness();//+2*(COsdCtrlGetBrightness()-20);
	else if(COsdCtrlGetBrightness()<=40)
	pData[0] = pData[1] = pData[2] = 48+COsdCtrlGetBrightness()+2*(COsdCtrlGetBrightness()-30);
	else
	pData[0] = pData[1] = pData[2] = 68+COsdCtrlGetBrightness()+10;
    //pData[0] = pData[1] = pData[2] = 78+COsdCtrlGetBrightness();//add by xyw 080130 
    
#if (_PANEL_TYPE==_SAMSUNG_LVDS_19_WXGA)
	if (GET_INPUTSOURCE_TYPE()==_SOURCE_DVI)
	{
		if (pData[0]<255-10)
		{
			pData[0] += 10;
			pData[1] = pData[2] =pData[0];
		}
		else
			pData[0] = pData[1] = pData[2] = 255;
	}
#endif
#endif	//if (_PANEL_TYPE==_SHARP_LVDS_LQ150)
	if (0)//(GET_INPUTSOURCE_TYPE()==_SOURCE_VGA)
	{
		if (pData[0]<255-10)
		{
			pData[0] += 10;
			pData[1] = pData[2] =pData[0];
		}
		else
			pData[0] = pData[1] = pData[2] = 255;
	}
	CAdjustSetBrightness();

#if 1//(_DEMO_MODE_SUPPORT)
	CAdjustHLWindowBrightness(pData[0]);
#endif
}
#endif

#if 0//(_PICT_EFFECT_SUPPORT==0)
//--------------------------------------------------
// Description  : Adjust color processing contrast
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CAdjustContrast(void)
{
	BYTE cnt;

	if(GET_INPUTSOURCE_TYPE() == _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 - 50);
		pData[1] = (0x80 + stConBriData.Contrast - 50);
		pData[2] = (0x80 + stConBriData.Contrast - 50);
	}	
	CAdjustSetContrast();
}
#endif


#if 1//(sRGB_Color_Enhance == _ENABLE)
void CAdjustYpbprhue(BYTE  ucYPbPrhue)
{
	CAdjustSaturationHue(ucYPbPrhue, _FALSE);
}

void CAdjustYpbprSaturation(BYTE  ucYPbPrSaturation)
{
	/*
	WORD    PB, PR ;
	BYTE temp;

	temp=ucYPbPrSaturation;

if(GET_INPUTSOURCE_TYPE() == _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);
	*/
	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 0//(_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((GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR)||(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
	{

			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_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)
		{
			
			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());
			CVideoSetHuee(GET_HUE());

			

		
	}


#endif


#if(sRGB_Color_Enhance == _ENABLE)
#if 1	//copy from aoc
	if(GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR)
		CAdjustYpbprSaturation(COsdCtrlGetSaturation());
	else if(GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8)
		CVideoSetSaturation(COsdCtrlGetSaturation());

	if (GET_PICT_EFFECT()==_PICT_EFFECT_USER)
		CVideoSetHuee(COsdCtrlGetHue());
	else
		CVideoSetHuee(50);
	CScalerSetBit(_COLOR_CTRL_62, ~_BIT2, _BIT2);		// enable sRGB
	
#else

	CVideoSetSaturation(GET_SATURATION());
	CVideoSetHuee(GET_HUE());
	CScalerSetBit(_COLOR_CTRL_62, ~_BIT2, _BIT2);		// enable sRGB
	
#endif

#endif

}
#endif

//--------------------------------------------------
// Description  : Set  2610 Hue
// Input Value  : ucValue
// Output Value : None
//--------------------------------------------------
void CVideoSetHuee(BYTE ucValue)
{
#if(sRGB_Color_Enhance == _ENABLE)
       BYTE HueValue;
//czl 071205
	if (!(GET_VIDEO8_V_RATE_IS_50()))
	{
		if(ucValue >= 50)
			{
			 if(ucValue >= 95)// add by xyw  adjust hue 080220 at jpe
			 HueValue = 2.5*(95-50);	
			 else
			HueValue = 2.5*(ucValue-50);
			}
		else
			HueValue = 255-2.5*(50-ucValue);
	}
	else
	{
		HueValue = 0x00;
		ucValue = 50;
	}

   	CVideoSetVDCHue(HueValue);
	
	CAdjustSaturationHue(ucValue, _FALSE);
	
#else
	int HueValue;

#if _PAL_MASK_HUE
	if (GET_VIDEO8_V_RATE_IS_50())
		ucValue = 50;
#endif
	if(ucValue < 50)
		HueValue = 0x00 - (50 - ucValue);
	else
		HueValue = 0x00 + (ucValue - 50);
   CVideoSetVDCHue(HueValue);
#endif
}

#if _PANEL_TYPE==_AU_LVDS_26
#define _VIDEO_SATURATION_MAX		150
#define _VIDEO_SATURATION_MIN		0
#elif _PANEL_TYPE==_SHARP_LVDS_LQ150
#define _VIDEO_SATURATION_MAX		150
#define _VIDEO_SATURATION_MIN		0
//20081008 ccy add
#elif _PANEL_TYPE == _MITSUBISHI_LVDS_12
#define _VIDEO_SATURATION_MAX		150
#define _VIDEO_SATURATION_MIN		0

#elif _PANEL_TYPE==_SAMSUNG_LTM190M2L31
#define _VIDEO_SATURATION_MAX		150
#define _VIDEO_SATURATION_MIN		0
#elif _PANEL_TYPE==_AU_M190PW01
#define _VIDEO_SATURATION_MAX		150
#define _VIDEO_SATURATION_MIN		0

#else
#define _VIDEO_SATURATION_MAX		250
#define _VIDEO_SATURATION_MIN		0
#endif

//--------------------------------------------------
// Description  : Set  2610 Saturation
// Input Value  : saturationNone
// Output Value : None
//--------------------------------------------------
 void CVideoSetSaturation(BYTE ucValue)
{
//20081126 xi.hu
#if _PQ_FINETUNE
  #if 1
  	unsigned char reg;

	if (ucMode_Curr_2610 >=ZPAL_I && ucMode_Curr_2610 <=ZPAL_60)
		reg = CAdjustSliderReflectToReg(0, 50, 100, ucValue, 0, 108, 180);
	else if (ucMode_Curr_2610 >=ZNTSC && ucMode_Curr_2610 <=ZNTSC_50)
		reg = CAdjustSliderReflectToReg(0, 50, 100, ucValue, 0, 145, 255);
	else
		reg = CAdjustSliderReflectToReg(0, 50, 100, ucValue, 0, 138, 255);
		
	CScalerPageSelect(_PAGE8);
	CScalerSetByte(_P8_SATURATION1_AA,reg);	
  #else
	unsigned char saturation;

	saturation = ucValue;

	if(ucMode_Curr_2610==ZSECAM)// add by xyw 080220 add SECAM's saturation at jpe
	{
		if(saturation>=90)
			saturation=100;
		else if(saturation<=10)
			saturation=saturation;		  	
		else
			saturation+=10;
	}

	((WORD*)pData)[0]=(saturation+10)*(_VIDEO_SATURATION_MAX-_VIDEO_SATURATION_MIN);
	((WORD*)pData)[0]/=100;
		saturation = ((WORD*)pData)[0];

 	CVideoSetVDCSaturation(saturation);
  #endif
#endif
//#if(sRGB_Color_Enhance == _ENABLE)
//	CAdjustSaturationHue(ucValue, _TRUE);
//#endif
}

void CAdjustHueSatSet(BYTE color, SWORD TempU1, SWORD TempU2, SWORD TempV1, SWORD TempV2)
{
    BYTE i;
    SWORD u,v;
	//SBYTE u,v;

    BYTE value = (color & 0x0f);
	//CTimerWaitForEvent(_EVENT_DEN_STOP);
#if(_SCALER_TYPE==_RTD2662)
	CScalerPageSelect(_PAGE7);

    CScalerSetByte(_P7_ICM_SEL_D1, value);
    CScalerSetByte(_P7_ICM_ACCESS_PORT_D2,0x00);
    if(value == 0){		//R
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x02);
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0xd2);
	  	if(GET_INPUTSOURCE_TYPE()>1)
    		CScalerSetByte(_P7_ICM_DATA_PORT_D3,0xaa);
	  	else
	  		CScalerSetByte(_P7_ICM_DATA_PORT_D3,0xee);
    }
	else if(value == 1){//G
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x08);
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x00);
	 	if(GET_INPUTSOURCE_TYPE()>1)
        	//CScalerSetByte(_P7_ICM_DATA_PORT_D3,0xaa/*0x66*/);	//0xaa by x.hu 20071026
        	CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x66);	//0xaa by x.hu 20071026
	  	else
	  		CScalerSetByte(_P7_ICM_DATA_PORT_D3,0xee);
    }
    else if(value == 2){//B
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x0d);
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x2e);
	  	if(GET_INPUTSOURCE_TYPE()>1)
			//CScalerSetByte(_P7_ICM_DATA_PORT_D3,0xaa/*0x66*/);	//0xaa by x.hu 20071026
			CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x66);	//0xaa by x.hu 20071026
      	else
			CScalerSetByte(_P7_ICM_DATA_PORT_D3,0xbe);
    }
    else if(value == 3){//Y
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x05);
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x2e);
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x62);  //ff
    }
    else if(value == 4){//C
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x0a);
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0xd2);
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,0x66);
    }
    //CTimerWaitForEvent(_EVENT_DEN_STOP);
    CScalerSetByte(_P7_ICM_SEL_D1,value);
    CScalerSetByte(_P7_ICM_ACCESS_PORT_D2,((color & 0xf0)+0x03));
	//CScalerSendAddr(_P7_ICM_DATA_PORT_D3, _WRITE, _NON_AUTOINC);//provisional ¼È©w
#else
    CScalerSetByte(_ICM_SEL_E1, value);
    CScalerSetByte(_ICM_ACCESS_PORT_E2,0x00);
    if(value == 0){		//R
        CScalerSetByte(_ICM_DATA_PORT_E3,0x02);
        CScalerSetByte(_ICM_DATA_PORT_E3,0xd2);
	  	if(GET_INPUTSOURCE_TYPE()>1)
    		CScalerSetByte(_ICM_DATA_PORT_E3,0xaa);
	  	else
	  		CScalerSetByte(_ICM_DATA_PORT_E3,0xee);
    }
	else if(value == 1){//G
        CScalerSetByte(_ICM_DATA_PORT_E3,0x08);
        CScalerSetByte(_ICM_DATA_PORT_E3,0x00);
	 	if(GET_INPUTSOURCE_TYPE()>1)
        	CScalerSetByte(_ICM_DATA_PORT_E3,0x66);
	  	else
	  		CScalerSetByte(_ICM_DATA_PORT_E3,0xee);
    }
    else if(value == 2){//B
        CScalerSetByte(_ICM_DATA_PORT_E3,0x0d);
        CScalerSetByte(_ICM_DATA_PORT_E3,0x2e);
	  	if(GET_INPUTSOURCE_TYPE()>1)
			CScalerSetByte(_ICM_DATA_PORT_E3,0x66);
      	else
			CScalerSetByte(_ICM_DATA_PORT_E3,0xbe);
    }
    else if(value == 3){//Y
        CScalerSetByte(_ICM_DATA_PORT_E3,0x05);
        CScalerSetByte(_ICM_DATA_PORT_E3,0x2e);
        CScalerSetByte(_ICM_DATA_PORT_E3,0x62);  //ff
    }
    else if(value == 4){//C
        CScalerSetByte(_ICM_DATA_PORT_E3,0x0a);
        CScalerSetByte(_ICM_DATA_PORT_E3,0xd2);
        CScalerSetByte(_ICM_DATA_PORT_E3,0x66);
    }
    //CTimerWaitForEvent(_EVENT_DEN_STOP);
    CScalerSetByte(_ICM_SEL_E1,value);
    CScalerSetByte(_ICM_ACCESS_PORT_E2,((color & 0xf0)+0x03));
	CScalerSendAddr(_ICM_DATA_PORT_E3, _WRITE, _NON_AUTOINC);
#endif
	
    for(i=1; i<9; i++){
		u = ((TempU1+TempU2)*CAdjustColorGammaCal(value, i)/64) - ((TempU1*i)/8);
		v = ((TempV1+TempV2)*CAdjustColorGammaCal(value, i)/64) - ((TempV1*i)/8);
#if(_SCALER_TYPE==_RTD2662)
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,u);	//CScalerSetByte(0xe3,u);		
        CScalerSetByte(_P7_ICM_DATA_PORT_D3,v);	//CScalerSetByte(0xe3,v);		
#else
        CScalerSendByte(u);											//CScalerSetByte(0xe3,u);		
        CScalerSendByte(v);											//CScalerSetByte(0xe3,v);		
#endif        
    }
#if(_SCALER_TYPE!=_RTD2662)
	CScalerSendWriteStop();	
#endif
 	//CScalerSetByte(0xe0,0x00);
#if(_SCALER_TYPE==_RTD2662)
 	if(GET_INPUTSOURCE_TYPE()>1)
 		CScalerSetByte(_P7_ICM_CTRL_D0,0xdf);
 	else
 		CScalerSetByte(_P7_ICM_CTRL_D0,0xdc);
#else
 	if(GET_INPUTSOURCE_TYPE()>1)
 		CScalerSetByte(_ICM_CTRL_E0,0xdf);
 	else
 		CScalerSetByte(_ICM_CTRL_E0,0xdc);
#endif
	
}

#define CENTER    0x00
#define RIGHT     0x10
#define LEFT      0x20
void CAdjustSetHueUVDelta(BYTE color, BYTE select)
{
    SWORD TempU1,TempV1,TempU2,TempV2;

	pData[0] = (select >> 3); //(select >> 4) << 1
	pData[1] = pData[0] + 1;

	if(GET_INPUTSOURCE_TYPE()>1)
	{
	  TempU1 = Video_TempUV1[color][pData[0]];
	  TempV1 = Video_TempUV1[color][pData[1]];
	}
	else
	{
	  TempU1 = Graphic_TempUV1[color][pData[0]];
	  TempV1 = Graphic_TempUV1[color][pData[1]];
	}

	pData[2] = color*3 + (select >> 4);

	if(stICMColor.ICM_COLOR[color] < 8)
	{
	   TempU2 = (long)TempUV2[pData[2]][0] * (8 - stICMColor.ICM_COLOR[color]) >> 3;
	   TempV2 = (long)TempUV2[pData[2]][1] * (8 - stICMColor.ICM_COLOR[color]) >> 3;
	}
	else
	{
	   TempU2 = (long)TempUV2[pData[2]][2] * (stICMColor.ICM_COLOR[color] - 8) >> 3;
	   TempV2 = (long)TempUV2[pData[2]][3] * (stICMColor.ICM_COLOR[color] - 8) >> 3;
	}
	CAdjustHueSatSet((select | color), TempU1, TempU2, TempV1, TempV2);


}
#if (_COLOR_PREFERENCE == _PANASONIC_STYLE)
void CAdjustPeakingFilter(SBYTE ucPeaking)
{
	//20080421, rewrite CAdjustPeakingFilter()

	//D-Domain
	if(GET_INPUTSOURCE_TYPE()==_SOURCE_VGA){
		CScalerPageSelect(_PAGE7);
		CScalerSetBit(_P7_PEAKING_ENABLE_A9, ~_BIT3, 0x00);	// disable Peaking and Coring
		return;
	}
	else if(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI){
		//if(HDMI_V_Height>=720)		//720p above
			pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels      
		//else
			//pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels      
		pData[1] = 0x7E;						//Peaking_C0 (126) 
		pData[2] = 0xF7;						//Peaking_C1 (-9) 	
		pData[3] = 0x4A;						//Peaking_C2 (74)
		pData[4] = 0x00;						//Gain_Blur
		pData[5] = ucPeaking*13;		//Gain_Pos(Min~Max)
		pData[6] = ucPeaking*13;		//Gain_Neg(Min~Max)
		pData[7] = 0x0F;						//Pos_Range(MSB)+Neg_Range(MSB)
		pData[8] = 0xFF;						//Pos_Range(LSB)(1023)
		pData[9] = 0xFF; 						//Neg_Range(LSB)(1023)
		pData[10] = 0x09;					//Coring(LV_min~LV_max)		
	}		
	else if(GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR){
		//if(HDMI_V_Height>=720)		//720p above
			pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels      
		//else
			//pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels      
		pData[1] = 0x7E;						//Peaking_C0 (126) 
		pData[2] = 0xF7;						//Peaking_C1 (-9) 	
		pData[3] = 0x4A;						//Peaking_C2 (74)
		pData[4] = 0x00;						//Gain_Blur
		pData[5] = ucPeaking*13;		//Gain_Pos(Min~Max)
		pData[6] = ucPeaking*13;		//Gain_Neg(Min~Max)
		pData[7] = 0x0F;						//Pos_Range(MSB)+Neg_Range(MSB)
		pData[8] = 0xFF;						//Pos_Range(LSB)(1023)
		pData[9] = 0xFF; 						//Neg_Range(LSB)(1023)
		pData[10] = 0x03;					//Coring(LV_min~LV_max)			
	}	
	else{//AV SV TV
		pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels      		 
		pData[1] = 0x7E;						//Peaking_C0 (126) 
		pData[2] = 0xF7;						//Peaking_C1 (-9) 	
		pData[3] = 0x4A;						//Peaking_C2 (74)
		pData[4] = 0x00;						//Gain_Blur
		pData[5] = ucPeaking*13;		//Gain_Pos(Min~Max)
		pData[6] = ucPeaking*13;		//Gain_Neg(Min~Max)
		pData[7] = 0x0F;						//Pos_Range(MSB)+Neg_Range(MSB)
		pData[8] = 0xFF;						//Pos_Range(LSB)(1023)
		pData[9] = 0xFF; 						//Neg_Range(LSB)(1023)
		pData[10] = 0x06;					//Coring(LV_min~LV_max)
	}	
		
	CScalerPageSelect(_PAGE7);
	CScalerWrite(_P7_PEAKING_DATA00_AA, 11, pData, _AUTOINC);
	if(GET_INPUTSOURCE_TYPE()==_SOURCE_DVI && !CHdmiFormatDetect())//HDMI Source & input DVI timing
	{
		CScalerPageSelect(_PAGE7);
		CScalerSetBit(_P7_PEAKING_ENABLE_A9, ~_BIT3, 0x00);		// disable Peaking and Coring
	}
	else
	{
		CScalerPageSelect(_PAGE7);
		CScalerSetBit(_P7_PEAKING_ENABLE_A9, ~_BIT3, _BIT3);	// enable Peaking and Coring
	}

	/*
	//eric 20070608 I-domain
	CScalerSetBit(_P6_PEAKING_ENABLE_C1, ~_BIT3, 0x00);	// disable Peaking and Coring
	return;
	*/

	if(GET_INPUTSOURCE_TYPE()==_SOURCE_VGA){
		CScalerPageSelect(_PAGE6);
		CScalerSetBit(_P6_PEAKING_ENABLE_C1, ~_BIT3, 0x00);	// disable Peaking and Coring
		return;
	}
	else if(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI){
		//if(HDMI_V_Height>=720)		//720p above
			pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels      
		//else
			//pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels      
		pData[1] = 0x7E;						//Peaking_C0 (126) 
		pData[2] = 0xF7;						//Peaking_C1 (-9) 	
		pData[3] = 0x4A;						//Peaking_C2 (74)
		pData[4] = 0x00;						//Gain_Blur
		pData[5] = 0x14/*ucPeaking*13*/;		//Gain_Pos(Min~Max)
		pData[6] = 0x14/*ucPeaking*13*/;		//Gain_Neg(Min~Max)
		pData[7] = 0x0F;						//Pos_Range(MSB)+Neg_Range(MSB)
		pData[8] = 0xFF;						//Pos_Range(LSB)(80)
		pData[9] = 0xFF; 						//Neg_Range(LSB)(80)
		pData[10] = 0x09;					//Coring(LV_min~LV_max)		
	}	
	else if(GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR){		
		pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels      		   
		pData[1] = 0x7E;						//Peaking_C0 (126) 
		pData[2] = 0xF7;						//Peaking_C1 (-9) 	
		pData[3] = 0x4A;						//Peaking_C2 (74)
		pData[4] = 0x00;						//Gain_Blur
		pData[5] = 0x14/*ucPeaking*13*/;		//Gain_Pos(Min~Max)
		pData[6] = 0x14/*ucPeaking*13*/;		//Gain_Neg(Min~Max)
		pData[7] = 0x0F;						//Pos_Range(MSB)+Neg_Range(MSB)
		pData[8] = 0xFF;						//Pos_Range(LSB)(1023)
		pData[9] = 0xFF; 						//Neg_Range(LSB)(1023)
		pData[10] = 0x09;					//Coring(LV_min~LV_max)			
	}	
	else{//AV TV SV
		//20080421
		pData[0] = 0x00;					//bit[3:2]->10: 9 pixels; ->01: 7 pixels; ->00: 5 pixels    		
		pData[1] = 0x7E;						//Peaking_C0 (126) 
		pData[2] = 0xF7;						//Peaking_C1 (-9) 	
		pData[3] = 0x4A;						//Peaking_C2 (74)
		pData[4] = 0x00;						//Gain_Blur
		//pData[5] = 0x30;//0x1E/*ucPeaking*13*/;		//Gain_Pos(Min~Max)
		//pData[6] = 0x30;//0x1E/*ucPeaking*13*/;		//Gain_Neg(Min~Max)
		pData[5] = ucPeaking*13;		//Gain_Pos(Min~Max)
		pData[6] = ucPeaking*13;		//Gain_Neg(Min~Max)
		pData[7] = 0x0F;						//Pos_Range(MSB)+Neg_Range(MSB)
		pData[8] = 0xFF;						//Pos_Range(LSB)(1023)
		pData[9] = 0xFF; 						//Neg_Range(LSB)(1023)
		pData[10] = 0x09;					//Coring(LV_min~LV_max)	
	}

	CScalerPageSelect(_PAGE6);
	CScalerWrite(_P6_PEAKING_DATA00_C2, 11, pData, _AUTOINC);
	if (GET_INPUTSOURCE_TYPE()==_SOURCE_DVI && !CHdmiFormatDetect())//HDMI Source & input DVI timing
	{
		CScalerPageSelect(_PAGE6);
		CScalerSetBit(_P6_PEAKING_ENABLE_C1, ~_BIT3, 0x00);		// disable Peaking and Coring
	}
	else
	{
		CScalerPageSelect(_PAGE6);
		CScalerSetBit(_P6_PEAKING_ENABLE_C1, ~_BIT3, _BIT3);	// enable Peaking and Coring
	}

}
	
#else

#if(_Peaking_Coring_Table == SharpnessTable1)

BYTE code PeakingCoeff[][6] =
{
		//Peaking_Coef0,  Peaking_Coef1,  Peaking_Coef2,  Coring_Min,  Coring_Max_Pos,  Coring_Max_Neg ,

		//level=1 :
		0x30, 0xe5, 0x3, 0x5, 0x50, 0xb0,
		//level=2 :
		0x38, 0xe1, 0x3, 0x5, 0x50, 0xb0,
		//level=3 :
		0x40, 0xdc, 0x4, 0x5, 0x50, 0xb0,
		//level=4 :
		0x46, 0xd7, 0x6, 0x5, 0x50, 0xb0,
		//level=5 :
		0x4e, 0xd3, 0x6, 0x5, 0x50, 0xb0,
		//level=6 :
		0x56, 0xce, 0x7, 0x5, 0x50, 0xb0,
		//level=7 :
		0x5e, 0xca, 0x7, 0x5, 0x50, 0xb0,
		//level=8 :
		0x66, 0xc5, 0x8, 0x5, 0x50, 0xb0,
		//level=9 :
		0x6e, 0xc1, 0x8, 0x5, 0x50, 0xb0,
		//level=10 :
		0x76, 0xbc, 0x9, 0x5, 0x50, 0xb0,
		//level=11 :
		0x40, 0xdc, 0x4, 0x5, 0x50, 0xb0,
		//level=12 :
		0x46, 0xd7, 0x6, 0x5, 0x50, 0xb0,
		//level=13 :
		0x4e, 0xd3, 0x6, 0x5, 0x50, 0xb0,
		//level=14 :
		0x56, 0xce, 0x7, 0x5, 0x50, 0xb0,
		//level=15 :
		0x5e, 0xca, 0x7, 0x5, 0x50, 0xb0,
		//level=16 :
		0x66, 0xc5, 0x8, 0x5, 0x50, 0xb0,

};

BYTE code TVPeakingCoeff[][6] =
{
		//Peaking_Coef0,  Peaking_Coef1,  Peaking_Coef2,  Coring_Min,  Coring_Max_Pos,  Coring_Max_Neg ,

		//level=0 :
		0x0, 0x0, 0x0, 0x14, 0x50, 0xb0,
		//level=1 :
		0x4, 0x1, 0xfd, 0x16, 0x50, 0xb0,
		//level=2 :
		0x6, 0x2, 0xfb, 0x18, 0x50, 0xb0,
		//level=3 :
		0xa, 0x3, 0xf8, 0x1a, 0x50, 0xb0,
		//level=4 :
		0xc, 0x5, 0xf5, 0x1c, 0x50, 0xb0,
		//level=5 :
		0x10, 0x6, 0xf2, 0x1e, 0x50, 0xb0,
		//level=6 :
		0x12, 0x7, 0xf0, 0x1f, 0x50, 0xb0,
		//level=7 :
		0x16, 0x8, 0xed, 0x1f, 0x50, 0xb0,
		//level=8 :
		0x1a, 0xa, 0xe9, 0x1f, 0x50, 0xb0,
		//level=9 :
		0x1c, 0xb, 0xe7, 0x1f, 0x50, 0xb0,
		//level=10 :
		0x20, 0xc, 0xe4, 0x1f, 0x50, 0xb0,
		//level=11 :
		0x22, 0xd, 0xe2, 0x1f, 0x50, 0xb0,
		//level=12 :
		0x26, 0xf, 0xde, 0x1f, 0x50, 0xb0,
		//level=13 :
		0x2c, 0x11, 0xd9, 0x1f, 0x50, 0xb0,
		//level=14 :
		0x32, 0x14, 0xd3, 0x1f, 0x50, 0xb0,
		//level=15 :
		0x38, 0x16, 0xce, 0x1f, 0x50, 0xb0,
		//level=16 :
		0x3e, 0x19, 0xc8, 0x1f, 0x50, 0xb0,
};

#elif(_Peaking_Coring_Table == SharpnessTable2)

BYTE code PeakingCoeff[][6] =
{
		//Peaking_Coef0,  Peaking_Coef1,  Peaking_Coef2,  Coring_Min,  Coring_Max_Pos,  Coring_Max_Neg ,

		//level=1 :
		0x08, 0x00, 0xFC, 0x00, 0x28, 0xF8,
		//level=2 :
		0x0C, 0x00, 0xFA, 0x00, 0x28, 0xF8,
		//level=3 :
		0x10, 0x00, 0xF8, 0x00, 0x28, 0xF8,
		//level=4 :
	     	0x18, 0x00, 0xF4, 0x00, 0x28, 0xF8,	//3
		//level=5 :
		0x20, 0x00, 0xF0, 0x00, 0x28, 0xF8,
		//level=6 :
		0x28, 0x00, 0xEC, 0x00, 0x28, 0xF8,
		//level=7 :
		0x30, 0x00, 0xE8, 0x00, 0x28, 0xF8,
		//level=8 :
		0x38, 0x00, 0xE4, 0x00, 0x28, 0xF8,
		//level=9 :
		0x40, 0x00, 0xE0, 0x00, 0x28, 0xF8,
		//level=10 :
		0x46, 0x00, 0xDD, 0x00, 0x28, 0xF8,
		//level=11 :
		0x4E, 0x00, 0xD9, 0x00, 0x28, 0xF8,
		//level=12 :
		0x56, 0x00, 0xD5, 0x00, 0x28, 0xF8,
		//level=13 :
		0x5E, 0x00, 0xD1, 0x00, 0x28, 0xF8,
		//level=14 :
		0x66, 0x00, 0xCD, 0x00, 0x28, 0xF8,
		//level=15 :
		0x6E, 0x00, 0xC9, 0x00, 0x28, 0xF8,
		//level=16 :
		0x76, 0x00, 0xC5, 0x00, 0x28, 0xF8,
};


BYTE code TVPeakingCoeff[][6] =
 {
 		//Peaking_Coef0,  Peaking_Coef1,  Peaking_Coef2,  Coring_Min,  Coring_Max_Pos,  Coring_Max_Neg ,

		//level=1 :
		 0x08, 0x00, 0xFC, 0x12, 0x60, 0xF8,
		//level=2 :
		 0x0A, 0x00, 0xFB,	0x12, 0x60, 0xF8,
		//level=3 :
		 0x0C, 0x00, 0xFA,	0x12, 0x60, 0xF8,
		//level=4 :
		 0x0E, 0x00, 0xF9,	0x12, 0x60, 0xF8,
		//level=5 :
		 0x10, 0x00, 0xF8,	0x12, 0x60, 0xF8,
		//level=6 :
		 0x12, 0x00, 0xF7,	0x12, 0x60, 0xF8,
		//level=7 :
		 0x14, 0x00, 0xF6,	0x12, 0x60, 0xF8,
		//level=8 :
		 0x16, 0x00, 0xF5,	0x12, 0x60, 0xF8,
		//level=9 :
	     	 0x18, 0x00, 0xF4,	0x12, 0x60, 0xF8,
		//level=10 :
		 0x1A, 0x00, 0xF3,	0x12, 0x60, 0xF8,
		//level=11 :
		 0x1C, 0x00, 0xF2,	0x12, 0x60, 0xF8,
		//level=12 :
		 0x1E, 0x00, 0xF1,	0x12, 0x60, 0xF8,
		//level=13 :
		 0x20, 0x00, 0xF0,	0x12, 0x60, 0xF8,
		//level=14 :
		 0x22, 0x00, 0xEF,	0x12, 0x60, 0xF8,
		 //level=15 :
		 0x24, 0x00, 0xEE,	0x12, 0x60, 0xF8,
		//level=16 :
		 0x26, 0x00, 0xED,	0x12, 0x60, 0xF8,
};
#endif
//----------------------------------------------------
// CAdjustPeakingFilter
// Adjust Peaking Filter and Coring Control
// @param <Coefficient C0 of Peaking Filter>
// @return {none}
//----------------------------------------------------

void CAdjustPeakingFilter(SBYTE ucPeaking)
{
	UINT8 ucPeakingTemp=GET_PEAKING_CORING();
	
#if  1//(_Peaking_Coring_Table!=SharpnessNoneTable)//reference Table
	if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA){

		    #if(_SCALER_TYPE==_RTD2662)//eric 20070523	
				CScalerPageSelect(_PAGE7);
				CScalerSetByte(_P7_PC_ACCESS_PORT_D6, 0x00);
			#else			
		    CScalerSetByte(_PC_ACCESS_PORT_9A, 0x00);		// disable Peaking and Coring
			#endif	

			return;
	}else{

		if (1)//(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)
		{

			pData[0] = TVPeakingCoeff[ucPeaking][0];
			pData[1] = TVPeakingCoeff[ucPeaking][1];
			pData[2] = TVPeakingCoeff[ucPeaking][2];
		    	pData[3] = TVPeakingCoeff[ucPeaking][3];
			pData[4] = TVPeakingCoeff[ucPeaking][4];
		    	pData[5] = TVPeakingCoeff[ucPeaking][5];
//		    	pData[6] = TVPeakingCoeff[ucPeaking][6];

		}
		else
		{

			pData[0] = PeakingCoeff[ucPeaking][0];
			pData[1] = PeakingCoeff[ucPeaking][1];
			pData[2] = PeakingCoeff[ucPeaking][2];
		    	pData[3] = PeakingCoeff[ucPeaking][3];
			pData[4] = PeakingCoeff[ucPeaking][4];
		    	pData[5] = PeakingCoeff[ucPeaking][5];
//		    	pData[6] = PeakingCoeff[ucPeaking][6];

		}

		#if(_SCALER_TYPE==_RTD2662)//eric 20070523			
			CScalerPageSelect(_PAGE7);
			CScalerSetByte(_P7_PC_ACCESS_PORT_D6, 0x80);
	    	CScalerWrite(_P7_PC_DATA_PORT_D7, 6, pData, _NON_AUTOINC);
	    	CScalerSetByte(_P7_PC_ACCESS_PORT_D6, 0x40);
		#else
	    	CScalerSetByte(_PC_ACCESS_PORT_9A, 0x80);
	    	CScalerWrite(_PC_DATA_PORT_9B, 6, pData, _NON_AUTOINC);
	    	CScalerSetByte(_PC_ACCESS_PORT_9A, 0x40);
		#endif		


//		I2CByteWrite(0x80,_VIDEO_DEVICE,pData[6]);		// Set VDC Peaking

	}
#else//default
	if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA)||(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
		ucPeaking = ucPeaking * 2;
	else
		ucPeaking = ucPeaking * 8;

	if(ucPeaking > 126)
		ucPeaking = 126;
	if(ucPeaking < 14 && ucPeaking > 0)
		ucPeaking = 14;
	pData[0] = ((ucPeaking +1) >> 1) << 1;
		if((bit)(ucPeaking & 0x01))
		{
			pData[1] = (SWORD)-72 * pData[0] / 126;
			pData[2] = (SWORD)-(pData[0] + 2*pData[1]) / 2;
		}
		else
		{
			pData[1] = (SWORD)-73 * pData[0] / 126;
			pData[2] = (SWORD)-(pData[0] + 2*pData[1]) / 2;
		}

	pData[3] = (BYTE)_CORING_MIN;
	pData[4] = (BYTE)_CORING_MAX_POS;
	pData[5] = (SBYTE)_CORING_MAX_NEG;
    	CScalerSetByte(_PC_ACCESS_PORT_9A, 0x80);
    	CScalerWrite(_PC_DATA_PORT_9B, 6, pData, _NON_AUTOINC);
    	CScalerSetByte(_PC_ACCESS_PORT_9A, 0x40);
#endif
}

#endif

//--------------------------------------------------
// Description  : Adjust sharpness
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CAdjustPeakingCoding(void)
{
	CAdjustPeakingFilter(GET_PEAKING_CORING());
}

#if _PCB_TYPE==_PCB_JPE_28_A00082_0020

//--------------------------------------------------
// Description  : Adjust backlight Pwm
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CAdjustBacklightPwm(BYTE percent)
{
	if (percent)
	{
		SET_PWM_HIGH();
	}
	else
	{
		SET_PWM_LOW();
	}
}

#else	//#if _PCB_TYPE==_PCB_JPE_28_A00082_0020

//--------------------------------------------------
// Description  : Adjust backlight
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CAdjustBacklight(void)
{
	//RTD2662 PWM2 for backlight (Pin98)
	
#if _BACKLIGHT_REVERSE
	MCU_PWM1H_DUT_FF4B = (GET_BACKLIGHT()*2.5);	// 2 = (_BACKLIGHT_MAX - _BACKLIGHT_MIN)/100
	//MCU_PWM23L_DUT_FF4F |= 0x0f;			//minimum backlight bit 3-0
	MCU_PWM01L_DUT_FF4C &= 0x0f;//keep low bit to prevent no paulse output
#else
#ifdef _BACKLIGHT_SUPPORT_USE_PWM4
	MCU_PWM3H_DUT_FF4E = _BACKLIGHT_MAX - (GET_BACKLIGHT()*2.5);	// 2 = (_BACKLIGHT_MAX - _BACKLIGHT_MIN)/100
	//MCU_PWM23L_DUT_FF4F |= 0x0f;			//minimum backlight bit 3-0
	MCU_PWM23L_DUT_FF4F &= 0x0f;//keep low bit to prevent no paulse output
#endif	
#endif
}
#endif	//#if _PCB_TYPE==_PCB_JPE_28_A00082_0020

void CAdjustBacklightZeroSavePower(void)
{
	//RTD2662 PWM2 for backlight (Pin98)
#if _BACKLIGHT_REVERSE
	MCU_PWM1H_DUT_FF4B = 0;//_BACKLIGHT_MAX - (GET_BACKLIGHT()*2);	// 2 = (_BACKLIGHT_MAX - _BACKLIGHT_MIN)/100
	MCU_PWM01L_DUT_FF4C |= 0xf0;			//minimum backlight bit 3-0
#else
	MCU_PWM3H_DUT_FF4E = _BACKLIGHT_MAX;
	MCU_PWM23L_DUT_FF4F |= 0xf0;	
#endif
	//MCU_PWM23L_DUT_FF4F &= 0xf0;//keep low bit to prevent no paulse output
}


void CAdjustGammaTable(BYTE index)
{
#if(_GAMMA_TYPE == 	_FULL_GAMMA_NORMAL_TABLE)
	switch(index){
	case 1:
  #if _PANEL_TYPE == _CMO_V270B1_27
   		CAdjustGamma(_FULL_GAMMA_NORMAL_TABLE, GAMMA_1_R, GAMMA_1_G, GAMMA_1_B);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x83);
		CScalerSetByte(_CB_DATA_PORT_65,0x70);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x84);
		CScalerSetByte(_CB_DATA_PORT_65,0x68);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x85);
		CScalerSetByte(_CB_DATA_PORT_65,0x7F);
  #else
   		CAdjustGamma(_FULL_GAMMA_NORMAL_TABLE, GAMMA_1_R, GAMMA_1_G, GAMMA_1_B);
  #endif//_CMO_V270B1_27
		break;
	case 2:
  #if _PANEL_TYPE == _CMO_V270B1_27
		CAdjustGamma(_FULL_GAMMA_NORMAL_TABLE, GAMMA_2_R, GAMMA_2_G, GAMMA_2_B);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x83);
		CScalerSetByte(_CB_DATA_PORT_65,0x68);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x84);
		CScalerSetByte(_CB_DATA_PORT_65,0x68);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x85);
		CScalerSetByte(_CB_DATA_PORT_65,0x7F);
  #else
		CAdjustGamma(_FULL_GAMMA_NORMAL_TABLE, GAMMA_2_R, GAMMA_2_G, GAMMA_2_B);
  #endif//_CMO_V270B1_27
		break;
	case 3:
  #if _PANEL_TYPE == _CMO_V270B1_27
		CAdjustGamma(_FULL_GAMMA_NORMAL_TABLE, GAMMA_3_R, GAMMA_3_G, GAMMA_3_B);
  #else
		CAdjustGamma(_FULL_GAMMA_NORMAL_TABLE, GAMMA_3_R, GAMMA_3_G, GAMMA_3_B);
  #endif
		break;
	case 0:
  #if _PANEL_TYPE == _CMO_V270B1_27
		CScalerSetByte(_CB_ACCESS_PORT_64,0x83);
		CScalerSetByte(_CB_DATA_PORT_65,0x78);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x84);
		CScalerSetByte(_CB_DATA_PORT_65,0x78);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x85);
		CScalerSetByte(_CB_DATA_PORT_65,0x7F);
  		#endif
		CScalerSetBit(_GAMMA_CTRL_67, ~_BIT6, 0x00);
		break;

	default:
		break;

	}
	
#elif(_GAMMA_TYPE == _FULL_GAMMA_COMPRESS_TABLE2)


		switch(index){
		case 0:		// disable Gamma
  		#if _PANEL_TYPE == _CMO_V270B1_27
		CScalerSetByte(_CB_ACCESS_PORT_64,0x83);
		CScalerSetByte(_CB_DATA_PORT_65,0x78);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x84);
		CScalerSetByte(_CB_DATA_PORT_65,0x78);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x85);
		CScalerSetByte(_CB_DATA_PORT_65,0x7F);
  		#endif
		CScalerSetBit(_GAMMA_CTRL_67, ~_BIT6, 0x00);
		break;

		case 1:
  		#if _PANEL_TYPE == _CMO_V270B1_27
   		CAdjustGamma(_FULL_GAMMA_COMPRESS_TABLE2, GAMMA_1_R, GAMMA_1_G, GAMMA_1_B);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x83);
		CScalerSetByte(_CB_DATA_PORT_65,0x70);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x84);
		CScalerSetByte(_CB_DATA_PORT_65,0x68);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x85);
		CScalerSetByte(_CB_DATA_PORT_65,0x7F);
  		#else
   		CAdjustGamma(_FULL_GAMMA_COMPRESS_TABLE2, GAMMA_1_R, GAMMA_1_G, GAMMA_1_B);
  		#endif
		break;
	case 2:
  		#if _PANEL_TYPE == _CMO_V270B1_27
		CAdjustGamma(_FULL_GAMMA_COMPRESS_TABLE2, GAMMA_2_R, GAMMA_2_G, GAMMA_2_B);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x83);
		CScalerSetByte(_CB_DATA_PORT_65,0x68);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x84);
		CScalerSetByte(_CB_DATA_PORT_65,0x68);
		CScalerSetByte(_CB_ACCESS_PORT_64,0x85);
		CScalerSetByte(_CB_DATA_PORT_65,0x7F);
  		#else
		CAdjustGamma(_FULL_GAMMA_COMPRESS_TABLE2, GAMMA_2_R, GAMMA_2_G, GAMMA_2_B);
  		#endif
		break;
	case 3:
  		#if _PANEL_TYPE == _CMO_V270B1_27
		CAdjustGamma(_FULL_GAMMA_COMPRESS_TABLE2, GAMMA_3_R, GAMMA_3_G, GAMMA_3_B);
  		#else
		CAdjustGamma(_FULL_GAMMA_COMPRESS_TABLE2, GAMMA_3_R, GAMMA_3_G, GAMMA_3_B);
  		#endif
		break;

	default:
		break;

	}
#endif
}

#if(sRGB_Color_Enhance == _ENABLE)
//Use sRGB to adjust Saturation and Hue
void CAdjustSaturationHue(BYTE  ucValue, BOOL bSaturationIndex)
{
//Lewis, this table have multiplied by 1024
	INT16 code YUV2RGB[3][3] =
	{
	  {1024,        0,    1436},
	  {1024,   -342,   -731},
	  {1024,   1815,        0}
	 };

//Lewis, this table have multiplied by 1024
	INT16 code RGB2YUV[3][3] =
	{
	    {306,     601,   117},
	  {-173,   -339,    512},
	    {512,   -429,   -83}
	 };

	BYTE i, j;
	INT16 temp_buff0[3][3];
	//731401***
	//INT16 temp_buff1[3][3];
	//INT16 temp_buff2[3][3];
	INT16 MATRIX_GAIN_HUE[3][3];
	//INT16 MATRIX_GAIN[3][3];
	//INT16 MATRIX_HUE[3][3];
	//731401###
	INT16 temp_hue, temp_saturation;

/*
	if(bSaturationIndex == _TRUE) //adjust saturation
	{
			temp_saturation=(INT16)ucValue;
			temp_hue=(INT16)GET_HUE() - 50;
	}
	else
	{
			temp_saturation = (INT16)GET_SATURATION();
			temp_hue=(INT16)ucValue - 50;
	}
*/
	ucValue=ucValue;
//////////////////////////////////////////////////////////
	if(GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR)
	{
		if(bSaturationIndex == _TRUE) //adjust saturation
		{
			//20070324, ypbpr saturation 
			//temp_saturation=(INT16)ucValue;
			temp_saturation=(INT16)COsdCtrlGetSaturation();
			//force ypbpr hue, 20070324
			//temp_hue=(INT16)GET_YPbPrHue() - 50;
			temp_hue=(INT16)0;
		}
		else
		{
			//temp_saturation = (INT16)GET_YPbPrSaturation();
			//20070324, ypbpr saturation 
			temp_saturation = (INT16)(COsdCtrlGetSaturation());
			//force ypbpr hue, 20070324
			//temp_hue=(INT16)ucValue - 50;
			temp_hue=(INT16)0;
		}
	}
	//20070324, HDMI
	else if(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI)
	{
		temp_saturation=100;
		temp_hue=(INT16)0;
	}
	else
	{
		//!!!! here, pass value ralate with GET_PICT_EFFECT()
		if(bSaturationIndex == _TRUE) //adjust saturation
		{
			//20070324, video saturation
			//temp_saturation=(INT16)ucValue;
			temp_saturation=(INT16)COsdCtrlGetSaturation();
			
			//temp_hue=(INT16)GET_HUE() - 50;
			//force PAL's Hue as center
			//20070326, pal m/60 mark hue
			//if(ucAV_Mode_Curr==60 && ucMode_Curr_2610!=ZPAL_60)
			if(!GET_VIDEO8_V_RATE_IS_50())
				//20070324
				//temp_hue=(INT16)GET_HUE() - 50;
				temp_hue=(INT16)(COsdCtrlGetHue() - 50);
			else
				temp_hue=(INT16)0;
		}
		else
		{
			//20070324, video saturation
			//temp_saturation = (INT16)GET_SATURATION();
			temp_saturation = (INT16)COsdCtrlGetSaturation();
			//force PAL's Hue as center
			//temp_hue=(INT16)ucValue - 50;
			//20070326, pal m/60 mark hue
			//if(ucAV_Mode_Curr==60 && ucMode_Curr_2610!=ZPAL_60)
			if(!GET_VIDEO8_V_RATE_IS_50())
				//20070324
				//temp_hue=(INT16)ucValue - 50;
				temp_hue=(INT16)(COsdCtrlGetHue()- 50);
			else
				temp_hue=(INT16)0;
		}
  	}
//////////////////////////////////////////////////////////

	//Lewis 20060717, to prevent adjust CSC matrix, the saturation overflow
	#if 1
	if(temp_saturation>75)
		temp_saturation = 75;
	else if(temp_saturation<25)
		temp_saturation = 25;
	#else
	if(temp_saturation>50)
		temp_saturation = 50;
	else if(temp_saturation<15)
		temp_saturation = 15;
	#endif

	temp_hue = temp_hue*19>>5; //Lewis, 20060720, limited Hue range to prevent grey bar have color
//731401***
//Lewis, this table have multiplied by 1024
	MATRIX_GAIN_HUE[0][0] = 1024;
	MATRIX_GAIN_HUE[0][1] = 0;
	MATRIX_GAIN_HUE[0][2] = 0;
	MATRIX_GAIN_HUE[1][0] = 0;
	MATRIX_GAIN_HUE[1][1] = ((temp_saturation<<7)/25)<<2;
	MATRIX_GAIN_HUE[1][2] = 0;
	MATRIX_GAIN_HUE[2][0] = 0;
	MATRIX_GAIN_HUE[2][1] = 0;
	MATRIX_GAIN_HUE[2][2] = MATRIX_GAIN_HUE[1][1];

	CAdjustMatrixMultiply(MATRIX_GAIN_HUE,RGB2YUV,temp_buff0);
	
//Lewis, this table have multiplied by 1024
	MATRIX_GAIN_HUE[0][0] = 1024;
	MATRIX_GAIN_HUE[0][1] = 0;
	MATRIX_GAIN_HUE[0][2] = 0;
	MATRIX_GAIN_HUE[1][0] = 0;
	MATRIX_GAIN_HUE[1][1] = CAdjustCosine(temp_hue);
	MATRIX_GAIN_HUE[1][2] = CAdjustSine(temp_hue);
	MATRIX_GAIN_HUE[2][0] = 0;
	MATRIX_GAIN_HUE[2][1] = (-1)*MATRIX_GAIN_HUE[1][2];//-CAdjustSine(temp);
	MATRIX_GAIN_HUE[2][2] = MATRIX_GAIN_HUE[1][1]; //CAdjustCosine(temp);


	CAdjustMatrixMultiply(MATRIX_GAIN_HUE,temp_buff0,temp_buff0);
	CAdjustMatrixMultiply(YUV2RGB,temp_buff0,temp_buff0);

	for(i=0; i<3; i++)
		for(j=0; j<3; j++)
	{
		if(i==j)
			temp_buff0[i][j]-=1024;

		temp_buff0[i][j] = temp_buff0[i][j]>>1;

		if(temp_buff0[i][j]>255)
			temp_buff0[i][j] = 255;
		else if(temp_buff0[i][j]<-256)
			temp_buff0[i][j] = -256;
	}

	//Write R
	//frank CScalerSetBit(_COLOR_CTRL_62,0xc7,0x08);
	pData[0] =(temp_buff0[0][0]<0?1:0);
	pData[1]=(BYTE)(temp_buff0[0][0]);
	pData[2] =(temp_buff0[0][1]<0?1:0);
	pData[3]=(BYTE)(temp_buff0[0][1]);
	pData[4] =(temp_buff0[0][2]<0?1:0);
	pData[5]=(BYTE)(temp_buff0[0][2]);

//	CAdjustSetsRGBRhue();
	CAdjustSetYpbprRhue();

	//Write G
	//frank CScalerSetBit(_COLOR_CTRL_62,0xc7,0x10);

	pData[0] =(temp_buff0[1][0]<0?1:0);
	pData[1]=(BYTE)(temp_buff0[1][0]);
	pData[2] =(temp_buff0[1][1]<0?1:0);
	pData[3]=(BYTE)(temp_buff0[1][1]);
	pData[4] =(temp_buff0[1][2]<0?1:0);
	pData[5]=(BYTE)(temp_buff0[1][2]);

//	CAdjustSetsRGBGhue();
	CAdjustSetYpbprGhue();

	//Write B

	pData[0] =(temp_buff0[2][0]<0?1:0);
	pData[1]=(BYTE)(temp_buff0[2][0]);
	pData[2] =(temp_buff0[2][1]<0?1:0);
	pData[3]=(BYTE)(temp_buff0[2][1]);
	pData[4] =(temp_buff0[2][2]<0?1:0);
	pData[5]=(BYTE)(temp_buff0[2][2]);
//731401###
//	CAdjustSetsRGBBhue();
	CAdjustSetYpbprBhue();

	CScalerSetBit(_COLOR_CTRL_62, 0xff, 0x80);			// cftsai 20061031 added, ready to write
}

INT16 CAdjustCosine(INT16 fDegree)
{
	//Lewis, the curve value table have multiplied by 1024
	UINT16 code fCosCurveAngle[13] = {   0,   6,  12,  18,  24,  30,  37,  44,  52,  60,  68,  78, 90};
	UINT16 code fCosCurveValue[13] = {1024, 1018, 1002, 974, 935, 887, 818, 737, 630, 512, 384, 213,  0};
	UINT8 i,cQuadrant;
	INT16 fDegreeTemp, fDegreeSpan, fCosValueSpan, fCosValue;

	if (fDegree < 0)
		fDegree += 360;

	fDegree = fDegree%360;

	//locate degree on which quadrant
	cQuadrant = (UINT8)(fDegree / 90);
	cQuadrant++;
	if (cQuadrant==1) //first quadrant
		fDegree = fDegree;
	else if(cQuadrant==2) //second quadrant
		fDegree = 180 - fDegree;
	else if(cQuadrant==3) //third quadrant
		fDegree = fDegree - 180;
	else if(cQuadrant==4) //forth quadrant
		fDegree = 360 -fDegree;
	//locate degree on which quadrant

	if (fDegree<=fCosCurveAngle[0])
		fCosValue = fCosCurveValue[0];
	else
	{
		for (i=0;fCosCurveAngle[i] < fDegree; i++);

		i--;
		fDegreeTemp = fDegree-fCosCurveAngle[i];
		fDegreeSpan = fCosCurveAngle[i+1]-fCosCurveAngle[i];
		fCosValueSpan = fCosCurveValue[i+1]-fCosCurveValue[i];
		fCosValue = fCosCurveValue[i]+fDegreeTemp*fCosValueSpan/fDegreeSpan;
	}

	if (cQuadrant==2 || cQuadrant==3)
		fCosValue = fCosValue*(-1);

	return fCosValue;
}

INT16 CAdjustSine(INT16 fDegree)
{
	//Lewis, this table have multiplied by 1024
	UINT16 code fSinCurveAngle[13] = {0,   6,  12,  18,  24,  30,  37,  44,  52,  60,  68,  78, 90};
	UINT16 code fSinCurveValue[13] = {0, 107, 213, 316, 416, 512, 616, 711, 807, 887, 949, 1002,  1024};
	UINT8 i,cQuadrant;
	INT16 fDegreeTemp,fDegreeSpan,fSinValueSpan,fSinValue;

	if (fDegree < 0)
		fDegree += 360;

	fDegree = fDegree%360;

	//locate degree on which quadrant
	cQuadrant = (UINT8)(fDegree / 90);
	cQuadrant++;
	if (cQuadrant==1) //first quadrant
		fDegree = fDegree;
	else if(cQuadrant==2) //second quadrant
		fDegree = 180 - fDegree;
	else if(cQuadrant==3) //third quadrant
		fDegree = fDegree - 180;
	else if(cQuadrant==4) //forth quadrant
		fDegree = 360 -fDegree;
	//locate degree on which quadrant

	if (fDegree<=fSinCurveAngle[0])
		fSinValue = fSinCurveValue[0];
	else
	{
		for (i=0;fSinCurveAngle[i] < fDegree; i++);

		i--;
		fDegreeTemp = fDegree-fSinCurveAngle[i];
		fDegreeSpan = fSinCurveAngle[i+1]-fSinCurveAngle[i];
		fSinValueSpan = fSinCurveValue[i+1]-fSinCurveValue[i];
		fSinValue = fSinCurveValue[i]+fDegreeTemp*fSinValueSpan/fDegreeSpan;
	}

	if (cQuadrant==3 || cQuadrant==4)
		fSinValue = fSinValue*(-1);

	return fSinValue;
}

void CAdjustMatrixMultiply(INT16 (*arrayA)[3], INT16 (*arrayB)[3], INT16 (*arrayC)[3])
{
	BYTE i, j;
	INT32 Temp[3][3];

	for(i=0; i<3; i++)
	{
		for(j=0; j<3; j++)
		{
			Temp[i][j] = ((INT32)arrayA[i][0]*arrayB[0][j]>>2)
						+ ((INT32)arrayA[i][1]*arrayB[1][j]>>2)
						+ ((INT32)arrayA[i][2]*arrayB[2][j]>>2);

			//arrayC[i][j] = (INT16)(Temp[i][j]>>8);//731401
		}
	}
//731401***
	for(i=0; i<3; i++)
		for(j=0; j<3; j++)
			arrayC[i][j] = (INT16)(Temp[i][j]>>8);
//731401###

	
}

#endif

//--------------------------------------------------
// Description  :  Video8 Frame Sync Function
// Input Value  : None
// Output Value : None
//--------------------------------------------------
#if 0//(_SCAN_TYPE==_SEQUENTIAL_SCAN)
void CVideoFrameSync(void)
{
	WORD ustemp;
	BYTE field, temp,scale;
	WORD code tVideoModeTable[][5] =
	{
	// IHTotal,	IHStart, 	IHWidth, 	IVStart, 	IVHeight
	{	864,  	167,	  	668,      	42,         274 },  					// VIDEO-50(PAL& SECAM)
	{	858,  	157,     	672,      	34,      	216/*228*/ },  					// VIDEO-60(NTSC)
	};


	//DebugPrintf("\n _VIDEO Frame Sync !", 0);
	
	///CVideoDetectMode();//jerry0507
	CVideoSoftReset();

	//CAdjustSyncProcessorMeasureStart();    //Ken
	//CTimerDelayXms(30);
	if(CTimerPollingEventProc(60, CMiscModeMeasurePollingEvent))
		CModeMeasureData();

//	DebugPrintf("\n bAV_Mode_Curr = %x", bAV_Mode_Curr);

	//if(ucAV_Mode_Curr==60)	//jerry0507
		field = _VIDEO_60HZ;
	//else
	//	field = _VIDEO_50HZ;


//#if _ColorStandard_TYPE  == _NTSC
//	if(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)
//		field = _VIDEO_60HZ;
//#endif

	if(Panel[ucPanelSelect].DHWidth>tVideoModeTable[field][2])
		scale = 0x05;
	else
		scale = 0x09;

	stModeInfo.IHTotal	=	tVideoModeTable[field][0];
	stModeInfo.IHStartPos	=	tVideoModeTable[field][1];
	stModeInfo.IHWidth	=	tVideoModeTable[field][2];
	stModeInfo.IVStartPos	=	tVideoModeTable[field][3];
	stModeInfo.IVHeight	=	tVideoModeTable[field][4];


	stDisplayInfo.DHWidth   = Panel[ucPanelSelect].DHWidth;			//Panel[ucPanelSelect].DHEndPos - Panel[ucPanelSelect].DHStartPos;
	stDisplayInfo.DVHeight  = Panel[ucPanelSelect].DVHeight;			//Panel[ucPanelSelect].DVEndPos - Panel[ucPanelSelect].DVStartPos;
	stDisplayInfo.DVStartPos = Panel[ucPanelSelect].DVStartPos;
	stDisplayInfo.DHTotal   = Panel[ucPanelSelect].DHTotal;



	CScalerSetByte(_DISP_ACCESS_PORT_2A, _DISP_DH_BKGD_STA_H_03);
	CScalerRead(_DISP_DATA_PORT_2B, 2, pData, _NON_AUTOINC);

	CScalerSetByte(_DISP_ACCESS_PORT_2A, _DISP_DH_ACT_STA_H_05);
	CScalerWrite(_DISP_DATA_PORT_2B, 2, pData, _NON_AUTOINC);
	((unsigned int*)pData)[0] += stDisplayInfo.DHWidth; //Calculate the new start position

	CScalerSetByte(_DISP_ACCESS_PORT_2A, _DISP_DH_ACT_END_H_07);
	CScalerWrite(_DISP_DATA_PORT_2B, 2, pData, _NON_AUTOINC);

	CScalerSetByte(_DISP_ACCESS_PORT_2A, _DISP_DV_BKGD_STA_H_0E);
	CScalerRead(_DISP_DATA_PORT_2B, 2, pData, _NON_AUTOINC);

	CScalerSetByte(_DISP_ACCESS_PORT_2A, _DISP_DV_ACT_STA_H_10);
	CScalerWrite(_DISP_DATA_PORT_2B, 2, pData, _NON_AUTOINC);
	((unsigned int*)pData)[0] += stDisplayInfo.DVHeight; //Calculate the new start position

	CScalerSetByte(_DISP_ACCESS_PORT_2A, _DISP_DV_ACT_END_H_12);
	CScalerWrite(_DISP_DATA_PORT_2B, 2, pData, _NON_AUTOINC);



	ucHStartBias = 100;
	ucVStartBias = 0;
	ucVStartBias = CAdjustIVS2DVSDelay(scale);

	if(ucVStartBias > stModeInfo.IVStartPos)
		ucVStartBias = stModeInfo.IVStartPos;

	//Set Capture Window
	ustemp = stModeInfo.IHStartPos + _CAPTURE_HDELAY - (ucHStartBias + _PROGRAM_HDELAY);

	CScalerSetBit(_IPH_ACT_STA_H_14, ~(_BIT2 | _BIT1 | _BIT0), HIBYTE(ustemp) & (_BIT2 | _BIT1 | _BIT0));
	CScalerSetByte(_IPH_ACT_STA_L_15, LOBYTE(ustemp));
	
	CScalerSetBit(_IPH_ACT_WID_H_16, ~(_BIT2 | _BIT1 | _BIT0), HIBYTE(stModeInfo.IHWidth) & (_BIT2 | _BIT1 | _BIT0));
	CScalerSetByte(_IPH_ACT_WID_L_17, LOBYTE(stModeInfo.IHWidth));

	ustemp = stModeInfo.IVStartPos - (ucVStartBias + _PROGRAM_VDELAY);

	CScalerSetBit(_IPV_ACT_STA_H_18, ~(_BIT2 | _BIT1 | _BIT0), HIBYTE(ustemp) & (_BIT2 | _BIT1 | _BIT0));
	CScalerSetByte(_IPV_ACT_STA_L_19, LOBYTE(ustemp));
	CScalerSetBit(_IPV_ACT_LEN_H_1A, ~(_BIT2 | _BIT1 | _BIT0), HIBYTE(stModeInfo.IVHeight) & (_BIT2 | _BIT1 | _BIT0));
	CScalerSetByte(_IPV_ACT_LEN_L_1B, LOBYTE(stModeInfo.IVHeight));

	//Set DH_TOTAL
	pData[0] = (HIBYTE(stDisplayInfo.DHTotal - 4) & 0x0f);
	pData[1] = (LOBYTE(stDisplayInfo.DHTotal - 4));

	CScalerSetByte(_DISP_ACCESS_PORT_2A, _DISP_DH_TOTAL_H_00);
	CScalerWrite(_DISP_DATA_PORT_2B, 2, pData, _NON_AUTOINC);

	if(field == _VIDEO_60HZ)  // hill added to avoid framesync error
		stModeInfo.IVTotal = 264;   // set 60HZ 525 lines
	else if(field == _VIDEO_50HZ)
		stModeInfo.IVTotal = 312;  // set 50Hz 625 lines

	// Calculate DV_TOTAL setting for watchdog
	((WORD *)pData)[2] = (DWORD)stModeInfo.IVTotal * (DWORD)(stDisplayInfo.DVHeight) / stModeInfo.IVHeight + 64;
	pData[0] = (HIBYTE(((WORD *)pData)[2]) & 0x0f);
	pData[1] = (LOBYTE(((WORD *)pData)[2]));
	CScalerSetByte(_DISP_ACCESS_PORT_2A, _DISP_DV_TOTAL_H_0B);
	CScalerWrite(_DISP_DATA_PORT_2B, 2, pData, _NON_AUTOINC);

	// Set internal input H sync delay
	CAdjustIHSDelay(ucHStartBias + _PROGRAM_HDELAY);

	// Set internal input V sync delay
	CAdjustIVSDelay(ucVStartBias + _PROGRAM_VDELAY);


	// Calculate and set display clock frequency
	stModeInfo.IHFreq = 157;    // For PAL and NTSC. We can use sync processor to measure the actual value.
	((DWORD *)pData)[0] = (DWORD)(stDisplayInfo.DHTotal) * (DWORD)stModeInfo.IHFreq * (DWORD)(stDisplayInfo.DVHeight) / stModeInfo.IVHeight / 10;    // uint Khz   Ken

	CAdjustDPLL(((DWORD *)pData)[0]);

	CModeSetScaling(scale);          // 0x05: ALL SCALE UP

	// Turn off full-line buffer
	CScalerSetBit(_SCALE_CTRL_32, ~_BIT4, 0x00);

	CAdjustIVS2DVSDelay(scale);      // 0x05: ALL SCALE UP

	// Enable display timing
	CScalerSetBit(_VDISP_CTRL_28, ~(_BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT5 | _BIT3 | _BIT1 | _BIT0));


	CPowerADCAPLLOff();
	//fjyang CModeSetFIFOForFrameSync();
	#if(_SCALER_TYPE==_RTD2662)
    	CScalerPageSelect(_PAGE0);
    	CScalerSetBit(_P0_ADC_RBG_CTRL_CE, 0x0F, (1/*ucAdcPGA*/ << 4) & 0xF0);
	#else
	CModeSetFIFOForFrameSync();
	#endif

	CFrameSyncDo();

	SET_MODESTABLE();

	// Change to even/odd field frame sync
	CScalerSetByte(_IPV_ACT_STA_L_19, CScalerGetBit(_IPV_ACT_STA_L_19, 0xff) + 1);
	CScalerRead(_IV_DV_DELAY_CLK_ODD_41, LENGTH(1), &temp, _NON_AUTOINC);
	ustemp = (WORD)temp * 16 + 16;
	ustemp += stModeInfo.IHTotal;

	CScalerSetByte(_IV_DV_DELAY_CLK_ODD_41, (ustemp - 16) / 16);
	ustemp -= stModeInfo.IHTotal / 2; //forster modified 060424 for frame sync issue

	CScalerSetByte(_IV_DV_DELAY_CLK_EVEN_42, (ustemp - 16) / 16);
	CScalerSetBit(_FS_DELAY_FINE_TUNING_43, ~(_BIT1), _BIT1);

	CTimerDelayXms(100);
	CModeSetupEtcs(_FUNCTION_DISABLE);


#if(_TV_NOSIGNAL_BACKGROUND != _SNOW_BACKGROUND)
	TV_nosignal_flag = _FALSE;
#endif


//eric 20070524 AU22
#if ((_C_PANEL_TYPE  ==  _AUO_LVDS_22_WXGA)||(_C_PANEL_TYPE  ==  _CMO_LVDS_22_WXGA)||(_C_PANEL_TYPE  ==  _HANNSTAR_M1905_19)||(_C_PANEL_TYPE ==_CMO_LVDS_17)||(_C_PANEL_TYPE  ==  _SAMSUNG_LVDS_19_WXGA))
		CScalerSetBit(_FS_DELAY_FINE_TUNING_43, ~_BIT0, 0x00);
#endif


}
#endif



#if (_PQ_FINETUNE)

void CAdjustContrast(void)
{
	#define _REG_MIN 	78//138//
	#define _REG_MAX	178//198//
	unsigned char slider;

	slider = COsdCtrlGetContrast();
	
	//DebugPrintf("ct :%d, ",  stColorTempData.ColorTemp[_RED]);
	//DebugPrintf("%d, ",  stColorTempData.ColorTemp[_GREEN]);
	//DebugPrintf("%d\n",  stColorTempData.ColorTemp[_BLUE]);
	
	//pData[3] = CAdjustColortempReflectToReg(stColorTempData.ColorTemp[_RED], _REG_MIN, 168, _REG_MAX);
	//pData[4] = CAdjustColortempReflectToReg(stColorTempData.ColorTemp[_GREEN], _REG_MIN, 168, _REG_MAX);
	//pData[5] = CAdjustColortempReflectToReg(stColorTempData.ColorTemp[_BLUE], _REG_MIN, 168, _REG_MAX);
	pData[3] = CAdjustColortempReflectToReg(stColorTempData.ColorTemp[_RED], _REG_MIN, 128+3, _REG_MAX);		
	pData[4] = CAdjustColortempReflectToReg(stColorTempData.ColorTemp[_GREEN], _REG_MIN, 128+3, _REG_MAX);	
	pData[5] = CAdjustColortempReflectToReg(stColorTempData.ColorTemp[_BLUE], _REG_MIN, 128+3, _REG_MAX);
	
	//DebugPrintf("ct result :%d, ",  pData[3]);
	//DebugPrintf("%d, ",  pData[4]);
	//DebugPrintf("%d\n",  pData[5]);
	//DebugPrintf("ct transfer ok.\n",  0);

	pData[0] = CAdjustSliderReflectToReg(0, 50, 100, slider, _REG_MIN, pData[3], _REG_MAX);
	pData[1] = CAdjustSliderReflectToReg(0, 50, 100, slider, _REG_MIN, pData[4], _REG_MAX);
	pData[2] = CAdjustSliderReflectToReg(0, 50, 100, slider, _REG_MIN, pData[5], _REG_MAX);

	CAdjustSetContrast();
	
	CAdjustHLWindowContrast();
}


#else

#if (_PICT_EFFECT_SUPPORT)

//--------------------------------------------------
// Description  : Adjust color processing contrast
// Input Value  : None
// Output Value : None
//--------------------------------------------------
#if (_PANEL_TYPE==_AU_LVDS_26 ||_PANEL_TYPE==_AU_LVDS_T315XW01)
#define _CT_BASE_AV				(100+10)
#elif (_PANEL_TYPE==_AUO_LVDS_22_WXGA ||_PANEL_TYPE==_M220Z1_03_WXGA)
#define _CT_BASE_AV				(100+10)
#elif (_PANEL_TYPE==_CMO_M260J1_WUXGA)
#define _CT_BASE_AV				(100+10)
#else
#define _CT_BASE_AV				(100+10)//(100+10+10)//czl 071128//ccy add 10 20080909
#endif

#define _CT_CONTRAST			(COsdCtrlGetContrast())//0-100

code BYTE stCtBaseAv[_CT_TYPE_VIDEO_TOTAL][3] =
{
	{
		128,
		128,
		128,
	},
	{
		128,
		128,
		128,
	},
	{
		128,
		128,
		128,
	},
};
code BYTE stCtBaseDvi[_CT_TYPE_DVI_TOTAL][3] =
{
	{
		128,
		128,
		128,
	},
	{
		128,
		128,
		128,
	},
	{
		128,
		128,
		128,
	},
};
//20070329, VGA color temp
code BYTE stCtBaseVga[_CT_TYPE_TOTAL][3] =
{
	{
		128,
		128,
		128,
	},
	{
		128,
		128,
		128,
	},
	{
		128,
		128,
		128,
	},
	{
		128,
		128,
		128,
	},
};


/*
code BYTE stCtBaseAv[_CT_TYPE_VIDEO_TOTAL][3] =
{
	{
		114,
		121,
		122,
	},
	{
		124,
		121,
		119,
	},
	{
		120,
		121,
		104,
	},
};
code BYTE stCtBaseDvi[_CT_TYPE_DVI_TOTAL][3] =
{
	{
		114,
		121,
		122,
	},
	{
		124,
		121,
		119,
	},
	{
		120,
		121,
		104,
	},
};
//20070329, VGA color temp
code BYTE stCtBaseVga[_CT_TYPE_TOTAL][3] =
{
	{
		114,
		121,
		122,
	},
	{
		124,
		121,
		119,
	},
	{
		120,
		121,
		104,
	},
	{	
		128,
		128,
		128,
	},
};
*/
void CAdjustContrast(void)
{
	UINT8 value,cnt;
	UINT16 colortemp;

	value = COsdCtrlGetContrast();
	
	//DebugPrintf("\nvalue=%d\n", value);

	//DVI Luminance is low
	//if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_DVI_PORT)
	//	value+=10;
	
	//DebugPrintf("\GET_COLOR_TEMP_TYPE():%d\n", GET_COLOR_TEMP_TYPE());
	for(cnt=0;cnt<3;cnt++)
	{
		if (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
		{
		if(_CT_CONTRAST<=0)//modified by xyw 080303
            colortemp = stCtBaseAv[GET_COLOR_TEMP_TYPE()][cnt]-120+stColorTempData.ColorTemp[cnt]+_CT_CONTRAST;
		else
			//20080916 ccy add av contrast  50
			colortemp = stCtBaseAv[GET_COLOR_TEMP_TYPE()][cnt]-_CT_BASE_AV +50+stColorTempData.ColorTemp[cnt]+_CT_CONTRAST;
		}
		else if (GET_INPUTSOURCE_TYPE()==_SOURCE_YPBPR)
		{
			colortemp = stCtBaseAv[GET_COLOR_TEMP_TYPE()][cnt]-_CT_BASE_AV+stColorTempData.ColorTemp[cnt]+_CT_CONTRAST;
		}
		else if (GET_INPUTSOURCE_TYPE()==_SOURCE_DVI)
		{
			colortemp = stCtBaseAv[GET_COLOR_TEMP_TYPE()][cnt]-_CT_BASE_AV+stColorTempData.ColorTemp[cnt]+_CT_CONTRAST;
		}
		else
		{
		//20080924 ccy  add contrast 25 for vga mode
			colortemp = stCtBaseVga[GET_COLOR_TEMP_TYPE()][cnt]-_CT_BASE_AV+25+stColorTempData.ColorTemp[cnt]+_CT_CONTRAST;
		}
		//DebugPrintf("\cnt=%d, ", cnt);
		//DebugPrintf("\colortemp=%d, ", colortemp);
		pData[cnt] = (colortemp>255)?(255):(colortemp);
		//DebugPrintf("\pData[cnt]=%d\n", pData[cnt]);
	}

	CAdjustSetContrast();
	
#if 1//(_DEMO_MODE_SUPPORT)
	CAdjustHLWindowContrast();
#endif

}

#endif

#endif

//test highlight window
/////////////////////////////////////////////////////////
void CAdjustHLWindowHV(WORD usHPos, WORD usHWidth, WORD usVPos, WORD usVHeight)
{
    if(usHWidth == 0 || usVHeight == 0)
        return;

    CScalerSetBit(_HW_ACCESS_PORT_60, ~(_BIT7 | _BIT3 | _BIT2 | _BIT1 | _BIT0), _BIT7);

    pData[0] = ((usHPos >> 8) & 0x07);
    pData[1] = (BYTE)(usHPos);
    pData[2] = (((usHPos + usHWidth) >> 8) & 0x07);
    pData[3] = (BYTE)(usHPos + usHWidth);
    pData[4] = ((usVPos >> 8) & 0x07);
    pData[5] = (BYTE)(usVPos);
    pData[6] = (((usVPos + usVHeight) >> 8) & 0x07);
    pData[7] = (BYTE)(usVPos + usVHeight);

    CTimerWaitForEvent(_EVENT_DEN_STOP);

    CScalerWrite(_HW_DATA_PORT_61, 8, pData, _NON_AUTOINC);

    CScalerSetBit(_HW_ACCESS_PORT_60, ~(_BIT7 | _BIT3 | _BIT2 | _BIT1 | _BIT0), 0x00);
}

void CAdjustHLWindowBrightness(BYTE ucValue)
{
	pData[0] = pData[1] = pData[2] = ucValue;
	CScalerSetBit(_CB_ACCESS_PORT_64, ~(_BIT7 | _BIT3 | _BIT2 | _BIT1 | _BIT0), _BIT7 | 0x06);
	CScalerWrite(_CB_DATA_PORT_65, 3, pData, _NON_AUTOINC);
	CScalerSetByte(_CB_ACCESS_PORT_64, 0x00);
}

void CAdjustHLWindowContrast(void)
{
	CScalerSetBit(_CB_ACCESS_PORT_64, ~(_BIT7 | _BIT3 | _BIT2 | _BIT1 | _BIT0), _BIT7 | 0x09);
	CScalerWrite(_CB_DATA_PORT_65, 3, pData, _NON_AUTOINC);
	CScalerSetByte(_CB_ACCESS_PORT_64, 0x00);
}

//v306 add
void CAdjustEnableHLWindow(void)
{
	//config a window
	//CAdjustHLWindowHV(0, _DISP_WID/2, 0, _DISP_LEN/2);
	CAdjustHLWindowHV(0, 0, 0, 0);
	//set window board width
	//CScalerSetDataPortBit(_HW_ACCESS_PORT_60, 0x08, 0, 4);
	//set window board color
	//CScalerSetDataPortBit(_HW_ACCESS_PORT_60, 0x09, 0, 0x20);
	//CScalerSetDataPortBit(_HW_ACCESS_PORT_60, 0x0a, 0, 0);
	//CScalerSetDataPortBit(_HW_ACCESS_PORT_60, 0x0b, 0, 0);
	//set B is out of Highlight window
	CScalerSetDataPortBit(_HW_ACCESS_PORT_60, 0x0c, ~(_BIT7 | _BIT6 | _BIT3 | _BIT2), _BIT7 | _BIT6);
	//Enable Highlight window
	CScalerSetBit(_HW_ACCESS_PORT_60, ~_BIT6, _BIT6);
}

/////////////////////////////////////////////////////////

/**
 *
 * @}
 */

