xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/hwi/isp3x/Isp3xParams.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  *  Copyright (c) 2021 Rockchip Corporation
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  */
17 
18 #include "Isp3xParams.h"
19 
20 namespace RkCam {
21 
fixedAwbOveflowToIsp3xParams(void * isp_cfg_p,bool is_dual_isp)22 void Isp3xParams::fixedAwbOveflowToIsp3xParams(void* isp_cfg_p, bool is_dual_isp)
23 {
24     //in overfloce case :
25     // 1 sw_rawawb_wp_luma_wei_en is force to be true  and the weight is 31
26     // 2 sw_rawawb_blk_with_luma_wei_en is force to be true
27 
28     struct isp3x_isp_params_cfg& isp_cfg = *(struct isp3x_isp_params_cfg*)isp_cfg_p;
29     if(is_dual_isp == false) {
30         struct isp3x_rawawb_meas_cfg * awb_cfg_v30 = &isp_cfg.meas.rawawb;
31         int w, h;
32         w = awb_cfg_v30->sw_rawawb_h_size;
33         h = awb_cfg_v30->sw_rawawb_v_size;
34         if(w * h > RK_AIQ_AWB_STAT_MAX_AREA) {
35             LOGD_AWB("%s wp_luma_wei is force to be enable and the weight is %d", __FUNCTION__, (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1);
36             awb_cfg_v30->sw_rawawb_wp_luma_wei_en0 = true;
37             awb_cfg_v30->sw_rawawb_wp_luma_wei_en1 = true;
38             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w0 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
39             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w1 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
40             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w2 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
41             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w3 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
42             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w4 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
43             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w5 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
44             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w6 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
45             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w7 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
46             awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w8 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
47             awb_cfg_v30->sw_rawawb_blk_with_luma_wei_en = true;
48         }
49     } else {
50         struct isp3x_isp_params_cfg* left_isp_params  = &isp_cfg;
51         struct isp3x_isp_params_cfg* right_isp_params = &isp_cfg + 1;
52         struct isp3x_rawawb_meas_cfg * left_awb_cfg_v30 = &left_isp_params->meas.rawawb;
53         struct isp3x_rawawb_meas_cfg * right_awb_cfg_v30 = &right_isp_params->meas.rawawb;
54         int w, h, w2, h2;
55         w = left_awb_cfg_v30->sw_rawawb_h_size;
56         h = left_awb_cfg_v30->sw_rawawb_v_size;
57         w2 = right_awb_cfg_v30->sw_rawawb_h_size;
58         h2 = right_awb_cfg_v30->sw_rawawb_v_size;
59         if(w * h > RK_AIQ_AWB_STAT_MAX_AREA || w2 * h2 > RK_AIQ_AWB_STAT_MAX_AREA ) {
60             LOGD_AWB("wp_luma_wei is for to be enable and the weight is %d", (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1);
61             left_awb_cfg_v30->sw_rawawb_wp_luma_wei_en0 = true;
62             left_awb_cfg_v30->sw_rawawb_wp_luma_wei_en1 = true;
63             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w0 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
64             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w1 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
65             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w2 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
66             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w3 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
67             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w4 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
68             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w5 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
69             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w6 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
70             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w7 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
71             left_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w8 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
72             right_awb_cfg_v30->sw_rawawb_wp_luma_wei_en0 = true;
73             right_awb_cfg_v30->sw_rawawb_wp_luma_wei_en1 = true;
74             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w0 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
75             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w1 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
76             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w2 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
77             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w3 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
78             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w4 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
79             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w5 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
80             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w6 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
81             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w7 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
82             right_awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w8 = (1 << RK_AIQ_AWB_WP_WEIGHT_BIS_V201) - 1;
83             left_awb_cfg_v30->sw_rawawb_blk_with_luma_wei_en = true;
84             right_awb_cfg_v30->sw_rawawb_blk_with_luma_wei_en = true;
85         }
86     }
87 }
88 
89 #if RKAIQ_HAVE_AWB_V21
convertAiqAwbToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,const rk_aiq_isp_awb_meas_cfg_v3x_t & awb_meas,bool awb_cfg_udpate)90 void Isp3xParams::convertAiqAwbToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
91         const rk_aiq_isp_awb_meas_cfg_v3x_t& awb_meas,
92         bool awb_cfg_udpate)
93 {
94     if(awb_cfg_udpate) {
95         if(awb_meas.awbEnable) {
96             isp_cfg.module_ens |= ISP2X_MODULE_RAWAWB;
97             isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAWB;
98             isp_cfg.module_en_update |= ISP2X_MODULE_RAWAWB;
99         }
100     } else {
101         return;
102     }
103     struct isp3x_rawawb_meas_cfg * awb_cfg_v30 = &isp_cfg.meas.rawawb;
104     awb_cfg_v30->rawawb_sel                =    awb_meas.frameChoose;
105     awb_cfg_v30->sw_rawawb_xy_en0          =  awb_meas.xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
106     awb_cfg_v30->sw_rawawb_uv_en0          =  awb_meas.uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
107     awb_cfg_v30->sw_rawawb_3dyuv_en0       =  awb_meas.threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
108     awb_cfg_v30->sw_rawawb_xy_en1          =  awb_meas.xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
109     awb_cfg_v30->sw_rawawb_uv_en1          =  awb_meas.uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
110     awb_cfg_v30->sw_rawawb_3dyuv_en1          =  awb_meas.threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
111     awb_cfg_v30->sw_rawawb_wp_blk_wei_en0    =  awb_meas.blkWeightEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
112     awb_cfg_v30->sw_rawawb_wp_blk_wei_en1    =  awb_meas.blkWeightEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
113     awb_cfg_v30->sw_rawlsc_bypass_en    =  awb_meas.lscBypEnable;
114     awb_cfg_v30->sw_rawawb_blk_measure_enable    =  awb_meas.blkStatisticsEnable;
115     awb_cfg_v30->sw_rawawb_blk_measure_mode     =  awb_meas.blkMeasureMode;
116     awb_cfg_v30->sw_rawawb_blk_measure_xytype     =  awb_meas.xyRangeTypeForBlkStatistics;
117     awb_cfg_v30->sw_rawawb_blk_measure_illu_idx     =  awb_meas.illIdxForBlkStatistics;
118     awb_cfg_v30->sw_rawawb_blk_with_luma_wei_en  =  awb_meas.blkStatisticsWithLumaWeightEn;
119     awb_cfg_v30->sw_rawawb_wp_luma_wei_en0   =  awb_meas.wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
120     awb_cfg_v30->sw_rawawb_wp_luma_wei_en1   =  awb_meas.wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
121     awb_cfg_v30->sw_rawawb_wp_hist_xytype    =  awb_meas.xyRangeTypeForWpHist;
122     awb_cfg_v30->sw_rawawb_3dyuv_ls_idx0       =  awb_meas.threeDyuvIllu[0];
123     awb_cfg_v30->sw_rawawb_3dyuv_ls_idx1       =  awb_meas.threeDyuvIllu[1];
124     awb_cfg_v30->sw_rawawb_3dyuv_ls_idx2       =  awb_meas.threeDyuvIllu[2];
125     awb_cfg_v30->sw_rawawb_3dyuv_ls_idx3       =  awb_meas.threeDyuvIllu[3];
126     awb_cfg_v30->sw_rawawb_light_num      =  awb_meas.lightNum;
127     awb_cfg_v30->sw_rawawb_h_offs         =  awb_meas.windowSet[0];
128     awb_cfg_v30->sw_rawawb_v_offs         =  awb_meas.windowSet[1];
129     awb_cfg_v30->sw_rawawb_h_size         =  awb_meas.windowSet[2];
130     awb_cfg_v30->sw_rawawb_v_size         =  awb_meas.windowSet[3];
131     awb_cfg_v30->sw_rawawb_wind_size = awb_meas.dsMode;
132     awb_cfg_v30->sw_rawawb_r_max          =  awb_meas.maxR;
133     awb_cfg_v30->sw_rawawb_g_max          =  awb_meas.maxG;
134     awb_cfg_v30->sw_rawawb_b_max          =  awb_meas.maxB;
135     awb_cfg_v30->sw_rawawb_y_max          =  awb_meas.maxY;
136     awb_cfg_v30->sw_rawawb_r_min          =  awb_meas.minR;
137     awb_cfg_v30->sw_rawawb_g_min          =  awb_meas.minG;
138     awb_cfg_v30->sw_rawawb_b_min          =  awb_meas.minB;
139     awb_cfg_v30->sw_rawawb_y_min          =  awb_meas.minY;
140     awb_cfg_v30->sw_rawawb_vertex0_u_0    =  awb_meas.uvRange_param[0].pu_region[0];
141     awb_cfg_v30->sw_rawawb_vertex0_v_0    =  awb_meas.uvRange_param[0].pv_region[0];
142     awb_cfg_v30->sw_rawawb_vertex1_u_0    =  awb_meas.uvRange_param[0].pu_region[1];
143     awb_cfg_v30->sw_rawawb_vertex1_v_0    =  awb_meas.uvRange_param[0].pv_region[1];
144     awb_cfg_v30->sw_rawawb_vertex2_u_0    =  awb_meas.uvRange_param[0].pu_region[2];
145     awb_cfg_v30->sw_rawawb_vertex2_v_0    =  awb_meas.uvRange_param[0].pv_region[2];
146     awb_cfg_v30->sw_rawawb_vertex3_u_0    =  awb_meas.uvRange_param[0].pu_region[3];
147     awb_cfg_v30->sw_rawawb_vertex3_v_0    =  awb_meas.uvRange_param[0].pv_region[3];
148     awb_cfg_v30->sw_rawawb_islope01_0      =  awb_meas.uvRange_param[0].slope_inv[0];
149     awb_cfg_v30->sw_rawawb_islope12_0      =  awb_meas.uvRange_param[0].slope_inv[1];
150     awb_cfg_v30->sw_rawawb_islope23_0      =  awb_meas.uvRange_param[0].slope_inv[2];
151     awb_cfg_v30->sw_rawawb_islope30_0      =  awb_meas.uvRange_param[0].slope_inv[3];
152     awb_cfg_v30->sw_rawawb_vertex0_u_1    =  awb_meas.uvRange_param[1].pu_region[0];
153     awb_cfg_v30->sw_rawawb_vertex0_v_1    =  awb_meas.uvRange_param[1].pv_region[0];
154     awb_cfg_v30->sw_rawawb_vertex1_u_1    =  awb_meas.uvRange_param[1].pu_region[1];
155     awb_cfg_v30->sw_rawawb_vertex1_v_1    =  awb_meas.uvRange_param[1].pv_region[1];
156     awb_cfg_v30->sw_rawawb_vertex2_u_1    =  awb_meas.uvRange_param[1].pu_region[2];
157     awb_cfg_v30->sw_rawawb_vertex2_v_1    =  awb_meas.uvRange_param[1].pv_region[2];
158     awb_cfg_v30->sw_rawawb_vertex3_u_1    =  awb_meas.uvRange_param[1].pu_region[3];
159     awb_cfg_v30->sw_rawawb_vertex3_v_1    =  awb_meas.uvRange_param[1].pv_region[3];
160     awb_cfg_v30->sw_rawawb_islope01_1      =  awb_meas.uvRange_param[1].slope_inv[0];
161     awb_cfg_v30->sw_rawawb_islope12_1      =  awb_meas.uvRange_param[1].slope_inv[1];
162     awb_cfg_v30->sw_rawawb_islope23_1      =  awb_meas.uvRange_param[1].slope_inv[2];
163     awb_cfg_v30->sw_rawawb_islope30_1      =  awb_meas.uvRange_param[1].slope_inv[3];
164     awb_cfg_v30->sw_rawawb_vertex0_u_2    =  awb_meas.uvRange_param[2].pu_region[0];
165     awb_cfg_v30->sw_rawawb_vertex0_v_2    =  awb_meas.uvRange_param[2].pv_region[0];
166     awb_cfg_v30->sw_rawawb_vertex1_u_2    =  awb_meas.uvRange_param[2].pu_region[1];
167     awb_cfg_v30->sw_rawawb_vertex1_v_2    =  awb_meas.uvRange_param[2].pv_region[1];
168     awb_cfg_v30->sw_rawawb_vertex2_u_2    =  awb_meas.uvRange_param[2].pu_region[2];
169     awb_cfg_v30->sw_rawawb_vertex2_v_2    =  awb_meas.uvRange_param[2].pv_region[2];
170     awb_cfg_v30->sw_rawawb_vertex3_u_2    =  awb_meas.uvRange_param[2].pu_region[3];
171     awb_cfg_v30->sw_rawawb_vertex3_v_2    =  awb_meas.uvRange_param[2].pv_region[3];
172     awb_cfg_v30->sw_rawawb_islope01_2      =  awb_meas.uvRange_param[2].slope_inv[0];
173     awb_cfg_v30->sw_rawawb_islope12_2      =  awb_meas.uvRange_param[2].slope_inv[1];
174     awb_cfg_v30->sw_rawawb_islope23_2      =  awb_meas.uvRange_param[2].slope_inv[2];
175     awb_cfg_v30->sw_rawawb_islope30_2      =  awb_meas.uvRange_param[2].slope_inv[3];
176     awb_cfg_v30->sw_rawawb_vertex0_u_3    =  awb_meas.uvRange_param[3].pu_region[0];
177     awb_cfg_v30->sw_rawawb_vertex0_v_3    =  awb_meas.uvRange_param[3].pv_region[0];
178     awb_cfg_v30->sw_rawawb_vertex1_u_3    =  awb_meas.uvRange_param[3].pu_region[1];
179     awb_cfg_v30->sw_rawawb_vertex1_v_3    =  awb_meas.uvRange_param[3].pv_region[1];
180     awb_cfg_v30->sw_rawawb_vertex2_u_3    =  awb_meas.uvRange_param[3].pu_region[2];
181     awb_cfg_v30->sw_rawawb_vertex2_v_3    =  awb_meas.uvRange_param[3].pv_region[2];
182     awb_cfg_v30->sw_rawawb_vertex3_u_3    =  awb_meas.uvRange_param[3].pu_region[3];
183     awb_cfg_v30->sw_rawawb_vertex3_v_3    =  awb_meas.uvRange_param[3].pv_region[3];
184     awb_cfg_v30->sw_rawawb_islope01_3      =  awb_meas.uvRange_param[3].slope_inv[0];
185     awb_cfg_v30->sw_rawawb_islope12_3      =  awb_meas.uvRange_param[3].slope_inv[1];
186     awb_cfg_v30->sw_rawawb_islope23_3      =  awb_meas.uvRange_param[3].slope_inv[2];
187     awb_cfg_v30->sw_rawawb_islope30_3      =  awb_meas.uvRange_param[3].slope_inv[3];
188     awb_cfg_v30->sw_rawawb_vertex0_u_4    =  awb_meas.uvRange_param[4].pu_region[0];
189     awb_cfg_v30->sw_rawawb_vertex0_v_4    =  awb_meas.uvRange_param[4].pv_region[0];
190     awb_cfg_v30->sw_rawawb_vertex1_u_4    =  awb_meas.uvRange_param[4].pu_region[1];
191     awb_cfg_v30->sw_rawawb_vertex1_v_4    =  awb_meas.uvRange_param[4].pv_region[1];
192     awb_cfg_v30->sw_rawawb_vertex2_u_4    =  awb_meas.uvRange_param[4].pu_region[2];
193     awb_cfg_v30->sw_rawawb_vertex2_v_4    =  awb_meas.uvRange_param[4].pv_region[2];
194     awb_cfg_v30->sw_rawawb_vertex3_u_4    =  awb_meas.uvRange_param[4].pu_region[3];
195     awb_cfg_v30->sw_rawawb_vertex3_v_4    =  awb_meas.uvRange_param[4].pv_region[3];
196     awb_cfg_v30->sw_rawawb_islope01_4      =  awb_meas.uvRange_param[4].slope_inv[0];
197     awb_cfg_v30->sw_rawawb_islope12_4      =  awb_meas.uvRange_param[4].slope_inv[1];
198     awb_cfg_v30->sw_rawawb_islope23_4      =  awb_meas.uvRange_param[4].slope_inv[2];
199     awb_cfg_v30->sw_rawawb_islope30_4      =  awb_meas.uvRange_param[4].slope_inv[3];
200     awb_cfg_v30->sw_rawawb_vertex0_u_5    =  awb_meas.uvRange_param[5].pu_region[0];
201     awb_cfg_v30->sw_rawawb_vertex0_v_5    =  awb_meas.uvRange_param[5].pv_region[0];
202     awb_cfg_v30->sw_rawawb_vertex1_u_5    =  awb_meas.uvRange_param[5].pu_region[1];
203     awb_cfg_v30->sw_rawawb_vertex1_v_5    =  awb_meas.uvRange_param[5].pv_region[1];
204     awb_cfg_v30->sw_rawawb_vertex2_u_5    =  awb_meas.uvRange_param[5].pu_region[2];
205     awb_cfg_v30->sw_rawawb_vertex2_v_5    =  awb_meas.uvRange_param[5].pv_region[2];
206     awb_cfg_v30->sw_rawawb_vertex3_u_5    =  awb_meas.uvRange_param[5].pu_region[3];
207     awb_cfg_v30->sw_rawawb_vertex3_v_5    =  awb_meas.uvRange_param[5].pv_region[3];
208     awb_cfg_v30->sw_rawawb_islope01_5      =  awb_meas.uvRange_param[5].slope_inv[0];
209     awb_cfg_v30->sw_rawawb_islope12_5      =  awb_meas.uvRange_param[5].slope_inv[1];
210     awb_cfg_v30->sw_rawawb_islope23_5      =  awb_meas.uvRange_param[5].slope_inv[2];
211     awb_cfg_v30->sw_rawawb_islope30_5      =  awb_meas.uvRange_param[5].slope_inv[3];
212     awb_cfg_v30->sw_rawawb_vertex0_u_6    =  awb_meas.uvRange_param[6].pu_region[0];
213     awb_cfg_v30->sw_rawawb_vertex0_v_6    =  awb_meas.uvRange_param[6].pv_region[0];
214     awb_cfg_v30->sw_rawawb_vertex1_u_6    =  awb_meas.uvRange_param[6].pu_region[1];
215     awb_cfg_v30->sw_rawawb_vertex1_v_6    =  awb_meas.uvRange_param[6].pv_region[1];
216     awb_cfg_v30->sw_rawawb_vertex2_u_6    =  awb_meas.uvRange_param[6].pu_region[2];
217     awb_cfg_v30->sw_rawawb_vertex2_v_6    =  awb_meas.uvRange_param[6].pv_region[2];
218     awb_cfg_v30->sw_rawawb_vertex3_u_6    =  awb_meas.uvRange_param[6].pu_region[3];
219     awb_cfg_v30->sw_rawawb_vertex3_v_6    =  awb_meas.uvRange_param[6].pv_region[3];
220     awb_cfg_v30->sw_rawawb_islope01_6      =  awb_meas.uvRange_param[6].slope_inv[0];
221     awb_cfg_v30->sw_rawawb_islope12_6      =  awb_meas.uvRange_param[6].slope_inv[1];
222     awb_cfg_v30->sw_rawawb_islope23_6      =  awb_meas.uvRange_param[6].slope_inv[2];
223     awb_cfg_v30->sw_rawawb_islope30_6      =  awb_meas.uvRange_param[6].slope_inv[3];
224     awb_cfg_v30->sw_rawawb_rgb2ryuvmat0_u =  awb_meas.icrgb2RYuv_matrix[0];
225     awb_cfg_v30->sw_rawawb_rgb2ryuvmat1_u =  awb_meas.icrgb2RYuv_matrix[1];
226     awb_cfg_v30->sw_rawawb_rgb2ryuvmat2_u =  awb_meas.icrgb2RYuv_matrix[2];
227     awb_cfg_v30->sw_rawawb_rgb2ryuvofs_u =  awb_meas.icrgb2RYuv_matrix[3];
228     awb_cfg_v30->sw_rawawb_rgb2ryuvmat0_v =  awb_meas.icrgb2RYuv_matrix[4];
229     awb_cfg_v30->sw_rawawb_rgb2ryuvmat1_v =  awb_meas.icrgb2RYuv_matrix[5];
230     awb_cfg_v30->sw_rawawb_rgb2ryuvmat2_v =  awb_meas.icrgb2RYuv_matrix[6];
231     awb_cfg_v30->sw_rawawb_rgb2ryuvofs_v =  awb_meas.icrgb2RYuv_matrix[7];
232     awb_cfg_v30->sw_rawawb_rgb2ryuvmat0_y =  awb_meas.icrgb2RYuv_matrix[8];
233     awb_cfg_v30->sw_rawawb_rgb2ryuvmat1_y =  awb_meas.icrgb2RYuv_matrix[9];
234     awb_cfg_v30->sw_rawawb_rgb2ryuvmat2_y =  awb_meas.icrgb2RYuv_matrix[10];
235     awb_cfg_v30->sw_rawawb_rgb2ryuvofs_y =  awb_meas.icrgb2RYuv_matrix[11];
236     awb_cfg_v30->sw_rawawb_rotu0_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcurve_u[0];
237     awb_cfg_v30->sw_rawawb_rotu1_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcurve_u[1];
238     awb_cfg_v30->sw_rawawb_rotu2_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcurve_u[2];
239     awb_cfg_v30->sw_rawawb_rotu3_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcurve_u[3];
240     awb_cfg_v30->sw_rawawb_rotu4_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcurve_u[4];
241     awb_cfg_v30->sw_rawawb_rotu5_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcurve_u[5];
242     awb_cfg_v30->sw_rawawb_th0_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcure_th[0];
243     awb_cfg_v30->sw_rawawb_th1_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcure_th[1];
244     awb_cfg_v30->sw_rawawb_th2_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcure_th[2];
245     awb_cfg_v30->sw_rawawb_th3_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcure_th[3];
246     awb_cfg_v30->sw_rawawb_th4_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcure_th[4];
247     awb_cfg_v30->sw_rawawb_th5_ls0 =  awb_meas.ic3Dyuv2Range_param[0].thcure_th[5];
248     awb_cfg_v30->sw_rawawb_coor_x1_ls0_u =  awb_meas.ic3Dyuv2Range_param[0].lineP1[0];
249     awb_cfg_v30->sw_rawawb_coor_x1_ls0_v =  awb_meas.ic3Dyuv2Range_param[0].lineP1[1];
250     awb_cfg_v30->sw_rawawb_coor_x1_ls0_y =  awb_meas.ic3Dyuv2Range_param[0].lineP1[2];
251     awb_cfg_v30->sw_rawawb_vec_x21_ls0_u =  awb_meas.ic3Dyuv2Range_param[0].vP1P2[0];
252     awb_cfg_v30->sw_rawawb_vec_x21_ls0_v =  awb_meas.ic3Dyuv2Range_param[0].vP1P2[1];
253     awb_cfg_v30->sw_rawawb_vec_x21_ls0_y =  awb_meas.ic3Dyuv2Range_param[0].vP1P2[2];
254     awb_cfg_v30->sw_rawawb_dis_x1x2_ls0 =  awb_meas.ic3Dyuv2Range_param[0].disP1P2;
255     awb_cfg_v30->sw_rawawb_rotu0_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcurve_u[0];
256     awb_cfg_v30->sw_rawawb_rotu1_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcurve_u[1];
257     awb_cfg_v30->sw_rawawb_rotu2_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcurve_u[2];
258     awb_cfg_v30->sw_rawawb_rotu3_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcurve_u[3];
259     awb_cfg_v30->sw_rawawb_rotu4_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcurve_u[4];
260     awb_cfg_v30->sw_rawawb_rotu5_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcurve_u[5];
261     awb_cfg_v30->sw_rawawb_th0_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcure_th[0];
262     awb_cfg_v30->sw_rawawb_th1_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcure_th[1];
263     awb_cfg_v30->sw_rawawb_th2_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcure_th[2];
264     awb_cfg_v30->sw_rawawb_th3_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcure_th[3];
265     awb_cfg_v30->sw_rawawb_th4_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcure_th[4];
266     awb_cfg_v30->sw_rawawb_th5_ls1 =  awb_meas.ic3Dyuv2Range_param[1].thcure_th[5];
267     awb_cfg_v30->sw_rawawb_coor_x1_ls1_u =  awb_meas.ic3Dyuv2Range_param[1].lineP1[0];
268     awb_cfg_v30->sw_rawawb_coor_x1_ls1_v =  awb_meas.ic3Dyuv2Range_param[1].lineP1[1];
269     awb_cfg_v30->sw_rawawb_coor_x1_ls1_y =  awb_meas.ic3Dyuv2Range_param[1].lineP1[2];
270     awb_cfg_v30->sw_rawawb_vec_x21_ls1_u =  awb_meas.ic3Dyuv2Range_param[1].vP1P2[0];
271     awb_cfg_v30->sw_rawawb_vec_x21_ls1_v =  awb_meas.ic3Dyuv2Range_param[1].vP1P2[1];
272     awb_cfg_v30->sw_rawawb_vec_x21_ls1_y =  awb_meas.ic3Dyuv2Range_param[1].vP1P2[2];
273     awb_cfg_v30->sw_rawawb_dis_x1x2_ls1 =  awb_meas.ic3Dyuv2Range_param[1].disP1P2;
274     awb_cfg_v30->sw_rawawb_rotu0_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcurve_u[0];
275     awb_cfg_v30->sw_rawawb_rotu1_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcurve_u[1];
276     awb_cfg_v30->sw_rawawb_rotu2_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcurve_u[2];
277     awb_cfg_v30->sw_rawawb_rotu3_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcurve_u[3];
278     awb_cfg_v30->sw_rawawb_rotu4_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcurve_u[4];
279     awb_cfg_v30->sw_rawawb_rotu5_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcurve_u[5];
280     awb_cfg_v30->sw_rawawb_th0_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcure_th[0];
281     awb_cfg_v30->sw_rawawb_th1_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcure_th[1];
282     awb_cfg_v30->sw_rawawb_th2_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcure_th[2];
283     awb_cfg_v30->sw_rawawb_th3_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcure_th[3];
284     awb_cfg_v30->sw_rawawb_th4_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcure_th[4];
285     awb_cfg_v30->sw_rawawb_th5_ls2 =  awb_meas.ic3Dyuv2Range_param[2].thcure_th[5];
286     awb_cfg_v30->sw_rawawb_coor_x1_ls2_u =  awb_meas.ic3Dyuv2Range_param[2].lineP1[0];
287     awb_cfg_v30->sw_rawawb_coor_x1_ls2_v =  awb_meas.ic3Dyuv2Range_param[2].lineP1[1];
288     awb_cfg_v30->sw_rawawb_coor_x1_ls2_y =  awb_meas.ic3Dyuv2Range_param[2].lineP1[2];
289     awb_cfg_v30->sw_rawawb_vec_x21_ls2_u =  awb_meas.ic3Dyuv2Range_param[2].vP1P2[0];
290     awb_cfg_v30->sw_rawawb_vec_x21_ls2_v =  awb_meas.ic3Dyuv2Range_param[2].vP1P2[1];
291     awb_cfg_v30->sw_rawawb_vec_x21_ls2_y =  awb_meas.ic3Dyuv2Range_param[2].vP1P2[2];
292     awb_cfg_v30->sw_rawawb_dis_x1x2_ls2 =  awb_meas.ic3Dyuv2Range_param[2].disP1P2;
293 
294     awb_cfg_v30->sw_rawawb_rotu0_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcurve_u[0];
295     awb_cfg_v30->sw_rawawb_rotu1_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcurve_u[1];
296     awb_cfg_v30->sw_rawawb_rotu2_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcurve_u[2];
297     awb_cfg_v30->sw_rawawb_rotu3_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcurve_u[3];
298     awb_cfg_v30->sw_rawawb_rotu4_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcurve_u[4];
299     awb_cfg_v30->sw_rawawb_rotu5_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcurve_u[5];
300     awb_cfg_v30->sw_rawawb_th0_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcure_th[0];
301     awb_cfg_v30->sw_rawawb_th1_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcure_th[1];
302     awb_cfg_v30->sw_rawawb_th2_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcure_th[2];
303     awb_cfg_v30->sw_rawawb_th3_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcure_th[3];
304     awb_cfg_v30->sw_rawawb_th4_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcure_th[4];
305     awb_cfg_v30->sw_rawawb_th5_ls3 =  awb_meas.ic3Dyuv2Range_param[3].thcure_th[5];
306     awb_cfg_v30->sw_rawawb_coor_x1_ls3_u =  awb_meas.ic3Dyuv2Range_param[3].lineP1[0];
307     awb_cfg_v30->sw_rawawb_coor_x1_ls3_v =  awb_meas.ic3Dyuv2Range_param[3].lineP1[1];
308     awb_cfg_v30->sw_rawawb_coor_x1_ls3_y =  awb_meas.ic3Dyuv2Range_param[3].lineP1[2];
309     awb_cfg_v30->sw_rawawb_vec_x21_ls3_u =  awb_meas.ic3Dyuv2Range_param[3].vP1P2[0];
310     awb_cfg_v30->sw_rawawb_vec_x21_ls3_v =  awb_meas.ic3Dyuv2Range_param[3].vP1P2[1];
311     awb_cfg_v30->sw_rawawb_vec_x21_ls3_y =  awb_meas.ic3Dyuv2Range_param[3].vP1P2[2];
312     awb_cfg_v30->sw_rawawb_dis_x1x2_ls3 =  awb_meas.ic3Dyuv2Range_param[3].disP1P2;
313     awb_cfg_v30->sw_rawawb_wt0            =  awb_meas.rgb2xy_param.pseudoLuminanceWeight[0];
314     awb_cfg_v30->sw_rawawb_wt1            =  awb_meas.rgb2xy_param.pseudoLuminanceWeight[1];
315     awb_cfg_v30->sw_rawawb_wt2            =  awb_meas.rgb2xy_param.pseudoLuminanceWeight[2];
316     awb_cfg_v30->sw_rawawb_mat0_x         =  awb_meas.rgb2xy_param.rotationMat[0];
317     awb_cfg_v30->sw_rawawb_mat1_x         =  awb_meas.rgb2xy_param.rotationMat[1];
318     awb_cfg_v30->sw_rawawb_mat2_x         =  awb_meas.rgb2xy_param.rotationMat[2];
319     awb_cfg_v30->sw_rawawb_mat0_y         =  awb_meas.rgb2xy_param.rotationMat[3];
320     awb_cfg_v30->sw_rawawb_mat1_y         =  awb_meas.rgb2xy_param.rotationMat[4];
321     awb_cfg_v30->sw_rawawb_mat2_y         =  awb_meas.rgb2xy_param.rotationMat[5];
322     awb_cfg_v30->sw_rawawb_nor_x0_0       =  awb_meas.xyRange_param[0].NorrangeX[0];
323     awb_cfg_v30->sw_rawawb_nor_x1_0       =  awb_meas.xyRange_param[0].NorrangeX[1];
324     awb_cfg_v30->sw_rawawb_nor_y0_0       =  awb_meas.xyRange_param[0].NorrangeY[0];
325     awb_cfg_v30->sw_rawawb_nor_y1_0       =  awb_meas.xyRange_param[0].NorrangeY[1];
326     awb_cfg_v30->sw_rawawb_big_x0_0       =  awb_meas.xyRange_param[0].SperangeX[0];
327     awb_cfg_v30->sw_rawawb_big_x1_0       =  awb_meas.xyRange_param[0].SperangeX[1];
328     awb_cfg_v30->sw_rawawb_big_y0_0       =  awb_meas.xyRange_param[0].SperangeY[0];
329     awb_cfg_v30->sw_rawawb_big_y1_0       =  awb_meas.xyRange_param[0].SperangeY[1];
330     awb_cfg_v30->sw_rawawb_nor_x0_1       =  awb_meas.xyRange_param[1].NorrangeX[0];
331     awb_cfg_v30->sw_rawawb_nor_x1_1       =  awb_meas.xyRange_param[1].NorrangeX[1];
332     awb_cfg_v30->sw_rawawb_nor_y0_1       =  awb_meas.xyRange_param[1].NorrangeY[0];
333     awb_cfg_v30->sw_rawawb_nor_y1_1       =  awb_meas.xyRange_param[1].NorrangeY[1];
334     awb_cfg_v30->sw_rawawb_big_x0_1       =  awb_meas.xyRange_param[1].SperangeX[0];
335     awb_cfg_v30->sw_rawawb_big_x1_1       =  awb_meas.xyRange_param[1].SperangeX[1];
336     awb_cfg_v30->sw_rawawb_big_y0_1       =  awb_meas.xyRange_param[1].SperangeY[0];
337     awb_cfg_v30->sw_rawawb_big_y1_1       =  awb_meas.xyRange_param[1].SperangeY[1];
338     awb_cfg_v30->sw_rawawb_nor_x0_2       =  awb_meas.xyRange_param[2].NorrangeX[0];
339     awb_cfg_v30->sw_rawawb_nor_x1_2       =  awb_meas.xyRange_param[2].NorrangeX[1];
340     awb_cfg_v30->sw_rawawb_nor_y0_2       =  awb_meas.xyRange_param[2].NorrangeY[0];
341     awb_cfg_v30->sw_rawawb_nor_y1_2       =  awb_meas.xyRange_param[2].NorrangeY[1];
342     awb_cfg_v30->sw_rawawb_big_x0_2       =  awb_meas.xyRange_param[2].SperangeX[0];
343     awb_cfg_v30->sw_rawawb_big_x1_2       =  awb_meas.xyRange_param[2].SperangeX[1];
344     awb_cfg_v30->sw_rawawb_big_y0_2       =  awb_meas.xyRange_param[2].SperangeY[0];
345     awb_cfg_v30->sw_rawawb_big_y1_2       =  awb_meas.xyRange_param[2].SperangeY[1];
346     awb_cfg_v30->sw_rawawb_nor_x0_3       =  awb_meas.xyRange_param[3].NorrangeX[0];
347     awb_cfg_v30->sw_rawawb_nor_x1_3       =  awb_meas.xyRange_param[3].NorrangeX[1];
348     awb_cfg_v30->sw_rawawb_nor_y0_3       =  awb_meas.xyRange_param[3].NorrangeY[0];
349     awb_cfg_v30->sw_rawawb_nor_y1_3       =  awb_meas.xyRange_param[3].NorrangeY[1];
350     awb_cfg_v30->sw_rawawb_big_x0_3       =  awb_meas.xyRange_param[3].SperangeX[0];
351     awb_cfg_v30->sw_rawawb_big_x1_3       =  awb_meas.xyRange_param[3].SperangeX[1];
352     awb_cfg_v30->sw_rawawb_big_y0_3       =  awb_meas.xyRange_param[3].SperangeY[0];
353     awb_cfg_v30->sw_rawawb_big_y1_3       =  awb_meas.xyRange_param[3].SperangeY[1];
354     awb_cfg_v30->sw_rawawb_nor_x0_4       =  awb_meas.xyRange_param[4].NorrangeX[0];
355     awb_cfg_v30->sw_rawawb_nor_x1_4       =  awb_meas.xyRange_param[4].NorrangeX[1];
356     awb_cfg_v30->sw_rawawb_nor_y0_4       =  awb_meas.xyRange_param[4].NorrangeY[0];
357     awb_cfg_v30->sw_rawawb_nor_y1_4       =  awb_meas.xyRange_param[4].NorrangeY[1];
358     awb_cfg_v30->sw_rawawb_big_x0_4       =  awb_meas.xyRange_param[4].SperangeX[0];
359     awb_cfg_v30->sw_rawawb_big_x1_4       =  awb_meas.xyRange_param[4].SperangeX[1];
360     awb_cfg_v30->sw_rawawb_big_y0_4       =  awb_meas.xyRange_param[4].SperangeY[0];
361     awb_cfg_v30->sw_rawawb_big_y1_4       =  awb_meas.xyRange_param[4].SperangeY[1];
362     awb_cfg_v30->sw_rawawb_nor_x0_5       =  awb_meas.xyRange_param[5].NorrangeX[0];
363     awb_cfg_v30->sw_rawawb_nor_x1_5       =  awb_meas.xyRange_param[5].NorrangeX[1];
364     awb_cfg_v30->sw_rawawb_nor_y0_5       =  awb_meas.xyRange_param[5].NorrangeY[0];
365     awb_cfg_v30->sw_rawawb_nor_y1_5       =  awb_meas.xyRange_param[5].NorrangeY[1];
366     awb_cfg_v30->sw_rawawb_big_x0_5       =  awb_meas.xyRange_param[5].SperangeX[0];
367     awb_cfg_v30->sw_rawawb_big_x1_5       =  awb_meas.xyRange_param[5].SperangeX[1];
368     awb_cfg_v30->sw_rawawb_big_y0_5       =  awb_meas.xyRange_param[5].SperangeY[0];
369     awb_cfg_v30->sw_rawawb_big_y1_5       =  awb_meas.xyRange_param[5].SperangeY[1];
370     awb_cfg_v30->sw_rawawb_nor_x0_6       =  awb_meas.xyRange_param[6].NorrangeX[0];
371     awb_cfg_v30->sw_rawawb_nor_x1_6       =  awb_meas.xyRange_param[6].NorrangeX[1];
372     awb_cfg_v30->sw_rawawb_nor_y0_6       =  awb_meas.xyRange_param[6].NorrangeY[0];
373     awb_cfg_v30->sw_rawawb_nor_y1_6       =  awb_meas.xyRange_param[6].NorrangeY[1];
374     awb_cfg_v30->sw_rawawb_big_x0_6       =  awb_meas.xyRange_param[6].SperangeX[0];
375     awb_cfg_v30->sw_rawawb_big_x1_6       =  awb_meas.xyRange_param[6].SperangeX[1];
376     awb_cfg_v30->sw_rawawb_big_y0_6       =  awb_meas.xyRange_param[6].SperangeY[0];
377     awb_cfg_v30->sw_rawawb_big_y1_6       =  awb_meas.xyRange_param[6].SperangeY[1];
378     awb_cfg_v30->sw_rawawb_pre_wbgain_inv_r       =  awb_meas.pre_wbgain_inv_r;
379     awb_cfg_v30->sw_rawawb_pre_wbgain_inv_g       =  awb_meas.pre_wbgain_inv_g;
380     awb_cfg_v30->sw_rawawb_pre_wbgain_inv_b       =  awb_meas.pre_wbgain_inv_b;
381     //multiwindow
382 #if defined(ISP_HW_V30)
383     awb_cfg_v30->sw_rawawb_multiwindow_en          =      awb_meas.multiwindow_en;
384     awb_cfg_v30->sw_rawawb_multiwindow0_h_offs     =      awb_meas.multiwindow[0][0];
385     awb_cfg_v30->sw_rawawb_multiwindow0_v_offs     =      awb_meas.multiwindow[0][1];
386     awb_cfg_v30->sw_rawawb_multiwindow0_h_size     =      awb_meas.multiwindow[0][0] + awb_meas.multiwindow[0][2];
387     awb_cfg_v30->sw_rawawb_multiwindow0_v_size     =      awb_meas.multiwindow[0][1] + awb_meas.multiwindow[0][3];
388     awb_cfg_v30->sw_rawawb_multiwindow1_h_offs     =      awb_meas.multiwindow[1][0];
389     awb_cfg_v30->sw_rawawb_multiwindow1_v_offs     =      awb_meas.multiwindow[1][1];
390     awb_cfg_v30->sw_rawawb_multiwindow1_h_size     =      awb_meas.multiwindow[1][0] + awb_meas.multiwindow[1][2];
391     awb_cfg_v30->sw_rawawb_multiwindow1_v_size     =      awb_meas.multiwindow[1][1] + awb_meas.multiwindow[1][3];
392     awb_cfg_v30->sw_rawawb_multiwindow2_h_offs     =      awb_meas.multiwindow[2][0];
393     awb_cfg_v30->sw_rawawb_multiwindow2_v_offs     =      awb_meas.multiwindow[2][1];
394     awb_cfg_v30->sw_rawawb_multiwindow2_h_size     =      awb_meas.multiwindow[2][0] + awb_meas.multiwindow[2][2];
395     awb_cfg_v30->sw_rawawb_multiwindow2_v_size     =      awb_meas.multiwindow[2][1] + awb_meas.multiwindow[2][3];
396     awb_cfg_v30->sw_rawawb_multiwindow3_h_offs     =      awb_meas.multiwindow[3][0];
397     awb_cfg_v30->sw_rawawb_multiwindow3_v_offs     =      awb_meas.multiwindow[3][1];
398     awb_cfg_v30->sw_rawawb_multiwindow3_h_size     =      awb_meas.multiwindow[3][0] + awb_meas.multiwindow[3][2];
399     awb_cfg_v30->sw_rawawb_multiwindow3_v_size     =      awb_meas.multiwindow[3][1] + awb_meas.multiwindow[3][3];
400 
401 #endif
402     awb_cfg_v30->sw_rawawb_exc_wp_region0_excen0     =  awb_meas.excludeWpRange[0].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
403     awb_cfg_v30->sw_rawawb_exc_wp_region0_excen1     =  awb_meas.excludeWpRange[0].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
404     awb_cfg_v30->sw_rawawb_exc_wp_region0_measen   =  awb_meas.excludeWpRange[0].measureEnable;
405     awb_cfg_v30->sw_rawawb_exc_wp_region0_domain        =  awb_meas.excludeWpRange[0].domain;
406     awb_cfg_v30->sw_rawawb_exc_wp_region0_xu0          =  awb_meas.excludeWpRange[0].xu[0];
407     awb_cfg_v30->sw_rawawb_exc_wp_region0_xu1          =  awb_meas.excludeWpRange[0].xu[1];
408     awb_cfg_v30->sw_rawawb_exc_wp_region0_yv0          =  awb_meas.excludeWpRange[0].yv[0];
409     awb_cfg_v30->sw_rawawb_exc_wp_region0_yv1          =  awb_meas.excludeWpRange[0].yv[1];
410     awb_cfg_v30->sw_rawawb_exc_wp_region1_excen0     =  awb_meas.excludeWpRange[1].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
411     awb_cfg_v30->sw_rawawb_exc_wp_region1_excen1     =  awb_meas.excludeWpRange[1].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
412     awb_cfg_v30->sw_rawawb_exc_wp_region1_measen   =  awb_meas.excludeWpRange[1].measureEnable;
413     awb_cfg_v30->sw_rawawb_exc_wp_region1_domain        =  awb_meas.excludeWpRange[1].domain;
414     awb_cfg_v30->sw_rawawb_exc_wp_region1_xu0          =  awb_meas.excludeWpRange[1].xu[0];
415     awb_cfg_v30->sw_rawawb_exc_wp_region1_xu1          =  awb_meas.excludeWpRange[1].xu[1];
416     awb_cfg_v30->sw_rawawb_exc_wp_region1_yv0          =  awb_meas.excludeWpRange[1].yv[0];
417     awb_cfg_v30->sw_rawawb_exc_wp_region1_yv1          =  awb_meas.excludeWpRange[1].yv[1];
418     awb_cfg_v30->sw_rawawb_exc_wp_region2_excen0     =  awb_meas.excludeWpRange[2].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
419     awb_cfg_v30->sw_rawawb_exc_wp_region2_excen1     =  awb_meas.excludeWpRange[2].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
420     awb_cfg_v30->sw_rawawb_exc_wp_region2_measen   =  awb_meas.excludeWpRange[2].measureEnable;
421     awb_cfg_v30->sw_rawawb_exc_wp_region2_domain        =  awb_meas.excludeWpRange[2].domain;
422     awb_cfg_v30->sw_rawawb_exc_wp_region2_xu0          =  awb_meas.excludeWpRange[2].xu[0];
423     awb_cfg_v30->sw_rawawb_exc_wp_region2_xu1          =  awb_meas.excludeWpRange[2].xu[1];
424     awb_cfg_v30->sw_rawawb_exc_wp_region2_yv0          =  awb_meas.excludeWpRange[2].yv[0];
425     awb_cfg_v30->sw_rawawb_exc_wp_region2_yv1          =  awb_meas.excludeWpRange[2].yv[1];
426     awb_cfg_v30->sw_rawawb_exc_wp_region3_excen0     =  awb_meas.excludeWpRange[3].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
427     awb_cfg_v30->sw_rawawb_exc_wp_region3_excen1     =  awb_meas.excludeWpRange[3].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
428     awb_cfg_v30->sw_rawawb_exc_wp_region3_measen   =  awb_meas.excludeWpRange[3].measureEnable;
429     awb_cfg_v30->sw_rawawb_exc_wp_region3_domain        =  awb_meas.excludeWpRange[3].domain;
430     awb_cfg_v30->sw_rawawb_exc_wp_region3_xu0          =  awb_meas.excludeWpRange[3].xu[0];
431     awb_cfg_v30->sw_rawawb_exc_wp_region3_xu1          =  awb_meas.excludeWpRange[3].xu[1];
432     awb_cfg_v30->sw_rawawb_exc_wp_region3_yv0          =  awb_meas.excludeWpRange[3].yv[0];
433     awb_cfg_v30->sw_rawawb_exc_wp_region3_yv1          =  awb_meas.excludeWpRange[3].yv[1];
434     awb_cfg_v30->sw_rawawb_exc_wp_region4_excen0     =  awb_meas.excludeWpRange[4].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
435     awb_cfg_v30->sw_rawawb_exc_wp_region4_excen1     =  awb_meas.excludeWpRange[4].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
436     awb_cfg_v30->sw_rawawb_exc_wp_region4_domain        =  awb_meas.excludeWpRange[4].domain;
437     awb_cfg_v30->sw_rawawb_exc_wp_region4_xu0          =  awb_meas.excludeWpRange[4].xu[0];
438     awb_cfg_v30->sw_rawawb_exc_wp_region4_xu1          =  awb_meas.excludeWpRange[4].xu[1];
439     awb_cfg_v30->sw_rawawb_exc_wp_region4_yv0          =  awb_meas.excludeWpRange[4].yv[0];
440     awb_cfg_v30->sw_rawawb_exc_wp_region4_yv1          =  awb_meas.excludeWpRange[4].yv[1];
441     awb_cfg_v30->sw_rawawb_exc_wp_region5_excen0     =  awb_meas.excludeWpRange[5].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
442     awb_cfg_v30->sw_rawawb_exc_wp_region5_excen1     =  awb_meas.excludeWpRange[5].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
443     awb_cfg_v30->sw_rawawb_exc_wp_region5_domain        =  awb_meas.excludeWpRange[5].domain;
444     awb_cfg_v30->sw_rawawb_exc_wp_region5_xu0          =  awb_meas.excludeWpRange[5].xu[0];
445     awb_cfg_v30->sw_rawawb_exc_wp_region5_xu1          =  awb_meas.excludeWpRange[5].xu[1];
446     awb_cfg_v30->sw_rawawb_exc_wp_region5_yv0          =  awb_meas.excludeWpRange[5].yv[0];
447     awb_cfg_v30->sw_rawawb_exc_wp_region5_yv1          =  awb_meas.excludeWpRange[5].yv[1];
448     awb_cfg_v30->sw_rawawb_exc_wp_region6_excen0     =  awb_meas.excludeWpRange[6].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201];
449     awb_cfg_v30->sw_rawawb_exc_wp_region6_excen1     =  awb_meas.excludeWpRange[6].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201];
450     awb_cfg_v30->sw_rawawb_exc_wp_region6_domain        =  awb_meas.excludeWpRange[6].domain;
451     awb_cfg_v30->sw_rawawb_exc_wp_region6_xu0          =  awb_meas.excludeWpRange[6].xu[0];
452     awb_cfg_v30->sw_rawawb_exc_wp_region6_xu1          =  awb_meas.excludeWpRange[6].xu[1];
453     awb_cfg_v30->sw_rawawb_exc_wp_region6_yv0          =  awb_meas.excludeWpRange[6].yv[0];
454     awb_cfg_v30->sw_rawawb_exc_wp_region6_yv1          =  awb_meas.excludeWpRange[6].yv[1];
455     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y0     =   awb_meas.wpDiffwei_y[0];
456     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y1     =   awb_meas.wpDiffwei_y[1];
457     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y2     =   awb_meas.wpDiffwei_y[2];
458     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y3     =   awb_meas.wpDiffwei_y[3];
459     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y4     =   awb_meas.wpDiffwei_y[4];
460     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y5     =   awb_meas.wpDiffwei_y[5];
461     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y6     =   awb_meas.wpDiffwei_y[6];
462     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y7     =   awb_meas.wpDiffwei_y[7];
463     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_y8     =   awb_meas.wpDiffwei_y[8];
464     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w0     = awb_meas.wpDiffwei_w[0];
465     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w1     = awb_meas.wpDiffwei_w[1];
466     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w2     = awb_meas.wpDiffwei_w[2];
467     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w3     = awb_meas.wpDiffwei_w[3];
468     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w4     = awb_meas.wpDiffwei_w[4];
469     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w5     = awb_meas.wpDiffwei_w[5];
470     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w6     = awb_meas.wpDiffwei_w[6];
471     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w7     = awb_meas.wpDiffwei_w[7];
472     awb_cfg_v30->sw_rawawb_wp_luma_weicurve_w8     = awb_meas.wpDiffwei_w[8];
473 
474     for (int i = 0; i < RK_AIQ_AWB_GRID_NUM_TOTAL; i++) {
475         awb_cfg_v30->sw_rawawb_wp_blk_wei_w[i]          = awb_meas.blkWeight[i];
476     }
477 
478     awb_cfg_v30->sw_rawawb_blk_rtdw_measure_en =  awb_meas.blk_rtdw_measure_en;
479 
480 }
481 #endif
482 #if RKAIQ_HAVE_BAYER2DNR_V2
convertAiqRawnrToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,rk_aiq_isp_baynr_v3x_t & rawnr)483 void Isp3xParams::convertAiqRawnrToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
484         rk_aiq_isp_baynr_v3x_t& rawnr)
485 {
486 
487     LOGD_ANR("%s:%d enter! enable:%d \n", __FUNCTION__, __LINE__, rawnr.baynr_en);
488     bool enable = rawnr.baynr_en;
489 
490     // use weight=0 to bypss bayer2dnr effect, then  always  keep 2dnr en bit = 1.
491 #if 0
492    if(enable) {
493        isp_cfg.module_ens |= ISP3X_MODULE_BAYNR;
494    } else {
495        isp_cfg.module_ens &= ~(ISP3X_MODULE_BAYNR);
496    }
497 #else
498     isp_cfg.module_ens |= ISP3X_MODULE_BAYNR;
499 #endif
500     isp_cfg.module_en_update |= ISP3X_MODULE_BAYNR;
501     isp_cfg.module_cfg_update |= ISP3X_MODULE_BAYNR;
502 
503     struct isp3x_baynr_cfg *pBayernr = &isp_cfg.others.baynr_cfg;
504     pBayernr->lg2_mode = rawnr.baynr_lg2_mode;
505     pBayernr->gauss_en = rawnr.baynr_gauss_en;
506     pBayernr->log_bypass = rawnr.baynr_log_bypass;
507 
508     pBayernr->dgain0 = rawnr.baynr_dgain[0];
509     pBayernr->dgain1 = rawnr.baynr_dgain[1];
510     pBayernr->dgain2 = rawnr.baynr_dgain[2];
511 
512     pBayernr->pix_diff = rawnr.baynr_pix_diff;
513 
514     pBayernr->diff_thld = rawnr.baynr_diff_thld;
515     pBayernr->softthld = rawnr.baynr_softthld;
516 
517     pBayernr->bltflt_streng = rawnr.bltflt_streng;
518 #if 0
519     pBayernr->reg_w1 = rawnr.baynr_reg_w1;
520 #else
521     if (enable) {
522         pBayernr->reg_w1 = rawnr.baynr_reg_w1;
523     } else {
524         pBayernr->reg_w1 = 0;
525     }
526 #endif
527 
528     for(int i = 0; i < ISP3X_BAYNR_XY_NUM; i++) {
529         pBayernr->sigma_x[i] = rawnr.sigma_x[i];
530         pBayernr->sigma_y[i] = rawnr.sigma_y[i];
531     }
532 
533     pBayernr->weit_d2 = rawnr.weit_d[2];
534     pBayernr->weit_d1 = rawnr.weit_d[1];
535     pBayernr->weit_d0 = rawnr.weit_d[0];
536 
537     pBayernr->lg2_lgoff = rawnr.lg2_lgoff;
538     pBayernr->lg2_off = rawnr.lg2_off;
539 
540     pBayernr->dat_max = rawnr.dat_max;
541 
542     LOGD_ANR("%s:%d exit!\n", __FUNCTION__, __LINE__);
543 }
544 #endif
545 #if RKAIQ_HAVE_BAYERTNR_V2
convertAiqTnrToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,rk_aiq_isp_tnr_v3x_t & tnr)546 void Isp3xParams::convertAiqTnrToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
547         rk_aiq_isp_tnr_v3x_t& tnr)
548 {
549     LOGD_ANR("%s:%d enter! enable:%d\n", __FUNCTION__, __LINE__, tnr.bay3d_en_i);
550     bool enable = tnr.bay3d_en_i;
551     if(enable) {
552         isp_cfg.module_ens |= ISP3X_MODULE_BAY3D;
553         // use 2dnr weight to bypss 2dnr effect, not need 3dnr state at all.
554         // just keep 2dnr and 3dnr en bit always 1
555 #if 0
556        //bayer3dnr enable  bayer2dnr must enable at the same time
557        isp_cfg.module_ens |= ISP3X_MODULE_BAYNR;
558        isp_cfg.module_en_update |= ISP3X_MODULE_BAYNR;
559 #endif
560     } else {
561         //isp_cfg.module_ens &= ~(ISP3X_MODULE_BAY3D);
562         isp_cfg.module_ens |= ISP3X_MODULE_BAY3D;
563     }
564 
565     isp_cfg.module_cfg_update |= ISP3X_MODULE_BAY3D;
566     isp_cfg.module_en_update |= ISP3X_MODULE_BAY3D;
567 
568 
569     struct isp3x_bay3d_cfg *pBayertnr = &isp_cfg.others.bay3d_cfg;
570 
571     pBayertnr->bypass_en = tnr.bay3d_bypass_en;
572     pBayertnr->hibypass_en = tnr.bay3d_hibypass_en;
573     pBayertnr->lobypass_en = tnr.bay3d_lobypass_en;
574     pBayertnr->himed_bypass_en = tnr.bay3d_himed_bypass_en;
575     pBayertnr->higaus_bypass_en = tnr.bay3d_higaus_bypass_en;
576     pBayertnr->hiabs_possel = tnr.bay3d_hiabs_pssel;
577     pBayertnr->hichnsplit_en = tnr.bay3d_hichnsplit_en;
578     pBayertnr->lomed_bypass_en = tnr.bay3d_lomed_bypass_en;
579     pBayertnr->logaus5_bypass_en = tnr.bay3d_logaus5_bypass_en;
580     pBayertnr->logaus3_bypass_en = tnr.bay3d_logaus3_bypass_en;
581     pBayertnr->glbpk_en = tnr.bay3d_glbpk_en;
582     pBayertnr->loswitch_protect = tnr.bay3d_loswitch_protect;
583 
584     pBayertnr->softwgt = tnr.bay3d_softwgt;
585     pBayertnr->hidif_th = tnr.bay3d_hidif_th;
586 
587     pBayertnr->glbpk2 = tnr.bay3d_glbpk2;
588 
589     pBayertnr->wgtlmt = tnr.bay3d_wgtlmt;
590     pBayertnr->wgtratio = tnr.bay3d_wgtratio;
591 
592     for(int i = 0; i < ISP3X_BAY3D_XY_NUM; i++) {
593         pBayertnr->sig0_x[i] = tnr.bay3d_sig0_x[i];
594         pBayertnr->sig0_y[i] = tnr.bay3d_sig0_y[i];
595 
596         pBayertnr->sig1_x[i] = tnr.bay3d_sig1_x[i];
597         pBayertnr->sig1_y[i] = tnr.bay3d_sig1_y[i];
598 
599         //pBayertnr->sig2_x[i] = tnr.bay3d_sig1_x[i];
600         pBayertnr->sig2_y[i] = tnr.bay3d_sig2_y[i];
601     }
602     LOGD_ANR("%s:%d exit!\n", __FUNCTION__, __LINE__);
603 }
604 #endif
605 #if RKAIQ_HAVE_CNR_V2
convertAiqUvnrToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,rk_aiq_isp_cnr_v3x_t & uvnr)606 void Isp3xParams::convertAiqUvnrToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
607         rk_aiq_isp_cnr_v3x_t& uvnr)
608 {
609     LOGD_ANR("%s:%d enter! enable:%d \n", __FUNCTION__, __LINE__, uvnr.cnr_en_i);
610 
611     bool enable = uvnr.cnr_en_i;
612 
613     isp_cfg.module_en_update |= ISP3X_MODULE_CNR;
614     isp_cfg.module_ens |= ISP3X_MODULE_CNR;
615     isp_cfg.module_cfg_update |= ISP3X_MODULE_CNR;
616 
617 
618     struct isp3x_cnr_cfg *pCnr = &isp_cfg.others.cnr_cfg;
619 
620     pCnr->thumb_mix_cur_en = uvnr.cnr_thumb_mix_cur_en;
621     pCnr->lq_bila_bypass = uvnr.cnr_lq_bila_bypass;
622     pCnr->hq_bila_bypass = uvnr.cnr_hq_bila_bypass;
623     pCnr->exgain_bypass = uvnr.cnr_exgain_bypass;
624     if(!enable) {
625         pCnr->lq_bila_bypass = 0x01;
626         pCnr->hq_bila_bypass = 0x01;
627         pCnr->exgain_bypass = 0x01;
628     }
629 
630     pCnr->global_gain_alpha = uvnr.cnr_global_gain_alpha;
631     pCnr->global_gain = uvnr.cnr_global_gain;
632 
633     pCnr->gain_iso = uvnr.cnr_gain_iso;
634     pCnr->gain_offset = uvnr.cnr_gain_offset;
635     pCnr->gain_1sigma = uvnr.cnr_gain_1sigma;
636 
637     pCnr->gain_uvgain1 = uvnr.cnr_gain_uvgain1;
638     pCnr->gain_uvgain0 = uvnr.cnr_gain_uvgain0;
639 
640     pCnr->lmed3_alpha = uvnr.cnr_lmed3_alpha;
641 
642     pCnr->lbf5_gain_y = uvnr.cnr_lbf5_gain_y;
643     pCnr->lbf5_gain_c = uvnr.cnr_lbf5_gain_c;
644 
645     pCnr->lbf5_weit_d3 = uvnr.cnr_lbf5_weit_d[3];
646     pCnr->lbf5_weit_d2 = uvnr.cnr_lbf5_weit_d[2];
647     pCnr->lbf5_weit_d1 = uvnr.cnr_lbf5_weit_d[1];
648     pCnr->lbf5_weit_d0 = uvnr.cnr_lbf5_weit_d[0];
649 
650     pCnr->lbf5_weit_d4 = uvnr.cnr_lbf5_weit_d[4];
651 
652     pCnr->hmed3_alpha = uvnr.cnr_hmed3_alpha;
653 
654     pCnr->hbf5_weit_src = uvnr.cnr_hbf5_weit_src;
655     pCnr->hbf5_min_wgt = uvnr.cnr_hbf5_min_wgt;
656     pCnr->hbf5_sigma = uvnr.cnr_hbf5_sigma;
657 
658     pCnr->lbf5_weit_src = uvnr.cnr_lbf5_weit_src;
659     pCnr->lbf3_sigma = uvnr.cnr_lbf3_sigma;
660 
661     for(int i = 0; i < ISP3X_CNR_SIGMA_Y_NUM; i++) {
662         pCnr->sigma_y[i] = uvnr.cnr_sigma_y[i];
663     }
664     LOGD_ANR("%s:%d exit!\n", __FUNCTION__, __LINE__);
665 }
666 #endif
667 #if RKAIQ_HAVE_YNR_V3
convertAiqYnrToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,rk_aiq_isp_ynr_v3x_t & ynr)668 void Isp3xParams::convertAiqYnrToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
669         rk_aiq_isp_ynr_v3x_t& ynr)
670 {
671     LOGD_ANR("%s:%d enter! enable:%d \n", __FUNCTION__, __LINE__, ynr.ynr_en);
672 
673     bool enable = ynr.ynr_en;
674 
675     isp_cfg.module_en_update |= ISP3X_MODULE_YNR;
676     isp_cfg.module_ens |= ISP3X_MODULE_YNR;
677     isp_cfg.module_cfg_update |= ISP3X_MODULE_YNR;
678 
679     struct isp3x_ynr_cfg *pYnr = &isp_cfg.others.ynr_cfg;
680 
681     pYnr->rnr_en = ynr.ynr_rnr_en;
682     pYnr->thumb_mix_cur_en = ynr.ynr_thumb_mix_cur_en;
683     pYnr->global_gain_alpha = ynr.ynr_global_gain_alpha;
684     pYnr->global_gain = ynr.ynr_global_gain;
685     pYnr->flt1x1_bypass_sel = ynr.ynr_flt1x1_bypass_sel;
686     pYnr->sft5x5_bypass = ynr.ynr_sft5x5_bypass;
687     pYnr->flt1x1_bypass_sel = ynr.ynr_flt1x1_bypass_sel;
688     pYnr->flt1x1_bypass = ynr.ynr_flt1x1_bypass;
689     pYnr->lgft3x3_bypass = ynr.ynr_lgft3x3_bypass;
690     pYnr->lbft5x5_bypass = ynr.ynr_lbft5x5_bypass;
691     pYnr->bft3x3_bypass = ynr.ynr_bft3x3_bypass;
692     if(!enable) {
693         pYnr->sft5x5_bypass = 0x01;
694         pYnr->flt1x1_bypass = 0x01;
695         pYnr->lgft3x3_bypass = 0x01;
696         pYnr->lbft5x5_bypass = 0x01;
697         pYnr->bft3x3_bypass = 0x01;
698     }
699 
700     pYnr->rnr_max_r = ynr.ynr_rnr_max_r;
701     pYnr->local_gainscale = ynr.ynr_local_gainscale;
702 
703     pYnr->rnr_center_coorh = ynr.ynr_rnr_center_coorh;
704     pYnr->rnr_center_coorv = ynr.ynr_rnr_center_coorv;
705 
706     pYnr->loclagain_adj_thresh = ynr.ynr_localgain_adj_thresh;
707     pYnr->localgain_adj = ynr.ynr_localgain_adj;
708 
709     pYnr->low_bf_inv1 = ynr.ynr_low_bf_inv[1];
710     pYnr->low_bf_inv0 = ynr.ynr_low_bf_inv[0];
711 
712     pYnr->low_peak_supress = ynr.ynr_low_peak_supress;
713     pYnr->low_thred_adj = ynr.ynr_low_thred_adj;
714 
715     pYnr->low_dist_adj = ynr.ynr_low_dist_adj;
716     pYnr->low_edge_adj_thresh = ynr.ynr_low_edge_adj_thresh;
717 
718     pYnr->low_bi_weight = ynr.ynr_low_bi_weight;
719     pYnr->low_weight = ynr.ynr_low_weight;
720     pYnr->low_center_weight = ynr.ynr_low_center_weight;
721 
722     pYnr->hi_min_adj = ynr.ynr_hi_min_adj;
723     pYnr->high_thred_adj = ynr.ynr_high_thred_adj;
724     pYnr->high_retain_weight = ynr.ynr_high_retain_weight;
725     pYnr->hi_edge_thed = ynr.ynr_hi_edge_thed;
726 
727     pYnr->base_filter_weight2 = ynr.ynr_base_filter_weight[2];
728     pYnr->base_filter_weight1 = ynr.ynr_base_filter_weight[1];
729     pYnr->base_filter_weight0 = ynr.ynr_base_filter_weight[0];
730 
731     pYnr->frame_full_size = ynr.ynr_frame_full_size;
732     pYnr->lbf_weight_thres = ynr.ynr_lbf_weight_thres;
733 
734     pYnr->low_gauss1_coeff2 = ynr.ynr_low_gauss1_coeff[2];
735     pYnr->low_gauss1_coeff1 = ynr.ynr_low_gauss1_coeff[1];
736     pYnr->low_gauss1_coeff0 = ynr.ynr_low_gauss1_coeff[0];
737 
738     pYnr->low_gauss2_coeff2 = ynr.ynr_low_gauss2_coeff[2];
739     pYnr->low_gauss2_coeff1 = ynr.ynr_low_gauss2_coeff[1];
740     pYnr->low_gauss2_coeff0 = ynr.ynr_low_gauss2_coeff[0];
741 
742     pYnr->direction_weight3 = ynr.ynr_direction_weight[3];
743     pYnr->direction_weight2 = ynr.ynr_direction_weight[2];
744     pYnr->direction_weight1 = ynr.ynr_direction_weight[1];
745     pYnr->direction_weight0 = ynr.ynr_direction_weight[0];
746 
747     pYnr->direction_weight7 = ynr.ynr_direction_weight[7];
748     pYnr->direction_weight6 = ynr.ynr_direction_weight[6];
749     pYnr->direction_weight5 = ynr.ynr_direction_weight[5];
750     pYnr->direction_weight4 = ynr.ynr_direction_weight[4];
751 
752     for(int i = 0; i < ISP3X_YNR_XY_NUM; i++) {
753         pYnr->luma_points_x[i] = ynr.ynr_luma_points_x[i];
754         pYnr->lsgm_y[i] = ynr.ynr_lsgm_y[i];
755         pYnr->hsgm_y[i] = ynr.ynr_hsgm_y[i];
756         pYnr->rnr_strength3[i] = ynr.ynr_rnr_strength[i];
757     }
758     LOGD_ANR("%s:%d exit!\n", __FUNCTION__, __LINE__);
759 }
760 #endif
761 #if RKAIQ_HAVE_SHARP_V4
convertAiqSharpenToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,rk_aiq_isp_sharp_v3x_t & sharp)762 void Isp3xParams::convertAiqSharpenToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
763         rk_aiq_isp_sharp_v3x_t& sharp)
764 {
765     LOGD_ANR("%s:%d enter! enable:%d\n", __FUNCTION__, __LINE__, sharp.sharp_en);
766     bool enable = sharp.sharp_en;
767 
768     isp_cfg.module_en_update |= ISP3X_MODULE_SHARP;
769     isp_cfg.module_ens |= ISP3X_MODULE_SHARP;
770     isp_cfg.module_cfg_update |= ISP3X_MODULE_SHARP;
771 
772 
773     struct isp3x_sharp_cfg *pSharp = &isp_cfg.others.sharp_cfg;
774 
775     pSharp->exgain_bypass = sharp.sharp_exgain_bypass;
776     pSharp->center_mode = sharp.sharp_center_mode;
777     pSharp->bypass = sharp.sharp_bypass;
778     if(!enable) {
779         pSharp->bypass = 0x01;
780     }
781 
782     pSharp->sharp_ratio = sharp.sharp_sharp_ratio;
783     pSharp->bf_ratio = sharp.sharp_bf_ratio;
784     pSharp->gaus_ratio = sharp.sharp_gaus_ratio;
785     pSharp->pbf_ratio = sharp.sharp_pbf_ratio;
786 
787     for(int i = 0; i < ISP3X_SHARP_X_NUM; i++) {
788         pSharp->luma_dx[i] = sharp.sharp_luma_dx[i];
789     }
790 
791     for(int i = 0; i < ISP3X_SHARP_Y_NUM; i++) {
792         pSharp->pbf_sigma_inv[i] = sharp.sharp_pbf_sigma_inv[i];
793         pSharp->bf_sigma_inv[i] = sharp.sharp_bf_sigma_inv[i];
794     }
795 
796     pSharp->bf_sigma_shift = sharp.sharp_bf_sigma_shift;
797     pSharp->pbf_sigma_shift = sharp.sharp_pbf_sigma_shift;
798 
799     for(int i = 0; i < ISP3X_SHARP_Y_NUM; i++) {
800         pSharp->ehf_th[i] = sharp.sharp_ehf_th[i];
801         pSharp->clip_hf[i] = sharp.sharp_clip_hf[i];
802     }
803 
804     pSharp->pbf_coef2 = sharp.sharp_pbf_coef[2];
805     pSharp->pbf_coef1 = sharp.sharp_pbf_coef[1];
806     pSharp->pbf_coef0 = sharp.sharp_pbf_coef[0];
807 
808     pSharp->bf_coef2 = sharp.sharp_bf_coef[2];
809     pSharp->bf_coef1 = sharp.sharp_bf_coef[1];
810     pSharp->bf_coef0 = sharp.sharp_bf_coef[0];
811 
812     for(int i = 0; i < ISP3X_SHARP_GAUS_COEF_NUM; i++) {
813         pSharp->gaus_coef[i] = sharp.sharp_gaus_coef[i];
814     }
815     LOGD_ANR("%s:%d exit!\n", __FUNCTION__, __LINE__);
816 }
817 #endif
818 template <class T>
convertAiqGainToIsp3xParams(T & isp_cfg,rk_aiq_isp_gain_v3x_t & gain)819 void Isp3xParams::convertAiqGainToIsp3xParams(T& isp_cfg, rk_aiq_isp_gain_v3x_t& gain) {
820     LOGD_ANR("%s:%d enter! enable:%d gain:0x%x 0x%x 0x%x\n", __FUNCTION__, __LINE__,
821              gain.sw_gain_en,
822              gain.sw_gain[0],
823              gain.sw_gain[1],
824              gain.sw_gain[2]);
825 
826     bool enable = gain.sw_gain_en;
827     if(enable) {
828         isp_cfg.module_ens |= ISP3X_MODULE_GAIN;
829     } else {
830         isp_cfg.module_ens &= ~(ISP3X_MODULE_GAIN);
831     }
832 
833     isp_cfg.module_en_update |= ISP3X_MODULE_GAIN;
834     isp_cfg.module_cfg_update |= (ISP3X_MODULE_GAIN);
835 
836     struct isp3x_gain_cfg *pGain = &isp_cfg.others.gain_cfg;
837 
838     pGain->g0 = gain.sw_gain[0];
839     pGain->g1 = gain.sw_gain[1];
840     pGain->g2 = gain.sw_gain[2];
841 
842     LOGD_ANR("%s:%d exit!\n", __FUNCTION__, __LINE__);
843 }
844 
845 #if RKAIQ_HAVE_DRC_V11
convertAiqDrcToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,rk_aiq_isp_drc_v3x_t & adrc_data)846 void Isp3xParams::convertAiqDrcToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
847         rk_aiq_isp_drc_v3x_t& adrc_data)
848 {
849     if (adrc_data.bDrcEn) {
850         isp_cfg.module_en_update |= 1LL << Rk_ISP21_DRC_ID;
851         isp_cfg.module_ens |= 1LL << Rk_ISP21_DRC_ID;
852         isp_cfg.module_cfg_update |= 1LL << Rk_ISP21_DRC_ID;
853     } else {
854         isp_cfg.module_en_update |= 1LL << Rk_ISP21_DRC_ID;
855         isp_cfg.module_ens &= ~(1LL << Rk_ISP21_DRC_ID);
856         isp_cfg.module_cfg_update &= ~(1LL << Rk_ISP21_DRC_ID);
857         return;
858     }
859 
860     isp_cfg.others.drc_cfg.bypass_en       = adrc_data.DrcProcRes.Drc_v11.bypass_en;
861     isp_cfg.others.drc_cfg.offset_pow2     = adrc_data.DrcProcRes.Drc_v11.offset_pow2;
862     isp_cfg.others.drc_cfg.compres_scl     = adrc_data.DrcProcRes.Drc_v11.compres_scl;
863     isp_cfg.others.drc_cfg.position        = adrc_data.DrcProcRes.Drc_v11.position;
864     isp_cfg.others.drc_cfg.delta_scalein   = adrc_data.DrcProcRes.Drc_v11.delta_scalein;
865     isp_cfg.others.drc_cfg.hpdetail_ratio  = adrc_data.DrcProcRes.Drc_v11.hpdetail_ratio;
866     isp_cfg.others.drc_cfg.lpdetail_ratio  = adrc_data.DrcProcRes.Drc_v11.lpdetail_ratio;
867     isp_cfg.others.drc_cfg.weicur_pix      = adrc_data.DrcProcRes.Drc_v11.weicur_pix;
868     isp_cfg.others.drc_cfg.weipre_frame    = adrc_data.DrcProcRes.Drc_v11.weipre_frame;
869     isp_cfg.others.drc_cfg.bilat_wt_off    = adrc_data.DrcProcRes.Drc_v11.bilat_wt_off;
870     isp_cfg.others.drc_cfg.force_sgm_inv0  = adrc_data.DrcProcRes.Drc_v11.force_sgm_inv0;
871     isp_cfg.others.drc_cfg.motion_scl      = adrc_data.DrcProcRes.Drc_v11.motion_scl;
872     isp_cfg.others.drc_cfg.edge_scl        = adrc_data.DrcProcRes.Drc_v11.edge_scl;
873     isp_cfg.others.drc_cfg.space_sgm_inv1  = adrc_data.DrcProcRes.Drc_v11.space_sgm_inv1;
874     isp_cfg.others.drc_cfg.space_sgm_inv0  = adrc_data.DrcProcRes.Drc_v11.space_sgm_inv0;
875     isp_cfg.others.drc_cfg.range_sgm_inv1  = adrc_data.DrcProcRes.Drc_v11.range_sgm_inv1;
876     isp_cfg.others.drc_cfg.range_sgm_inv0  = adrc_data.DrcProcRes.Drc_v11.range_sgm_inv0;
877     isp_cfg.others.drc_cfg.weig_maxl       = adrc_data.DrcProcRes.Drc_v11.weig_maxl;
878     isp_cfg.others.drc_cfg.weig_bilat      = adrc_data.DrcProcRes.Drc_v11.weig_bilat;
879     isp_cfg.others.drc_cfg.enable_soft_thd = adrc_data.DrcProcRes.Drc_v11.enable_soft_thd;
880     isp_cfg.others.drc_cfg.bilat_soft_thd  = adrc_data.DrcProcRes.Drc_v11.bilat_soft_thd;
881     isp_cfg.others.drc_cfg.iir_weight      = adrc_data.DrcProcRes.Drc_v11.iir_weight;
882     isp_cfg.others.drc_cfg.min_ogain       = adrc_data.DrcProcRes.Drc_v11.min_ogain;
883     isp_cfg.others.drc_cfg.wr_cycle        = adrc_data.DrcProcRes.Drc_v11.wr_cycle;
884 
885     for(int i = 0; i < 17; i++) {
886         isp_cfg.others.drc_cfg.gain_y[i]    = adrc_data.DrcProcRes.Drc_v11.gain_y[i];
887         isp_cfg.others.drc_cfg.compres_y[i] = adrc_data.DrcProcRes.Drc_v11.compres_y[i];
888         isp_cfg.others.drc_cfg.scale_y[i]   = adrc_data.DrcProcRes.Drc_v11.scale_y[i];
889     }
890 
891 #if 0
892     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: sw_drc_offset_pow2 %d", __LINE__, isp_cfg.others.drc_cfg.offset_pow2);
893     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_offset_pow2 %d", isp_cfg.others.drc_cfg.offset_pow2);
894     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_compres_scl %d", isp_cfg.others.drc_cfg.compres_scl);
895     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_position %d", isp_cfg.others.drc_cfg.position);
896     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_delta_scalein %d", isp_cfg.others.drc_cfg.delta_scalein);
897     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_hpdetail_ratio %d", isp_cfg.others.drc_cfg.hpdetail_ratio);
898     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_lpdetail_ratio %d", isp_cfg.others.drc_cfg.lpdetail_ratio);
899     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "sw_drc_weicur_pix %d", isp_cfg.others.drc_cfg.weicur_pix);
900 
901 #endif
902 }
903 #endif
904 
905 #if RKAIQ_HAVE_AF_V30 || RKAIQ_ONLY_AF_STATS_V30
convertAiqAfToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,const rk_aiq_isp_af_meas_v3x_t & af_data,bool af_cfg_udpate)906 void Isp3xParams::convertAiqAfToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
907         const rk_aiq_isp_af_meas_v3x_t& af_data, bool af_cfg_udpate)
908 {
909     int i;
910 
911     if (!af_cfg_udpate)
912         return;
913 
914     if (af_data.af_en)
915         isp_cfg.module_ens |= ISP2X_MODULE_RAWAF;
916     isp_cfg.module_en_update |= ISP2X_MODULE_RAWAF;
917     isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAF;
918 
919     isp_cfg.meas.rawaf.rawaf_sel = af_data.rawaf_sel;
920     isp_cfg.meas.rawaf.gamma_en = af_data.gamma_en;
921     isp_cfg.meas.rawaf.gaus_en = af_data.gaus_en;
922     isp_cfg.meas.rawaf.v1_fir_sel = af_data.v1_fir_sel;
923     isp_cfg.meas.rawaf.hiir_en = af_data.hiir_en;
924     isp_cfg.meas.rawaf.viir_en = af_data.viir_en;
925     isp_cfg.meas.rawaf.v1_fv_mode = af_data.v1_fv_outmode;
926     isp_cfg.meas.rawaf.v2_fv_mode = af_data.v2_fv_outmode;
927     isp_cfg.meas.rawaf.h1_fv_mode = af_data.h1_fv_outmode;
928     isp_cfg.meas.rawaf.h2_fv_mode = af_data.h2_fv_outmode;
929     isp_cfg.meas.rawaf.ldg_en = af_data.ldg_en;
930     isp_cfg.meas.rawaf.accu_8bit_mode = af_data.accu_8bit_mode;
931     if (af_data.af_en)
932         isp_cfg.meas.rawaf.ae_mode = af_data.ae_mode;
933     else
934         isp_cfg.meas.rawaf.ae_mode = 0;
935     isp_cfg.meas.rawaf.y_mode = af_data.y_mode;
936 
937     memcpy(isp_cfg.meas.rawaf.line_en,
938            af_data.line_en, ISP2X_RAWAF_LINE_NUM * sizeof(unsigned char));
939     memcpy(isp_cfg.meas.rawaf.line_num,
940            af_data.line_num, ISP2X_RAWAF_LINE_NUM * sizeof(unsigned char));
941 
942     isp_cfg.meas.rawaf.num_afm_win = af_data.window_num;
943     isp_cfg.meas.rawaf.win[0].h_offs = af_data.wina_h_offs;
944     isp_cfg.meas.rawaf.win[0].v_offs = af_data.wina_v_offs;
945     isp_cfg.meas.rawaf.win[0].h_size = af_data.wina_h_size;
946     isp_cfg.meas.rawaf.win[0].v_size = af_data.wina_v_size;
947     isp_cfg.meas.rawaf.win[1].h_offs = af_data.winb_h_offs;
948     isp_cfg.meas.rawaf.win[1].v_offs = af_data.winb_v_offs;
949     isp_cfg.meas.rawaf.win[1].h_size = af_data.winb_h_size;
950     isp_cfg.meas.rawaf.win[1].v_size = af_data.winb_v_size;
951 
952     memcpy(isp_cfg.meas.rawaf.gamma_y,
953            af_data.gamma_y, ISP3X_RAWAF_GAMMA_NUM * sizeof(unsigned short));
954 
955     /* THRES */
956     isp_cfg.meas.rawaf.afm_thres = af_data.thres;
957     /* VAR_SHIFT */
958     isp_cfg.meas.rawaf.afm_var_shift[0] = af_data.shift_sum_a;
959     isp_cfg.meas.rawaf.lum_var_shift[0] = af_data.shift_y_a;
960     isp_cfg.meas.rawaf.afm_var_shift[1] = af_data.shift_sum_b;
961     isp_cfg.meas.rawaf.lum_var_shift[1] = af_data.shift_y_b;
962     /* HVIIR_VAR_SHIFT */
963     isp_cfg.meas.rawaf.h1iir_var_shift = af_data.h1_fv_shift;
964     isp_cfg.meas.rawaf.h2iir_var_shift = af_data.h2_fv_shift;
965     isp_cfg.meas.rawaf.v1iir_var_shift = af_data.v1_fv_shift;
966     isp_cfg.meas.rawaf.v2iir_var_shift = af_data.v2_fv_shift;
967 
968     /* HIIR_THRESH */
969     isp_cfg.meas.rawaf.h_fv_thresh = af_data.h_fv_thresh;
970     isp_cfg.meas.rawaf.v_fv_thresh = af_data.v_fv_thresh;
971 
972     for (i = 0; i < ISP3X_RAWAF_CURVE_NUM; i++) {
973         isp_cfg.meas.rawaf.curve_h[i].ldg_lumth = af_data.h_ldg_lumth[i];
974         isp_cfg.meas.rawaf.curve_h[i].ldg_gain = af_data.h_ldg_gain[i];
975         isp_cfg.meas.rawaf.curve_h[i].ldg_gslp = af_data.h_ldg_gslp[i];
976         isp_cfg.meas.rawaf.curve_v[i].ldg_lumth = af_data.v_ldg_lumth[i];
977         isp_cfg.meas.rawaf.curve_v[i].ldg_gain = af_data.v_ldg_gain[i];
978         isp_cfg.meas.rawaf.curve_v[i].ldg_gslp = af_data.v_ldg_gslp[i];
979     }
980 
981     for (i = 0; i < ISP3X_RAWAF_HIIR_COE_NUM; i++) {
982         isp_cfg.meas.rawaf.h1iir1_coe[i] = af_data.h1_iir1_coe[i];
983         isp_cfg.meas.rawaf.h1iir2_coe[i] = af_data.h1_iir2_coe[i];
984         isp_cfg.meas.rawaf.h2iir1_coe[i] = af_data.h2_iir1_coe[i];
985         isp_cfg.meas.rawaf.h2iir2_coe[i] = af_data.h2_iir2_coe[i];
986     }
987     for (i = 0; i < ISP3X_RAWAF_V1IIR_COE_NUM; i++) {
988         isp_cfg.meas.rawaf.v1iir_coe[i] = af_data.v1_iir_coe[i];
989     }
990     for (i = 0; i < ISP3X_RAWAF_V2IIR_COE_NUM; i++) {
991         isp_cfg.meas.rawaf.v2iir_coe[i] = af_data.v2_iir_coe[i];
992     }
993     for (i = 0; i < ISP3X_RAWAF_VFIR_COE_NUM; i++) {
994         isp_cfg.meas.rawaf.v1fir_coe[i] = af_data.v1_fir_coe[i];
995         isp_cfg.meas.rawaf.v2fir_coe[i] = af_data.v2_fir_coe[i];
996     }
997     isp_cfg.meas.rawaf.highlit_thresh = af_data.highlit_thresh;
998 
999     // rawae3 is used by af now!!!
1000     if (af_data.af_en && af_data.ae_mode) {
1001         isp_cfg.module_ens |= ISP2X_MODULE_RAWAE3;
1002         isp_cfg.module_en_update |= ISP2X_MODULE_RAWAE3;
1003         isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAE3;
1004 
1005         isp_cfg.meas.rawae3.win.h_offs = af_data.wina_h_offs;
1006         isp_cfg.meas.rawae3.win.v_offs = af_data.wina_v_offs;
1007         isp_cfg.meas.rawae3.win.h_size = af_data.wina_h_size;
1008         isp_cfg.meas.rawae3.win.v_size = af_data.wina_v_size;
1009     }
1010 }
1011 #endif
1012 #if RKAIQ_HAVE_MERGE_V11
convertAiqMergeToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,const rk_aiq_isp_merge_v3x_t & amerge_data)1013 void Isp3xParams::convertAiqMergeToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
1014         const rk_aiq_isp_merge_v3x_t& amerge_data)
1015 {
1016     isp_cfg.module_en_update |= 1LL << RK_ISP2X_HDRMGE_ID;
1017     isp_cfg.module_ens |= 1LL << RK_ISP2X_HDRMGE_ID;
1018     isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_HDRMGE_ID;
1019 
1020     isp_cfg.others.hdrmge_cfg.mode         = amerge_data.Merge_v11.sw_hdrmge_mode;
1021     isp_cfg.others.hdrmge_cfg.gain0_inv    = amerge_data.Merge_v11.sw_hdrmge_gain0_inv;
1022     isp_cfg.others.hdrmge_cfg.gain0        = amerge_data.Merge_v11.sw_hdrmge_gain0;
1023     isp_cfg.others.hdrmge_cfg.gain1_inv    = amerge_data.Merge_v11.sw_hdrmge_gain1_inv;
1024     isp_cfg.others.hdrmge_cfg.gain1        = amerge_data.Merge_v11.sw_hdrmge_gain1;
1025     isp_cfg.others.hdrmge_cfg.gain2        = amerge_data.Merge_v11.sw_hdrmge_gain2;
1026     isp_cfg.others.hdrmge_cfg.lm_dif_0p15  = amerge_data.Merge_v11.sw_hdrmge_lm_dif_0p15;
1027     isp_cfg.others.hdrmge_cfg.lm_dif_0p9   = amerge_data.Merge_v11.sw_hdrmge_lm_dif_0p9;
1028     isp_cfg.others.hdrmge_cfg.ms_diff_0p15 = amerge_data.Merge_v11.sw_hdrmge_ms_dif_0p15;
1029     isp_cfg.others.hdrmge_cfg.ms_dif_0p8   = amerge_data.Merge_v11.sw_hdrmge_ms_dif_0p8;
1030     for(int i = 0; i < ISP3X_HDRMGE_L_CURVE_NUM; i++)
1031     {
1032         isp_cfg.others.hdrmge_cfg.curve.curve_0[i] = amerge_data.Merge_v11.sw_hdrmge_l0_y[i];
1033         isp_cfg.others.hdrmge_cfg.curve.curve_1[i] = amerge_data.Merge_v11.sw_hdrmge_l1_y[i];
1034     }
1035     for(int i = 0; i < ISP3X_HDRMGE_E_CURVE_NUM; i++)
1036         isp_cfg.others.hdrmge_cfg.e_y[i] = amerge_data.Merge_v11.sw_hdrmge_e_y[i];
1037 
1038     //isp30 add
1039     isp_cfg.others.hdrmge_cfg.s_base  = amerge_data.Merge_v11.sw_hdrmge_s_base;
1040     isp_cfg.others.hdrmge_cfg.ms_thd0 = amerge_data.Merge_v11.sw_hdrmge_ms_thd0;
1041     isp_cfg.others.hdrmge_cfg.ms_thd1 = amerge_data.Merge_v11.sw_hdrmge_ms_thd1;
1042     isp_cfg.others.hdrmge_cfg.ms_scl  = amerge_data.Merge_v11.sw_hdrmge_ms_scl;
1043     isp_cfg.others.hdrmge_cfg.lm_thd0 = amerge_data.Merge_v11.sw_hdrmge_lm_thd0;
1044     isp_cfg.others.hdrmge_cfg.lm_thd1 = amerge_data.Merge_v11.sw_hdrmge_lm_thd1;
1045     isp_cfg.others.hdrmge_cfg.lm_scl  = amerge_data.Merge_v11.sw_hdrmge_lm_scl;
1046 
1047 #if 0
1048     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain0_inv %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain0_inv);
1049     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain0 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain0);
1050     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain1_inv %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain1_inv);
1051     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain1 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain1);
1052     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain2 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain2);
1053     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_dif_0p15 %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_dif_0p15);
1054     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_dif_0p9 %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_dif_0p9);
1055     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_diff_0p15 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_diff_0p15);
1056     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_dif_0p8 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_dif_0p8);
1057     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: s_base %d", __LINE__, isp_cfg.others.hdrmge_cfg.s_base);
1058     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: sw_hdrmge_ms_thd0 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_thd0);
1059     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_thd0 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_thd0);
1060     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_thd1 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_thd1);
1061     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_scl %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_scl);
1062     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_thd0 %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_thd0);
1063     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_thd1 %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_thd1);
1064     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_scl %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_scl);
1065     for(int i = 0 ; i < 17; i++)
1066     {
1067         LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: curve_0[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.curve.curve_0[i]);
1068         LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: curve_1[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.curve.curve_1[i]);
1069         LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: e_y[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.e_y[i]);
1070     }
1071 
1072 #endif
1073 }
1074 #endif
1075 
1076 #if RKAIQ_HAVE_GAMMA_V11
1077 template <class T>
convertAiqAgammaToIsp3xParams(T & isp_cfg,const rk_aiq_isp_goc_v3x_t & gamma_out_cfg)1078 void Isp3xParams::convertAiqAgammaToIsp3xParams(T& isp_cfg,
1079         const rk_aiq_isp_goc_v3x_t& gamma_out_cfg) {
1080     if (gamma_out_cfg.Gamma_v11.gamma_en) {
1081         isp_cfg.module_ens |= ISP2X_MODULE_GOC;
1082         isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
1083         isp_cfg.module_cfg_update |= ISP2X_MODULE_GOC;
1084     } else {
1085         isp_cfg.module_ens &= ~ISP2X_MODULE_GOC;
1086         isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
1087         return;
1088     }
1089 
1090     struct isp3x_gammaout_cfg* cfg = &isp_cfg.others.gammaout_cfg;
1091     cfg->offset                    = gamma_out_cfg.Gamma_v11.offset;
1092     cfg->finalx4_dense_en          = gamma_out_cfg.Gamma_v11.EnableDot49 ? 1 : 0;
1093     cfg->equ_segm                  = gamma_out_cfg.Gamma_v11.equ_segm;
1094     for (int i = 0; i < 49; i++) cfg->gamma_y[i] = gamma_out_cfg.Gamma_v11.gamma_y[i];
1095 
1096 #if 0
1097     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) gamma en:%d, finalx4_dense_en:%d offset:%d, equ_segm:%d\n", __FUNCTION__, __LINE__, gamma_out_cfg.Gamma_v11.gamma_en,
1098                     cfg->finalx4_dense_en, cfg->offset, cfg->offset);
1099     LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Gamma_Y:%d %d %d %d %d %d %d %d\n", cfg->gamma_y[0], cfg->gamma_y[1],
1100                     cfg->gamma_y[2], cfg->gamma_y[3], cfg->gamma_y[4], cfg->gamma_y[5], cfg->gamma_y[6], cfg->gamma_y[7]);
1101 #endif
1102 }
1103 #endif
1104 
1105 #if RKAIQ_HAVE_CAC_V03 || RKAIQ_HAVE_CAC_V10
convertAiqCacToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,struct isp3x_isp_params_cfg & isp_cfg_right,const rk_aiq_isp_cac_v3x_t & cac_cfg,bool is_multi_isp)1106 void Isp3xParams::convertAiqCacToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
1107         struct isp3x_isp_params_cfg& isp_cfg_right,
1108         const rk_aiq_isp_cac_v3x_t& cac_cfg, bool is_multi_isp)
1109 {
1110     LOGD_ACAC("convert CAC params enable %d", cac_cfg.enable);
1111     if(cac_cfg.enable) {
1112         isp_cfg.module_en_update |= ISP3X_MODULE_CAC;
1113         isp_cfg.module_ens |= ISP3X_MODULE_CAC;
1114         isp_cfg.module_cfg_update |= ISP3X_MODULE_CAC;
1115     }
1116     else {
1117         isp_cfg.module_en_update |= ISP3X_MODULE_CAC;
1118         isp_cfg.module_ens &= ~(ISP3X_MODULE_CAC);
1119         isp_cfg.module_cfg_update &= ~(ISP3X_MODULE_CAC);
1120     }
1121 
1122     struct isp3x_cac_cfg* cfg = &isp_cfg.others.cac_cfg;
1123     struct isp3x_cac_cfg* cfg_right = nullptr;
1124     memcpy(cfg, &cac_cfg.cfg[0], sizeof(*cfg));
1125     if (is_multi_isp) {
1126         cfg_right = &isp_cfg_right.others.cac_cfg;
1127         memcpy(cfg_right, &cac_cfg.cfg[1], sizeof(*cfg));
1128     }
1129 
1130 #if 1
1131     LOGD_ACAC("driver current enable: %d", cac_cfg.enable);
1132     LOGD_ACAC("driver center en: %d", cfg->center_en);
1133     LOGD_ACAC("driver center x: %u", cfg->center_width);
1134     LOGD_ACAC("driver center y: %u", cfg->center_height);
1135     LOGD_ACAC("driver psf shift bits: %u", cfg->psf_sft_bit);
1136     LOGD_ACAC("driver psf cfg num: %u", cfg->cfg_num);
1137     LOGD_ACAC("driver psf buf fd: %d", cfg->buf_fd);
1138     if (is_multi_isp) {
1139         LOGD_ACAC("driver psf buf fd right : %d", cfg_right->buf_fd);
1140     }
1141     LOGD_ACAC("driver psf hwsize: %u", cfg->hsize);
1142     LOGD_ACAC("driver psf size: %u", cfg->vsize);
1143     for (int i = 0; i < RKCAC_STRENGTH_TABLE_LEN; i++) {
1144         LOGD_ACAC("driver strength %d: %u", i, cfg->strength[i]);
1145     }
1146 #endif
1147 }
1148 #endif
1149 
1150 #if RKAIQ_HAVE_DEHAZE_V11_DUO
convertAiqAdehazeToIsp3xParams(struct isp3x_isp_params_cfg & isp_cfg,const rk_aiq_isp_dehaze_v3x_t & dhaze)1151 void Isp3xParams::convertAiqAdehazeToIsp3xParams(struct isp3x_isp_params_cfg& isp_cfg,
1152         const rk_aiq_isp_dehaze_v3x_t& dhaze)
1153 {
1154     if (dhaze.enable) {
1155         isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
1156         isp_cfg.module_ens |= ISP2X_MODULE_DHAZ;
1157         isp_cfg.module_cfg_update |= ISP2X_MODULE_DHAZ;
1158     } else {
1159         isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
1160         isp_cfg.module_ens &= ~(ISP2X_MODULE_DHAZ);
1161         isp_cfg.module_cfg_update &= ~(ISP2X_MODULE_DHAZ);
1162         return;
1163     }
1164 
1165     struct isp3x_dhaz_cfg *  cfg = &isp_cfg.others.dhaz_cfg;
1166 
1167     cfg->round_en        = dhaze.ProcResV11duo.round_en;
1168     cfg->soft_wr_en      = dhaze.ProcResV11duo.soft_wr_en;
1169     cfg->enhance_en      = dhaze.ProcResV11duo.enhance_en;
1170     cfg->air_lc_en       = dhaze.ProcResV11duo.air_lc_en;
1171     cfg->hpara_en        = dhaze.ProcResV11duo.hpara_en;
1172     cfg->hist_en         = dhaze.ProcResV11duo.hist_en;
1173     cfg->dc_en           = dhaze.ProcResV11duo.dc_en;
1174     cfg->yblk_th         = dhaze.ProcResV11duo.yblk_th;
1175     cfg->yhist_th        = dhaze.ProcResV11duo.yhist_th;
1176     cfg->dc_max_th       = dhaze.ProcResV11duo.dc_max_th;
1177     cfg->dc_min_th       = dhaze.ProcResV11duo.dc_min_th;
1178     cfg->wt_max          = dhaze.ProcResV11duo.wt_max;
1179     cfg->bright_max      = dhaze.ProcResV11duo.bright_max;
1180     cfg->bright_min      = dhaze.ProcResV11duo.bright_min;
1181     cfg->tmax_base       = dhaze.ProcResV11duo.tmax_base;
1182     cfg->dark_th         = dhaze.ProcResV11duo.dark_th;
1183     cfg->air_max         = dhaze.ProcResV11duo.air_max;
1184     cfg->air_min         = dhaze.ProcResV11duo.air_min;
1185     cfg->tmax_max        = dhaze.ProcResV11duo.tmax_max;
1186     cfg->tmax_off        = dhaze.ProcResV11duo.tmax_off;
1187     cfg->hist_k          = dhaze.ProcResV11duo.hist_k;
1188     cfg->hist_th_off     = dhaze.ProcResV11duo.hist_th_off;
1189     cfg->hist_min        = dhaze.ProcResV11duo.hist_min;
1190     cfg->hist_gratio     = dhaze.ProcResV11duo.hist_gratio;
1191     cfg->hist_scale      = dhaze.ProcResV11duo.hist_scale;
1192     cfg->enhance_value   = dhaze.ProcResV11duo.enhance_value;
1193     cfg->enhance_chroma  = dhaze.ProcResV11duo.enhance_chroma;
1194     cfg->iir_wt_sigma    = dhaze.ProcResV11duo.iir_wt_sigma;
1195     cfg->iir_sigma       = dhaze.ProcResV11duo.iir_sigma;
1196     cfg->stab_fnum       = dhaze.ProcResV11duo.stab_fnum;
1197     cfg->iir_tmax_sigma  = dhaze.ProcResV11duo.iir_tmax_sigma;
1198     cfg->iir_air_sigma   = dhaze.ProcResV11duo.iir_air_sigma;
1199     cfg->iir_pre_wet     = dhaze.ProcResV11duo.iir_pre_wet;
1200     cfg->cfg_wt          = dhaze.ProcResV11duo.cfg_wt;
1201     cfg->cfg_air         = dhaze.ProcResV11duo.cfg_air;
1202     cfg->cfg_alpha       = dhaze.ProcResV11duo.cfg_alpha;
1203     cfg->cfg_gratio      = dhaze.ProcResV11duo.cfg_gratio;
1204     cfg->cfg_tmax        = dhaze.ProcResV11duo.cfg_tmax;
1205     cfg->range_sima      = dhaze.ProcResV11duo.range_sima;
1206     cfg->space_sigma_cur = dhaze.ProcResV11duo.space_sigma_cur;
1207     cfg->space_sigma_pre = dhaze.ProcResV11duo.space_sigma_pre;
1208     cfg->dc_weitcur      = dhaze.ProcResV11duo.dc_weitcur;
1209     cfg->bf_weight       = dhaze.ProcResV11duo.bf_weight;
1210     cfg->gaus_h0         = dhaze.ProcResV11duo.gaus_h0;
1211     cfg->gaus_h1         = dhaze.ProcResV11duo.gaus_h1;
1212     cfg->gaus_h2         = dhaze.ProcResV11duo.gaus_h2;
1213     cfg->adp_wt_wr       = dhaze.ProcResV11duo.adp_wt_wr;
1214     cfg->adp_air_wr      = dhaze.ProcResV11duo.adp_air_wr;
1215     cfg->adp_tmax_wr     = dhaze.ProcResV11duo.adp_tmax_wr;
1216     cfg->adp_gratio_wr   = dhaze.ProcResV11duo.adp_gratio_wr;
1217 
1218     for(int i = 0; i < ISP3X_DHAZ_SIGMA_IDX_NUM; i++)
1219         cfg->sigma_idx[i] = dhaze.ProcResV11duo.sigma_idx[i];
1220 
1221     for(int i = 0; i < ISP3X_DHAZ_ENH_CURVE_NUM; i++)
1222         cfg->enh_curve[i] = dhaze.ProcResV11duo.enh_curve[i];
1223 
1224     for(int i = 0; i < ISP3X_DHAZ_SIGMA_LUT_NUM; i++)
1225         cfg->sigma_lut[i] = dhaze.ProcResV11duo.sigma_lut[i];
1226 
1227     for(int i = 0; i < ISP3X_DHAZ_HIST_WR_NUM; i++)
1228         cfg->hist_wr[i] = dhaze.ProcResV11duo.hist_wr[i];
1229 
1230 #if 0
1231     LOGE_ADEHAZE("%s(%d) dehaze local gain IDX(0~5): 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", __func__, __LINE__, cfg->sigma_idx[0], cfg->sigma_idx[1],
1232                  cfg->sigma_idx[2], cfg->sigma_idx[3], cfg->sigma_idx[4], cfg->sigma_idx[5]);
1233     LOGE_ADEHAZE("%s(%d) dehaze local gain LUT(0~5): 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", __func__, __LINE__, cfg->sigma_lut[0], cfg->sigma_lut[1],
1234                  cfg->sigma_lut[2], cfg->sigma_lut[3], cfg->sigma_lut[4], cfg->sigma_lut[5]);
1235 #endif
1236 }
1237 #endif
1238 
convert3aResultsToIspCfg(SmartPtr<cam3aResult> & result,void * isp_cfg_p,bool is_multi_isp)1239 bool Isp3xParams::convert3aResultsToIspCfg(SmartPtr<cam3aResult> &result,
1240         void* isp_cfg_p, bool is_multi_isp)
1241 {
1242     struct isp3x_isp_params_cfg& isp_cfg = *(struct isp3x_isp_params_cfg*)isp_cfg_p;
1243     struct isp3x_isp_params_cfg isp_cfg_right = {};
1244 
1245     if (result.ptr() == NULL) {
1246         LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "3A result empty");
1247         return false;
1248     }
1249 
1250     int32_t type = result->getType();
1251     // LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, module (0x%x) convert params!\n", __FUNCTION__, type);
1252     switch (type)
1253     {
1254     // followings are specific for isp3x
1255     case RESULT_TYPE_EXPOSURE_PARAM:
1256     {
1257         RkAiqSensorExpParamsProxy* expParams =
1258             result.get_cast_ptr<RkAiqSensorExpParamsProxy>();
1259         if (expParams)
1260             convertAiqExpIspDgainToIspParams(isp_cfg_p,
1261                                              expParams->data()->aecExpInfo);
1262     }
1263     break;
1264     case RESULT_TYPE_AWBGAIN_PARAM:
1265     {
1266         RkAiqIspAwbGainParamsProxy* awb_gain = result.get_cast_ptr<RkAiqIspAwbGainParamsProxy>();
1267         if (awb_gain) {
1268             if(mBlcResult) {
1269                 RkAiqIspBlcParamsProxyV21* blc = dynamic_cast<RkAiqIspBlcParamsProxyV21*>(mBlcResult);
1270                 convertAiqAwbGainToIsp21Params(isp_cfg,
1271                                                awb_gain->data()->result, &blc->data()->result, true);
1272             } else {
1273                 convertAiqAwbGainToIsp21Params(isp_cfg,
1274                                                awb_gain->data()->result, nullptr, true);
1275             }
1276 
1277         } else
1278             LOGE("don't get awb_gain params, convert awbgain params failed!");
1279     }
1280     break;
1281     case RESULT_TYPE_AWB_PARAM:
1282     {
1283 #if RKAIQ_HAVE_AWB_V21
1284         mAwbParams = result.ptr();
1285         RkAiqIspAwbParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspAwbParamsProxyV3x>();
1286         if (params)
1287             convertAiqAwbToIsp3xParams(isp_cfg, params->data()->result, true);
1288 #endif
1289     }
1290     break;
1291     case RESULT_TYPE_DRC_PARAM:
1292     {
1293 #if RKAIQ_HAVE_DRC_V11
1294         RkAiqIspDrcParamsProxy* params = result.get_cast_ptr<RkAiqIspDrcParamsProxy>();
1295         if (params)
1296             convertAiqDrcToIsp3xParams(isp_cfg, params->data()->result);
1297 #endif
1298     }
1299     break;
1300     case RESULT_TYPE_TNR_PARAM:
1301     {
1302 #if RKAIQ_HAVE_BAYERTNR_V2
1303         RkAiqIspTnrParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspTnrParamsProxyV3x>();
1304         if (params)
1305             convertAiqTnrToIsp3xParams(isp_cfg, params->data()->result);
1306 #endif
1307     }
1308     break;
1309     case RESULT_TYPE_RAWNR_PARAM:
1310     {
1311 #if RKAIQ_HAVE_BAYER2DNR_V2
1312         RkAiqIspBaynrParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspBaynrParamsProxyV3x>();
1313         if (params)
1314             convertAiqRawnrToIsp3xParams(isp_cfg, params->data()->result);
1315 #endif
1316     }
1317     break;
1318     case RESULT_TYPE_YNR_PARAM:
1319     {
1320 #if RKAIQ_HAVE_YNR_V3
1321         RkAiqIspYnrParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspYnrParamsProxyV3x>();
1322         if (params)
1323             convertAiqYnrToIsp3xParams(isp_cfg, params->data()->result);
1324 #endif
1325     }
1326     break;
1327     case RESULT_TYPE_UVNR_PARAM:
1328     {
1329 #if RKAIQ_HAVE_CNR_V2
1330         RkAiqIspCnrParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspCnrParamsProxyV3x>();
1331         if (params)
1332             convertAiqUvnrToIsp3xParams(isp_cfg, params->data()->result);
1333 #endif
1334     }
1335     break;
1336     case RESULT_TYPE_SHARPEN_PARAM:
1337     {
1338 #if RKAIQ_HAVE_SHARP_V4
1339         RkAiqIspSharpenParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspSharpenParamsProxyV3x>();
1340         if (params)
1341             convertAiqSharpenToIsp3xParams(isp_cfg, params->data()->result);
1342 #endif
1343     }
1344     break;
1345     case RESULT_TYPE_GAIN_PARAM:
1346     {
1347         RkAiqIspGainParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspGainParamsProxyV3x>();
1348         if (params)
1349             convertAiqGainToIsp3xParams(isp_cfg, params->data()->result);
1350     }
1351     break;
1352     case RESULT_TYPE_DEHAZE_PARAM:
1353     {
1354 #if RKAIQ_HAVE_DEHAZE_V11_DUO
1355         RkAiqIspDehazeParamsProxy* params = result.get_cast_ptr<RkAiqIspDehazeParamsProxy>();
1356         if (params)
1357             convertAiqAdehazeToIsp3xParams(isp_cfg, params->data()->result);
1358 #endif
1359     }
1360     break;
1361     case RESULT_TYPE_GIC_PARAM:
1362     {
1363         RkAiqIspGicParamsProxy* params = result.get_cast_ptr<RkAiqIspGicParamsProxy>();
1364         if (params)
1365             convertAiqAgicToIsp21Params(isp_cfg, params->data()->result);
1366     }
1367     break;
1368     case RESULT_TYPE_AF_PARAM:
1369     {
1370 #if RKAIQ_HAVE_AF_V30 || RKAIQ_ONLY_AF_STATS_V30
1371         RkAiqIspAfParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspAfParamsProxyV3x>();
1372         if (params)
1373             convertAiqAfToIsp3xParams(isp_cfg, params->data()->result, true);
1374 #endif
1375     }
1376     break;
1377     case RESULT_TYPE_MERGE_PARAM:
1378     {
1379 #if RKAIQ_HAVE_MERGE_V11
1380         RkAiqIspMergeParamsProxy* params = result.get_cast_ptr<RkAiqIspMergeParamsProxy>();
1381         if (params) {
1382             convertAiqMergeToIsp3xParams(isp_cfg, params->data()->result);
1383         }
1384 #endif
1385     }
1386     break;
1387     case RESULT_TYPE_AGAMMA_PARAM:
1388     {
1389 #if RKAIQ_HAVE_GAMMA_V11
1390         RkAiqIspAgammaParamsProxy* params = result.get_cast_ptr<RkAiqIspAgammaParamsProxy>();
1391         if (params)
1392             convertAiqAgammaToIsp3xParams(isp_cfg, params->data()->result);
1393 #endif
1394     }
1395     break;
1396     case RESULT_TYPE_CAC_PARAM:
1397     {
1398 #if RKAIQ_HAVE_CAC_V03 || RKAIQ_HAVE_CAC_V10
1399         RkAiqIspCacParamsProxyV3x* params = result.get_cast_ptr<RkAiqIspCacParamsProxyV3x>();
1400         if (params)
1401             convertAiqCacToIsp3xParams(isp_cfg, isp_cfg_right, params->data()->result, is_multi_isp);
1402 #endif
1403     }
1404     break;
1405     case RESULT_TYPE_LSC_PARAM:
1406     {
1407 #if RKAIQ_HAVE_LSC_V2
1408         RkAiqIspLscParamsProxy* params = result.get_cast_ptr<RkAiqIspLscParamsProxy>();
1409         if (params)
1410             convertAiqLscToIsp20Params(isp_cfg, params->data()->result);
1411 #endif
1412     }
1413     break;
1414     // followings are the same as isp21
1415     case RESULT_TYPE_BLC_PARAM:
1416     {
1417         RkAiqIspBlcParamsProxyV21* params = result.get_cast_ptr<RkAiqIspBlcParamsProxyV21>();
1418         if (params)
1419             convertAiqBlcToIsp21Params(isp_cfg, params->data()->result);
1420     }
1421     break;
1422     case RESULT_TYPE_CCM_PARAM:
1423     {
1424 #if RKAIQ_HAVE_CCM_V1
1425         RkAiqIspCcmParamsProxy* params = result.get_cast_ptr<RkAiqIspCcmParamsProxy>();
1426         if (params)
1427             convertAiqCcmToIsp21Params(isp_cfg, params->data()->result);
1428 #endif
1429     }
1430     break;
1431     // followings are the same as isp20
1432     case RESULT_TYPE_AEC_PARAM:
1433     {
1434 #if defined(ISP_HW_V30)
1435         RkAiqIspAecParamsProxy* params = result.get_cast_ptr<RkAiqIspAecParamsProxy>();
1436         if (params) {
1437             convertAiqAeToIsp20Params(isp_cfg, params->data()->result);
1438         }
1439 #endif
1440     }
1441     break;
1442     case RESULT_TYPE_HIST_PARAM:
1443     {
1444 #if defined(ISP_HW_V30)
1445         RkAiqIspHistParamsProxy* params = result.get_cast_ptr<RkAiqIspHistParamsProxy>();
1446         if (params)
1447             convertAiqHistToIsp20Params(isp_cfg, params->data()->result);
1448 #endif
1449     }
1450     break;
1451     case RESULT_TYPE_LUT3D_PARAM:
1452     {
1453 #if RKAIQ_HAVE_3DLUT_V1
1454         RkAiqIspLut3dParamsProxy* params = result.get_cast_ptr<RkAiqIspLut3dParamsProxy>();
1455         if (params)
1456             convertAiqA3dlutToIsp20Params(isp_cfg, params->data()->result);
1457 #endif
1458     }
1459     break;
1460     case RESULT_TYPE_DPCC_PARAM:
1461     {
1462         RkAiqIspDpccParamsProxy* params = result.get_cast_ptr<RkAiqIspDpccParamsProxy>();
1463         if (params)
1464             convertAiqDpccToIsp20Params(isp_cfg, params->data()->result);
1465     }
1466     break;
1467     case RESULT_TYPE_DEBAYER_PARAM:
1468     {
1469         RkAiqIspDebayerParamsProxy* params = result.get_cast_ptr<RkAiqIspDebayerParamsProxy>();
1470         if (params)
1471             convertAiqAdemosaicToIsp20Params(isp_cfg, params->data()->result);
1472     }
1473     break;
1474     case RESULT_TYPE_LDCH_PARAM:
1475     {
1476         RkAiqIspLdchParamsProxy* params = result.get_cast_ptr<RkAiqIspLdchParamsProxy>();
1477         if (params)
1478             convertAiqAldchToIsp20Params(isp_cfg, params->data()->result);
1479     }
1480     break;
1481     case RESULT_TYPE_ADEGAMMA_PARAM:
1482     {
1483         RkAiqIspAdegammaParamsProxy* params = result.get_cast_ptr<RkAiqIspAdegammaParamsProxy>();
1484         if (params)
1485             convertAiqAdegammaToIsp20Params(isp_cfg, params->data()->result);
1486     }
1487     break;
1488     case RESULT_TYPE_WDR_PARAM:
1489 #if 0
1490     {
1491         SmartPtr<RkAiqIspWdrParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspWdrParamsProxy>();
1492         if (params.ptr())
1493             convertAiqWdrToIsp20Params(isp_cfg, params->data()->result);
1494     }
1495 #endif
1496     break;
1497     case RESULT_TYPE_CSM_PARAM:
1498     {
1499         RkAiqIspCsmParamsProxy* params = result.get_cast_ptr<RkAiqIspCsmParamsProxy>();
1500         if (params)
1501             convertAiqCsmToIsp21Params(isp_cfg, params->data()->result);
1502     }
1503     break;
1504     case RESULT_TYPE_CGC_PARAM:
1505     {
1506 #if RKAIQ_HAVE_CGC_V1
1507         RkAiqIspCgcParamsProxy* params = result.get_cast_ptr<RkAiqIspCgcParamsProxy>();
1508         if (params)
1509             convertAiqCgcToIsp21Params(isp_cfg, params->data()->result);
1510 #endif
1511     }
1512     break;
1513     case RESULT_TYPE_CONV422_PARAM:
1514         break;
1515     case RESULT_TYPE_YUVCONV_PARAM:
1516         break;
1517     case RESULT_TYPE_CP_PARAM:
1518     {
1519 #if RKAIQ_HAVE_ACP_V10
1520         RkAiqIspCpParamsProxy* params = result.get_cast_ptr<RkAiqIspCpParamsProxy>();
1521         if (params)
1522             convertAiqCpToIsp20Params(isp_cfg, params->data()->result);
1523 #endif
1524     }
1525     break;
1526     case RESULT_TYPE_IE_PARAM:
1527     {
1528 #if RKAIQ_HAVE_AIE_V10
1529         RkAiqIspIeParamsProxy* params = result.get_cast_ptr<RkAiqIspIeParamsProxy>();
1530         if (params)
1531             convertAiqIeToIsp20Params(isp_cfg, params->data()->result);
1532 #endif
1533     }
1534     break;
1535     case RESULT_TYPE_FEC_PARAM:
1536         break;
1537     default:
1538         LOGE("unknown param type: 0x%x!", type);
1539         return false;
1540     }
1541 
1542     if (is_multi_isp) {
1543         memcpy(&((struct isp3x_isp_params_cfg*)isp_cfg_p + 1)->others.cac_cfg,
1544                &isp_cfg_right.others.cac_cfg, sizeof(struct isp3x_cac_cfg));
1545     }
1546     return true;
1547 }
1548 
1549 }; //namspace RkCam
1550