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