#include "rk_aiq_types_algo_agic_prvt.h" XCamReturn AgicInit ( AgicContext_t *pAgicCtx, CamCalibDbV2Context_t* calib ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); if(pAgicCtx == NULL) { LOGE_AGIC("%s(%d): null pointer\n", __FUNCTION__, __LINE__); return XCAM_RETURN_ERROR_PARAM; } memset(pAgicCtx, 0, sizeof(AgicContext_t)); pAgicCtx->state = AGIC_STATE_INITIALIZED; if(CHECK_ISP_HW_V20()) { CalibDbV2_Gic_V20_t* calibv2_agic_calib_V20 = (CalibDbV2_Gic_V20_t*)(CALIBDBV2_GET_MODULE_PTR(calib, agic_calib_v20)); pAgicCtx->full_param.gic_v20 = calibv2_agic_calib_V20; } else if(CHECK_ISP_HW_V21()) { CalibDbV2_Gic_V21_t* calibv2_agic_calib_V21 = (CalibDbV2_Gic_V21_t*)(CALIBDBV2_GET_MODULE_PTR(calib, agic_calib_v21)); pAgicCtx->full_param.gic_v21 = calibv2_agic_calib_V21; } pAgicCtx->calib_changed = true; pAgicCtx->state = AGIC_STATE_RUNNING; LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); return XCAM_RETURN_NO_ERROR; } XCamReturn AgicRelease ( AgicContext_t *pAgicCtx ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); if(pAgicCtx == NULL) { LOGE_AGIC("%s(%d): null pointer\n", __FUNCTION__, __LINE__); return XCAM_RETURN_ERROR_PARAM; } AgicStop(pAgicCtx); LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); return XCAM_RETURN_NO_ERROR; } XCamReturn AgicStop ( AgicContext_t *pAgicCtx ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); if(pAgicCtx == NULL) { LOGE_AGIC("%s(%d): null pointer\n", __FUNCTION__, __LINE__); return XCAM_RETURN_ERROR_PARAM; } pAgicCtx->state = AGIC_STATE_STOPPED; LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); return XCAM_RETURN_NO_ERROR; } XCamReturn AgicPreProcess(AgicContext_t *pAgicCtx) { return XCAM_RETURN_NO_ERROR; } void AgicGetProcResultV21 ( AgicContext_t* pAgicCtx ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); pAgicCtx->ProcRes.gic_en = pAgicCtx->ConfigData.ConfigV21.gic_en == 0 ? false : true; pAgicCtx->ProcRes.ProcResV21.regmingradthrdark2 = pAgicCtx->ConfigData.ConfigV21.regmingradthrdark2; pAgicCtx->ProcRes.ProcResV21.regmingradthrdark1 = pAgicCtx->ConfigData.ConfigV21.regmingradthrdark1; pAgicCtx->ProcRes.ProcResV21.regminbusythre = pAgicCtx->ConfigData.ConfigV21.regminbusythre; pAgicCtx->ProcRes.ProcResV21.regdarkthre = pAgicCtx->ConfigData.ConfigV21.regdarkthre; pAgicCtx->ProcRes.ProcResV21.regmaxcorvboth = pAgicCtx->ConfigData.ConfigV21.regmaxcorvboth; pAgicCtx->ProcRes.ProcResV21.regdarktthrehi = pAgicCtx->ConfigData.ConfigV21.regdarktthrehi; pAgicCtx->ProcRes.ProcResV21.regkgrad2dark = (int)(log(double(pAgicCtx->ConfigData.ConfigV21.regkgrad2dark)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV21.regkgrad1dark = (int)(log(double(pAgicCtx->ConfigData.ConfigV21.regkgrad1dark)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix = (int)(pAgicCtx->ConfigData.ConfigV21.globalStrength * (1 << 7)); if (pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix > (1 << 7) - 1) pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix = 7 + 1; else pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix = int(log(double((1 << 7) - pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV21.regdarkthrestep = int(log(double(pAgicCtx->ConfigData.ConfigV21.regdarktthrehi - pAgicCtx->ConfigData.ConfigV21.regdarkthre)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV21.regkgrad2 = (int)(log(double(pAgicCtx->ConfigData.ConfigV21.regkgrad2)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV21.regkgrad1 = (int)(log(double(pAgicCtx->ConfigData.ConfigV21.regkgrad1)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV21.reggbthre = int(log(double(pAgicCtx->ConfigData.ConfigV21.reggbthre)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV21.regmaxcorv = pAgicCtx->ConfigData.ConfigV21.regmaxcorv; pAgicCtx->ProcRes.ProcResV21.regmingradthr1 = pAgicCtx->ConfigData.ConfigV21.regmingradthr1; pAgicCtx->ProcRes.ProcResV21.regmingradthr2 = pAgicCtx->ConfigData.ConfigV21.regmingradthr2; pAgicCtx->ProcRes.ProcResV21.gr_ratio = pAgicCtx->ConfigData.ConfigV21.gr_ratio; pAgicCtx->ProcRes.ProcResV21.noise_scale = (pAgicCtx->ConfigData.ConfigV21.noise_scale * 128 + 0.5); pAgicCtx->ProcRes.ProcResV21.noise_base = (int)(pAgicCtx->ConfigData.ConfigV21.noise_base * 4096 + 0.5); for (int i = 0; i < 15; i++) { pAgicCtx->ProcRes.ProcResV21.sigma_y[i] = (int)(pAgicCtx->ConfigData.ConfigV21.sigma_y[i] * (1 << 7)); } pAgicCtx->ProcRes.ProcResV21.diff_clip = pAgicCtx->ConfigData.ConfigV21.diff_clip; if (pAgicCtx->ProcRes.ProcResV21.regkgrad2dark < pAgicCtx->ProcRes.ProcResV21.regkgrad2) GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV21.regkgrad2dark, pAgicCtx->ProcRes.ProcResV21.regkgrad2); if (pAgicCtx->ProcRes.ProcResV21.regmingradthrdark1 < pAgicCtx->ProcRes.ProcResV21.regmingradthr1) GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV21.regmingradthrdark1, pAgicCtx->ProcRes.ProcResV21.regmingradthr1); if (pAgicCtx->ProcRes.ProcResV21.regmingradthrdark2 < pAgicCtx->ProcRes.ProcResV21.regmingradthr2) GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV21.regmingradthrdark2, pAgicCtx->ProcRes.ProcResV21.regmingradthr2); if (pAgicCtx->ProcRes.ProcResV21.regdarktthrehi < pAgicCtx->ProcRes.ProcResV21.regdarkthre) GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV21.regdarktthrehi, pAgicCtx->ProcRes.ProcResV21.regdarkthre); LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); } void AgicGetProcResultV20 ( AgicContext_t* pAgicCtx ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); pAgicCtx->ProcRes.gic_en = pAgicCtx->ConfigData.ConfigV20.gic_en == 0 ? false : true; pAgicCtx->ProcRes.ProcResV20.edge_open = pAgicCtx->ConfigData.ConfigV20.edge_open; pAgicCtx->ProcRes.ProcResV20.regmingradthrdark2 = pAgicCtx->ConfigData.ConfigV20.regmingradthrdark2; pAgicCtx->ProcRes.ProcResV20.regmingradthrdark1 = pAgicCtx->ConfigData.ConfigV20.regmingradthrdark1; pAgicCtx->ProcRes.ProcResV20.regminbusythre = pAgicCtx->ConfigData.ConfigV20.regminbusythre; pAgicCtx->ProcRes.ProcResV20.regdarkthre = pAgicCtx->ConfigData.ConfigV20.regdarkthre; pAgicCtx->ProcRes.ProcResV20.regmaxcorvboth = pAgicCtx->ConfigData.ConfigV20.regmaxcorvboth; pAgicCtx->ProcRes.ProcResV20.regdarktthrehi = pAgicCtx->ConfigData.ConfigV20.regdarktthrehi; pAgicCtx->ProcRes.ProcResV20.regkgrad2dark = (int)(log(double(pAgicCtx->ConfigData.ConfigV20.regkgrad2dark)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV20.regkgrad1dark = (int)(log(double(pAgicCtx->ConfigData.ConfigV20.regkgrad1dark)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix = (int)(pAgicCtx->ConfigData.ConfigV20.globalStrength * (1 << 7)); if (pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix > (1 << 7) - 1) pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix = 7 + 1; else pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix = int(log(double((1 << 7) - pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV20.regdarkthrestep = int(log(double(pAgicCtx->ConfigData.ConfigV20.regdarktthrehi - pAgicCtx->ConfigData.ConfigV20.regdarkthre)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV20.regkgrad2 = (int)(log(double(pAgicCtx->ConfigData.ConfigV20.regkgrad2)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV20.regkgrad1 = (int)(log(double(pAgicCtx->ConfigData.ConfigV20.regkgrad1)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV20.reggbthre = int(log(double(pAgicCtx->ConfigData.ConfigV20.reggbthre)) / log((double)2) + 0.5f); pAgicCtx->ProcRes.ProcResV20.regmaxcorv = pAgicCtx->ConfigData.ConfigV20.regmaxcorv; pAgicCtx->ProcRes.ProcResV20.regmingradthr1 = pAgicCtx->ConfigData.ConfigV20.regmingradthr1; pAgicCtx->ProcRes.ProcResV20.regmingradthr2 = pAgicCtx->ConfigData.ConfigV20.regmingradthr2; pAgicCtx->ProcRes.ProcResV20.gr_ratio = pAgicCtx->ConfigData.ConfigV20.gr_ratio; pAgicCtx->ProcRes.ProcResV20.dnloscale = (int)(pAgicCtx->ConfigData.ConfigV20.dnloscale * (1 << 7)); pAgicCtx->ProcRes.ProcResV20.dnhiscale = (int)(pAgicCtx->ConfigData.ConfigV20.dnhiscale * (1 << 7)); pAgicCtx->ProcRes.ProcResV20.reglumapointsstep = pAgicCtx->ConfigData.ConfigV20.reglumapointsstep; pAgicCtx->ProcRes.ProcResV20.gvaluelimitlo = (int)pAgicCtx->ConfigData.ConfigV20.gvaluelimitlo; pAgicCtx->ProcRes.ProcResV20.gvaluelimithi = (int)pAgicCtx->ConfigData.ConfigV20.gvaluelimithi; pAgicCtx->ProcRes.ProcResV20.fusionratiohilimt1 = (int)(pAgicCtx->ConfigData.ConfigV20.fusionratiohilimt1 * (1 << 7)); pAgicCtx->ProcRes.ProcResV20.regstrength_fix = (int)(pAgicCtx->ConfigData.ConfigV20.textureStrength * (1 << 7)); for (int i = 0; i < 15; i++) { pAgicCtx->ProcRes.ProcResV20.sigma_y[i] = (int)(pAgicCtx->ConfigData.ConfigV20.sigma_y[i] * (1 << 7)); } pAgicCtx->ProcRes.ProcResV20.noise_cut_en = pAgicCtx->ConfigData.ConfigV20.noise_cut_en; pAgicCtx->ProcRes.ProcResV20.noise_coe_a = pAgicCtx->ConfigData.ConfigV20.noise_coe_a; pAgicCtx->ProcRes.ProcResV20.noise_coe_b = pAgicCtx->ConfigData.ConfigV20.noise_coe_b; pAgicCtx->ProcRes.ProcResV20.diff_clip = pAgicCtx->ConfigData.ConfigV20.diff_clip; if (pAgicCtx->ProcRes.ProcResV20.regkgrad2dark < pAgicCtx->ProcRes.ProcResV20.regkgrad2) GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV20.regkgrad2dark, pAgicCtx->ProcRes.ProcResV20.regkgrad2); if (pAgicCtx->ProcRes.ProcResV20.regmingradthrdark1 < pAgicCtx->ProcRes.ProcResV20.regmingradthr1) GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV20.regmingradthrdark1, pAgicCtx->ProcRes.ProcResV20.regmingradthr1); if (pAgicCtx->ProcRes.ProcResV20.regmingradthrdark2 < pAgicCtx->ProcRes.ProcResV20.regmingradthr2) GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV20.regmingradthrdark2, pAgicCtx->ProcRes.ProcResV20.regmingradthr2); if (pAgicCtx->ProcRes.ProcResV20.regdarktthrehi < pAgicCtx->ProcRes.ProcResV20.regdarkthre) GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV20.regdarktthrehi, pAgicCtx->ProcRes.ProcResV20.regdarkthre); LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); } void AgicProcessV20 ( AgicContext_t *pAgicCtx, int ISO ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); float ave1 = 0.0f, noiseSigma = 0.0f; short ratio = 0; short LumaPoints[] = { 0, 128, 256, 384, 512, 640, 768, 896, 1024, 1536, 2048, 2560, 3072, 3584, 4096 }; short min_busy_threHi = 0, min_busy_threLo = 0; short min_grad_thrHi = 0, min_grad_thrLo = 0, min_grad_thr2Hi = 0, min_grad_thr2Lo = 0; short k_grad1Hi = 0, k_grad1Lo = 0, k_grad2Hi = 0, k_grad2Lo = 0; short gb_threHi = 0, gb_threLo = 0, maxCorVHi = 0, maxCorVLo = 0; short maxCorVbothHi = 0, maxCorVbothLo = 0; short dark_threHi = 0, dark_threLo = 0, dark_threUpHi = 0, dark_threUpLo = 0; short k_grad1_darkHi = 0, k_grad1_darkLo = 0, k_grad2_darkHi = 0, k_grad2_darkLo = 0, min_grad_thr_dark1Hi = 0; short min_grad_thr_dark1Lo = 0, min_grad_thr_dark2Hi = 0, min_grad_thr_dark2Lo = 0; short noiseCoeaHi = 0, noiseCoeaLo = 0, noiseCoebHi = 0, noiseCoebLo = 0, diffClipHi = 0, diffClipLo = 0; float scaleHiHi = 0.0f, scaleHiLo = 0.0f; float scaleLoHi = 0.0f, scaleLoLo = 0.0f; float strengthHi = 0.0f, strengthLo = 0.0f; float strengthGlobalHi = 0.0f, strengthGlobalLo = 0.0f; float gValueLimitHiHi = 0.0f, gValueLimitHiLo = 0.0f; float gValueLimitLoHi = 0.0f, gValueLimitLoLo = 0.0f; int index, iso_hi = 0, iso_lo = 0; float pNoiseCurveGicHi_0 = 0.0f, pNoiseCurveGicHi_1 = 0.0f; float pNoiseCurveGicLo_0 = 0.0f, pNoiseCurveGicLo_1 = 0.0f; LOGI_AGIC("%s(%d): enter, ISO=%d\n", __FUNCTION__, __LINE__, ISO); if(pAgicCtx == NULL) LOGE_AGIC("%s(%d): null pointer\n", __FUNCTION__, __LINE__); if(ISO <= 50) { index = 0; ratio = 0; } else if (ISO > 12800) { index = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.ISO_len - 2; ratio = (1 << 4); } else { for (index = 0; index < (pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.ISO_len - 2); index++) { iso_lo = (int)(pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.ISO[index]); iso_hi = (int)(pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.ISO[index + 1]); LOGD_AGIC("index=%d, iso_lo=%d, iso_hi=%d\n", index, iso_lo, iso_hi); if (ISO > iso_lo && ISO <= iso_hi) { break; } } ratio = ((ISO - iso_lo) * (1 << 4)) / (iso_hi - iso_lo); } min_busy_threHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_busy_thre[index + 1]; min_busy_threLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_busy_thre[index]; min_grad_thrHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_grad_thr1[index + 1]; min_grad_thrLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_grad_thr1[index]; min_grad_thr2Hi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_grad_thr2[index + 1]; min_grad_thr2Lo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_grad_thr2[index]; k_grad1Hi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.k_grad1[index + 1]; k_grad1Lo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.k_grad1[index]; k_grad2Hi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.k_grad2[index + 1]; k_grad2Lo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.k_grad2[index]; gb_threHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.gb_thre[index + 1]; gb_threLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.gb_thre[index]; maxCorVHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.maxCorV[index + 1]; maxCorVLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.maxCorV[index]; maxCorVbothHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.maxCorVboth[index + 1]; maxCorVbothLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.maxCorVboth[index]; dark_threHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.dark_thre[index + 1]; dark_threLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.dark_thre[index]; dark_threUpHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.dark_threHi[index + 1]; dark_threUpLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.dark_threHi[index]; k_grad1_darkHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.k_grad1_dark[index + 1]; k_grad1_darkLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.k_grad1_dark[index]; k_grad2_darkHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.k_grad2_dark[index + 1]; k_grad2_darkLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.k_grad2_dark[index]; min_grad_thr_dark1Hi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_grad_thr_dark1[index + 1]; min_grad_thr_dark1Lo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_grad_thr_dark1[index]; min_grad_thr_dark2Hi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_grad_thr_dark2[index + 1]; min_grad_thr_dark2Lo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.min_grad_thr_dark2[index]; pNoiseCurveGicHi_0 = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.noiseCurve_0[index + 1]; pNoiseCurveGicLo_0 = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.noiseCurve_0[index]; pNoiseCurveGicHi_1 = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.noiseCurve_1[index + 1]; pNoiseCurveGicLo_1 = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.noiseCurve_1[index]; scaleHiHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.ScaleHi[index + 1]; scaleHiLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.ScaleHi[index]; scaleLoHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.ScaleLo[index + 1]; scaleLoLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.ScaleLo[index]; strengthHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.textureStrength[index + 1]; strengthLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.textureStrength[index]; strengthGlobalHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.globalStrength[index + 1]; strengthGlobalLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.globalStrength[index]; gValueLimitHiHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.GValueLimitHi[index + 1]; gValueLimitHiLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.GValueLimitHi[index]; gValueLimitLoHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.GValueLimitLo[index + 1]; gValueLimitLoLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.GValueLimitLo[index]; noiseCoeaHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.noise_coea[index + 1]; noiseCoeaLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.noise_coea[index]; noiseCoebHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.noise_coeb[index + 1]; noiseCoebLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.noise_coeb[index]; diffClipHi = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.diff_clip[index + 1]; diffClipLo = pAgicCtx->full_param.gic_v20->GicTuningPara.GicData.diff_clip[index]; float ratioF = ratio / 16.0f; pAgicCtx->ConfigData.ConfigV20.gic_en = pAgicCtx->full_param.gic_v20->GicTuningPara.enable ? 1 : 0; pAgicCtx->ConfigData.ConfigV20.edge_open = pAgicCtx->full_param.gic_v20->GicTuningPara.edge_en ? 1 : 0; pAgicCtx->ConfigData.ConfigV20.regmingradthrdark1 = (ratio * (min_grad_thr_dark1Hi - min_grad_thr_dark1Lo) + min_grad_thr_dark1Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regmingradthrdark2 = (ratio * (min_grad_thr_dark2Hi - min_grad_thr_dark2Lo) + min_grad_thr_dark2Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regminbusythre = (ratio * (min_busy_threHi - min_busy_threLo) + min_busy_threLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regdarkthre = (ratio * (dark_threHi - dark_threLo) + dark_threLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regmaxcorvboth = (ratio * (maxCorVbothHi - maxCorVbothLo) + maxCorVbothLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regdarktthrehi = (ratio * (dark_threUpHi - dark_threUpLo) + dark_threUpLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regkgrad2dark = (ratio * (k_grad2_darkHi - k_grad2_darkLo) + k_grad2_darkLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regkgrad1dark = (ratio * (k_grad1_darkHi - k_grad1_darkLo) + k_grad1_darkLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.globalStrength = ratioF * (strengthGlobalHi - strengthGlobalLo) + strengthGlobalLo; pAgicCtx->ConfigData.ConfigV20.regkgrad2 = (ratio * (k_grad2Hi - k_grad2Lo) + k_grad2Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regkgrad1 = (ratio * (k_grad1Hi - k_grad1Lo) + k_grad1Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.reggbthre = (ratio * (gb_threHi - gb_threLo) + gb_threLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regmaxcorv = (ratio * (maxCorVHi - maxCorVLo) + maxCorVLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regmingradthr1 = (ratio * (min_grad_thrHi - min_grad_thrLo) + min_grad_thrLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.regmingradthr2 = (ratio * (min_grad_thr2Hi - min_grad_thr2Lo) + min_grad_thr2Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.gr_ratio = pAgicCtx->full_param.gic_v20->GicTuningPara.gr_ration; pAgicCtx->ConfigData.ConfigV20.dnhiscale = ratioF * (scaleHiHi - scaleHiLo) + scaleHiLo; pAgicCtx->ConfigData.ConfigV20.dnloscale = ratioF * (scaleLoHi - scaleLoLo) + scaleLoLo; pAgicCtx->ConfigData.ConfigV20.reglumapointsstep = 7; pAgicCtx->ConfigData.ConfigV20.gvaluelimithi = ratioF * (gValueLimitHiHi - gValueLimitHiLo) + gValueLimitHiLo; pAgicCtx->ConfigData.ConfigV20.gvaluelimitlo = ratioF * (gValueLimitLoHi - gValueLimitLoLo) + gValueLimitLoLo; pAgicCtx->ConfigData.ConfigV20.fusionratiohilimt1 = 0.75; pAgicCtx->ConfigData.ConfigV20.textureStrength = ratioF * (strengthHi - strengthLo) + strengthLo; pAgicCtx->ConfigData.ConfigV20.noiseCurve_0 = ratioF * (pNoiseCurveGicHi_0 - pNoiseCurveGicLo_0) + pNoiseCurveGicLo_0; pAgicCtx->ConfigData.ConfigV20.noiseCurve_1 = ratioF * (pNoiseCurveGicHi_1 - pNoiseCurveGicLo_1) + pNoiseCurveGicLo_1; for (int i = 0; i < 15; i++) { ave1 = LumaPoints[i]; noiseSigma = pAgicCtx->ConfigData.ConfigV20.noiseCurve_0 * sqrt(ave1) + pAgicCtx->ConfigData.ConfigV20.noiseCurve_1; if (noiseSigma < 0) { noiseSigma = 0; } pAgicCtx->ConfigData.ConfigV20.sigma_y[i] = noiseSigma; } pAgicCtx->ConfigData.ConfigV20.noise_cut_en = pAgicCtx->full_param.gic_v20->GicTuningPara.noise_cut_en ? 1 : 0; pAgicCtx->ConfigData.ConfigV20.noise_coe_a = (ratio * (noiseCoeaHi - noiseCoeaLo) + noiseCoeaLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.noise_coe_b = (ratio * (noiseCoebHi - noiseCoebLo) + noiseCoebLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV20.diff_clip = (ratio * (diffClipHi - diffClipLo) + diffClipLo * (1 << 4) + (1 << 3)) >> 4; short mulBit = 0; int bitValue = RKAIQ_GIC_BITS; if(bitValue > 10) { mulBit = 1 << (bitValue - 10); } else { mulBit = 1; } pAgicCtx->ConfigData.ConfigV20.regminbusythre *= mulBit; pAgicCtx->ConfigData.ConfigV20.regmingradthr1 *= mulBit; pAgicCtx->ConfigData.ConfigV20.regmingradthr2 *= mulBit; pAgicCtx->ConfigData.ConfigV20.reggbthre *= mulBit; pAgicCtx->ConfigData.ConfigV20.regmaxcorv *= mulBit; pAgicCtx->ConfigData.ConfigV20.regmaxcorvboth *= mulBit; pAgicCtx->ConfigData.ConfigV20.regdarkthre *= mulBit; pAgicCtx->ConfigData.ConfigV20.regdarktthrehi *= mulBit; pAgicCtx->ConfigData.ConfigV20.regmingradthrdark1 *= mulBit; pAgicCtx->ConfigData.ConfigV20.regmingradthrdark2 *= mulBit; LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); } void AgicProcessV21 ( AgicContext_t *pAgicCtx, int ISO ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); float ave1 = 0.0f, noiseSigma = 0.0f; short ratio = 0; short LumaPoints[] = { 0, 128, 256, 384, 512, 640, 768, 896, 1024, 1536, 2048, 2560, 3072, 3584, 4096 }; short min_busy_threHi = 0, min_busy_threLo = 0; short min_grad_thrHi = 0, min_grad_thrLo = 0, min_grad_thr2Hi = 0, min_grad_thr2Lo = 0; short k_grad1Hi = 0, k_grad1Lo = 0, k_grad2Hi = 0, k_grad2Lo = 0; short gb_threHi = 0, gb_threLo = 0, maxCorVHi = 0, maxCorVLo = 0; short maxCorVbothHi = 0, maxCorVbothLo = 0; short dark_threHi = 0, dark_threLo = 0, dark_threUpHi = 0, dark_threUpLo = 0; short k_grad1_darkHi = 0, k_grad1_darkLo = 0, k_grad2_darkHi = 0, k_grad2_darkLo = 0, min_grad_thr_dark1Hi = 0; short min_grad_thr_dark1Lo = 0, min_grad_thr_dark2Hi = 0, min_grad_thr_dark2Lo = 0; short diffClipHi = 0, diffClipLo = 0; float strengthGlobalHi = 0.0f, strengthGlobalLo = 0.0f; float NoiseScaleHi = 0.0f, NoiseScaleLo = 0.0f; float NoiseBaseHi = 0.0f, NoiseBaseLo = 0.0f; int index, iso_hi = 0, iso_lo = 0; float pNoiseCurveGicHi_0 = 0.0f, pNoiseCurveGicHi_1 = 0.0f; float pNoiseCurveGicLo_0 = 0.0f, pNoiseCurveGicLo_1 = 0.0f; LOGI_AGIC("%s(%d): enter, ISO=%d\n", __FUNCTION__, __LINE__, ISO); if(pAgicCtx == NULL) LOGE_AGIC("%s(%d): null pointer\n", __FUNCTION__, __LINE__); if(ISO <= 50) { index = 0; ratio = 0; } else if (ISO > 12800) { index = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.ISO_len - 2; ratio = (1 << 4); } else { for (index = 0; index < (pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.ISO_len - 1); index++) { iso_lo = (int)(pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.ISO[index]); iso_hi = (int)(pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.ISO[index + 1]); LOGD_AGIC("index=%d, iso_lo=%d, iso_hi=%d\n", index, iso_lo, iso_hi); if (ISO > iso_lo && ISO <= iso_hi) { break; } } ratio = ((ISO - iso_lo) * (1 << 4)) / (iso_hi - iso_lo); } min_busy_threHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_busy_thre[index + 1]; min_busy_threLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_busy_thre[index]; min_grad_thrHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_grad_thr1[index + 1]; min_grad_thrLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_grad_thr1[index]; min_grad_thr2Hi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_grad_thr2[index + 1]; min_grad_thr2Lo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_grad_thr2[index]; k_grad1Hi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.k_grad1[index + 1]; k_grad1Lo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.k_grad1[index]; k_grad2Hi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.k_grad2[index + 1]; k_grad2Lo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.k_grad2[index]; gb_threHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.gb_thre[index + 1]; gb_threLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.gb_thre[index]; maxCorVHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.maxCorV[index + 1]; maxCorVLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.maxCorV[index]; maxCorVbothHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.maxCorVboth[index + 1]; maxCorVbothLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.maxCorVboth[index]; dark_threHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.dark_thre[index + 1]; dark_threLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.dark_thre[index]; dark_threUpHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.dark_threHi[index + 1]; dark_threUpLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.dark_threHi[index]; k_grad1_darkHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.k_grad1_dark[index + 1]; k_grad1_darkLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.k_grad1_dark[index]; k_grad2_darkHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.k_grad2_dark[index + 1]; k_grad2_darkLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.k_grad2_dark[index]; min_grad_thr_dark1Hi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_grad_thr_dark1[index + 1]; min_grad_thr_dark1Lo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_grad_thr_dark1[index]; min_grad_thr_dark2Hi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_grad_thr_dark2[index + 1]; min_grad_thr_dark2Lo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.min_grad_thr_dark2[index]; pNoiseCurveGicHi_0 = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.noiseCurve_0[index + 1]; pNoiseCurveGicLo_0 = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.noiseCurve_0[index]; pNoiseCurveGicHi_1 = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.noiseCurve_1[index + 1]; pNoiseCurveGicLo_1 = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.noiseCurve_1[index]; strengthGlobalHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.globalStrength[index + 1]; strengthGlobalLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.globalStrength[index]; diffClipHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.diff_clip[index + 1]; diffClipLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.diff_clip[index]; NoiseScaleHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.NoiseScale[index + 1]; NoiseScaleLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.NoiseScale[index]; NoiseBaseHi = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.NoiseBase[index + 1]; NoiseBaseLo = pAgicCtx->full_param.gic_v21->GicTuningPara.GicData.NoiseBase[index]; float ratioF = ratio / 16.0f; pAgicCtx->ConfigData.ConfigV21.gic_en = pAgicCtx->full_param.gic_v21->GicTuningPara.enable ? 1 : 0; pAgicCtx->ConfigData.ConfigV21.regmingradthrdark1 = (ratio * (min_grad_thr_dark1Hi - min_grad_thr_dark1Lo) + min_grad_thr_dark1Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regmingradthrdark2 = (ratio * (min_grad_thr_dark2Hi - min_grad_thr_dark2Lo) + min_grad_thr_dark2Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regminbusythre = (ratio * (min_busy_threHi - min_busy_threLo) + min_busy_threLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regdarkthre = (ratio * (dark_threHi - dark_threLo) + dark_threLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regmaxcorvboth = (ratio * (maxCorVbothHi - maxCorVbothLo) + maxCorVbothLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regdarktthrehi = (ratio * (dark_threUpHi - dark_threUpLo) + dark_threUpLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regkgrad1dark = (ratio * (k_grad1_darkHi - k_grad1_darkLo) + k_grad1_darkLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regkgrad2dark = (ratio * (k_grad2_darkHi - k_grad2_darkLo) + k_grad2_darkLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regkgrad1 = (ratio * (k_grad1Hi - k_grad1Lo) + k_grad1Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regkgrad2 = (ratio * (k_grad2Hi - k_grad2Lo) + k_grad2Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.reggbthre = (ratio * (gb_threHi - gb_threLo) + gb_threLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regmaxcorv = (ratio * (maxCorVHi - maxCorVLo) + maxCorVLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regmingradthr1 = (ratio * (min_grad_thrHi - min_grad_thrLo) + min_grad_thrLo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.regmingradthr2 = (ratio * (min_grad_thr2Hi - min_grad_thr2Lo) + min_grad_thr2Lo * (1 << 4) + (1 << 3)) >> 4; pAgicCtx->ConfigData.ConfigV21.gr_ratio = pAgicCtx->full_param.gic_v21->GicTuningPara.gr_ration; pAgicCtx->ConfigData.ConfigV21.noise_scale = ratioF * (NoiseScaleHi - NoiseScaleLo) + NoiseScaleLo; pAgicCtx->ConfigData.ConfigV21.noise_base = ratioF * (NoiseBaseHi - NoiseBaseLo) + NoiseBaseLo; pAgicCtx->ConfigData.ConfigV21.noiseCurve_0 = ratioF * (pNoiseCurveGicHi_0 - pNoiseCurveGicLo_0) + pNoiseCurveGicLo_0; pAgicCtx->ConfigData.ConfigV21.noiseCurve_1 = ratioF * (pNoiseCurveGicHi_1 - pNoiseCurveGicLo_1) + pNoiseCurveGicLo_1; for (int i = 0; i < 15; i++) { ave1 = LumaPoints[i]; noiseSigma = pAgicCtx->ConfigData.ConfigV21.noiseCurve_0 * sqrt(ave1) + pAgicCtx->ConfigData.ConfigV21.noiseCurve_1; if (noiseSigma < 0) { noiseSigma = 0; } pAgicCtx->ConfigData.ConfigV20.sigma_y[i] = noiseSigma; } pAgicCtx->ConfigData.ConfigV21.globalStrength = ratioF * (strengthGlobalHi - strengthGlobalLo) + strengthGlobalLo; pAgicCtx->ConfigData.ConfigV21.diff_clip = (ratio * (diffClipHi - diffClipLo) + diffClipLo * (1 << 4) + (1 << 3)) >> 4; short mulBit = 0; int bitValue = RKAIQ_GIC_BITS; if(bitValue > 10) { mulBit = 1 << (bitValue - 10); } else { mulBit = 1; } pAgicCtx->ConfigData.ConfigV21.regminbusythre *= mulBit; pAgicCtx->ConfigData.ConfigV21.regmingradthr1 *= mulBit; pAgicCtx->ConfigData.ConfigV21.regmingradthr2 *= mulBit; pAgicCtx->ConfigData.ConfigV21.reggbthre *= mulBit; pAgicCtx->ConfigData.ConfigV21.regmaxcorv *= mulBit; pAgicCtx->ConfigData.ConfigV21.regmaxcorvboth *= mulBit; pAgicCtx->ConfigData.ConfigV21.regdarkthre *= mulBit; pAgicCtx->ConfigData.ConfigV21.regdarktthrehi *= mulBit; pAgicCtx->ConfigData.ConfigV21.regmingradthrdark1 *= mulBit; pAgicCtx->ConfigData.ConfigV21.regmingradthrdark2 *= mulBit; LOGD_AGIC("%s(%d): gic_en:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.gic_en); LOGD_AGIC("%s(%d): regmingradthrdark2:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regmingradthrdark2); LOGD_AGIC("%s(%d): regmingradthrdark1:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regmingradthrdark1); LOGD_AGIC("%s(%d): regminbusythre:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regminbusythre); LOGD_AGIC("%s(%d): regdarkthre:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regdarkthre); LOGD_AGIC("%s(%d): regmaxcorvboth:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regmaxcorvboth); LOGD_AGIC("%s(%d): regdarktthrehi:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regdarktthrehi); LOGD_AGIC("%s(%d): regkgrad2dark:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regkgrad2dark); LOGD_AGIC("%s(%d): regkgrad1dark:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regkgrad1dark); LOGD_AGIC("%s(%d): regkgrad2:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regkgrad2); LOGD_AGIC("%s(%d): regkgrad1:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regkgrad1); LOGD_AGIC("%s(%d): reggbthre:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.reggbthre); LOGD_AGIC("%s(%d): regmaxcorv:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regmaxcorv); LOGD_AGIC("%s(%d): regmingradthr2:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regmingradthr2); LOGD_AGIC("%s(%d): regmingradthr1:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.regmingradthr1); LOGD_AGIC("%s(%d): gr_ratio:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.gr_ratio); LOGD_AGIC("%s(%d): noise_scale:%f\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.noise_scale); LOGD_AGIC("%s(%d): noise_base:%f\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.noise_base); LOGD_AGIC("%s(%d): globalStrength:%f\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.globalStrength); LOGD_AGIC("%s(%d): diff_clip:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.diff_clip); LOGD_AGIC("%s(%d): sigma_y[0]:%d ", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.sigma_y[0]); for(int i = 1; i < 7; i++) LOGD_AGIC("%s(%d): sigma_y[%d]:%d ", __FUNCTION__, __LINE__, i, pAgicCtx->ConfigData.ConfigV21.sigma_y[i]); LOGD_AGIC("%s(%d): sigma_y[7]:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.sigma_y[7]); LOGD_AGIC("%s(%d): sigma_y[8]:%d ", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.sigma_y[8]); for(int i = 9; i < 14; i++) LOGD_AGIC("%s(%d): sigma_y[%d]:%d ", __FUNCTION__, __LINE__, i, pAgicCtx->ConfigData.ConfigV21.sigma_y[i]); LOGD_AGIC("%s(%d): sigma_y[14]:%d\n", __FUNCTION__, __LINE__, pAgicCtx->ConfigData.ConfigV21.sigma_y[14]); LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); } XCamReturn AgicProcess ( AgicContext_t *pAgicCtx, int ISO, int mode ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); if(CHECK_ISP_HW_V20()) AgicProcessV20(pAgicCtx, ISO); else if(CHECK_ISP_HW_V21()) AgicProcessV21(pAgicCtx, ISO); else LOGE_AGIC(" %s:Wrong hardware version!! \n", __func__); LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); return XCAM_RETURN_NO_ERROR; } XCamReturn AgicGetProcResult ( AgicContext_t* pAgicCtx ) { LOGI_AGIC("%s(%d): enter!\n", __FUNCTION__, __LINE__); if(pAgicCtx == NULL) { LOGE_AGIC("%s(%d): null pointer\n", __FUNCTION__, __LINE__); return XCAM_RETURN_ERROR_PARAM; } if(CHECK_ISP_HW_V20()) AgicGetProcResultV20(pAgicCtx); else if(CHECK_ISP_HW_V21()) AgicGetProcResultV21(pAgicCtx); else LOGE_AGIC(" %s:Wrong hardware version!! \n", __func__); LOGI_AGIC("%s(%d): exit!\n", __FUNCTION__, __LINE__); return XCAM_RETURN_NO_ERROR; }