/**
 * Retrieve the gain calibration value for the specified sampling parameters.
 *
 * @param rate ADS1256_SPS_t The sample rate to lookup for.
 * @param gain ADS1256_PGA_t The gain to lookup for.
 * @param buffer ADS1256_BUFFER_t The buffer setting to lookup for.
 * @param temperature float The temperature value to lookup for.
 * @retval The determined calibration value.
 */
uint32_t Tekdaqc_GetGainCalibration(ADS1256_SPS_t rate, ADS1256_PGA_t gain, ADS1256_BUFFER_t buffer, float temperature) {
	uint8_t rate_index = 0U;
	uint8_t gain_index = 0U;
	uint8_t buffer_index = 0U;
	ComputeTableIndices(&rate_index, &gain_index, &buffer_index, rate, gain, buffer);
	uint32_t baseGain = baseGainCalibrations[rate_index][gain_index][buffer_index];

	if (CALIBRATION_VALID != TRUE) {
#ifdef CALIBRATION_TABLE_DEBUG
		printf("[Calibration Table] The calibration table is not valid, returning ADC calibration only (0x%" PRIX32 ").\n\r", baseGain);
#endif
		return baseGain;
	}
	if (temperature < CAL_TEMP_LOW || temperature > CAL_TEMP_HIGH) {
		/* The temperature is out of range, we will return the closest */
#ifdef CALIBRATION_TABLE_DEBUG
		printf("[Calibration Table] The requested temperature %f was out of range. Minimum is %f and maximum is %f.\n\r", temperature,
				CAL_TEMP_LOW, CAL_TEMP_HIGH);
#endif
		snprintf(TOSTRING_BUFFER, sizeof(TOSTRING_BUFFER),
				"Error fetching the gain calibration value for temperature: %f Deg C. Temperature out of range. Allowable range is %f to %f Deg C",
				temperature, CAL_TEMP_LOW, CAL_TEMP_HIGH);
		TelnetWriteErrorMessage(TOSTRING_BUFFER);
		if (temperature < CAL_TEMP_LOW) {
			temperature = CAL_TEMP_LOW;
		} else {
			temperature = CAL_TEMP_HIGH;
		}
	}

	uint8_t num_temp_steps = (uint8_t) (temperature / CAL_TEMP_STEP);
	float low_temp = CAL_TEMP_LOW * num_temp_steps;
	float high_temp = CAL_TEMP_HIGH * num_temp_steps;
	float factor = (temperature - CAL_TEMP_LOW) / CAL_TEMP_STEP;

	uint32_t offset = ComputeOffset(rate, gain, buffer, low_temp);                                                                                                                                            //Add one for the move to gain
	uint32_t Address = CAL_DATA_START_ADDR + 4 * offset;                                                                                                                                            //Multiply offset by 4 because entries are 4bytes long

	uint32_t data_low = (*(__IO uint32_t*) Address);

	offset = ComputeOffset(rate, gain, buffer, high_temp);                                                                                                                                            //Add one for the move to gain
	Address = CAL_DATA_START_ADDR + 4 * offset;                                                                                                                                            //Multiply offset by 4 because entries are 4bytes long

	uint32_t data_high = (*(__IO uint32_t*) Address);
	return (baseGain + InterpolateValue(data_low, data_high, factor));
}
ER ipe_IQparam(UINT32 ParamMode, IPE_IQINFO *IQInfo)
{
    UINT32 ISO_Value = GetISOIdx();
    INT16 SatOfs;
    //#NT#2011/11/17#Ethan Lau -begin
    //#NT#cause 220 ife have no rounding,always have truncation error
    memcpy(&IQ_ColorEffectTable, &(ColorEffectTable[gImageAlgInfo.ImageEffect]), sizeof(IPE_COLOR_EFFECT_PARAM));
    IQ_ColorEffectTable.CbOfs += IfeCCOft(ParamMode, ISO_Value);
    IQ_ColorEffectTable.CrOfs += IfeCCOft(ParamMode, ISO_Value);
    //#NT#2011/11/17#Ethan Lau -end
    switch(ParamMode)
    {
        case IPE_PRV_SETTING :
        case IPE_CAP_SETTING :
            IQInfo->FuncUpdateSel = IPE_FUNC_SET;

            IQInfo->FuncSel =   IPE_NR_EN |
                                IPE_RLPF_EN |
                                IPE_GLPF_EN |
                                IPE_BLPF_EN |
                                IPE_CCR_EN |
                                IPE_CTRL_EN |
                                IPE_HADJ_EN |
                                IPE_CADJ_EN |
                                IPE_CADJ_YENH_EN |
                                IPE_CADJ_YCON_EN |
                                IPE_CADJ_CCON_EN |
                                IPE_CADJ_CLPF_EN;

            IQInfo->ParamUpdateSel =  IPE_SET_NR |
                                      IPE_SET_EDGE |
                                      IPE_SET_COLOR_GAIN |
                                      IPE_SET_COLOR |
                                      IPE_SET_COLOREFFECT
                                      ;

            memcpy(&IQ_IPE_EdgeParam, IPE_ISOParam[ISO_Value].EdgeParamSel, sizeof(STR_IPE_EDGE_ENHMAP_PARA));

            IQInfo->EDGE_PARAM = &IQ_IPE_EdgeParam;
            IQInfo->NR_PARAM = IPE_ISOParam[ISO_Value].NRParamSel;
            IQInfo->EdgeKerDiv = IPE_ISOParam[ISO_Value].EdgeKerDivSel;
            IQInfo->Estab = IPE_ISOParam[ISO_Value].EstabSel;
            IQInfo->FStab = IPE_ISOParam[ISO_Value].FStabSel;
            IQInfo->FDtab = IPE_ISOParam[ISO_Value].FDtabSel;

            IQInfo->COLOR_EFFECT_PARAM = &IQ_ColorEffectTable;//&ColorEffectTable[gImageAlgInfo.ImageEffect];

            IQInfo->HueTab = IPE_hueTab;
            IQInfo->SatTab = IPE_satTab;
            IQInfo->IntTab = IPE_intTab;
            IQInfo->DDSTab = IPE_ddsTab;

            IQInfo->COLOR_PARAM.ColorGain.ChR = 256;
            IQInfo->COLOR_PARAM.ColorGain.ChGr = 256;
            IQInfo->COLOR_PARAM.ColorGain.ChGb = 256;
            IQInfo->COLOR_PARAM.ColorGain.ChB = 256;

            #if (IPE_CC_TYPE == INDENITY_CC)
            IQInfo->COLOR_PARAM.ColorCorrect=Indenity_CC;
            #else
            IQInfo->COLOR_PARAM.ColorCorrect=Normal_CC;
            #endif
            IQInfo->COLOR_PARAM.ColorSupWeight= 42;//42;

            IQInfo->EDGE_PARAM->EdgEnhanceP = (IQInfo->EDGE_PARAM->EdgEnhanceP * Sharpness[ISO_Value][gImageAlgInfo.Sharpness])>>6;
            IQInfo->EDGE_PARAM->EdgEnhanceN = (IQInfo->EDGE_PARAM->EdgEnhanceN * Sharpness[ISO_Value][gImageAlgInfo.Sharpness])>>6;
            IQInfo->COLOR_EFFECT_PARAM->SatOfs= Saturation[ISO_Value][gImageAlgInfo.Saturation];//adpk have no saturation

#if 0
            //Image Effect Capture IPE parameter
            if ( IE_GetCapStatus() == TRUE )
            {
                switch ( IE_GetCapIndex() )
                {
                    case IE_INDEX_ARF_PopArt:
                    {
                        IQInfo->FuncSel |= (IPE_CADJ_EN | IPE_CADJ_CCON_EN);
                        IQInfo->COLOR_EFFECT_PARAM = &IPE_ColorEffect_PopArt[ISO_Value];
                        IQInfo->HueTab = NULL;
                        IQInfo->SatTab = NULL;
                        IQInfo->IntTab = NULL;
                        IQInfo->DDSTab = NULL;
                    }
                    break;

                    case IE_INDEX_ARF_Sketch:
                    {
                        //IQInfo->FuncSel |= (IPE_CADJ_EN | IPE_YCTH_EN | IPE_CADJ_YENH_EN);

                        //IQInfo->YCFIX_EFFECT_PARAM = &IPE_YCFixEffect_Sketch[ISO_Value];
                        //IQInfo->EDGE_EFFECT_PARAM = &IPE_EdgeEffect_Sketch[ISO_Value];
                        //IQInfo->EDGE_PARAM = &IPE_EdgeParam_Sketch[ISO_Value];
                    }
                    break;

                    case IE_INDEX_ARF_ToyPhoto:
                    case IE_INDEX_ARF_FishEye:
                    case IE_INDEX_ARF_FantasticFocus:
                    case IE_INDEX_ARF_RoughMonoChorme:
                    break;
                }
            }
#endif
        break;
        case IPE_PRV_AE_SETTING :
            IQInfo->FuncUpdateSel = IPE_FUNC_NOUPDATE;
            //IQInfo->ParamUpdateSel = IPE_SET_NR | IPE_SET_EDGE | IPE_SET_COLOR;
            IQInfo->ParamUpdateSel = IPE_SET_NR | IPE_SET_EDGE | IPE_SET_COLOR|IPE_SET_COLOREFFECT;


            memcpy(&IQ_IPE_EdgeParam, IPE_ISOParam[ISO_Value].EdgeParamSel, sizeof(STR_IPE_EDGE_ENHMAP_PARA));

            IQInfo->EDGE_PARAM = &IQ_IPE_EdgeParam;
            IQInfo->NR_PARAM = IPE_ISOParam[ISO_Value].NRParamSel;

            //IQInfo->EDGE_PARAM = IPE_ISOParam[ISO_Value].EdgeParamSel;
            IQInfo->EdgeKerDiv = IPE_ISOParam[ISO_Value].EdgeKerDivSel;
            IQInfo->Estab = IPE_ISOParam[ISO_Value].EstabSel;
            IQInfo->FStab = IPE_ISOParam[ISO_Value].FStabSel;
            IQInfo->FDtab = IPE_ISOParam[ISO_Value].FDtabSel;

            IQInfo->COLOR_EFFECT_PARAM = &IQ_ColorEffectTable; //&ColorEffectTable[gImageAlgInfo.ImageEffect];
            #if (IPE_CC_TYPE == INDENITY_CC)
            IQInfo->COLOR_PARAM.ColorCorrect=Indenity_CC;
            #else
            IQInfo->COLOR_PARAM.ColorCorrect=Normal_CC;
            #endif
            IQInfo->COLOR_PARAM.ColorSupWeight=42;//42;

            IQInfo->EDGE_PARAM->EdgEnhanceP = (IQInfo->EDGE_PARAM->EdgEnhanceP * Sharpness[ISO_Value][gImageAlgInfo.Sharpness])>>6;
            IQInfo->EDGE_PARAM->EdgEnhanceN = (IQInfo->EDGE_PARAM->EdgEnhanceN * Sharpness[ISO_Value][gImageAlgInfo.Sharpness])>>6;
            //IQInfo->COLOR_EFFECT_PARAM->SatOfs= Saturation[ISO_Value][gImageAlgInfo.Saturation];adpk have no saturation

            IQInfo->HueTab = IPE_hueTab;
            IQInfo->SatTab = IPE_satTab;
            IQInfo->IntTab = IPE_intTab;
            IQInfo->DDSTab = IPE_ddsTab;

            SatOfs = (INT16)(-InterpolateValue(AEAlg_GetPrvEVValue(), 64, 0, 640, 2560));
            IQ_ColorEffectTable.SatOfs += SatOfs;

	     SatOfs = (INT16)(-InterpolateValue(AEAlg_GetPrvEVValue(), 5, 0, 640, 2560));
           IQ_ColorEffectTable.SatOfs += SatOfs;
        break;
        case IPE_PRV_AF_SETTING :
            IQInfo->FuncUpdateSel = IPE_FUNC_SET;
            IQInfo->FuncSel |= IPE_VACC_EN;

            IQInfo->ParamUpdateSel = IPE_SET_EDGE | IPE_SET_VA;

            IQInfo->EdgeKerDiv = IPE_AFedgeKernelDiv;
        break;
        case IPE_COLOREFFECT:
            if ( Is_AELock() == TRUE )
            {
                IQInfo->FuncUpdateSel = IPE_FUNC_NOUPDATE;
                IQInfo->ParamUpdateSel = IPE_SET_COLOREFFECT;
                //#NT#2011/09/08#Ethan Lau -begin
                //#NT#avoid to re-config  ColorEffectTable
                IQInfo->COLOR_EFFECT_PARAM = &IQ_ColorEffectTable;
                //#NT#2011/09/08#Ethan Lau -end
                IQInfo->HueTab = IPE_hueTab;
                IQInfo->SatTab = IPE_satTab;
                IQInfo->IntTab = IPE_intTab;
                IQInfo->DDSTab = IPE_ddsTab;
            }
            break;
        case IPE_SHARPNESS:
            if ( Is_AELock() == TRUE )
            {
                IQInfo->FuncUpdateSel = IPE_FUNC_NOUPDATE;
                IQInfo->ParamUpdateSel = IPE_SET_EDGE;
                //#NT#2011/09/08#Ethan Lau -begin
                //#NT#avoid to config dram addr : 0x0
                memcpy(&IQ_IPE_EdgeParam, IPE_ISOParam[ISO_Value].EdgeParamSel, sizeof(STR_IPE_EDGE_ENHMAP_PARA));
                IQInfo->EDGE_PARAM = &IQ_IPE_EdgeParam;
                //#NT#2011/09/08#Ethan Lau -end
                IQInfo->EDGE_PARAM->EdgEnhanceP = (IQInfo->EDGE_PARAM->EdgEnhanceP * Sharpness[ISO_Value][gImageAlgInfo.Sharpness])>>6;
                IQInfo->EDGE_PARAM->EdgEnhanceN = (IQInfo->EDGE_PARAM->EdgEnhanceN * Sharpness[ISO_Value][gImageAlgInfo.Sharpness])>>6;
                IQInfo->EdgeKerDiv = NULL;
                IQInfo->Estab = NULL;
            }
            break;
        case IPE_SATURATION:
            if ( Is_AELock() == TRUE )
            {
                IQInfo->FuncUpdateSel = IPE_FUNC_NOUPDATE;
                IQInfo->ParamUpdateSel = IPE_SET_COLOREFFECT;
                //#NT#2011/09/08#Ethan Lau -begin
                //#NT#avoid to re-config the satofs configed by ColorEffectTable
                IQInfo->COLOR_EFFECT_PARAM = &IQ_ColorEffectTable;
                IQInfo->COLOR_EFFECT_PARAM->SatOfs += Saturation[ISO_Value][gImageAlgInfo.Saturation];
                //#NT#2011/09/08#Ethan Lau -end
                IQInfo->HueTab = IPE_hueTab;
                IQInfo->SatTab = IPE_satTab;
                IQInfo->IntTab = IPE_intTab;
                IQInfo->DDSTab = IPE_ddsTab;
            }
            break;
        default :
            debug_err(("ipe_IQparam() param mode(%d) selection error!\r\n",ParamMode));
            return E_SYS;
        break;
    }
ER ipe_IQparam(UINT32 ParamMode, IPE_IQINFO *IQInfo)
{
    IPE_ISONumEnum ISO_Value;
    UINT32 ratio;
//#NT#20091123#ethanlau -begin
    UINT32 *LinearItpl_rbw,*LinearItpl_gw,up,low;
    BOOL bInterpolation = FALSE;
    PImageAlgInfo pimginfo;
    pimginfo = UI_GetParameter();
    if(!Firstflag)
    {
#if 0
        LinearItpl_RBW_0 = IPE_ISOParam[ISONUM0].NRParamSel->RBW;
        LinearItpl_GW_0 = IPE_ISOParam[ISONUM0].NRParamSel->GW;
        LinearItpl_RBW_1 = IPE_ISOParam[ISONUM1].NRParamSel->RBW;
        LinearItpl_GW_1 = IPE_ISOParam[ISONUM1].NRParamSel->GW;
        LinearItpl_RBW_2 = IPE_ISOParam[ISONUM2].NRParamSel->RBW;
        LinearItpl_GW_2 = IPE_ISOParam[ISONUM2].NRParamSel->GW;
        Firstflag = TRUE;
#endif
    }

    ISO_Value = GetISOIdx(0);
    //debug_err(("ISO_Value = %d\r\n", ISO_Value));
//#NT#20091123#ethanlau -end
    switch(ParamMode)
    {
//#NT#2009/06/29#Jarkko Chang -begin
//#NT#prepare for 96630 preview using
        case IPE_PRV_SETTING :
            IQInfo->FuncUpdateSel = IPE_FUNC_SET;
                        IQInfo->FuncSel = IPE_RLPF_EN |
                                         IPE_GLPF_EN |
                                         IPE_BLPF_EN |
                                         IPE_CCR_EN |
                                         IPE_CTRL_EN |
                                         IPE_HADJ_EN |
                                         IPE_CADJ_EN |
                                         IPE_CADJ_YENH_EN |
                                         IPE_CADJ_YCON_EN |
                                         IPE_CADJ_CCON_EN |
                                         IPE_CADJ_CLPF_EN |
                                         IPE_NR_EN;


            //#NT#2010/01/08#YH Lee -begin
            //#NT# Mod param update select, only used functions are updated
            //IQInfo->ParamUpdateSel = IPE_SET_ALL&~IPE_SET_GAMMA;
            //IQInfo->ParamUpdateSel = IPE_SET_ALL;
            IQInfo->ParamUpdateSel = IPE_SET_NR |
                                                      IPE_SET_EDGE |
                                                      IPE_SET_COLOR_GAIN |
                                                      IPE_SET_COLOR |
                                                      IPE_SET_COLOREFFECT;
            //#NT#2010/01/08#YH Lee -end
//#NT#2009/08/31#Jarkko Chang -end
            IQInfo->GammaLut[IPE_R_CHANNEL] = GammaLUT_128Tab;
            IQInfo->GammaLut[IPE_G_CHANNEL] = GammaLUT_128Tab;
            IQInfo->GammaLut[IPE_B_CHANNEL] = GammaLUT_128Tab;

            IQInfo->NR_PARAM = IPE_ISOParam[ISO_Value].NRParamSel;
            IQInfo->NRStab = IPE_ISOParam[ISO_Value].NRStabSel;
            IQInfo->NRDtab = IPE_ISOParam[ISO_Value].NRDtabSel;

            IQInfo->EDGE_PARAM = IPE_ISOParam[ISO_Value].EdgeParamSel;
            //#NT#20091127#ethanlau -begin
            IQInfo->EDGE_PARAM->EdgEnhance = Sharpness[ISO_Value][pimginfo->Sharpness];
            //#NT#20091127#ethanlau -end
            IQInfo->EdgeKerH = IPE_ISOParam[ISO_Value].EdgeKerDivSel;
            IQInfo->EdgeKerV = IPE_ISOParam[ISO_Value].EdgeKerDivSel;
            IQInfo->Emap = IPE_ISOParam[ISO_Value].EmapSel;
            IQInfo->Estab = IPE_ISOParam[ISO_Value].EstabSel;

            IQInfo->FStab = IPE_ISOParam[ISO_Value].FStabSel;
            IQInfo->FDtab = IPE_ISOParam[ISO_Value].FDtabSel;

            IQInfo->COLOR_EFFECT_PARAM = &ColorEffectTable[pimginfo->ImageEffect];
             //#NT#20091127#ethanlau -begin
            //IQInfo->COLOR_EFFECT_PARAM->SatOfs= Saturation[pimginfo->Saturation];
            //#NT#20091127#ethanlau -end
            //#NT#2011/09/30#Spark Chou -begin
            //#NT#
            IQInfo->COLOR_EFFECT_PARAM->SatOfs = InterpolateValue(AE_Param.ISO_Gain,0, IQ_SATOFS_HIGHISO, IQ_ITPL_STARTHISO, IQ_ITPL_ENDISO);
            IQInfo->COLOR_EFFECT_PARAM->IntOfs = InterpolateValue(AE_Param.ISO_Gain, 0, IQ_INTOFS_HIGHISO, IQ_ITPL_STARTHISO, IQ_ITPL_ENDISO);
            IQInfo->COLOR_EFFECT_PARAM->CCon = InterpolateValue(AE_Param.ISO_Gain, 128, IQ_CCON_HIGHISO, IQ_ITPL_STARTHISO, IQ_ITPL_ENDISO);
            IQInfo->COLOR_EFFECT_PARAM->YCon = InterpolateValue(AE_Param.ISO_Gain, 128, IQ_YCON_HIGHISO, IQ_ITPL_STARTHISO, IQ_ITPL_ENDISO);
            //debug_err(("^RIntOfs=%d CCon=%d YCon=%d\r\n", IQInfo->COLOR_EFFECT_PARAM->IntOfs, IQInfo->COLOR_EFFECT_PARAM->CCon, IQInfo->COLOR_EFFECT_PARAM->YCon));
            //#NT#2011/09/30#Spark Chou -end

             //#NT#2010/11/09#JJ Huang -begin
            IQInfo->HueTab = IPE_hueTab;
            IQInfo->SatTab = IPE_satTab;
            IQInfo->IntTab = IPE_intTab;
            IQInfo->DDSTab = IPE_ddsTab;
             //#NT#2010/11/09#JJ Huang -end

            IQInfo->COLOR_PARAM.CGRange=IPE_CG_2_8;
            IQInfo->COLOR_PARAM.ColorGain.ChR=256;
            IQInfo->COLOR_PARAM.ColorGain.ChGr=256;
            IQInfo->COLOR_PARAM.ColorGain.ChGb=256;
            IQInfo->COLOR_PARAM.ColorGain.ChB=256;
            IQInfo->COLOR_PARAM.ColorOffset.ChR=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChGr=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChGb=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChB=0;
            IQInfo->COLOR_PARAM.ColorCorrect=Normal_CC;
//#NT#2011/01/27#JJ Huang -begin
            IQInfo->COLOR_PARAM.ColorSupWeight=33;//22;
//#NT#2011/01/27#JJ Huang -end
//#NT#2011/10/05#Spark Chou -begin
//#NT#
            gDynaGammaSetting = TRUE;
//#NT#2011/10/05#Spark Chou -end
        break;
//#NT#2009/06/29#Jarkko Chang -end

        case IPE_CAP_SETTING :
        case IPE_D2D_SETTING :
            IQInfo->FuncUpdateSel = IPE_FUNC_SET;

            IQInfo->FuncSel = IPE_RLPF_EN |
                                         IPE_GLPF_EN |
                                         IPE_BLPF_EN |
                                         IPE_CCR_EN |
                                         IPE_CTRL_EN |
                                         IPE_HADJ_EN |
                                         IPE_CADJ_EN |
                                         IPE_CADJ_YENH_EN |
                                         IPE_CADJ_YCON_EN |
                                         IPE_CADJ_CCON_EN |
                                         IPE_CADJ_CLPF_EN |
                                         IPE_NR_EN ;
            //#NT#2010/01/08#YH Lee -begin
            //#NT# Mod param update select, only used functions are updated
            //IQInfo->ParamUpdateSel = IPE_SET_ALL&~IPE_SET_GAMMA;
            //IQInfo->ParamUpdateSel = IPE_SET_ALL;
            IQInfo->ParamUpdateSel = IPE_SET_NR |
                                                      IPE_SET_EDGE |
                                                      IPE_SET_COLOR_GAIN |
                                                      IPE_SET_COLOR |
                                                      IPE_SET_COLOREFFECT;
            //#NT#2010/01/08#YH Lee -end
//#NT#2009/08/31#Jarkko Chang -end
            IQInfo->GammaLut[IPE_R_CHANNEL] = GammaLUT_128Tab;
            IQInfo->GammaLut[IPE_G_CHANNEL] = GammaLUT_128Tab;
            IQInfo->GammaLut[IPE_B_CHANNEL] = GammaLUT_128Tab;

            IQInfo->NR_PARAM = IPE_ISOParam[ISO_Value].NRParamSel;
            IQInfo->NRStab = IPE_ISOParam[ISO_Value].NRStabSel;
            IQInfo->NRDtab = IPE_ISOParam[ISO_Value].NRDtabSel;

            IQInfo->EDGE_PARAM = IPE_ISOParam[ISO_Value].EdgeParamSel;
            //#NT#20091127#ethanlau -begin
            IQInfo->EDGE_PARAM->EdgEnhance = Sharpness[ISO_Value][pimginfo->Sharpness];
            //#NT#20091127#ethanlau -end
            IQInfo->EdgeKerH = IPE_ISOParam[ISO_Value].EdgeKerDivSel;
            IQInfo->EdgeKerV = IPE_ISOParam[ISO_Value].EdgeKerDivSel;
            IQInfo->Emap = IPE_ISOParam[ISO_Value].EmapSel;
            IQInfo->Estab = IPE_ISOParam[ISO_Value].EstabSel;

            IQInfo->FStab = IPE_ISOParam[ISO_Value].FStabSel;
            IQInfo->FDtab = IPE_ISOParam[ISO_Value].FDtabSel;

            IQInfo->COLOR_EFFECT_PARAM = &ColorEffectTable[pimginfo->ImageEffect];
            //#NT#20091127#ethanlau -begin
            //IQInfo->COLOR_EFFECT_PARAM->SatOfs= Saturation[pimginfo->Saturation];
            //#NT#20091127#ethanlau -end

             //#NT#2010/11/09#JJ Huang -begin
            IQInfo->HueTab = IPE_hueTab;
            IQInfo->SatTab = IPE_satTab;
            IQInfo->IntTab = IPE_intTab;
            IQInfo->DDSTab = IPE_ddsTab;
             //#NT#2010/11/09#JJ Huang -end

            IQInfo->COLOR_PARAM.CGRange=IPE_CG_2_8;
            IQInfo->COLOR_PARAM.ColorGain.ChR=256;
            IQInfo->COLOR_PARAM.ColorGain.ChGr=256;
            IQInfo->COLOR_PARAM.ColorGain.ChGb=256;
            IQInfo->COLOR_PARAM.ColorGain.ChB=256;
            IQInfo->COLOR_PARAM.ColorOffset.ChR=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChGr=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChGb=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChB=0;
            IQInfo->COLOR_PARAM.ColorCorrect=Normal_CC;
//#NT#2011/01/27#JJ Huang -begin
            IQInfo->COLOR_PARAM.ColorSupWeight=33;//22;
//#NT#2011/01/27#JJ Huang -end
        break;
        case IPE_PRV_AE_SETTING :
            IQInfo->FuncUpdateSel = IPE_FUNC_NOUPDATE;

            IQInfo->ParamUpdateSel = IPE_SET_NR | IPE_SET_EDGE | IPE_SET_COLOR | IPE_SET_COLOREFFECT;
            IQInfo->NR_PARAM = IPE_ISOParam[ISO_Value].NRParamSel;

//#NT#20091123#ethanlau -end
            IQInfo->NRStab = IPE_ISOParam[ISO_Value].NRStabSel;
            IQInfo->NRDtab = IPE_ISOParam[ISO_Value].NRDtabSel;

            IQInfo->EDGE_PARAM = IPE_ISOParam[ISO_Value].EdgeParamSel;
            //#NT#20091127#ethanlau -begin
            IQInfo->EDGE_PARAM->EdgEnhance = Sharpness[ISO_Value][pimginfo->Sharpness];
            if ( AE_Param.ISO_Gain > 1600 )
                IQInfo->EDGE_PARAM->EdgEnhance = Sharpness[ISO_Value][pimginfo->Sharpness]>>1;

                //debug_err(("pimginfo->Sharpness = %d\r\n", pimginfo->Sharpness));

            //#NT#20091127#ethanlau -end
            //#NT#2010/09/17#ethanlau -begin
            IQInfo->COLOR_EFFECT_PARAM = &ColorEffectTable[pimginfo->ImageEffect];
            IQInfo->COLOR_EFFECT_PARAM->SatOfs= Saturation[pimginfo->Saturation];
            //#NT#2010/09/17#ethanlau -end

//#NT#2011/09/30#Spark Chou -begin
//#NT
            IQInfo->COLOR_EFFECT_PARAM->SatOfs = InterpolateValue(AE_Param.ISO_Gain,0, IQ_SATOFS_HIGHISO, IQ_ITPL_STARTHISO, IQ_ITPL_ENDISO);
            IQInfo->COLOR_EFFECT_PARAM->IntOfs = InterpolateValue(AE_Param.ISO_Gain, 0, IQ_INTOFS_HIGHISO, IQ_ITPL_STARTHISO, IQ_ITPL_ENDISO);
            IQInfo->COLOR_EFFECT_PARAM->CCon = InterpolateValue(AE_Param.ISO_Gain, 128, IQ_CCON_HIGHISO, IQ_ITPL_STARTHISO, IQ_ITPL_ENDISO);
            IQInfo->COLOR_EFFECT_PARAM->YCon = InterpolateValue(AE_Param.ISO_Gain, 128, IQ_YCON_HIGHISO, IQ_ITPL_STARTHISO, IQ_ITPL_ENDISO);
            //debug_err(("^RIntOfs=%d CCon=%d YCon=%d\r\n", IQInfo->COLOR_EFFECT_PARAM->IntOfs, IQInfo->COLOR_EFFECT_PARAM->CCon, IQInfo->COLOR_EFFECT_PARAM->YCon));
//#NT#2011/09/30#Spark Chou -end
            IQInfo->EdgeKerH = IPE_ISOParam[ISO_Value].EdgeKerDivSel;
            IQInfo->EdgeKerV = IPE_ISOParam[ISO_Value].EdgeKerDivSel;
            IQInfo->Emap = IPE_ISOParam[ISO_Value].EmapSel;
            IQInfo->Estab = IPE_ISOParam[ISO_Value].EstabSel;

            IQInfo->FStab = IPE_ISOParam[ISO_Value].FStabSel;
            IQInfo->FDtab = IPE_ISOParam[ISO_Value].FDtabSel;

            IQInfo->COLOR_PARAM.ColorOffset.ChR=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChGr=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChGb=0;
            IQInfo->COLOR_PARAM.ColorOffset.ChB=0;
            IQInfo->COLOR_PARAM.ColorGain.ChR=256;
            IQInfo->COLOR_PARAM.ColorGain.ChGr=256;
            IQInfo->COLOR_PARAM.ColorGain.ChGb=256;
            IQInfo->COLOR_PARAM.ColorGain.ChB=256;
            IQInfo->COLOR_PARAM.ColorCorrect=Normal_CC;
//#NT#2011/01/27#JJ Huang -begin
            IQInfo->COLOR_PARAM.ColorSupWeight=33;//22;
//#NT#2011/01/27#JJ Huang -end
            //#NT#2011/03/02#ethanlau -begin
            //#NT#add for dis
            if(dis_isEnabled())
            {
                IQInfo->EdgeKerH = &DIS_Ker;
                IQInfo->EdgeKerV = &DIS_Ker;
                IQInfo->ETH_PARAM = &DIS_EthParam;
                IQInfo->FuncUpdateSel = IPE_FUNC_ENABLE;
                IQInfo->FuncSel |= IPE_EDGETH_EN;
                IQInfo->ParamUpdateSel |= IPE_SET_ETH;
            }
            //#NT#2011/03/02#ethanlau -end
        break;
        case IPE_PRV_AF_SETTING :
//#NT#2010/11/01#Jarkko Chang -begin
            IQInfo->FuncUpdateSel = IPE_FUNC_ENABLE;
//#NT#2010/11/01#Jarkko Chang -end
            IQInfo->FuncSel |= IPE_VACC_EN;

            IQInfo->ParamUpdateSel = IPE_SET_EDGE | IPE_SET_VA;

            IQInfo->EdgeKerH = IPE_AFedgeKernelDiv;
            IQInfo->EdgeKerV = IPE_AFedgeKernelDiv;
        break;
        default :
            debug_err(("ipe_IQparam() param mode selection error!\r\n"));
            return E_SYS;
        break;
    }
    //Move Gamma setting out from IPE driver
    if(IQInfo->ParamUpdateSel & IPE_SET_GAMMA)
    {
        CPU_WriteGammaTab(IQInfo->GammaLut[IPE_R_CHANNEL], IQInfo->GammaLut[IPE_G_CHANNEL], IQInfo->GammaLut[IPE_B_CHANNEL]);
    }
    return E_OK;
}
Пример #4
0
void Controller::Update()
{
    uint32 i;
	FadeState *pState;
	float curTime, t;

	if(m_bFirstUpdate)
	{
		FirstUpdate();
        m_bFirstUpdate = LTFALSE;
	}

	if(m_State == CState_Fade)
	{
		// Find out if we're even interpolating.
        curTime = g_pLTServer->GetTime();
		if(curTime > (m_fStartTime + m_fDuration))
		{

			for(i=0; i < MAX_CONTROLLER_TARGETS; i++)
			{
				pState = &m_Fades[i];

				if(!pState->m_hTarget)
					continue;

				InterpolateValue(pState, 1.0f);
			}

			return;
		}

		t = (curTime - m_fStartTime) / m_fDuration;
		t = GetWaveFn(m_WaveType)(t); // Apply wave function.

		for(i=0; i < MAX_CONTROLLER_TARGETS; i++)
		{
			pState = &m_Fades[i];

			if(!pState->m_hTarget)
				continue;

			InterpolateValue(pState, t);
		}

		Activate();
	}
	else if(m_State == CState_Flicker)
	{
        if(g_pLTServer->GetTime() > m_fNextFlickerTime)
		{
			// Send the message.
			for(i=0; i < MAX_CONTROLLER_TARGETS; i++)
			{
				pState = &m_Fades[i];

				if(!pState->m_hTarget)
					continue;

                SendTriggerMsgToObject(this, pState->m_hTarget, LTFALSE, m_FlickerMsg);
			}

			// Go again?
			if(m_FlickerCounter != FLICKER_FOREVER)
				--m_FlickerCounter;

			if(m_FlickerCounter == 0)
				HandleOffCommand(CParsedMsg());

            m_fNextFlickerTime = g_pLTServer->GetTime() + GetRandom(m_fIntervalMin, m_fIntervalMax);
		}

		Activate();
	}
	else
	{
		Deactivate();
	}
}