xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/hwi/isp21/Isp21Params.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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