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