1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * Copyright (c) 2019-2022 Rockchip Eletronics Co., Ltd.
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun * You may obtain a copy of the License at
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun *
10*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun * limitations under the License.
15*4882a593Smuzhiyun */
16*4882a593Smuzhiyun #include "Isp21Params.h"
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun #include <cstdint>
19*4882a593Smuzhiyun #include <type_traits>
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun #include "common/rk_aiq_types.h"
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun namespace RkCam {
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun #define ISP2X_WBGAIN_FIXSCALE_BIT 8//check
26*4882a593Smuzhiyun #define ISP2X_WBGAIN_INTSCALE_BIT 6//check
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun #define ISP2X_BLC_BIT_MAX 12
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun template <typename T>
31*4882a593Smuzhiyun struct ConvertBlcHelper {
32*4882a593Smuzhiyun template < typename U = T,
33*4882a593Smuzhiyun typename std::enable_if < (std::is_same<U, struct isp2x_isp_params_cfg>::value ||
34*4882a593Smuzhiyun std::is_same<U, struct isp21_isp_params_cfg>::value ||
35*4882a593Smuzhiyun std::is_same<U, struct isp3x_isp_params_cfg>::value),
36*4882a593Smuzhiyun bool >::type = true >
FixFromAwbGainRkCam::ConvertBlcHelper37*4882a593Smuzhiyun void FixFromAwbGain(U& isp_cfg, rk_aiq_isp_blc_v21_t& blc) {
38*4882a593Smuzhiyun int tmp = 0;
39*4882a593Smuzhiyun struct isp21_awb_gain_cfg* awb_cfg = &isp_cfg.others.awb_gain_cfg;
40*4882a593Smuzhiyun uint16_t base_wb_gain = 1 << ISP2X_WBGAIN_FIXSCALE_BIT;
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_en = blc.v0.blc1_enable;
43*4882a593Smuzhiyun tmp = blc.v0.blc1_r * awb_cfg->gain0_red / base_wb_gain;
44*4882a593Smuzhiyun if (tmp > 0x1fff) tmp = 0x1fff;
45*4882a593Smuzhiyun if (tmp < 0) tmp = 0;
46*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_val.r = tmp;
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun tmp = blc.v0.blc1_gr * awb_cfg->gain0_green_r / base_wb_gain;
49*4882a593Smuzhiyun if (tmp > 0x1fff) tmp = 0x1fff;
50*4882a593Smuzhiyun if (tmp < 0) tmp = 0;
51*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_val.gr = tmp;
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun tmp = blc.v0.blc1_gb * awb_cfg->gain0_green_b / base_wb_gain;
54*4882a593Smuzhiyun if (tmp > 0x1fff) tmp = 0x1fff;
55*4882a593Smuzhiyun if (tmp < 0) tmp = 0;
56*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_val.gb = tmp;
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun tmp = blc.v0.blc1_b * awb_cfg->gain0_blue / base_wb_gain;
59*4882a593Smuzhiyun if (tmp > 0x1fff) tmp = 0x1fff;
60*4882a593Smuzhiyun if (tmp < 0) tmp = 0;
61*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_val.b = tmp;
62*4882a593Smuzhiyun }
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun template <typename U = T,
65*4882a593Smuzhiyun typename std::enable_if<std::is_same<U, struct isp32_isp_params_cfg>::value,
66*4882a593Smuzhiyun bool>::type = false>
FixFromAwbGainRkCam::ConvertBlcHelper67*4882a593Smuzhiyun void FixFromAwbGain(U& isp_cfg, rk_aiq_isp_blc_v21_t& blc) {
68*4882a593Smuzhiyun int tmp = 0;
69*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_en = blc.v0.blc1_enable;
70*4882a593Smuzhiyun tmp = blc.v0.blc1_r;
71*4882a593Smuzhiyun if (tmp > 0x1fff) tmp = 0x1fff;
72*4882a593Smuzhiyun if (tmp < 0) tmp = 0;
73*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_val.r = tmp;
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun tmp = blc.v0.blc1_gr;
76*4882a593Smuzhiyun if (tmp > 0x1fff) tmp = 0x1fff;
77*4882a593Smuzhiyun if (tmp < 0) tmp = 0;
78*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_val.gr = tmp;
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun tmp = blc.v0.blc1_gb;
81*4882a593Smuzhiyun if (tmp > 0x1fff) tmp = 0x1fff;
82*4882a593Smuzhiyun if (tmp < 0) tmp = 0;
83*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_val.gb = tmp;
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun tmp = blc.v0.blc1_b;
86*4882a593Smuzhiyun if (tmp > 0x1fff) tmp = 0x1fff;
87*4882a593Smuzhiyun if (tmp < 0) tmp = 0;
88*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_val.b = tmp;
89*4882a593Smuzhiyun }
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun template<class T>
convertAiqAwbGainToIsp21Params(T & isp_cfg,const rk_aiq_wb_gain_t & awb_gain,const rk_aiq_isp_blc_v21_t * blc,bool awb_gain_update)93*4882a593Smuzhiyun void Isp21Params::convertAiqAwbGainToIsp21Params(T& isp_cfg,
94*4882a593Smuzhiyun const rk_aiq_wb_gain_t& awb_gain, const rk_aiq_isp_blc_v21_t *blc,
95*4882a593Smuzhiyun bool awb_gain_update)
96*4882a593Smuzhiyun {
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun if(awb_gain_update) {
99*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_AWB_GAIN_ID;
100*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_AWB_GAIN_ID;
101*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_AWB_GAIN_ID;
102*4882a593Smuzhiyun } else {
103*4882a593Smuzhiyun return;
104*4882a593Smuzhiyun }
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun struct isp21_awb_gain_cfg * cfg = &isp_cfg.others.awb_gain_cfg;
107*4882a593Smuzhiyun uint16_t max_wb_gain = (1 << (ISP2X_WBGAIN_FIXSCALE_BIT + 3)) - 1;
108*4882a593Smuzhiyun rk_aiq_wb_gain_t awb_gain1 = awb_gain;
109*4882a593Smuzhiyun if(blc != nullptr && blc->v0.enable) {
110*4882a593Smuzhiyun awb_gain1.bgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc->v0.blc_b);
111*4882a593Smuzhiyun awb_gain1.gbgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc->v0.blc_gb);
112*4882a593Smuzhiyun awb_gain1.rgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc->v0.blc_r);
113*4882a593Smuzhiyun awb_gain1.grgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc->v0.blc_gr);
114*4882a593Smuzhiyun }
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun uint16_t R = (uint16_t)(0.5 + awb_gain1.rgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
117*4882a593Smuzhiyun uint16_t B = (uint16_t)(0.5 + awb_gain1.bgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
118*4882a593Smuzhiyun uint16_t Gr = (uint16_t)(0.5 + awb_gain1.grgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
119*4882a593Smuzhiyun uint16_t Gb = (uint16_t)(0.5 + awb_gain1.gbgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
120*4882a593Smuzhiyun cfg->gain0_red = R > max_wb_gain ? max_wb_gain : R;
121*4882a593Smuzhiyun cfg->gain0_blue = B > max_wb_gain ? max_wb_gain : B;
122*4882a593Smuzhiyun cfg->gain0_green_r = Gr > max_wb_gain ? max_wb_gain : Gr ;
123*4882a593Smuzhiyun cfg->gain0_green_b = Gb > max_wb_gain ? max_wb_gain : Gb;
124*4882a593Smuzhiyun cfg->gain1_red = R > max_wb_gain ? max_wb_gain : R;
125*4882a593Smuzhiyun cfg->gain1_blue = B > max_wb_gain ? max_wb_gain : B;
126*4882a593Smuzhiyun cfg->gain1_green_r = Gr > max_wb_gain ? max_wb_gain : Gr ;
127*4882a593Smuzhiyun cfg->gain1_green_b = Gb > max_wb_gain ? max_wb_gain : Gb;
128*4882a593Smuzhiyun cfg->gain2_red = R > max_wb_gain ? max_wb_gain : R;
129*4882a593Smuzhiyun cfg->gain2_blue = B > max_wb_gain ? max_wb_gain : B;
130*4882a593Smuzhiyun cfg->gain2_green_r = Gr > max_wb_gain ? max_wb_gain : Gr ;
131*4882a593Smuzhiyun cfg->gain2_green_b = Gb > max_wb_gain ? max_wb_gain : Gb;
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun }
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun template <class T>
convertAiqBlcToIsp21Params(T & isp_cfg,rk_aiq_isp_blc_v21_t & blc)136*4882a593Smuzhiyun void Isp21Params::convertAiqBlcToIsp21Params(T& isp_cfg, rk_aiq_isp_blc_v21_t& blc) {
137*4882a593Smuzhiyun LOGD_ABLC( "%s:(%d) enter enable:%d\n", __FUNCTION__, __LINE__, blc.v0.enable);
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun if(blc.v0.enable) {
140*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_BLS;
141*4882a593Smuzhiyun }
142*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_BLS;
143*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_BLS;
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun isp_cfg.others.bls_cfg.enable_auto = 0;
146*4882a593Smuzhiyun isp_cfg.others.bls_cfg.en_windows = 0;
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window1.h_offs = 0;
149*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window1.v_offs = 0;
150*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window1.h_size = 0;
151*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window1.v_size = 0;
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window2.h_offs = 0;
154*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window2.v_offs = 0;
155*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window2.h_size = 0;
156*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window2.v_size = 0;
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_samples = 0;
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun isp_cfg.others.bls_cfg.fixed_val.r = blc.v0.blc_r;
161*4882a593Smuzhiyun isp_cfg.others.bls_cfg.fixed_val.gr = blc.v0.blc_gr;
162*4882a593Smuzhiyun isp_cfg.others.bls_cfg.fixed_val.gb = blc.v0.blc_gb;
163*4882a593Smuzhiyun isp_cfg.others.bls_cfg.fixed_val.b = blc.v0.blc_b;
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun //TODO bls1 params
166*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls1_en = 0;
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun ConvertBlcHelper<T> helper;
169*4882a593Smuzhiyun helper.FixFromAwbGain(isp_cfg, blc);
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun LOGD_ABLC("%s:(%d) exit \n", __FUNCTION__, __LINE__);
172*4882a593Smuzhiyun }
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun #if RKAIQ_HAVE_DEHAZE_V11
175*4882a593Smuzhiyun void
convertAiqAdehazeToIsp21Params(struct isp21_isp_params_cfg & isp_cfg,const rk_aiq_isp_dehaze_v21_t & dhaze)176*4882a593Smuzhiyun Isp21Params::convertAiqAdehazeToIsp21Params(struct isp21_isp_params_cfg& isp_cfg,
177*4882a593Smuzhiyun const rk_aiq_isp_dehaze_v21_t& dhaze)
178*4882a593Smuzhiyun {
179*4882a593Smuzhiyun if (dhaze.enable) {
180*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
181*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_DHAZ;
182*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_DHAZ;
183*4882a593Smuzhiyun } else {
184*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
185*4882a593Smuzhiyun isp_cfg.module_ens &= ~(ISP2X_MODULE_DHAZ);
186*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~(ISP2X_MODULE_DHAZ);
187*4882a593Smuzhiyun return;
188*4882a593Smuzhiyun }
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun struct isp21_dhaz_cfg * cfg = &isp_cfg.others.dhaz_cfg;
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun cfg->enhance_en = dhaze.ProcResV11.enhance_en;
193*4882a593Smuzhiyun cfg->air_lc_en = dhaze.ProcResV11.air_lc_en;
194*4882a593Smuzhiyun cfg->hpara_en = dhaze.ProcResV11.hpara_en;
195*4882a593Smuzhiyun cfg->hist_en = dhaze.ProcResV11.hist_en;
196*4882a593Smuzhiyun cfg->dc_en = dhaze.ProcResV11.dc_en;
197*4882a593Smuzhiyun cfg->yblk_th = dhaze.ProcResV11.yblk_th;
198*4882a593Smuzhiyun cfg->yhist_th = dhaze.ProcResV11.yhist_th;
199*4882a593Smuzhiyun cfg->dc_max_th = dhaze.ProcResV11.dc_max_th;
200*4882a593Smuzhiyun cfg->dc_min_th = dhaze.ProcResV11.dc_min_th;
201*4882a593Smuzhiyun cfg->wt_max = dhaze.ProcResV11.wt_max;
202*4882a593Smuzhiyun cfg->bright_max = dhaze.ProcResV11.bright_max;
203*4882a593Smuzhiyun cfg->bright_min = dhaze.ProcResV11.bright_min;
204*4882a593Smuzhiyun cfg->tmax_base = dhaze.ProcResV11.tmax_base;
205*4882a593Smuzhiyun cfg->dark_th = dhaze.ProcResV11.dark_th;
206*4882a593Smuzhiyun cfg->air_max = dhaze.ProcResV11.air_max;
207*4882a593Smuzhiyun cfg->air_min = dhaze.ProcResV11.air_min;
208*4882a593Smuzhiyun cfg->tmax_max = dhaze.ProcResV11.tmax_max;
209*4882a593Smuzhiyun cfg->tmax_off = dhaze.ProcResV11.tmax_off;
210*4882a593Smuzhiyun cfg->hist_k = dhaze.ProcResV11.hist_k;
211*4882a593Smuzhiyun cfg->hist_th_off = dhaze.ProcResV11.hist_th_off;
212*4882a593Smuzhiyun cfg->hist_min = dhaze.ProcResV11.hist_min;
213*4882a593Smuzhiyun cfg->hist_gratio = dhaze.ProcResV11.hist_gratio;
214*4882a593Smuzhiyun cfg->hist_scale = dhaze.ProcResV11.hist_scale;
215*4882a593Smuzhiyun cfg->enhance_value = dhaze.ProcResV11.enhance_value;
216*4882a593Smuzhiyun cfg->enhance_chroma = dhaze.ProcResV11.enhance_chroma;
217*4882a593Smuzhiyun cfg->iir_wt_sigma = dhaze.ProcResV11.iir_wt_sigma;
218*4882a593Smuzhiyun cfg->iir_sigma = dhaze.ProcResV11.iir_sigma;
219*4882a593Smuzhiyun cfg->stab_fnum = dhaze.ProcResV11.stab_fnum;
220*4882a593Smuzhiyun cfg->iir_tmax_sigma = dhaze.ProcResV11.iir_tmax_sigma;
221*4882a593Smuzhiyun cfg->iir_air_sigma = dhaze.ProcResV11.iir_air_sigma;
222*4882a593Smuzhiyun cfg->iir_pre_wet = dhaze.ProcResV11.iir_pre_wet;
223*4882a593Smuzhiyun cfg->cfg_wt = dhaze.ProcResV11.cfg_wt;
224*4882a593Smuzhiyun cfg->cfg_air = dhaze.ProcResV11.cfg_air;
225*4882a593Smuzhiyun cfg->cfg_alpha = dhaze.ProcResV11.cfg_alpha;
226*4882a593Smuzhiyun cfg->cfg_gratio = dhaze.ProcResV11.cfg_gratio;
227*4882a593Smuzhiyun cfg->cfg_tmax = dhaze.ProcResV11.cfg_tmax;
228*4882a593Smuzhiyun cfg->range_sima = dhaze.ProcResV11.range_sima;
229*4882a593Smuzhiyun cfg->space_sigma_cur = dhaze.ProcResV11.space_sigma_cur;
230*4882a593Smuzhiyun cfg->space_sigma_pre = dhaze.ProcResV11.space_sigma_pre;
231*4882a593Smuzhiyun cfg->dc_weitcur = dhaze.ProcResV11.dc_weitcur;
232*4882a593Smuzhiyun cfg->bf_weight = dhaze.ProcResV11.bf_weight;
233*4882a593Smuzhiyun cfg->gaus_h0 = dhaze.ProcResV11.gaus_h0;
234*4882a593Smuzhiyun cfg->gaus_h1 = dhaze.ProcResV11.gaus_h1;
235*4882a593Smuzhiyun cfg->gaus_h2 = dhaze.ProcResV11.gaus_h2;
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun for(int i = 0; i < ISP21_DHAZ_ENH_CURVE_NUM; i++)
238*4882a593Smuzhiyun cfg->enh_curve[i] = dhaze.ProcResV11.enh_curve[i];
239*4882a593Smuzhiyun }
240*4882a593Smuzhiyun #endif
241*4882a593Smuzhiyun #if RKAIQ_HAVE_CCM_V1
242*4882a593Smuzhiyun template<class T>
convertAiqCcmToIsp21Params(T & isp_cfg,const rk_aiq_ccm_cfg_t & ccm)243*4882a593Smuzhiyun void Isp21Params::convertAiqCcmToIsp21Params(T& isp_cfg,
244*4882a593Smuzhiyun const rk_aiq_ccm_cfg_t& ccm)
245*4882a593Smuzhiyun {
246*4882a593Smuzhiyun if(ccm.ccmEnable) {
247*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_CCM;
248*4882a593Smuzhiyun }
249*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CCM;
250*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_CCM;
251*4882a593Smuzhiyun
252*4882a593Smuzhiyun struct isp21_ccm_cfg * cfg = &isp_cfg.others.ccm_cfg;
253*4882a593Smuzhiyun const float *coeff = ccm.matrix;
254*4882a593Smuzhiyun const float *offset = ccm.offs;
255*4882a593Smuzhiyun
256*4882a593Smuzhiyun cfg->coeff0_r = (coeff[0] - 1) > 0 ? (short)((coeff[0] - 1) * 128 + 0.5) : (short)((coeff[0] - 1) * 128 - 0.5); //check -128?
257*4882a593Smuzhiyun cfg->coeff1_r = coeff[1] > 0 ? (short)(coeff[1] * 128 + 0.5) : (short)(coeff[1] * 128 - 0.5);
258*4882a593Smuzhiyun cfg->coeff2_r = coeff[2] > 0 ? (short)(coeff[2] * 128 + 0.5) : (short)(coeff[2] * 128 - 0.5);
259*4882a593Smuzhiyun cfg->coeff0_g = coeff[3] > 0 ? (short)(coeff[3] * 128 + 0.5) : (short)(coeff[3] * 128 - 0.5);
260*4882a593Smuzhiyun cfg->coeff1_g = (coeff[4] - 1) > 0 ? (short)((coeff[4] - 1) * 128 + 0.5) : (short)((coeff[4] - 1) * 128 - 0.5);
261*4882a593Smuzhiyun cfg->coeff2_g = coeff[5] > 0 ? (short)(coeff[5] * 128 + 0.5) : (short)(coeff[5] * 128 - 0.5);
262*4882a593Smuzhiyun cfg->coeff0_b = coeff[6] > 0 ? (short)(coeff[6] * 128 + 0.5) : (short)(coeff[6] * 128 - 0.5);
263*4882a593Smuzhiyun cfg->coeff1_b = coeff[7] > 0 ? (short)(coeff[7] * 128 + 0.5) : (short)(coeff[7] * 128 - 0.5);
264*4882a593Smuzhiyun cfg->coeff2_b = (coeff[8] - 1) > 0 ? (short)((coeff[8] - 1) * 128 + 0.5) : (short)((coeff[8] - 1) * 128 - 0.5);
265*4882a593Smuzhiyun
266*4882a593Smuzhiyun cfg->offset_r = offset[0] > 0 ? (short)(offset[0] + 0.5) : (short)(offset[0] - 0.5);// for 12bit
267*4882a593Smuzhiyun cfg->offset_g = offset[1] > 0 ? (short)(offset[1] + 0.5) : (int)(offset[1] - 0.5);
268*4882a593Smuzhiyun cfg->offset_b = offset[2] > 0 ? (short)(offset[2] + 0.5) : (short)(offset[2] - 0.5);
269*4882a593Smuzhiyun
270*4882a593Smuzhiyun cfg->coeff0_y = (u16 )ccm.rgb2y_para[0];
271*4882a593Smuzhiyun cfg->coeff1_y = (u16 )ccm.rgb2y_para[1];
272*4882a593Smuzhiyun cfg->coeff2_y = (u16 )ccm.rgb2y_para[2];
273*4882a593Smuzhiyun cfg->bound_bit = (u8)ccm.bound_bit;//check
274*4882a593Smuzhiyun cfg->highy_adjust_dis = 0;
275*4882a593Smuzhiyun for( int i = 0; i < 17; i++)
276*4882a593Smuzhiyun {
277*4882a593Smuzhiyun cfg->alp_y[i] = (u16)(ccm.alp_y[i]);
278*4882a593Smuzhiyun }
279*4882a593Smuzhiyun
280*4882a593Smuzhiyun }
281*4882a593Smuzhiyun #endif
282*4882a593Smuzhiyun
283*4882a593Smuzhiyun #if RKAIQ_HAVE_AWB_V21
284*4882a593Smuzhiyun void
convertAiqAwbToIsp21Params(struct isp21_isp_params_cfg & isp_cfg,const rk_aiq_awb_stat_cfg_v201_t & awb_meas,bool awb_cfg_udpate)285*4882a593Smuzhiyun Isp21Params::convertAiqAwbToIsp21Params(struct isp21_isp_params_cfg& isp_cfg,
286*4882a593Smuzhiyun const rk_aiq_awb_stat_cfg_v201_t& awb_meas,
287*4882a593Smuzhiyun bool awb_cfg_udpate)
288*4882a593Smuzhiyun {
289*4882a593Smuzhiyun
290*4882a593Smuzhiyun if(awb_cfg_udpate) {
291*4882a593Smuzhiyun if(awb_meas.awbEnable) {
292*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_RAWAWB;
293*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAWB;
294*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_RAWAWB;
295*4882a593Smuzhiyun }
296*4882a593Smuzhiyun } else {
297*4882a593Smuzhiyun return;
298*4882a593Smuzhiyun }
299*4882a593Smuzhiyun struct isp21_rawawb_meas_cfg * awb_cfg_v201 = &isp_cfg.meas.rawawb;
300*4882a593Smuzhiyun awb_cfg_v201->rawawb_sel = awb_meas.frameChoose;
301*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_xy_en0 = awb_meas.xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
302*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_uv_en0 = awb_meas.uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
303*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_3dyuv_en0 = awb_meas.threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
304*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_xy_en1 = awb_meas.xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
305*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_uv_en1 = awb_meas.uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
306*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_3dyuv_en1 = awb_meas.threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
307*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_blk_wei_en0 = awb_meas.blkWeightEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
308*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_blk_wei_en1 = awb_meas.blkWeightEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
309*4882a593Smuzhiyun awb_cfg_v201->sw_rawlsc_bypass_en = awb_meas.lscBypEnable;//check
310*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_blk_measure_enable = awb_meas.blkStatisticsEnable;
311*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_blk_measure_mode = awb_meas.blkMeasureMode;
312*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_blk_measure_xytype = awb_meas.xyRangeTypeForBlkStatistics;
313*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_blk_measure_illu_idx = awb_meas.illIdxForBlkStatistics;
314*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_blk_with_luma_wei_en = awb_meas.blkStatisticsWithLumaWeightEn;
315*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_wei_en0 = awb_meas.wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
316*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_wei_en1 = awb_meas.wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
317*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_hist_xytype = awb_meas.xyRangeTypeForWpHist;
318*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_3dyuv_ls_idx0 = awb_meas.threeDyuvIllu[0];
319*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_3dyuv_ls_idx1 = awb_meas.threeDyuvIllu[1];
320*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_3dyuv_ls_idx2 = awb_meas.threeDyuvIllu[2];
321*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_3dyuv_ls_idx3 = awb_meas.threeDyuvIllu[3];
322*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_light_num = awb_meas.lightNum;
323*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_h_offs = awb_meas.windowSet[0];
324*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_v_offs = awb_meas.windowSet[1];
325*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_h_size = awb_meas.windowSet[2];
326*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_v_size = awb_meas.windowSet[3];
327*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wind_size = awb_meas.dsMode;
328*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_r_max = awb_meas.maxR;
329*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_g_max = awb_meas.maxG;
330*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_b_max = awb_meas.maxB;
331*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_y_max = awb_meas.maxY;
332*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_r_min = awb_meas.minR;
333*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_g_min = awb_meas.minG;
334*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_b_min = awb_meas.minB;
335*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_y_min = awb_meas.minY;
336*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_u_0 = awb_meas.uvRange_param[0].pu_region[0];
337*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_v_0 = awb_meas.uvRange_param[0].pv_region[0];
338*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_u_0 = awb_meas.uvRange_param[0].pu_region[1];
339*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_v_0 = awb_meas.uvRange_param[0].pv_region[1];
340*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_u_0 = awb_meas.uvRange_param[0].pu_region[2];
341*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_v_0 = awb_meas.uvRange_param[0].pv_region[2];
342*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_u_0 = awb_meas.uvRange_param[0].pu_region[3];
343*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_v_0 = awb_meas.uvRange_param[0].pv_region[3];
344*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope01_0 = awb_meas.uvRange_param[0].slope_inv[0];
345*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope12_0 = awb_meas.uvRange_param[0].slope_inv[1];
346*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope23_0 = awb_meas.uvRange_param[0].slope_inv[2];
347*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope30_0 = awb_meas.uvRange_param[0].slope_inv[3];
348*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_u_1 = awb_meas.uvRange_param[1].pu_region[0];
349*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_v_1 = awb_meas.uvRange_param[1].pv_region[0];
350*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_u_1 = awb_meas.uvRange_param[1].pu_region[1];
351*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_v_1 = awb_meas.uvRange_param[1].pv_region[1];
352*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_u_1 = awb_meas.uvRange_param[1].pu_region[2];
353*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_v_1 = awb_meas.uvRange_param[1].pv_region[2];
354*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_u_1 = awb_meas.uvRange_param[1].pu_region[3];
355*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_v_1 = awb_meas.uvRange_param[1].pv_region[3];
356*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope01_1 = awb_meas.uvRange_param[1].slope_inv[0];
357*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope12_1 = awb_meas.uvRange_param[1].slope_inv[1];
358*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope23_1 = awb_meas.uvRange_param[1].slope_inv[2];
359*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope30_1 = awb_meas.uvRange_param[1].slope_inv[3];
360*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_u_2 = awb_meas.uvRange_param[2].pu_region[0];
361*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_v_2 = awb_meas.uvRange_param[2].pv_region[0];
362*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_u_2 = awb_meas.uvRange_param[2].pu_region[1];
363*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_v_2 = awb_meas.uvRange_param[2].pv_region[1];
364*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_u_2 = awb_meas.uvRange_param[2].pu_region[2];
365*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_v_2 = awb_meas.uvRange_param[2].pv_region[2];
366*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_u_2 = awb_meas.uvRange_param[2].pu_region[3];
367*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_v_2 = awb_meas.uvRange_param[2].pv_region[3];
368*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope01_2 = awb_meas.uvRange_param[2].slope_inv[0];
369*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope12_2 = awb_meas.uvRange_param[2].slope_inv[1];
370*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope23_2 = awb_meas.uvRange_param[2].slope_inv[2];
371*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope30_2 = awb_meas.uvRange_param[2].slope_inv[3];
372*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_u_3 = awb_meas.uvRange_param[3].pu_region[0];
373*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_v_3 = awb_meas.uvRange_param[3].pv_region[0];
374*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_u_3 = awb_meas.uvRange_param[3].pu_region[1];
375*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_v_3 = awb_meas.uvRange_param[3].pv_region[1];
376*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_u_3 = awb_meas.uvRange_param[3].pu_region[2];
377*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_v_3 = awb_meas.uvRange_param[3].pv_region[2];
378*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_u_3 = awb_meas.uvRange_param[3].pu_region[3];
379*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_v_3 = awb_meas.uvRange_param[3].pv_region[3];
380*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope01_3 = awb_meas.uvRange_param[3].slope_inv[0];
381*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope12_3 = awb_meas.uvRange_param[3].slope_inv[1];
382*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope23_3 = awb_meas.uvRange_param[3].slope_inv[2];
383*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope30_3 = awb_meas.uvRange_param[3].slope_inv[3];
384*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_u_4 = awb_meas.uvRange_param[4].pu_region[0];
385*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_v_4 = awb_meas.uvRange_param[4].pv_region[0];
386*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_u_4 = awb_meas.uvRange_param[4].pu_region[1];
387*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_v_4 = awb_meas.uvRange_param[4].pv_region[1];
388*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_u_4 = awb_meas.uvRange_param[4].pu_region[2];
389*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_v_4 = awb_meas.uvRange_param[4].pv_region[2];
390*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_u_4 = awb_meas.uvRange_param[4].pu_region[3];
391*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_v_4 = awb_meas.uvRange_param[4].pv_region[3];
392*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope01_4 = awb_meas.uvRange_param[4].slope_inv[0];
393*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope12_4 = awb_meas.uvRange_param[4].slope_inv[1];
394*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope23_4 = awb_meas.uvRange_param[4].slope_inv[2];
395*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope30_4 = awb_meas.uvRange_param[4].slope_inv[3];
396*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_u_5 = awb_meas.uvRange_param[5].pu_region[0];
397*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_v_5 = awb_meas.uvRange_param[5].pv_region[0];
398*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_u_5 = awb_meas.uvRange_param[5].pu_region[1];
399*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_v_5 = awb_meas.uvRange_param[5].pv_region[1];
400*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_u_5 = awb_meas.uvRange_param[5].pu_region[2];
401*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_v_5 = awb_meas.uvRange_param[5].pv_region[2];
402*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_u_5 = awb_meas.uvRange_param[5].pu_region[3];
403*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_v_5 = awb_meas.uvRange_param[5].pv_region[3];
404*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope01_5 = awb_meas.uvRange_param[5].slope_inv[0];
405*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope12_5 = awb_meas.uvRange_param[5].slope_inv[1];
406*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope23_5 = awb_meas.uvRange_param[5].slope_inv[2];
407*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope30_5 = awb_meas.uvRange_param[5].slope_inv[3];
408*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_u_6 = awb_meas.uvRange_param[6].pu_region[0];
409*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex0_v_6 = awb_meas.uvRange_param[6].pv_region[0];
410*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_u_6 = awb_meas.uvRange_param[6].pu_region[1];
411*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex1_v_6 = awb_meas.uvRange_param[6].pv_region[1];
412*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_u_6 = awb_meas.uvRange_param[6].pu_region[2];
413*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex2_v_6 = awb_meas.uvRange_param[6].pv_region[2];
414*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_u_6 = awb_meas.uvRange_param[6].pu_region[3];
415*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vertex3_v_6 = awb_meas.uvRange_param[6].pv_region[3];
416*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope01_6 = awb_meas.uvRange_param[6].slope_inv[0];
417*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope12_6 = awb_meas.uvRange_param[6].slope_inv[1];
418*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope23_6 = awb_meas.uvRange_param[6].slope_inv[2];
419*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_islope30_6 = awb_meas.uvRange_param[6].slope_inv[3];
420*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat0_u = awb_meas.icrgb2RYuv_matrix[0];
421*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat1_u = awb_meas.icrgb2RYuv_matrix[1];
422*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat2_u = awb_meas.icrgb2RYuv_matrix[2];
423*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvofs_u = awb_meas.icrgb2RYuv_matrix[3];
424*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat0_v = awb_meas.icrgb2RYuv_matrix[4];
425*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat1_v = awb_meas.icrgb2RYuv_matrix[5];
426*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat2_v = awb_meas.icrgb2RYuv_matrix[6];
427*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvofs_v = awb_meas.icrgb2RYuv_matrix[7];
428*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat0_y = awb_meas.icrgb2RYuv_matrix[8];
429*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat1_y = awb_meas.icrgb2RYuv_matrix[9];
430*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvmat2_y = awb_meas.icrgb2RYuv_matrix[10];
431*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rgb2ryuvofs_y = awb_meas.icrgb2RYuv_matrix[11];
432*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu0_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcurve_u[0];
433*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu1_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcurve_u[1];
434*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu2_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcurve_u[2];
435*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu3_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcurve_u[3];
436*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu4_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcurve_u[4];
437*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu5_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcurve_u[5];
438*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th0_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcure_th[0];
439*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th1_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcure_th[1];
440*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th2_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcure_th[2];
441*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th3_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcure_th[3];
442*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th4_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcure_th[4];
443*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th5_ls0 = awb_meas.ic3Dyuv2Range_param[0].thcure_th[5];
444*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls0_u = awb_meas.ic3Dyuv2Range_param[0].lineP1[0];
445*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls0_v = awb_meas.ic3Dyuv2Range_param[0].lineP1[1];
446*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls0_y = awb_meas.ic3Dyuv2Range_param[0].lineP1[2];
447*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls0_u = awb_meas.ic3Dyuv2Range_param[0].vP1P2[0];
448*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls0_v = awb_meas.ic3Dyuv2Range_param[0].vP1P2[1];
449*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls0_y = awb_meas.ic3Dyuv2Range_param[0].vP1P2[2];
450*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_dis_x1x2_ls0 = awb_meas.ic3Dyuv2Range_param[0].disP1P2;
451*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu0_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcurve_u[0];
452*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu1_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcurve_u[1];
453*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu2_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcurve_u[2];
454*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu3_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcurve_u[3];
455*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu4_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcurve_u[4];
456*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu5_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcurve_u[5];
457*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th0_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcure_th[0];
458*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th1_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcure_th[1];
459*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th2_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcure_th[2];
460*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th3_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcure_th[3];
461*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th4_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcure_th[4];
462*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th5_ls1 = awb_meas.ic3Dyuv2Range_param[1].thcure_th[5];
463*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls1_u = awb_meas.ic3Dyuv2Range_param[1].lineP1[0];
464*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls1_v = awb_meas.ic3Dyuv2Range_param[1].lineP1[1];
465*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls1_y = awb_meas.ic3Dyuv2Range_param[1].lineP1[2];
466*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls1_u = awb_meas.ic3Dyuv2Range_param[1].vP1P2[0];
467*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls1_v = awb_meas.ic3Dyuv2Range_param[1].vP1P2[1];
468*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls1_y = awb_meas.ic3Dyuv2Range_param[1].vP1P2[2];
469*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_dis_x1x2_ls1 = awb_meas.ic3Dyuv2Range_param[1].disP1P2;
470*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu0_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcurve_u[0];
471*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu1_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcurve_u[1];
472*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu2_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcurve_u[2];
473*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu3_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcurve_u[3];
474*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu4_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcurve_u[4];
475*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu5_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcurve_u[5];
476*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th0_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcure_th[0];
477*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th1_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcure_th[1];
478*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th2_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcure_th[2];
479*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th3_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcure_th[3];
480*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th4_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcure_th[4];
481*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th5_ls2 = awb_meas.ic3Dyuv2Range_param[2].thcure_th[5];
482*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls2_u = awb_meas.ic3Dyuv2Range_param[2].lineP1[0];
483*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls2_v = awb_meas.ic3Dyuv2Range_param[2].lineP1[1];
484*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls2_y = awb_meas.ic3Dyuv2Range_param[2].lineP1[2];
485*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls2_u = awb_meas.ic3Dyuv2Range_param[2].vP1P2[0];
486*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls2_v = awb_meas.ic3Dyuv2Range_param[2].vP1P2[1];
487*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls2_y = awb_meas.ic3Dyuv2Range_param[2].vP1P2[2];
488*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_dis_x1x2_ls2 = awb_meas.ic3Dyuv2Range_param[2].disP1P2;
489*4882a593Smuzhiyun
490*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu0_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcurve_u[0];
491*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu1_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcurve_u[1];
492*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu2_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcurve_u[2];
493*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu3_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcurve_u[3];
494*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu4_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcurve_u[4];
495*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_rotu5_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcurve_u[5];
496*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th0_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcure_th[0];
497*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th1_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcure_th[1];
498*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th2_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcure_th[2];
499*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th3_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcure_th[3];
500*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th4_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcure_th[4];
501*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_th5_ls3 = awb_meas.ic3Dyuv2Range_param[3].thcure_th[5];
502*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls3_u = awb_meas.ic3Dyuv2Range_param[3].lineP1[0];
503*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls3_v = awb_meas.ic3Dyuv2Range_param[3].lineP1[1];
504*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_coor_x1_ls3_y = awb_meas.ic3Dyuv2Range_param[3].lineP1[2];
505*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls3_u = awb_meas.ic3Dyuv2Range_param[3].vP1P2[0];
506*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls3_v = awb_meas.ic3Dyuv2Range_param[3].vP1P2[1];
507*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_vec_x21_ls3_y = awb_meas.ic3Dyuv2Range_param[3].vP1P2[2];
508*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_dis_x1x2_ls3 = awb_meas.ic3Dyuv2Range_param[3].disP1P2;
509*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wt0 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[0];
510*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wt1 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[1];
511*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wt2 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[2];
512*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_mat0_x = awb_meas.rgb2xy_param.rotationMat[0];
513*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_mat1_x = awb_meas.rgb2xy_param.rotationMat[1];
514*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_mat2_x = awb_meas.rgb2xy_param.rotationMat[2];
515*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_mat0_y = awb_meas.rgb2xy_param.rotationMat[3];
516*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_mat1_y = awb_meas.rgb2xy_param.rotationMat[4];
517*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_mat2_y = awb_meas.rgb2xy_param.rotationMat[5];
518*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x0_0 = awb_meas.xyRange_param[0].NorrangeX[0];
519*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x1_0 = awb_meas.xyRange_param[0].NorrangeX[1];
520*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y0_0 = awb_meas.xyRange_param[0].NorrangeY[0];
521*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y1_0 = awb_meas.xyRange_param[0].NorrangeY[1];
522*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x0_0 = awb_meas.xyRange_param[0].SperangeX[0];
523*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x1_0 = awb_meas.xyRange_param[0].SperangeX[1];
524*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y0_0 = awb_meas.xyRange_param[0].SperangeY[0];
525*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y1_0 = awb_meas.xyRange_param[0].SperangeY[1];
526*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x0_1 = awb_meas.xyRange_param[1].NorrangeX[0];
527*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x1_1 = awb_meas.xyRange_param[1].NorrangeX[1];
528*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y0_1 = awb_meas.xyRange_param[1].NorrangeY[0];
529*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y1_1 = awb_meas.xyRange_param[1].NorrangeY[1];
530*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x0_1 = awb_meas.xyRange_param[1].SperangeX[0];
531*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x1_1 = awb_meas.xyRange_param[1].SperangeX[1];
532*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y0_1 = awb_meas.xyRange_param[1].SperangeY[0];
533*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y1_1 = awb_meas.xyRange_param[1].SperangeY[1];
534*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x0_2 = awb_meas.xyRange_param[2].NorrangeX[0];
535*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x1_2 = awb_meas.xyRange_param[2].NorrangeX[1];
536*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y0_2 = awb_meas.xyRange_param[2].NorrangeY[0];
537*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y1_2 = awb_meas.xyRange_param[2].NorrangeY[1];
538*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x0_2 = awb_meas.xyRange_param[2].SperangeX[0];
539*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x1_2 = awb_meas.xyRange_param[2].SperangeX[1];
540*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y0_2 = awb_meas.xyRange_param[2].SperangeY[0];
541*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y1_2 = awb_meas.xyRange_param[2].SperangeY[1];
542*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x0_3 = awb_meas.xyRange_param[3].NorrangeX[0];
543*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x1_3 = awb_meas.xyRange_param[3].NorrangeX[1];
544*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y0_3 = awb_meas.xyRange_param[3].NorrangeY[0];
545*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y1_3 = awb_meas.xyRange_param[3].NorrangeY[1];
546*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x0_3 = awb_meas.xyRange_param[3].SperangeX[0];
547*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x1_3 = awb_meas.xyRange_param[3].SperangeX[1];
548*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y0_3 = awb_meas.xyRange_param[3].SperangeY[0];
549*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y1_3 = awb_meas.xyRange_param[3].SperangeY[1];
550*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x0_4 = awb_meas.xyRange_param[4].NorrangeX[0];
551*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x1_4 = awb_meas.xyRange_param[4].NorrangeX[1];
552*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y0_4 = awb_meas.xyRange_param[4].NorrangeY[0];
553*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y1_4 = awb_meas.xyRange_param[4].NorrangeY[1];
554*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x0_4 = awb_meas.xyRange_param[4].SperangeX[0];
555*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x1_4 = awb_meas.xyRange_param[4].SperangeX[1];
556*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y0_4 = awb_meas.xyRange_param[4].SperangeY[0];
557*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y1_4 = awb_meas.xyRange_param[4].SperangeY[1];
558*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x0_5 = awb_meas.xyRange_param[5].NorrangeX[0];
559*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x1_5 = awb_meas.xyRange_param[5].NorrangeX[1];
560*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y0_5 = awb_meas.xyRange_param[5].NorrangeY[0];
561*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y1_5 = awb_meas.xyRange_param[5].NorrangeY[1];
562*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x0_5 = awb_meas.xyRange_param[5].SperangeX[0];
563*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x1_5 = awb_meas.xyRange_param[5].SperangeX[1];
564*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y0_5 = awb_meas.xyRange_param[5].SperangeY[0];
565*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y1_5 = awb_meas.xyRange_param[5].SperangeY[1];
566*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x0_6 = awb_meas.xyRange_param[6].NorrangeX[0];
567*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_x1_6 = awb_meas.xyRange_param[6].NorrangeX[1];
568*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y0_6 = awb_meas.xyRange_param[6].NorrangeY[0];
569*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_nor_y1_6 = awb_meas.xyRange_param[6].NorrangeY[1];
570*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x0_6 = awb_meas.xyRange_param[6].SperangeX[0];
571*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_x1_6 = awb_meas.xyRange_param[6].SperangeX[1];
572*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y0_6 = awb_meas.xyRange_param[6].SperangeY[0];
573*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_big_y1_6 = awb_meas.xyRange_param[6].SperangeY[1];
574*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_pre_wbgain_inv_r = awb_meas.pre_wbgain_inv_r;
575*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_pre_wbgain_inv_g = awb_meas.pre_wbgain_inv_g;
576*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_pre_wbgain_inv_b = awb_meas.pre_wbgain_inv_b;
577*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region0_excen0 = awb_meas.excludeWpRange[0].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
578*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region0_excen1 = awb_meas.excludeWpRange[0].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
579*4882a593Smuzhiyun //awb_cfg_v201->sw_rawawb_exc_wp_region0_measen = awb_meas.excludeWpRange[0].measureEnable;
580*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region0_domain = awb_meas.excludeWpRange[0].domain;
581*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region0_xu0 = awb_meas.excludeWpRange[0].xu[0];
582*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region0_xu1 = awb_meas.excludeWpRange[0].xu[1];
583*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region0_yv0 = awb_meas.excludeWpRange[0].yv[0];
584*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region0_yv1 = awb_meas.excludeWpRange[0].yv[1];
585*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region1_excen0 = awb_meas.excludeWpRange[1].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
586*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region1_excen1 = awb_meas.excludeWpRange[1].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
587*4882a593Smuzhiyun //awb_cfg_v201->sw_rawawb_exc_wp_region1_measen = awb_meas.excludeWpRange[1].measureEnable;
588*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region1_domain = awb_meas.excludeWpRange[1].domain;
589*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region1_xu0 = awb_meas.excludeWpRange[1].xu[0];
590*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region1_xu1 = awb_meas.excludeWpRange[1].xu[1];
591*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region1_yv0 = awb_meas.excludeWpRange[1].yv[0];
592*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region1_yv1 = awb_meas.excludeWpRange[1].yv[1];
593*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region2_excen0 = awb_meas.excludeWpRange[2].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
594*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region2_excen1 = awb_meas.excludeWpRange[2].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
595*4882a593Smuzhiyun //awb_cfg_v201->sw_rawawb_exc_wp_region2_measen = awb_meas.excludeWpRange[2].measureEnable;
596*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region2_domain = awb_meas.excludeWpRange[2].domain;
597*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region2_xu0 = awb_meas.excludeWpRange[2].xu[0];
598*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region2_xu1 = awb_meas.excludeWpRange[2].xu[1];
599*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region2_yv0 = awb_meas.excludeWpRange[2].yv[0];
600*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region2_yv1 = awb_meas.excludeWpRange[2].yv[1];
601*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region3_excen0 = awb_meas.excludeWpRange[3].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
602*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region3_excen1 = awb_meas.excludeWpRange[3].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
603*4882a593Smuzhiyun //awb_cfg_v201->sw_rawawb_exc_wp_region3_measen = awb_meas.excludeWpRange[3].measureEnable;
604*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region3_domain = awb_meas.excludeWpRange[3].domain;
605*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region3_xu0 = awb_meas.excludeWpRange[3].xu[0];
606*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region3_xu1 = awb_meas.excludeWpRange[3].xu[1];
607*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region3_yv0 = awb_meas.excludeWpRange[3].yv[0];
608*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region3_yv1 = awb_meas.excludeWpRange[3].yv[1];
609*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region4_excen0 = awb_meas.excludeWpRange[4].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
610*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region4_excen1 = awb_meas.excludeWpRange[4].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
611*4882a593Smuzhiyun //awb_cfg_v201->sw_rawawb_exc_wp_region4_measen = awb_meas.excludeWpRange[4].measureEnable;
612*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region4_domain = awb_meas.excludeWpRange[4].domain;
613*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region4_xu0 = awb_meas.excludeWpRange[4].xu[0];
614*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region4_xu1 = awb_meas.excludeWpRange[4].xu[1];
615*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region4_yv0 = awb_meas.excludeWpRange[4].yv[0];
616*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region4_yv1 = awb_meas.excludeWpRange[4].yv[1];
617*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region5_excen0 = awb_meas.excludeWpRange[5].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
618*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region5_excen1 = awb_meas.excludeWpRange[5].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
619*4882a593Smuzhiyun //awb_cfg_v201->sw_rawawb_exc_wp_region5_measen = awb_meas.excludeWpRange[5].measureEnable;
620*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region5_domain = awb_meas.excludeWpRange[5].domain;
621*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region5_xu0 = awb_meas.excludeWpRange[5].xu[0];
622*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region5_xu1 = awb_meas.excludeWpRange[5].xu[1];
623*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region5_yv0 = awb_meas.excludeWpRange[5].yv[0];
624*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region5_yv1 = awb_meas.excludeWpRange[5].yv[1];
625*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region6_excen0 = awb_meas.excludeWpRange[6].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
626*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region6_excen1 = awb_meas.excludeWpRange[6].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
627*4882a593Smuzhiyun //awb_cfg_v201->sw_rawawb_exc_wp_region6_measen = awb_meas.excludeWpRange[6].measureEnable;
628*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region6_domain = awb_meas.excludeWpRange[6].domain;
629*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region6_xu0 = awb_meas.excludeWpRange[6].xu[0];
630*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region6_xu1 = awb_meas.excludeWpRange[6].xu[1];
631*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region6_yv0 = awb_meas.excludeWpRange[6].yv[0];
632*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_exc_wp_region6_yv1 = awb_meas.excludeWpRange[6].yv[1];
633*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y0 = awb_meas.wpDiffwei_y[0];
634*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y1 = awb_meas.wpDiffwei_y[1];
635*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y2 = awb_meas.wpDiffwei_y[2];
636*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y3 = awb_meas.wpDiffwei_y[3];
637*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y4 = awb_meas.wpDiffwei_y[4];
638*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y5 = awb_meas.wpDiffwei_y[5];
639*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y6 = awb_meas.wpDiffwei_y[6];
640*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y7 = awb_meas.wpDiffwei_y[7];
641*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_y8 = awb_meas.wpDiffwei_y[8];
642*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w0 = awb_meas.wpDiffwei_w[0];
643*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w1 = awb_meas.wpDiffwei_w[1];
644*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w2 = awb_meas.wpDiffwei_w[2];
645*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w3 = awb_meas.wpDiffwei_w[3];
646*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w4 = awb_meas.wpDiffwei_w[4];
647*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w5 = awb_meas.wpDiffwei_w[5];
648*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w6 = awb_meas.wpDiffwei_w[6];
649*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w7 = awb_meas.wpDiffwei_w[7];
650*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_luma_weicurve_w8 = awb_meas.wpDiffwei_w[8];
651*4882a593Smuzhiyun
652*4882a593Smuzhiyun for (int i = 0; i < RK_AIQ_AWB_GRID_NUM_TOTAL; i++) {
653*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_wp_blk_wei_w[i] = awb_meas.blkWeight[i];
654*4882a593Smuzhiyun }
655*4882a593Smuzhiyun
656*4882a593Smuzhiyun awb_cfg_v201->sw_rawawb_blk_rtdw_measure_en = awb_meas.blk_rtdw_measure_en;
657*4882a593Smuzhiyun }
658*4882a593Smuzhiyun #endif
659*4882a593Smuzhiyun #if RKAIQ_HAVE_BAYERNR_V2
660*4882a593Smuzhiyun void
convertAiqRawnrToIsp21Params(struct isp21_isp_params_cfg & isp_cfg,rk_aiq_isp_baynr_v21_t & rawnr)661*4882a593Smuzhiyun Isp21Params::convertAiqRawnrToIsp21Params(struct isp21_isp_params_cfg& isp_cfg,
662*4882a593Smuzhiyun rk_aiq_isp_baynr_v21_t& rawnr)
663*4882a593Smuzhiyun {
664*4882a593Smuzhiyun
665*4882a593Smuzhiyun struct isp21_baynr_cfg * p2DCfg = &isp_cfg.others.baynr_cfg;
666*4882a593Smuzhiyun struct isp21_bay3d_cfg * p3DCfg = &isp_cfg.others.bay3d_cfg;
667*4882a593Smuzhiyun
668*4882a593Smuzhiyun
669*4882a593Smuzhiyun LOGD_ANR("%s:%d: enter\n", __FUNCTION__, __LINE__);
670*4882a593Smuzhiyun
671*4882a593Smuzhiyun //bayernr 2d
672*4882a593Smuzhiyun if(rawnr.st2DParam.baynr_en) {
673*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_BAYNR;
674*4882a593Smuzhiyun } else {
675*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_BAYNR;
676*4882a593Smuzhiyun }
677*4882a593Smuzhiyun
678*4882a593Smuzhiyun if(rawnr.st3DParam.bay3d_en_i) {
679*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_BAY3D;
680*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_BAYNR;
681*4882a593Smuzhiyun } else {
682*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_BAY3D;
683*4882a593Smuzhiyun }
684*4882a593Smuzhiyun
685*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_BAYNR;
686*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_BAYNR;
687*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_BAY3D;
688*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_BAY3D;
689*4882a593Smuzhiyun
690*4882a593Smuzhiyun
691*4882a593Smuzhiyun p2DCfg->sw_baynr_gauss_en = rawnr.st2DParam.baynr_gauss_en;
692*4882a593Smuzhiyun p2DCfg->sw_baynr_log_bypass = rawnr.st2DParam.baynr_log_bypass;
693*4882a593Smuzhiyun
694*4882a593Smuzhiyun p2DCfg->sw_baynr_dgain1 = rawnr.st2DParam.baynr_dgain[1];
695*4882a593Smuzhiyun p2DCfg->sw_baynr_dgain0 = rawnr.st2DParam.baynr_dgain[0];
696*4882a593Smuzhiyun p2DCfg->sw_baynr_dgain2 = rawnr.st2DParam.baynr_dgain[2];
697*4882a593Smuzhiyun
698*4882a593Smuzhiyun p2DCfg->sw_baynr_pix_diff = rawnr.st2DParam.baynr_pix_diff;
699*4882a593Smuzhiyun p2DCfg->sw_baynr_diff_thld = rawnr.st2DParam.baynr_diff_thld;
700*4882a593Smuzhiyun p2DCfg->sw_baynr_softthld = rawnr.st2DParam.baynr_softthld;
701*4882a593Smuzhiyun
702*4882a593Smuzhiyun p2DCfg->sw_bltflt_streng = rawnr.st2DParam.bltflt_streng;
703*4882a593Smuzhiyun p2DCfg->sw_baynr_reg_w1 = rawnr.st2DParam.baynr_reg_w1;
704*4882a593Smuzhiyun
705*4882a593Smuzhiyun for(int i = 0; i < ISP21_BAYNR_XY_NUM; i++) {
706*4882a593Smuzhiyun p2DCfg->sw_sigma_x[i] = rawnr.st2DParam.sigma_x[i];
707*4882a593Smuzhiyun p2DCfg->sw_sigma_y[i] = rawnr.st2DParam.sigma_y[i];
708*4882a593Smuzhiyun }
709*4882a593Smuzhiyun
710*4882a593Smuzhiyun p2DCfg->weit_d2 = rawnr.st2DParam.weit_d[2];
711*4882a593Smuzhiyun p2DCfg->weit_d1 = rawnr.st2DParam.weit_d[1];
712*4882a593Smuzhiyun p2DCfg->weit_d0 = rawnr.st2DParam.weit_d[0];
713*4882a593Smuzhiyun
714*4882a593Smuzhiyun
715*4882a593Smuzhiyun //bayernr 3d
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun p3DCfg->sw_bay3d_exp_sel = rawnr.st3DParam.bay3d_exp_sel;
718*4882a593Smuzhiyun p3DCfg->sw_bay3d_bypass_en = rawnr.st3DParam.bay3d_bypass_en;
719*4882a593Smuzhiyun p3DCfg->sw_bay3d_pk_en = rawnr.st3DParam.bay3d_pk_en;
720*4882a593Smuzhiyun
721*4882a593Smuzhiyun p3DCfg->sw_bay3d_softwgt = rawnr.st3DParam.bay3d_softwgt;
722*4882a593Smuzhiyun p3DCfg->sw_bay3d_sigratio = rawnr.st3DParam.bay3d_sigratio;
723*4882a593Smuzhiyun
724*4882a593Smuzhiyun p3DCfg->sw_bay3d_glbpk2 = rawnr.st3DParam.bay3d_glbpk2;
725*4882a593Smuzhiyun
726*4882a593Smuzhiyun p3DCfg->sw_bay3d_exp_str = rawnr.st3DParam.bay3d_exp_str;
727*4882a593Smuzhiyun p3DCfg->sw_bay3d_str = rawnr.st3DParam.bay3d_str;
728*4882a593Smuzhiyun p3DCfg->sw_bay3d_wgtlmt_h = rawnr.st3DParam.bay3d_wgtlmt_h;
729*4882a593Smuzhiyun p3DCfg->sw_bay3d_wgtlmt_l = rawnr.st3DParam.bay3d_wgtlmt_l;
730*4882a593Smuzhiyun
731*4882a593Smuzhiyun for(int i = 0; i < ISP21_BAY3D_XY_NUM; i++) {
732*4882a593Smuzhiyun p3DCfg->sw_bay3d_sig_x[i] = rawnr.st3DParam.bay3d_sig_x[i];
733*4882a593Smuzhiyun p3DCfg->sw_bay3d_sig_y[i] = rawnr.st3DParam.bay3d_sig_y[i];
734*4882a593Smuzhiyun }
735*4882a593Smuzhiyun
736*4882a593Smuzhiyun }
737*4882a593Smuzhiyun #endif
738*4882a593Smuzhiyun #if RKAIQ_HAVE_CNR_V1
739*4882a593Smuzhiyun void
convertAiqUvnrToIsp21Params(struct isp21_isp_params_cfg & isp_cfg,rk_aiq_isp_cnr_v21_t & uvnr)740*4882a593Smuzhiyun Isp21Params::convertAiqUvnrToIsp21Params(struct isp21_isp_params_cfg& isp_cfg,
741*4882a593Smuzhiyun rk_aiq_isp_cnr_v21_t& uvnr)
742*4882a593Smuzhiyun {
743*4882a593Smuzhiyun struct isp21_cnr_cfg * pCfg = &isp_cfg.others.cnr_cfg;
744*4882a593Smuzhiyun
745*4882a593Smuzhiyun LOGD_ANR("%s:%d: enter\n", __FUNCTION__, __LINE__);
746*4882a593Smuzhiyun
747*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_CNR;
748*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CNR;
749*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_CNR;
750*4882a593Smuzhiyun
751*4882a593Smuzhiyun pCfg->sw_cnr_thumb_mix_cur_en = uvnr.cnr_thumb_mix_cur_en;
752*4882a593Smuzhiyun pCfg->sw_cnr_lq_bila_bypass = uvnr.cnr_lq_bila_bypass;
753*4882a593Smuzhiyun pCfg->sw_cnr_hq_bila_bypass = uvnr.cnr_hq_bila_bypass;
754*4882a593Smuzhiyun pCfg->sw_cnr_exgain_bypass = uvnr.cnr_exgain_bypass;
755*4882a593Smuzhiyun
756*4882a593Smuzhiyun if(uvnr.cnr_en_i == 0) {
757*4882a593Smuzhiyun pCfg->sw_cnr_lq_bila_bypass = 0x01;
758*4882a593Smuzhiyun pCfg->sw_cnr_hq_bila_bypass = 0x01;
759*4882a593Smuzhiyun pCfg->sw_cnr_exgain_bypass = 0x01;
760*4882a593Smuzhiyun }
761*4882a593Smuzhiyun
762*4882a593Smuzhiyun pCfg->sw_cnr_exgain_mux = uvnr.cnr_exgain_mux;
763*4882a593Smuzhiyun pCfg->sw_cnr_gain_iso = uvnr.cnr_gain_iso;
764*4882a593Smuzhiyun
765*4882a593Smuzhiyun pCfg->sw_cnr_gain_offset = uvnr.cnr_gain_offset;
766*4882a593Smuzhiyun pCfg->sw_cnr_gain_1sigma = uvnr.cnr_gain_1sigma;
767*4882a593Smuzhiyun pCfg->sw_cnr_gain_uvgain1 = uvnr.cnr_gain_uvgain1;
768*4882a593Smuzhiyun pCfg->sw_cnr_gain_uvgain0 = uvnr.cnr_gain_uvgain0;
769*4882a593Smuzhiyun pCfg->sw_cnr_lmed3_alpha = uvnr.cnr_lmed3_alpha;
770*4882a593Smuzhiyun pCfg->sw_cnr_lbf5_gain_y = uvnr.cnr_lbf5_gain_y;
771*4882a593Smuzhiyun pCfg->sw_cnr_lbf5_gain_c = uvnr.cnr_lbf5_gain_c;
772*4882a593Smuzhiyun
773*4882a593Smuzhiyun pCfg->sw_cnr_lbf5_weit_d3 = uvnr.cnr_lbf5_weit_d[3];
774*4882a593Smuzhiyun pCfg->sw_cnr_lbf5_weit_d2 = uvnr.cnr_lbf5_weit_d[2];
775*4882a593Smuzhiyun pCfg->sw_cnr_lbf5_weit_d1 = uvnr.cnr_lbf5_weit_d[1];
776*4882a593Smuzhiyun pCfg->sw_cnr_lbf5_weit_d0 = uvnr.cnr_lbf5_weit_d[0];
777*4882a593Smuzhiyun pCfg->sw_cnr_lbf5_weit_d4 = uvnr.cnr_lbf5_weit_d[4];
778*4882a593Smuzhiyun
779*4882a593Smuzhiyun pCfg->sw_cnr_hmed3_alpha = uvnr.cnr_hmed3_alpha;
780*4882a593Smuzhiyun pCfg->sw_cnr_hbf5_weit_src = uvnr.cnr_hbf5_weit_src;
781*4882a593Smuzhiyun pCfg->sw_cnr_hbf5_min_wgt = uvnr.cnr_hbf5_min_wgt;
782*4882a593Smuzhiyun pCfg->sw_cnr_hbf5_sigma = uvnr.cnr_hbf5_sigma;
783*4882a593Smuzhiyun pCfg->sw_cnr_lbf5_weit_src = uvnr.cnr_lbf5_weit_src;
784*4882a593Smuzhiyun pCfg->sw_cnr_lbf3_sigma = uvnr.cnr_lbf3_sigma;
785*4882a593Smuzhiyun
786*4882a593Smuzhiyun }
787*4882a593Smuzhiyun #endif
788*4882a593Smuzhiyun #if RKAIQ_HAVE_YNR_V2
789*4882a593Smuzhiyun void
convertAiqYnrToIsp21Params(struct isp21_isp_params_cfg & isp_cfg,rk_aiq_isp_ynr_v21_t & ynr)790*4882a593Smuzhiyun Isp21Params::convertAiqYnrToIsp21Params(struct isp21_isp_params_cfg& isp_cfg,
791*4882a593Smuzhiyun rk_aiq_isp_ynr_v21_t& ynr)
792*4882a593Smuzhiyun {
793*4882a593Smuzhiyun struct isp21_ynr_cfg * pCfg = &isp_cfg.others.ynr_cfg;
794*4882a593Smuzhiyun
795*4882a593Smuzhiyun LOGD_ANR("%s:%d: enter\n", __FUNCTION__, __LINE__);
796*4882a593Smuzhiyun
797*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_YNR;
798*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_YNR;
799*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_YNR;
800*4882a593Smuzhiyun
801*4882a593Smuzhiyun pCfg->sw_ynr_thumb_mix_cur_en = ynr.ynr_thumb_mix_cur_en;
802*4882a593Smuzhiyun pCfg->sw_ynr_global_gain_alpha = ynr.ynr_global_gain_alpha;
803*4882a593Smuzhiyun pCfg->sw_ynr_global_gain = ynr.ynr_global_gain;
804*4882a593Smuzhiyun pCfg->sw_ynr_flt1x1_bypass_sel = ynr.ynr_flt1x1_bypass_sel;
805*4882a593Smuzhiyun
806*4882a593Smuzhiyun pCfg->sw_ynr_sft5x5_bypass = ynr.ynr_sft5x5_bypass;
807*4882a593Smuzhiyun pCfg->sw_ynr_flt1x1_bypass = ynr.ynr_flt1x1_bypass;
808*4882a593Smuzhiyun pCfg->sw_ynr_lgft3x3_bypass = ynr.ynr_lgft3x3_bypass;
809*4882a593Smuzhiyun pCfg->sw_ynr_lbft5x5_bypass = ynr.ynr_lbft5x5_bypass;
810*4882a593Smuzhiyun pCfg->sw_ynr_bft3x3_bypass = ynr.ynr_bft3x3_bypass;
811*4882a593Smuzhiyun if(ynr.ynr_en == 0) {
812*4882a593Smuzhiyun pCfg->sw_ynr_sft5x5_bypass = 0x01;
813*4882a593Smuzhiyun pCfg->sw_ynr_flt1x1_bypass = 0x01;
814*4882a593Smuzhiyun pCfg->sw_ynr_lgft3x3_bypass = 0x01;
815*4882a593Smuzhiyun pCfg->sw_ynr_lbft5x5_bypass = 0x01;
816*4882a593Smuzhiyun pCfg->sw_ynr_bft3x3_bypass = 0x01;
817*4882a593Smuzhiyun }
818*4882a593Smuzhiyun
819*4882a593Smuzhiyun pCfg->sw_ynr_rnr_max_r = ynr.ynr_rnr_max_r;
820*4882a593Smuzhiyun pCfg->sw_ynr_low_bf_inv1 = ynr.ynr_low_bf_inv[1];
821*4882a593Smuzhiyun pCfg->sw_ynr_low_bf_inv0 = ynr.ynr_low_bf_inv[0];
822*4882a593Smuzhiyun pCfg->sw_ynr_low_peak_supress = ynr.ynr_low_peak_supress;
823*4882a593Smuzhiyun pCfg->sw_ynr_low_thred_adj = ynr.ynr_low_thred_adj;
824*4882a593Smuzhiyun pCfg->sw_ynr_low_dist_adj = ynr.ynr_low_dist_adj;
825*4882a593Smuzhiyun
826*4882a593Smuzhiyun pCfg->sw_ynr_low_edge_adj_thresh = ynr.ynr_low_edge_adj_thresh;
827*4882a593Smuzhiyun pCfg->sw_ynr_low_bi_weight = ynr.ynr_low_bi_weight;
828*4882a593Smuzhiyun pCfg->sw_ynr_low_weight = ynr.ynr_low_weight;
829*4882a593Smuzhiyun pCfg->sw_ynr_low_center_weight = ynr.ynr_low_center_weight;
830*4882a593Smuzhiyun pCfg->sw_ynr_hi_min_adj = ynr.ynr_hi_min_adj;
831*4882a593Smuzhiyun pCfg->sw_ynr_high_thred_adj = ynr.ynr_high_thred_adj;
832*4882a593Smuzhiyun
833*4882a593Smuzhiyun pCfg->sw_ynr_high_retain_weight = ynr.ynr_high_retain_weight;
834*4882a593Smuzhiyun pCfg->sw_ynr_hi_edge_thed = ynr.ynr_hi_edge_thed;
835*4882a593Smuzhiyun
836*4882a593Smuzhiyun pCfg->sw_ynr_base_filter_weight2 = ynr.ynr_base_filter_weight[2];
837*4882a593Smuzhiyun pCfg->sw_ynr_base_filter_weight1 = ynr.ynr_base_filter_weight[1];
838*4882a593Smuzhiyun pCfg->sw_ynr_base_filter_weight0 = ynr.ynr_base_filter_weight[0];
839*4882a593Smuzhiyun
840*4882a593Smuzhiyun pCfg->sw_ynr_low_gauss1_coeff2 = ynr.ynr_low_gauss1_coeff[2];
841*4882a593Smuzhiyun pCfg->sw_ynr_low_gauss1_coeff1 = ynr.ynr_low_gauss1_coeff[1];
842*4882a593Smuzhiyun pCfg->sw_ynr_low_gauss1_coeff0 = ynr.ynr_low_gauss1_coeff[0];
843*4882a593Smuzhiyun
844*4882a593Smuzhiyun pCfg->sw_ynr_low_gauss2_coeff2 = ynr.ynr_low_gauss2_coeff[2];
845*4882a593Smuzhiyun pCfg->sw_ynr_low_gauss2_coeff1 = ynr.ynr_low_gauss2_coeff[1];
846*4882a593Smuzhiyun pCfg->sw_ynr_low_gauss2_coeff0 = ynr.ynr_low_gauss2_coeff[0];
847*4882a593Smuzhiyun
848*4882a593Smuzhiyun pCfg->sw_ynr_direction_weight3 = ynr.ynr_direction_weight[3];
849*4882a593Smuzhiyun pCfg->sw_ynr_direction_weight2 = ynr.ynr_direction_weight[2];
850*4882a593Smuzhiyun pCfg->sw_ynr_direction_weight1 = ynr.ynr_direction_weight[1];
851*4882a593Smuzhiyun pCfg->sw_ynr_direction_weight0 = ynr.ynr_direction_weight[0];
852*4882a593Smuzhiyun
853*4882a593Smuzhiyun pCfg->sw_ynr_direction_weight7 = ynr.ynr_direction_weight[7];
854*4882a593Smuzhiyun pCfg->sw_ynr_direction_weight6 = ynr.ynr_direction_weight[6];
855*4882a593Smuzhiyun pCfg->sw_ynr_direction_weight5 = ynr.ynr_direction_weight[5];
856*4882a593Smuzhiyun pCfg->sw_ynr_direction_weight4 = ynr.ynr_direction_weight[4];
857*4882a593Smuzhiyun
858*4882a593Smuzhiyun for(int i = 0; i < ISP21_YNR_XY_NUM; i++) {
859*4882a593Smuzhiyun pCfg->sw_ynr_luma_points_x[i] = ynr.ynr_luma_points_x[i];
860*4882a593Smuzhiyun pCfg->sw_ynr_lsgm_y[i] = ynr.ynr_lsgm_y[i];
861*4882a593Smuzhiyun pCfg->sw_ynr_hsgm_y[i] = ynr.ynr_hsgm_y[i];
862*4882a593Smuzhiyun pCfg->sw_ynr_rnr_strength3[i] = ynr.ynr_rnr_strength[i];
863*4882a593Smuzhiyun }
864*4882a593Smuzhiyun
865*4882a593Smuzhiyun LOGD_ANR("%s:%d: exit\n", __FUNCTION__, __LINE__);
866*4882a593Smuzhiyun
867*4882a593Smuzhiyun }
868*4882a593Smuzhiyun #endif
869*4882a593Smuzhiyun #if RKAIQ_HAVE_SHARP_V3
870*4882a593Smuzhiyun void
convertAiqSharpenToIsp21Params(struct isp21_isp_params_cfg & isp_cfg,rk_aiq_isp_sharp_v21_t & sharp)871*4882a593Smuzhiyun Isp21Params::convertAiqSharpenToIsp21Params(struct isp21_isp_params_cfg& isp_cfg,
872*4882a593Smuzhiyun rk_aiq_isp_sharp_v21_t& sharp)
873*4882a593Smuzhiyun {
874*4882a593Smuzhiyun struct isp21_sharp_cfg * pCfg = &isp_cfg.others.sharp_cfg;
875*4882a593Smuzhiyun
876*4882a593Smuzhiyun LOGD_ASHARP("%s:%d: enter\n", __FUNCTION__, __LINE__);
877*4882a593Smuzhiyun
878*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_SHARP;
879*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_SHARP;
880*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_SHARP;
881*4882a593Smuzhiyun
882*4882a593Smuzhiyun pCfg->sw_sharp_bypass = sharp.sharp_bypass;
883*4882a593Smuzhiyun if(sharp.sharp_en == 0) {
884*4882a593Smuzhiyun pCfg->sw_sharp_bypass = 0x01;
885*4882a593Smuzhiyun }
886*4882a593Smuzhiyun
887*4882a593Smuzhiyun pCfg->sw_sharp_sharp_ratio = sharp.sharp_sharp_ratio;
888*4882a593Smuzhiyun pCfg->sw_sharp_bf_ratio = sharp.sharp_bf_ratio;
889*4882a593Smuzhiyun pCfg->sw_sharp_gaus_ratio = sharp.sharp_gaus_ratio;
890*4882a593Smuzhiyun pCfg->sw_sharp_pbf_ratio = sharp.sharp_pbf_ratio;
891*4882a593Smuzhiyun
892*4882a593Smuzhiyun for(int i = 0; i < ISP21_SHARP_X_NUM; i++) {
893*4882a593Smuzhiyun pCfg->sw_sharp_luma_dx[i] = sharp.sharp_luma_dx[i];
894*4882a593Smuzhiyun }
895*4882a593Smuzhiyun
896*4882a593Smuzhiyun for(int i = 0; i < ISP21_SHARP_Y_NUM; i++) {
897*4882a593Smuzhiyun pCfg->sw_sharp_pbf_sigma_inv[i] = sharp.sharp_pbf_sigma_inv[i];
898*4882a593Smuzhiyun }
899*4882a593Smuzhiyun
900*4882a593Smuzhiyun for(int i = 0; i < ISP21_SHARP_Y_NUM; i++) {
901*4882a593Smuzhiyun pCfg->sw_sharp_bf_sigma_inv[i] = sharp.sharp_bf_sigma_inv[i];
902*4882a593Smuzhiyun }
903*4882a593Smuzhiyun
904*4882a593Smuzhiyun pCfg->sw_sharp_bf_sigma_shift = sharp.sharp_bf_sigma_shift;
905*4882a593Smuzhiyun pCfg->sw_sharp_pbf_sigma_shift = sharp.sharp_pbf_sigma_shift;
906*4882a593Smuzhiyun
907*4882a593Smuzhiyun for(int i = 0; i < ISP21_SHARP_Y_NUM; i++) {
908*4882a593Smuzhiyun pCfg->sw_sharp_ehf_th[i] = sharp.sharp_ehf_th[i];
909*4882a593Smuzhiyun }
910*4882a593Smuzhiyun
911*4882a593Smuzhiyun for(int i = 0; i < ISP21_SHARP_Y_NUM; i++) {
912*4882a593Smuzhiyun pCfg->sw_sharp_clip_hf[i] = sharp.sharp_clip_hf[i];
913*4882a593Smuzhiyun }
914*4882a593Smuzhiyun
915*4882a593Smuzhiyun pCfg->sw_sharp_pbf_coef_2 = sharp.sharp_pbf_coef[2];
916*4882a593Smuzhiyun pCfg->sw_sharp_pbf_coef_1 = sharp.sharp_pbf_coef[1];
917*4882a593Smuzhiyun pCfg->sw_sharp_pbf_coef_0 = sharp.sharp_pbf_coef[0];
918*4882a593Smuzhiyun
919*4882a593Smuzhiyun pCfg->sw_sharp_bf_coef_2 = sharp.sharp_bf_coef[2];
920*4882a593Smuzhiyun pCfg->sw_sharp_bf_coef_1 = sharp.sharp_bf_coef[1];
921*4882a593Smuzhiyun pCfg->sw_sharp_bf_coef_0 = sharp.sharp_bf_coef[0];
922*4882a593Smuzhiyun
923*4882a593Smuzhiyun pCfg->sw_sharp_gaus_coef_2 = sharp.sharp_gaus_coef[2];
924*4882a593Smuzhiyun pCfg->sw_sharp_gaus_coef_1 = sharp.sharp_gaus_coef[1];
925*4882a593Smuzhiyun pCfg->sw_sharp_gaus_coef_0 = sharp.sharp_gaus_coef[0];
926*4882a593Smuzhiyun
927*4882a593Smuzhiyun LOGD_ASHARP("%s:%d: exit\n", __FUNCTION__, __LINE__);
928*4882a593Smuzhiyun
929*4882a593Smuzhiyun }
930*4882a593Smuzhiyun #endif
931*4882a593Smuzhiyun #if RKAIQ_HAVE_DRC_V10
932*4882a593Smuzhiyun void
convertAiqDrcToIsp21Params(struct isp21_isp_params_cfg & isp_cfg,rk_aiq_isp_drc_v21_t & adrc_data)933*4882a593Smuzhiyun Isp21Params::convertAiqDrcToIsp21Params(struct isp21_isp_params_cfg& isp_cfg,
934*4882a593Smuzhiyun rk_aiq_isp_drc_v21_t& adrc_data)
935*4882a593Smuzhiyun {
936*4882a593Smuzhiyun if (adrc_data.bDrcEn) {
937*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << Rk_ISP21_DRC_ID;
938*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << Rk_ISP21_DRC_ID;
939*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << Rk_ISP21_DRC_ID;
940*4882a593Smuzhiyun } else {
941*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << Rk_ISP21_DRC_ID;
942*4882a593Smuzhiyun isp_cfg.module_ens &= ~(1LL << Rk_ISP21_DRC_ID);
943*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~(1LL << Rk_ISP21_DRC_ID);
944*4882a593Smuzhiyun return;
945*4882a593Smuzhiyun }
946*4882a593Smuzhiyun
947*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_offset_pow2 = adrc_data.DrcProcRes.Drc_v10.sw_drc_offset_pow2;
948*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_compres_scl = adrc_data.DrcProcRes.Drc_v10.sw_drc_compres_scl;
949*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_position = adrc_data.DrcProcRes.Drc_v10.sw_drc_position;
950*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_delta_scalein = adrc_data.DrcProcRes.Drc_v10.sw_drc_delta_scalein;
951*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_hpdetail_ratio =
952*4882a593Smuzhiyun adrc_data.DrcProcRes.Drc_v10.sw_drc_hpdetail_ratio;
953*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_lpdetail_ratio =
954*4882a593Smuzhiyun adrc_data.DrcProcRes.Drc_v10.sw_drc_lpdetail_ratio;
955*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_weicur_pix = adrc_data.DrcProcRes.Drc_v10.sw_drc_weicur_pix;
956*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_weipre_frame = adrc_data.DrcProcRes.Drc_v10.sw_drc_weipre_frame;
957*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_force_sgm_inv0 =
958*4882a593Smuzhiyun adrc_data.DrcProcRes.Drc_v10.sw_drc_force_sgm_inv0;
959*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_motion_scl = adrc_data.DrcProcRes.Drc_v10.sw_drc_motion_scl;
960*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_edge_scl = adrc_data.DrcProcRes.Drc_v10.sw_drc_edge_scl;
961*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_space_sgm_inv1 =
962*4882a593Smuzhiyun adrc_data.DrcProcRes.Drc_v10.sw_drc_space_sgm_inv1;
963*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_space_sgm_inv0 =
964*4882a593Smuzhiyun adrc_data.DrcProcRes.Drc_v10.sw_drc_space_sgm_inv0;
965*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_range_sgm_inv1 =
966*4882a593Smuzhiyun adrc_data.DrcProcRes.Drc_v10.sw_drc_range_sgm_inv1;
967*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_range_sgm_inv0 =
968*4882a593Smuzhiyun adrc_data.DrcProcRes.Drc_v10.sw_drc_range_sgm_inv0;
969*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_weig_maxl = adrc_data.DrcProcRes.Drc_v10.sw_drc_weig_maxl;
970*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_weig_bilat = adrc_data.DrcProcRes.Drc_v10.sw_drc_weig_bilat;
971*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_iir_weight = adrc_data.DrcProcRes.Drc_v10.sw_drc_iir_weight;
972*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_min_ogain = adrc_data.DrcProcRes.Drc_v10.sw_drc_min_ogain;
973*4882a593Smuzhiyun
974*4882a593Smuzhiyun for(int i = 0; i < 17; i++) {
975*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_gain_y[i] = adrc_data.DrcProcRes.Drc_v10.sw_drc_gain_y[i];
976*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_compres_y[i] =
977*4882a593Smuzhiyun adrc_data.DrcProcRes.Drc_v10.sw_drc_compres_y[i];
978*4882a593Smuzhiyun isp_cfg.others.drc_cfg.sw_drc_scale_y[i] = adrc_data.DrcProcRes.Drc_v10.sw_drc_scale_y[i];
979*4882a593Smuzhiyun }
980*4882a593Smuzhiyun
981*4882a593Smuzhiyun #if 0
982*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: sw_drc_offset_pow2 %d", __LINE__, isp_cfg.others.drc_cfg.sw_drc_offset_pow2);
983*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_offset_pow2 %d", isp_cfg.others.drc_cfg.sw_drc_offset_pow2);
984*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_compres_scl %d", isp_cfg.others.drc_cfg.sw_drc_compres_scl);
985*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_position %d", isp_cfg.others.drc_cfg.sw_drc_position);
986*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_delta_scalein %d", isp_cfg.others.drc_cfg.sw_drc_delta_scalein);
987*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_hpdetail_ratio %d", isp_cfg.others.drc_cfg.sw_drc_hpdetail_ratio);
988*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_lpdetail_ratio %d", isp_cfg.others.drc_cfg.sw_drc_lpdetail_ratio);
989*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_weicur_pix %d", isp_cfg.others.drc_cfg.sw_drc_weicur_pix);
990*4882a593Smuzhiyun
991*4882a593Smuzhiyun #endif
992*4882a593Smuzhiyun }
993*4882a593Smuzhiyun #endif
994*4882a593Smuzhiyun
995*4882a593Smuzhiyun template<class T>
convertAiqAgicToIsp21Params(T & isp_cfg,const rk_aiq_isp_gic_v21_t & agic)996*4882a593Smuzhiyun void Isp21Params::convertAiqAgicToIsp21Params(T& isp_cfg,
997*4882a593Smuzhiyun const rk_aiq_isp_gic_v21_t& agic)
998*4882a593Smuzhiyun {
999*4882a593Smuzhiyun bool enable = agic.gic_en;
1000*4882a593Smuzhiyun if (enable) {
1001*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_GIC_ID;
1002*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_GIC_ID;
1003*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_GIC_ID;
1004*4882a593Smuzhiyun } else {
1005*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_GIC_ID;
1006*4882a593Smuzhiyun isp_cfg.module_ens &= ~(1LL << RK_ISP2X_GIC_ID);
1007*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~(1LL << RK_ISP2X_GIC_ID);
1008*4882a593Smuzhiyun }
1009*4882a593Smuzhiyun
1010*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regmingradthrdark2 = agic.ProcResV21.regmingradthrdark2;
1011*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regmingradthrdark1 = agic.ProcResV21.regmingradthrdark1;
1012*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regminbusythre = agic.ProcResV21.regminbusythre;
1013*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regdarkthre = agic.ProcResV21.regdarkthre;
1014*4882a593Smuzhiyun
1015*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regmaxcorvboth = agic.ProcResV21.regmaxcorvboth;
1016*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regdarktthrehi = agic.ProcResV21.regdarktthrehi;
1017*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regkgrad2dark = agic.ProcResV21.regkgrad2dark;
1018*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regkgrad1dark = agic.ProcResV21.regkgrad1dark;
1019*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regstrengthglobal_fix = agic.ProcResV21.regstrengthglobal_fix;
1020*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regdarkthrestep = agic.ProcResV21.regdarkthrestep;
1021*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regkgrad2 = agic.ProcResV21.regkgrad2;
1022*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regkgrad1 = agic.ProcResV21.regkgrad1;
1023*4882a593Smuzhiyun isp_cfg.others.gic_cfg.reggbthre = agic.ProcResV21.reggbthre;
1024*4882a593Smuzhiyun
1025*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regmaxcorv = agic.ProcResV21.regmaxcorv;
1026*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regmingradthr2 = agic.ProcResV21.regmingradthr2;
1027*4882a593Smuzhiyun isp_cfg.others.gic_cfg.regmingradthr1 = agic.ProcResV21.regmingradthr1;
1028*4882a593Smuzhiyun isp_cfg.others.gic_cfg.gr_ratio = agic.ProcResV21.gr_ratio;
1029*4882a593Smuzhiyun isp_cfg.others.gic_cfg.noise_scale = agic.ProcResV21.noise_scale;
1030*4882a593Smuzhiyun isp_cfg.others.gic_cfg.noise_base = agic.ProcResV21.noise_base;
1031*4882a593Smuzhiyun isp_cfg.others.gic_cfg.diff_clip = agic.ProcResV21.diff_clip;
1032*4882a593Smuzhiyun for (int i = 0; i < 15; i++) isp_cfg.others.gic_cfg.sigma_y[i] = agic.ProcResV21.sigma_y[i];
1033*4882a593Smuzhiyun }
1034*4882a593Smuzhiyun
1035*4882a593Smuzhiyun template<class T>
1036*4882a593Smuzhiyun void
convertAiqCsmToIsp21Params(T & isp_cfg,const rk_aiq_acsm_params_t & csm_param)1037*4882a593Smuzhiyun Isp21Params::convertAiqCsmToIsp21Params(T& isp_cfg,
1038*4882a593Smuzhiyun const rk_aiq_acsm_params_t& csm_param)
1039*4882a593Smuzhiyun {
1040*4882a593Smuzhiyun struct isp21_csm_cfg* csm_cfg = &isp_cfg.others.csm_cfg;
1041*4882a593Smuzhiyun if (csm_param.op_mode == RK_AIQ_OP_MODE_MANUAL ||
1042*4882a593Smuzhiyun csm_param.op_mode == RK_AIQ_OP_MODE_AUTO) {
1043*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_CSM;
1044*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CSM;
1045*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_CSM;
1046*4882a593Smuzhiyun csm_cfg->csm_full_range = csm_param.full_range ? 1 : 0;
1047*4882a593Smuzhiyun csm_cfg->csm_y_offset = csm_param.y_offset;
1048*4882a593Smuzhiyun csm_cfg->csm_c_offset = csm_param.c_offset;
1049*4882a593Smuzhiyun for (int i = 0; i < RK_AIQ_CSM_COEFF_NUM; i++) {
1050*4882a593Smuzhiyun csm_cfg->csm_coeff[i] = csm_param.coeff[i] > 0
1051*4882a593Smuzhiyun ? (short)(csm_param.coeff[i] * 128 + 0.5)
1052*4882a593Smuzhiyun : (short)(csm_param.coeff[i] * 128 - 0.5);
1053*4882a593Smuzhiyun }
1054*4882a593Smuzhiyun } else {
1055*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_CSM;
1056*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CSM;
1057*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~(ISP2X_MODULE_CSM);
1058*4882a593Smuzhiyun }
1059*4882a593Smuzhiyun }
1060*4882a593Smuzhiyun #if RKAIQ_HAVE_CGC_V1
1061*4882a593Smuzhiyun template <class T>
convertAiqCgcToIsp21Params(T & isp_cfg,const rk_aiq_acgc_params_t & cgc_param)1062*4882a593Smuzhiyun void Isp21Params::convertAiqCgcToIsp21Params(T& isp_cfg,
1063*4882a593Smuzhiyun const rk_aiq_acgc_params_t& cgc_param) {
1064*4882a593Smuzhiyun struct isp21_cgc_cfg* cgc_cfg = &isp_cfg.others.cgc_cfg;
1065*4882a593Smuzhiyun if (cgc_param.op_mode == RK_AIQ_OP_MODE_MANUAL ||
1066*4882a593Smuzhiyun cgc_param.op_mode == RK_AIQ_OP_MODE_AUTO) {
1067*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_CGC;
1068*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CGC;
1069*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_CGC;
1070*4882a593Smuzhiyun cgc_cfg->ratio_en = cgc_param.cgc_ratio_en;
1071*4882a593Smuzhiyun cgc_cfg->yuv_limit = cgc_param.cgc_yuv_limit;
1072*4882a593Smuzhiyun } else {
1073*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_CGC;
1074*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CGC;
1075*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~(ISP2X_MODULE_CGC);
1076*4882a593Smuzhiyun }
1077*4882a593Smuzhiyun }
1078*4882a593Smuzhiyun #endif
1079*4882a593Smuzhiyun
1080*4882a593Smuzhiyun #define ISP3X_WBGAIN_INTSCALE_BIT 8
1081*4882a593Smuzhiyun
convertAiqExpIspDgainToIspParams(void * isp_cfg_,RKAiqAecExpInfo_t ae_exp)1082*4882a593Smuzhiyun void Isp21Params::convertAiqExpIspDgainToIspParams(void* isp_cfg_, RKAiqAecExpInfo_t ae_exp)
1083*4882a593Smuzhiyun {
1084*4882a593Smuzhiyun #if defined(ISP_HW_V30) || defined(ISP_HW_V21)
1085*4882a593Smuzhiyun
1086*4882a593Smuzhiyun #if defined(ISP_HW_V30)
1087*4882a593Smuzhiyun struct isp3x_isp_params_cfg* isp_cfg = (struct isp3x_isp_params_cfg*)isp_cfg_;
1088*4882a593Smuzhiyun uint16_t max_wb_gain = (1 << (ISP2X_WBGAIN_FIXSCALE_BIT + ISP3X_WBGAIN_INTSCALE_BIT)) - 1;
1089*4882a593Smuzhiyun #elif defined(ISP_HW_V21)
1090*4882a593Smuzhiyun struct isp21_isp_params_cfg* isp_cfg = (struct isp21_isp_params_cfg*)isp_cfg_;
1091*4882a593Smuzhiyun uint16_t max_wb_gain = (1 << (ISP2X_WBGAIN_FIXSCALE_BIT + ISP2X_WBGAIN_INTSCALE_BIT)) - 1;
1092*4882a593Smuzhiyun #else
1093*4882a593Smuzhiyun LOGE("not suppport !");
1094*4882a593Smuzhiyun #endif
1095*4882a593Smuzhiyun struct isp21_awb_gain_cfg * cfg = &isp_cfg->others.awb_gain_cfg;
1096*4882a593Smuzhiyun
1097*4882a593Smuzhiyun if(_working_mode == RK_AIQ_WORKING_MODE_NORMAL) {
1098*4882a593Smuzhiyun
1099*4882a593Smuzhiyun float isp_dgain = ae_exp.LinearExp.exp_real_params.isp_dgain;
1100*4882a593Smuzhiyun isp_dgain = isp_dgain >= 1.0f ? isp_dgain : 1.0f;
1101*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"cid: %d, isp_dgain:%0.3f\n", _CamPhyId, isp_dgain);
1102*4882a593Smuzhiyun bool isRecalc = true;
1103*4882a593Smuzhiyun if (isp_dgain < 1.0000001f)
1104*4882a593Smuzhiyun isRecalc = false;
1105*4882a593Smuzhiyun
1106*4882a593Smuzhiyun if (isRecalc) {
1107*4882a593Smuzhiyun cfg->gain0_red = MIN(cfg->gain0_red * isp_dgain + 0.5, max_wb_gain);
1108*4882a593Smuzhiyun cfg->gain0_green_r = MIN(cfg->gain0_green_r * isp_dgain + 0.5, max_wb_gain);
1109*4882a593Smuzhiyun cfg->gain0_green_b = MIN(cfg->gain0_green_b * isp_dgain + 0.5, max_wb_gain);
1110*4882a593Smuzhiyun cfg->gain0_blue = MIN(cfg->gain0_blue * isp_dgain + 0.5, max_wb_gain);
1111*4882a593Smuzhiyun
1112*4882a593Smuzhiyun cfg->gain1_red = MIN(cfg->gain1_red * isp_dgain + 0.5, max_wb_gain);
1113*4882a593Smuzhiyun cfg->gain1_green_r = MIN(cfg->gain1_green_r * isp_dgain + 0.5, max_wb_gain);
1114*4882a593Smuzhiyun cfg->gain1_green_b = MIN(cfg->gain1_green_b * isp_dgain + 0.5, max_wb_gain);
1115*4882a593Smuzhiyun cfg->gain1_blue = MIN(cfg->gain1_blue * isp_dgain + 0.5, max_wb_gain);
1116*4882a593Smuzhiyun
1117*4882a593Smuzhiyun cfg->gain2_red = MIN(cfg->gain2_red * isp_dgain + 0.5, max_wb_gain);
1118*4882a593Smuzhiyun cfg->gain2_green_r = MIN(cfg->gain2_green_r * isp_dgain + 0.5, max_wb_gain);
1119*4882a593Smuzhiyun cfg->gain2_green_b = MIN(cfg->gain2_green_b * isp_dgain + 0.5, max_wb_gain);
1120*4882a593Smuzhiyun cfg->gain2_blue = MIN(cfg->gain2_blue * isp_dgain + 0.5, max_wb_gain);
1121*4882a593Smuzhiyun }
1122*4882a593Smuzhiyun
1123*4882a593Smuzhiyun if (mBlcResult) {
1124*4882a593Smuzhiyun uint16_t base_wb_gain = 1 << ISP2X_WBGAIN_FIXSCALE_BIT;
1125*4882a593Smuzhiyun int32_t tmp = 0;
1126*4882a593Smuzhiyun RkAiqIspBlcParamsProxyV21* blc_proxy = dynamic_cast<RkAiqIspBlcParamsProxyV21*>(mBlcResult);
1127*4882a593Smuzhiyun rk_aiq_isp_blc_v21_t& blc = blc_proxy->data()->result;
1128*4882a593Smuzhiyun
1129*4882a593Smuzhiyun if (isRecalc) {
1130*4882a593Smuzhiyun tmp = (uint16_t)(blc.v0.blc1_r * cfg->gain0_red / base_wb_gain + 0.5);
1131*4882a593Smuzhiyun if(tmp > 0x1fff)
1132*4882a593Smuzhiyun tmp = 0x1fff;
1133*4882a593Smuzhiyun if(tmp < 0)
1134*4882a593Smuzhiyun tmp = 0;
1135*4882a593Smuzhiyun
1136*4882a593Smuzhiyun isp_cfg->others.bls_cfg.bls1_val.r = tmp;
1137*4882a593Smuzhiyun
1138*4882a593Smuzhiyun tmp = (uint16_t)(blc.v0.blc1_gr * cfg->gain0_green_r / base_wb_gain + 0.5);
1139*4882a593Smuzhiyun if(tmp > 0x1fff)
1140*4882a593Smuzhiyun tmp = 0x1fff;
1141*4882a593Smuzhiyun if(tmp < 0)
1142*4882a593Smuzhiyun tmp = 0;
1143*4882a593Smuzhiyun isp_cfg->others.bls_cfg.bls1_val.gr = tmp;
1144*4882a593Smuzhiyun
1145*4882a593Smuzhiyun tmp = (uint16_t)(blc.v0.blc1_gb * cfg->gain0_green_b / base_wb_gain + 0.5);
1146*4882a593Smuzhiyun if(tmp > 0x1fff)
1147*4882a593Smuzhiyun tmp = 0x1fff;
1148*4882a593Smuzhiyun if(tmp < 0)
1149*4882a593Smuzhiyun tmp = 0;
1150*4882a593Smuzhiyun isp_cfg->others.bls_cfg.bls1_val.gb = tmp;
1151*4882a593Smuzhiyun
1152*4882a593Smuzhiyun tmp = (uint16_t)(blc.v0.blc1_b * cfg->gain0_blue / base_wb_gain + 0.5);
1153*4882a593Smuzhiyun if(tmp > 0x1fff)
1154*4882a593Smuzhiyun tmp = 0x1fff;
1155*4882a593Smuzhiyun if(tmp < 0)
1156*4882a593Smuzhiyun tmp = 0;
1157*4882a593Smuzhiyun isp_cfg->others.bls_cfg.bls1_val.b = tmp;
1158*4882a593Smuzhiyun }
1159*4882a593Smuzhiyun #define MAX_LSC_VALUE 8191
1160*4882a593Smuzhiyun #if defined (RKAIQ_HAVE_LSC_V2) || defined (RKAIQ_HAVE_LSC_V3)
1161*4882a593Smuzhiyun struct isp3x_lsc_cfg * cfg = &isp_cfg->others.lsc_cfg;
1162*4882a593Smuzhiyun cfg->sector_16x16 = true;
1163*4882a593Smuzhiyun #else
1164*4882a593Smuzhiyun struct isp2x_lsc_cfg * cfg = &isp_cfg->others.lsc_cfg;
1165*4882a593Smuzhiyun #endif
1166*4882a593Smuzhiyun struct isp21_bls_cfg &bls_cfg = isp_cfg->others.bls_cfg;
1167*4882a593Smuzhiyun if(bls_cfg.bls1_en && bls_cfg.bls1_val.b >0 && bls_cfg.bls1_val.r>0
1168*4882a593Smuzhiyun && bls_cfg.bls1_val.gb >0 && bls_cfg.bls1_val.gr>0 ){
1169*4882a593Smuzhiyun if(_lsc_en){
1170*4882a593Smuzhiyun for(int i=0;i<ISP3X_LSC_DATA_TBL_SIZE;i++){
1171*4882a593Smuzhiyun cfg->b_data_tbl[i] = cfg->b_data_tbl[i]*((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.b);
1172*4882a593Smuzhiyun cfg->b_data_tbl[i] = MIN(cfg->b_data_tbl[i],MAX_LSC_VALUE);
1173*4882a593Smuzhiyun cfg->gb_data_tbl[i] = cfg->gb_data_tbl[i]*((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.gb);
1174*4882a593Smuzhiyun cfg->gb_data_tbl[i] = MIN(cfg->gb_data_tbl[i],MAX_LSC_VALUE);
1175*4882a593Smuzhiyun cfg->r_data_tbl[i] = cfg->r_data_tbl[i]*((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.r);
1176*4882a593Smuzhiyun cfg->r_data_tbl[i] = MIN(cfg->r_data_tbl[i],MAX_LSC_VALUE);
1177*4882a593Smuzhiyun cfg->gr_data_tbl[i] = cfg->gr_data_tbl[i]*((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.gr);
1178*4882a593Smuzhiyun cfg->gr_data_tbl[i] = MIN(cfg->gr_data_tbl[i],MAX_LSC_VALUE);
1179*4882a593Smuzhiyun }
1180*4882a593Smuzhiyun }else{
1181*4882a593Smuzhiyun isp_cfg->module_ens |= ISP2X_MODULE_LSC; //force open lsc
1182*4882a593Smuzhiyun isp_cfg->module_en_update |= ISP2X_MODULE_LSC;
1183*4882a593Smuzhiyun isp_cfg->module_cfg_update |= ISP2X_MODULE_LSC;
1184*4882a593Smuzhiyun for(int i=0;i<ISP3X_LSC_DATA_TBL_SIZE;i++){
1185*4882a593Smuzhiyun cfg->b_data_tbl[i] = 1024*((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.b);
1186*4882a593Smuzhiyun cfg->b_data_tbl[i] = MIN(cfg->b_data_tbl[i],MAX_LSC_VALUE);
1187*4882a593Smuzhiyun cfg->gb_data_tbl[i] = 1024*((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.gb);
1188*4882a593Smuzhiyun cfg->gb_data_tbl[i] = MIN(cfg->gb_data_tbl[i],MAX_LSC_VALUE);
1189*4882a593Smuzhiyun cfg->r_data_tbl[i] = 1024*((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.r);
1190*4882a593Smuzhiyun cfg->r_data_tbl[i] = MIN(cfg->r_data_tbl[i],MAX_LSC_VALUE);
1191*4882a593Smuzhiyun cfg->gr_data_tbl[i] = 1024*((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.gr);
1192*4882a593Smuzhiyun cfg->gr_data_tbl[i] = MIN(cfg->gr_data_tbl[i],MAX_LSC_VALUE);
1193*4882a593Smuzhiyun }
1194*4882a593Smuzhiyun }
1195*4882a593Smuzhiyun }
1196*4882a593Smuzhiyun }
1197*4882a593Smuzhiyun
1198*4882a593Smuzhiyun } else {
1199*4882a593Smuzhiyun
1200*4882a593Smuzhiyun float isp_dgain0 = ae_exp.HdrExp[0].exp_real_params.isp_dgain;
1201*4882a593Smuzhiyun float isp_dgain1 = ae_exp.HdrExp[1].exp_real_params.isp_dgain;
1202*4882a593Smuzhiyun float isp_dgain2 = ae_exp.HdrExp[2].exp_real_params.isp_dgain;
1203*4882a593Smuzhiyun
1204*4882a593Smuzhiyun isp_dgain0 = isp_dgain0 >= 1.0f ? isp_dgain0 : 1.0f;
1205*4882a593Smuzhiyun isp_dgain1 = isp_dgain1 >= 1.0f ? isp_dgain1 : 1.0f;
1206*4882a593Smuzhiyun isp_dgain2 = isp_dgain2 >= 1.0f ? isp_dgain2 : 1.0f;
1207*4882a593Smuzhiyun
1208*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"cid: %d, isp_dgain:%0.3f,%0.3f,%0.3f\n",
1209*4882a593Smuzhiyun _CamPhyId, isp_dgain0, isp_dgain1, isp_dgain2);
1210*4882a593Smuzhiyun if (isp_dgain0 < 1.0000001f &&
1211*4882a593Smuzhiyun isp_dgain1 < 1.0000001f &&
1212*4882a593Smuzhiyun isp_dgain2 < 1.0000001f )
1213*4882a593Smuzhiyun return;
1214*4882a593Smuzhiyun
1215*4882a593Smuzhiyun cfg->gain0_red = MIN(cfg->gain0_red * isp_dgain0 + 0.5, max_wb_gain);
1216*4882a593Smuzhiyun cfg->gain0_green_r = MIN(cfg->gain0_green_r * isp_dgain0 + 0.5, max_wb_gain);
1217*4882a593Smuzhiyun cfg->gain0_green_b = MIN(cfg->gain0_green_b * isp_dgain0 + 0.5, max_wb_gain);
1218*4882a593Smuzhiyun cfg->gain0_blue = MIN(cfg->gain0_blue * isp_dgain0 + 0.5, max_wb_gain);
1219*4882a593Smuzhiyun
1220*4882a593Smuzhiyun cfg->gain1_red = MIN(cfg->gain1_red * isp_dgain1 + 0.5, max_wb_gain);
1221*4882a593Smuzhiyun cfg->gain1_green_r = MIN(cfg->gain1_green_r * isp_dgain1 + 0.5, max_wb_gain);
1222*4882a593Smuzhiyun cfg->gain1_green_b = MIN(cfg->gain1_green_b * isp_dgain1 + 0.5, max_wb_gain);
1223*4882a593Smuzhiyun cfg->gain1_blue = MIN(cfg->gain1_blue * isp_dgain1 + 0.5, max_wb_gain);
1224*4882a593Smuzhiyun
1225*4882a593Smuzhiyun cfg->gain2_red = MIN(cfg->gain2_red * isp_dgain2 + 0.5, max_wb_gain);
1226*4882a593Smuzhiyun cfg->gain2_green_r = MIN(cfg->gain2_green_r * isp_dgain2 + 0.5, max_wb_gain);
1227*4882a593Smuzhiyun cfg->gain2_green_b = MIN(cfg->gain2_green_b * isp_dgain2 + 0.5, max_wb_gain);
1228*4882a593Smuzhiyun cfg->gain2_blue = MIN(cfg->gain2_blue * isp_dgain2 + 0.5, max_wb_gain);
1229*4882a593Smuzhiyun
1230*4882a593Smuzhiyun }
1231*4882a593Smuzhiyun #else
1232*4882a593Smuzhiyun // not support, do nothing
1233*4882a593Smuzhiyun #endif
1234*4882a593Smuzhiyun }
1235*4882a593Smuzhiyun
convert3aResultsToIspCfg(SmartPtr<cam3aResult> & result,void * isp_cfg_p,bool is_multi_isp)1236*4882a593Smuzhiyun bool Isp21Params::convert3aResultsToIspCfg(SmartPtr<cam3aResult> &result,
1237*4882a593Smuzhiyun void* isp_cfg_p, bool is_multi_isp)
1238*4882a593Smuzhiyun {
1239*4882a593Smuzhiyun struct isp21_isp_params_cfg& isp_cfg = *(struct isp21_isp_params_cfg*)isp_cfg_p;
1240*4882a593Smuzhiyun
1241*4882a593Smuzhiyun if (result.ptr() == NULL) {
1242*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "3A result empty");
1243*4882a593Smuzhiyun return false;
1244*4882a593Smuzhiyun }
1245*4882a593Smuzhiyun
1246*4882a593Smuzhiyun int32_t type = result->getType();
1247*4882a593Smuzhiyun // LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, module (0x%x) convert params!\n", __FUNCTION__, type);
1248*4882a593Smuzhiyun switch (type)
1249*4882a593Smuzhiyun {
1250*4882a593Smuzhiyun // followings are specific for isp21
1251*4882a593Smuzhiyun case RESULT_TYPE_EXPOSURE_PARAM:
1252*4882a593Smuzhiyun {
1253*4882a593Smuzhiyun RkAiqSensorExpParamsProxy* expParams =
1254*4882a593Smuzhiyun result.get_cast_ptr<RkAiqSensorExpParamsProxy>();
1255*4882a593Smuzhiyun if (expParams)
1256*4882a593Smuzhiyun convertAiqExpIspDgainToIspParams(isp_cfg_p,
1257*4882a593Smuzhiyun expParams->data()->aecExpInfo);
1258*4882a593Smuzhiyun }
1259*4882a593Smuzhiyun break;
1260*4882a593Smuzhiyun case RESULT_TYPE_AWBGAIN_PARAM:
1261*4882a593Smuzhiyun {
1262*4882a593Smuzhiyun RkAiqIspAwbGainParamsProxy* awb_gain = result.get_cast_ptr<RkAiqIspAwbGainParamsProxy>();
1263*4882a593Smuzhiyun if (awb_gain) {
1264*4882a593Smuzhiyun if(mBlcResult) {
1265*4882a593Smuzhiyun RkAiqIspBlcParamsProxyV21* blc = dynamic_cast<RkAiqIspBlcParamsProxyV21*>(mBlcResult);
1266*4882a593Smuzhiyun convertAiqAwbGainToIsp21Params(isp_cfg,
1267*4882a593Smuzhiyun awb_gain->data()->result, &blc->data()->result, true);
1268*4882a593Smuzhiyun } else {
1269*4882a593Smuzhiyun convertAiqAwbGainToIsp21Params(isp_cfg,
1270*4882a593Smuzhiyun awb_gain->data()->result, nullptr, true);
1271*4882a593Smuzhiyun }
1272*4882a593Smuzhiyun
1273*4882a593Smuzhiyun } else
1274*4882a593Smuzhiyun LOGE("don't get awb_gain params, convert awbgain params failed!");
1275*4882a593Smuzhiyun
1276*4882a593Smuzhiyun }
1277*4882a593Smuzhiyun break;
1278*4882a593Smuzhiyun case RESULT_TYPE_AWB_PARAM:
1279*4882a593Smuzhiyun {
1280*4882a593Smuzhiyun #if RKAIQ_HAVE_AWB_V21
1281*4882a593Smuzhiyun mAwbParams = result.ptr();
1282*4882a593Smuzhiyun RkAiqIspAwbParamsProxyV21* params = result.get_cast_ptr<RkAiqIspAwbParamsProxyV21>();
1283*4882a593Smuzhiyun if (params)
1284*4882a593Smuzhiyun convertAiqAwbToIsp21Params(isp_cfg, params->data()->result, true);
1285*4882a593Smuzhiyun #endif
1286*4882a593Smuzhiyun }
1287*4882a593Smuzhiyun break;
1288*4882a593Smuzhiyun case RESULT_TYPE_CCM_PARAM:
1289*4882a593Smuzhiyun {
1290*4882a593Smuzhiyun RkAiqIspCcmParamsProxy* params = result.get_cast_ptr<RkAiqIspCcmParamsProxy>();
1291*4882a593Smuzhiyun #if RKAIQ_HAVE_CCM_V1
1292*4882a593Smuzhiyun if (params)
1293*4882a593Smuzhiyun convertAiqCcmToIsp21Params(isp_cfg, params->data()->result);
1294*4882a593Smuzhiyun #endif
1295*4882a593Smuzhiyun }
1296*4882a593Smuzhiyun break;
1297*4882a593Smuzhiyun case RESULT_TYPE_DRC_PARAM:
1298*4882a593Smuzhiyun {
1299*4882a593Smuzhiyun #if RKAIQ_HAVE_DRC_V10
1300*4882a593Smuzhiyun RkAiqIspDrcParamsProxy* params = result.get_cast_ptr<RkAiqIspDrcParamsProxy>();
1301*4882a593Smuzhiyun if (params)
1302*4882a593Smuzhiyun convertAiqDrcToIsp21Params(isp_cfg, params->data()->result);
1303*4882a593Smuzhiyun #endif
1304*4882a593Smuzhiyun }
1305*4882a593Smuzhiyun break;
1306*4882a593Smuzhiyun case RESULT_TYPE_BLC_PARAM:
1307*4882a593Smuzhiyun {
1308*4882a593Smuzhiyun RkAiqIspBlcParamsProxyV21* params = result.get_cast_ptr<RkAiqIspBlcParamsProxyV21>();
1309*4882a593Smuzhiyun if (params)
1310*4882a593Smuzhiyun convertAiqBlcToIsp21Params(isp_cfg, params->data()->result);
1311*4882a593Smuzhiyun }
1312*4882a593Smuzhiyun break;
1313*4882a593Smuzhiyun case RESULT_TYPE_RAWNR_PARAM:
1314*4882a593Smuzhiyun {
1315*4882a593Smuzhiyun #if RKAIQ_HAVE_BAYERNR_V2
1316*4882a593Smuzhiyun RkAiqIspBaynrParamsProxyV21* params = result.get_cast_ptr<RkAiqIspBaynrParamsProxyV21>();
1317*4882a593Smuzhiyun if (params)
1318*4882a593Smuzhiyun convertAiqRawnrToIsp21Params(isp_cfg, params->data()->result);
1319*4882a593Smuzhiyun #endif
1320*4882a593Smuzhiyun }
1321*4882a593Smuzhiyun break;
1322*4882a593Smuzhiyun case RESULT_TYPE_YNR_PARAM:
1323*4882a593Smuzhiyun {
1324*4882a593Smuzhiyun #if RKAIQ_HAVE_YNR_V2
1325*4882a593Smuzhiyun RkAiqIspYnrParamsProxyV21* params = result.get_cast_ptr<RkAiqIspYnrParamsProxyV21>();
1326*4882a593Smuzhiyun if (params)
1327*4882a593Smuzhiyun convertAiqYnrToIsp21Params(isp_cfg, params->data()->result);
1328*4882a593Smuzhiyun #endif
1329*4882a593Smuzhiyun }
1330*4882a593Smuzhiyun break;
1331*4882a593Smuzhiyun case RESULT_TYPE_UVNR_PARAM:
1332*4882a593Smuzhiyun {
1333*4882a593Smuzhiyun #if RKAIQ_HAVE_CNR_V1
1334*4882a593Smuzhiyun RkAiqIspCnrParamsProxyV21* params = result.get_cast_ptr<RkAiqIspCnrParamsProxyV21>();
1335*4882a593Smuzhiyun if (params)
1336*4882a593Smuzhiyun convertAiqUvnrToIsp21Params(isp_cfg, params->data()->result);
1337*4882a593Smuzhiyun #endif
1338*4882a593Smuzhiyun }
1339*4882a593Smuzhiyun break;
1340*4882a593Smuzhiyun case RESULT_TYPE_SHARPEN_PARAM:
1341*4882a593Smuzhiyun {
1342*4882a593Smuzhiyun #if RKAIQ_HAVE_SHARP_V3
1343*4882a593Smuzhiyun RkAiqIspSharpenParamsProxyV21* params = result.get_cast_ptr<RkAiqIspSharpenParamsProxyV21>();
1344*4882a593Smuzhiyun if (params)
1345*4882a593Smuzhiyun convertAiqSharpenToIsp21Params(isp_cfg, params->data()->result);
1346*4882a593Smuzhiyun #endif
1347*4882a593Smuzhiyun }
1348*4882a593Smuzhiyun break;
1349*4882a593Smuzhiyun case RESULT_TYPE_DEHAZE_PARAM:
1350*4882a593Smuzhiyun {
1351*4882a593Smuzhiyun #if RKAIQ_HAVE_DEHAZE_V11
1352*4882a593Smuzhiyun RkAiqIspDehazeParamsProxy* params = result.get_cast_ptr<RkAiqIspDehazeParamsProxy>();
1353*4882a593Smuzhiyun if (params)
1354*4882a593Smuzhiyun convertAiqAdehazeToIsp21Params(isp_cfg, params->data()->result);
1355*4882a593Smuzhiyun #endif
1356*4882a593Smuzhiyun }
1357*4882a593Smuzhiyun break;
1358*4882a593Smuzhiyun case RESULT_TYPE_GIC_PARAM:
1359*4882a593Smuzhiyun {
1360*4882a593Smuzhiyun RkAiqIspGicParamsProxy* params = result.get_cast_ptr<RkAiqIspGicParamsProxy>();
1361*4882a593Smuzhiyun if (params)
1362*4882a593Smuzhiyun convertAiqAgicToIsp21Params(isp_cfg, params->data()->result);
1363*4882a593Smuzhiyun }
1364*4882a593Smuzhiyun break;
1365*4882a593Smuzhiyun // followings are the same as isp20
1366*4882a593Smuzhiyun case RESULT_TYPE_AEC_PARAM:
1367*4882a593Smuzhiyun {
1368*4882a593Smuzhiyun RkAiqIspAecParamsProxy* params = result.get_cast_ptr<RkAiqIspAecParamsProxy>();
1369*4882a593Smuzhiyun if (params) {
1370*4882a593Smuzhiyun convertAiqAeToIsp20Params(isp_cfg, params->data()->result);
1371*4882a593Smuzhiyun }
1372*4882a593Smuzhiyun }
1373*4882a593Smuzhiyun break;
1374*4882a593Smuzhiyun case RESULT_TYPE_HIST_PARAM:
1375*4882a593Smuzhiyun {
1376*4882a593Smuzhiyun RkAiqIspHistParamsProxy* params = result.get_cast_ptr<RkAiqIspHistParamsProxy>();
1377*4882a593Smuzhiyun if (params)
1378*4882a593Smuzhiyun convertAiqHistToIsp20Params(isp_cfg, params->data()->result);
1379*4882a593Smuzhiyun }
1380*4882a593Smuzhiyun break;
1381*4882a593Smuzhiyun case RESULT_TYPE_AF_PARAM:
1382*4882a593Smuzhiyun {
1383*4882a593Smuzhiyun #if RKAIQ_HAVE_AF_V20 || RKAIQ_ONLY_AF_STATS_V20
1384*4882a593Smuzhiyun RkAiqIspAfParamsProxy* params = result.get_cast_ptr<RkAiqIspAfParamsProxy>();
1385*4882a593Smuzhiyun if (params)
1386*4882a593Smuzhiyun convertAiqAfToIsp20Params(isp_cfg, params->data()->result, true);
1387*4882a593Smuzhiyun #endif
1388*4882a593Smuzhiyun }
1389*4882a593Smuzhiyun break;
1390*4882a593Smuzhiyun case RESULT_TYPE_DPCC_PARAM:
1391*4882a593Smuzhiyun {
1392*4882a593Smuzhiyun RkAiqIspDpccParamsProxy* params = result.get_cast_ptr<RkAiqIspDpccParamsProxy>();
1393*4882a593Smuzhiyun if (params)
1394*4882a593Smuzhiyun convertAiqDpccToIsp20Params(isp_cfg, params->data()->result);
1395*4882a593Smuzhiyun }
1396*4882a593Smuzhiyun break;
1397*4882a593Smuzhiyun case RESULT_TYPE_MERGE_PARAM:
1398*4882a593Smuzhiyun {
1399*4882a593Smuzhiyun #if RKAIQ_HAVE_MERGE_V10
1400*4882a593Smuzhiyun RkAiqIspMergeParamsProxy* params = result.get_cast_ptr<RkAiqIspMergeParamsProxy>();
1401*4882a593Smuzhiyun if (params) {
1402*4882a593Smuzhiyun convertAiqMergeToIsp20Params(isp_cfg, params->data()->result);
1403*4882a593Smuzhiyun }
1404*4882a593Smuzhiyun #endif
1405*4882a593Smuzhiyun }
1406*4882a593Smuzhiyun break;
1407*4882a593Smuzhiyun case RESULT_TYPE_LSC_PARAM:
1408*4882a593Smuzhiyun {
1409*4882a593Smuzhiyun #ifdef RKAIQ_HAVE_LSC_V1
1410*4882a593Smuzhiyun RkAiqIspLscParamsProxy* params = result.get_cast_ptr<RkAiqIspLscParamsProxy>();
1411*4882a593Smuzhiyun if (params)
1412*4882a593Smuzhiyun convertAiqLscToIsp20Params(isp_cfg, params->data()->result);
1413*4882a593Smuzhiyun #endif
1414*4882a593Smuzhiyun }
1415*4882a593Smuzhiyun break;
1416*4882a593Smuzhiyun case RESULT_TYPE_DEBAYER_PARAM:
1417*4882a593Smuzhiyun {
1418*4882a593Smuzhiyun RkAiqIspDebayerParamsProxy* params = result.get_cast_ptr<RkAiqIspDebayerParamsProxy>();
1419*4882a593Smuzhiyun if (params)
1420*4882a593Smuzhiyun convertAiqAdemosaicToIsp20Params(isp_cfg, params->data()->result);
1421*4882a593Smuzhiyun }
1422*4882a593Smuzhiyun break;
1423*4882a593Smuzhiyun case RESULT_TYPE_LDCH_PARAM:
1424*4882a593Smuzhiyun {
1425*4882a593Smuzhiyun RkAiqIspLdchParamsProxy* params = result.get_cast_ptr<RkAiqIspLdchParamsProxy>();
1426*4882a593Smuzhiyun if (params)
1427*4882a593Smuzhiyun convertAiqAldchToIsp20Params(isp_cfg, params->data()->result);
1428*4882a593Smuzhiyun }
1429*4882a593Smuzhiyun break;
1430*4882a593Smuzhiyun case RESULT_TYPE_LUT3D_PARAM:
1431*4882a593Smuzhiyun {
1432*4882a593Smuzhiyun #if RKAIQ_HAVE_3DLUT_V1
1433*4882a593Smuzhiyun RkAiqIspLut3dParamsProxy* params = result.get_cast_ptr<RkAiqIspLut3dParamsProxy>();
1434*4882a593Smuzhiyun if (params)
1435*4882a593Smuzhiyun convertAiqA3dlutToIsp20Params(isp_cfg, params->data()->result);
1436*4882a593Smuzhiyun #endif
1437*4882a593Smuzhiyun }
1438*4882a593Smuzhiyun break;
1439*4882a593Smuzhiyun case RESULT_TYPE_AGAMMA_PARAM:
1440*4882a593Smuzhiyun {
1441*4882a593Smuzhiyun #if RKAIQ_HAVE_GAMMA_V10
1442*4882a593Smuzhiyun RkAiqIspAgammaParamsProxy* params = result.get_cast_ptr<RkAiqIspAgammaParamsProxy>();
1443*4882a593Smuzhiyun if (params)
1444*4882a593Smuzhiyun convertAiqAgammaToIsp20Params(isp_cfg, params->data()->result);
1445*4882a593Smuzhiyun #endif
1446*4882a593Smuzhiyun }
1447*4882a593Smuzhiyun break;
1448*4882a593Smuzhiyun case RESULT_TYPE_ADEGAMMA_PARAM:
1449*4882a593Smuzhiyun {
1450*4882a593Smuzhiyun RkAiqIspAdegammaParamsProxy* params = result.get_cast_ptr<RkAiqIspAdegammaParamsProxy>();
1451*4882a593Smuzhiyun if (params)
1452*4882a593Smuzhiyun convertAiqAdegammaToIsp20Params(isp_cfg, params->data()->result);
1453*4882a593Smuzhiyun }
1454*4882a593Smuzhiyun break;
1455*4882a593Smuzhiyun case RESULT_TYPE_WDR_PARAM:
1456*4882a593Smuzhiyun #if 0
1457*4882a593Smuzhiyun {
1458*4882a593Smuzhiyun SmartPtr<RkAiqIspWdrParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspWdrParamsProxy>();
1459*4882a593Smuzhiyun if (params.ptr())
1460*4882a593Smuzhiyun convertAiqWdrToIsp20Params(isp_cfg, params->data()->result);
1461*4882a593Smuzhiyun }
1462*4882a593Smuzhiyun #endif
1463*4882a593Smuzhiyun break;
1464*4882a593Smuzhiyun case RESULT_TYPE_CSM_PARAM:
1465*4882a593Smuzhiyun {
1466*4882a593Smuzhiyun RkAiqIspCsmParamsProxy* params = result.get_cast_ptr<RkAiqIspCsmParamsProxy>();
1467*4882a593Smuzhiyun if (params)
1468*4882a593Smuzhiyun convertAiqCsmToIsp21Params(isp_cfg, params->data()->result);
1469*4882a593Smuzhiyun }
1470*4882a593Smuzhiyun break;
1471*4882a593Smuzhiyun case RESULT_TYPE_CGC_PARAM: {
1472*4882a593Smuzhiyun #if RKAIQ_HAVE_CGC_V1
1473*4882a593Smuzhiyun RkAiqIspCgcParamsProxy* params = result.get_cast_ptr<RkAiqIspCgcParamsProxy>();
1474*4882a593Smuzhiyun if (params)
1475*4882a593Smuzhiyun convertAiqCgcToIsp21Params(isp_cfg, params->data()->result);
1476*4882a593Smuzhiyun #endif
1477*4882a593Smuzhiyun }
1478*4882a593Smuzhiyun break;
1479*4882a593Smuzhiyun case RESULT_TYPE_CONV422_PARAM:
1480*4882a593Smuzhiyun break;
1481*4882a593Smuzhiyun case RESULT_TYPE_YUVCONV_PARAM:
1482*4882a593Smuzhiyun break;
1483*4882a593Smuzhiyun case RESULT_TYPE_CP_PARAM:
1484*4882a593Smuzhiyun {
1485*4882a593Smuzhiyun #if RKAIQ_HAVE_ACP_V10
1486*4882a593Smuzhiyun RkAiqIspCpParamsProxy* params = result.get_cast_ptr<RkAiqIspCpParamsProxy>();
1487*4882a593Smuzhiyun if (params)
1488*4882a593Smuzhiyun convertAiqCpToIsp20Params(isp_cfg, params->data()->result);
1489*4882a593Smuzhiyun #endif
1490*4882a593Smuzhiyun }
1491*4882a593Smuzhiyun break;
1492*4882a593Smuzhiyun case RESULT_TYPE_IE_PARAM:
1493*4882a593Smuzhiyun {
1494*4882a593Smuzhiyun #if RKAIQ_HAVE_AIE_V10
1495*4882a593Smuzhiyun RkAiqIspIeParamsProxy* params = result.get_cast_ptr<RkAiqIspIeParamsProxy>();
1496*4882a593Smuzhiyun if (params)
1497*4882a593Smuzhiyun convertAiqIeToIsp20Params(isp_cfg, params->data()->result);
1498*4882a593Smuzhiyun #endif
1499*4882a593Smuzhiyun }
1500*4882a593Smuzhiyun break;
1501*4882a593Smuzhiyun default:
1502*4882a593Smuzhiyun LOGE("unknown param type: 0x%x!", type);
1503*4882a593Smuzhiyun return false;
1504*4882a593Smuzhiyun }
1505*4882a593Smuzhiyun
1506*4882a593Smuzhiyun return true;
1507*4882a593Smuzhiyun }
1508*4882a593Smuzhiyun
1509*4882a593Smuzhiyun } //namspace RkCam
1510