1 /*
2 * rk_aiq_adehaze_algo_v11_duo.cpp
3 *
4 * Copyright (c) 2019 Rockchip Corporation
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 */
19 #include "rk_aiq_adehaze_algo_v11_duo.h"
20 #include <string.h>
21 #include "xcam_log.h"
22
GetInterpRatioV11Duo(float * pX,int lo,int hi,float CtrlValue,int length_max)23 float GetInterpRatioV11Duo(float* pX, int lo, int hi, float CtrlValue, int length_max) {
24 float ratio = 0.0f;
25
26 if (CtrlValue < pX[0]) {
27 lo = 0;
28 hi = 0;
29 ratio = 0.0f;
30 } else if (CtrlValue >= pX[length_max - 1]) {
31 lo = length_max - 1;
32 hi = length_max - 1;
33 ratio = 0.0f;
34 } else {
35 for (int i = 0; i < length_max - 1; i++) {
36 if (CtrlValue >= pX[i] && CtrlValue < pX[i + 1]) {
37 lo = i;
38 hi = i + 1;
39 ratio = (CtrlValue - pX[i]) / (pX[i + 1] - pX[i]);
40 break;
41 } else
42 continue;
43 }
44 }
45
46 return ratio;
47 }
48
ClipValueV11Duo(float posx,int BitInt,int BitFloat)49 int ClipValueV11Duo(float posx, int BitInt, int BitFloat) {
50 int yOutInt = 0;
51 int yOutIntMax = (int)(pow(2, (BitFloat + BitInt)) - 1);
52 int yOutIntMin = 0;
53
54 yOutInt = LIMIT_VALUE((int)(posx * pow(2, BitFloat)), yOutIntMax, yOutIntMin);
55
56 return yOutInt;
57 }
58
stManuGetDehazeParamsV11duo(mDehazeAttrV11_t * pStManu,RkAiqAdehazeProcResult_t * pProcRes,int rawWidth,int rawHeight,unsigned int MDehazeStrth)59 void stManuGetDehazeParamsV11duo(mDehazeAttrV11_t* pStManu, RkAiqAdehazeProcResult_t* pProcRes,
60 int rawWidth, int rawHeight, unsigned int MDehazeStrth) {
61 LOG1_ADEHAZE("ENTER: %s \n", __func__);
62
63 pProcRes->ProcResV11duo.air_lc_en =
64 pStManu->dehaze_setting.air_lc_en ? FUNCTION_ENABLE : FUNCTION_DISABLE;
65 pProcRes->ProcResV11duo.dc_min_th =
66 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.dc_min_th, 8, 0);
67 pProcRes->ProcResV11duo.dc_max_th =
68 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.dc_max_th, 8, 0);
69 pProcRes->ProcResV11duo.yhist_th =
70 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.yhist_th, 8, 0);
71 pProcRes->ProcResV11duo.yblk_th = int(pStManu->dehaze_setting.DehazeData.yblk_th *
72 ((rawWidth + 15) / 16) * ((rawHeight + 15) / 16));
73 pProcRes->ProcResV11duo.dark_th =
74 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.dark_th, 8, 0);
75 pProcRes->ProcResV11duo.bright_min =
76 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.bright_min, 8, 0);
77 pProcRes->ProcResV11duo.bright_max =
78 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.bright_max, 8, 0);
79 pProcRes->ProcResV11duo.wt_max =
80 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.wt_max, 0, 8);
81 pProcRes->ProcResV11duo.air_min =
82 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.air_min, 8, 0);
83 pProcRes->ProcResV11duo.air_max =
84 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.air_max, 8, 0);
85 pProcRes->ProcResV11duo.tmax_base =
86 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.tmax_base, 8, 0);
87 pProcRes->ProcResV11duo.tmax_off =
88 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.tmax_off, 0, 10);
89 pProcRes->ProcResV11duo.tmax_max =
90 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.tmax_max, 0, 10);
91 pProcRes->ProcResV11duo.cfg_wt =
92 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.cfg_wt, 0, 8);
93 pProcRes->ProcResV11duo.cfg_air =
94 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.cfg_air, 8, 0);
95 pProcRes->ProcResV11duo.cfg_tmax =
96 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.cfg_tmax, 0, 10);
97 pProcRes->ProcResV11duo.range_sima =
98 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.range_sigma, 0, 8);
99 pProcRes->ProcResV11duo.space_sigma_cur =
100 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.space_sigma_cur, 0, 8);
101 pProcRes->ProcResV11duo.space_sigma_pre =
102 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.space_sigma_pre, 0, 8);
103 pProcRes->ProcResV11duo.bf_weight =
104 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.bf_weight, 0, 8);
105 pProcRes->ProcResV11duo.dc_weitcur =
106 ClipValueV11Duo(pStManu->dehaze_setting.DehazeData.dc_weitcur, 0, 8);
107 pProcRes->ProcResV11duo.stab_fnum = ClipValueV11Duo(pStManu->dehaze_setting.stab_fnum, 5, 0);
108 if (pStManu->dehaze_setting.sigma)
109 pProcRes->ProcResV11duo.iir_sigma =
110 LIMIT_VALUE(int(256.0f / pStManu->dehaze_setting.sigma), 255, 0);
111 else
112 pProcRes->ProcResV11duo.iir_sigma = 0x1;
113 if (pStManu->dehaze_setting.wt_sigma >= 0.0f)
114 pProcRes->ProcResV11duo.iir_wt_sigma =
115 LIMIT_VALUE(int(1024.0f / (8.0f * pStManu->dehaze_setting.wt_sigma + 0.5f)), 0x7ff, 0);
116 else
117 pProcRes->ProcResV11duo.iir_wt_sigma = 0x7ff;
118 if (pStManu->dehaze_setting.air_sigma)
119 pProcRes->ProcResV11duo.iir_air_sigma =
120 LIMIT_VALUE(int(1024.0f / pStManu->dehaze_setting.air_sigma), 255, 0);
121 else
122 pProcRes->ProcResV11duo.iir_air_sigma = 0x8;
123 if (pStManu->dehaze_setting.tmax_sigma)
124 pProcRes->ProcResV11duo.iir_tmax_sigma =
125 LIMIT_VALUE(int(1.0f / pStManu->dehaze_setting.tmax_sigma), 0x7ff, 0);
126 else
127 pProcRes->ProcResV11duo.iir_tmax_sigma = 0x5f;
128 pProcRes->ProcResV11duo.iir_pre_wet =
129 LIMIT_VALUE(int(pStManu->dehaze_setting.pre_wet - 1.0f), 15, 0);
130 pProcRes->ProcResV11duo.gaus_h0 = DEHAZE_GAUS_H4;
131 pProcRes->ProcResV11duo.gaus_h1 = DEHAZE_GAUS_H1;
132 pProcRes->ProcResV11duo.gaus_h2 = DEHAZE_GAUS_H0;
133
134 // add for rk_aiq_uapi2_setMDehazeStrth
135 if (MDehazeStrth != DEHAZE_DEFAULT_LEVEL) {
136 pProcRes->ProcResV11duo.cfg_alpha = BIT_8_MAX;
137 unsigned int level_diff = MDehazeStrth > DEHAZE_DEFAULT_LEVEL
138 ? (MDehazeStrth - DEHAZE_DEFAULT_LEVEL)
139 : (DEHAZE_DEFAULT_LEVEL - MDehazeStrth);
140 bool level_up = MDehazeStrth > DEHAZE_DEFAULT_LEVEL;
141 if (level_up) {
142 pProcRes->ProcResV11duo.cfg_wt += level_diff * DEHAZE_DEFAULT_CFG_WT_STEP;
143 pProcRes->ProcResV11duo.cfg_air += level_diff * DEHAZE_DEFAULT_CFG_AIR_STEP;
144 pProcRes->ProcResV11duo.cfg_tmax += level_diff * DEHAZE_DEFAULT_CFG_TMAX_STEP;
145 } else {
146 pProcRes->ProcResV11duo.cfg_wt -= level_diff * DEHAZE_DEFAULT_CFG_WT_STEP;
147 pProcRes->ProcResV11duo.cfg_air -= level_diff * DEHAZE_DEFAULT_CFG_AIR_STEP;
148 pProcRes->ProcResV11duo.cfg_tmax -= level_diff * DEHAZE_DEFAULT_CFG_TMAX_STEP;
149 }
150 pProcRes->ProcResV11duo.cfg_wt =
151 LIMIT_VALUE(pProcRes->ProcResV11duo.cfg_wt, BIT_8_MAX, BIT_MIN);
152 pProcRes->ProcResV11duo.cfg_air =
153 LIMIT_VALUE(pProcRes->ProcResV11duo.cfg_air, BIT_8_MAX, BIT_MIN);
154 pProcRes->ProcResV11duo.cfg_tmax =
155 LIMIT_VALUE(pProcRes->ProcResV11duo.cfg_tmax, BIT_10_MAX, BIT_MIN);
156 }
157
158 if (pProcRes->ProcResV11duo.dc_en && !(pProcRes->ProcResV11duo.enhance_en)) {
159 if (pProcRes->ProcResV11duo.cfg_alpha == 255) {
160 LOGD_ADEHAZE("%s cfg_alpha:1 cfg_air:%f cfg_tmax:%f cfg_wt:%f\n", __func__,
161 pProcRes->ProcResV11duo.cfg_air / 1.0f,
162 pProcRes->ProcResV11duo.cfg_tmax / 1023.0f,
163 pProcRes->ProcResV11duo.cfg_wt / 255.0f);
164 LOGD_ADEHAZE("%s cfg_alpha_reg:0x255 cfg_air:0x%x cfg_tmax:0x%x cfg_wt:0x%x\n",
165 __func__, pProcRes->ProcResV11duo.cfg_air,
166 pProcRes->ProcResV11duo.cfg_tmax, pProcRes->ProcResV11duo.cfg_wt);
167 } else if (pProcRes->ProcResV11duo.cfg_alpha == 0) {
168 LOGD_ADEHAZE(
169 "%s cfg_alpha:0 air_max:%f air_min:%f tmax_base:%f wt_max:%f\n", __func__,
170 pProcRes->ProcResV11duo.air_max / 1.0f, pProcRes->ProcResV11duo.air_min / 1.0f,
171 pProcRes->ProcResV11duo.tmax_base / 1.0f, pProcRes->ProcResV11duo.wt_max / 255.0f);
172 LOGD_ADEHAZE(
173 "%s cfg_alpha_reg:0x0 air_max:0x%x air_min:0x%x tmax_base:0x%x wt_max:0x%x\n",
174 __func__, pProcRes->ProcResV11duo.air_max, pProcRes->ProcResV11duo.air_min,
175 pProcRes->ProcResV11duo.tmax_base, pProcRes->ProcResV11duo.wt_max);
176 }
177 }
178
179 LOG1_ADEHAZE("EIXT: %s \n", __func__);
180 }
181
stManuGetEnhanceParamsV11duo(mDehazeAttrV11_t * pStManu,RkAiqAdehazeProcResult_t * pProcRes,unsigned int MEnhanceStrth,unsigned int MEnhanceChromeStrth)182 void stManuGetEnhanceParamsV11duo(mDehazeAttrV11_t* pStManu, RkAiqAdehazeProcResult_t* pProcRes,
183 unsigned int MEnhanceStrth, unsigned int MEnhanceChromeStrth) {
184 LOG1_ADEHAZE("ENTER: %s \n", __func__);
185 bool level_up = false;
186 unsigned int level_diff = 0;
187
188 pProcRes->ProcResV11duo.enhance_value =
189 ClipValueV11Duo(pStManu->enhance_setting.EnhanceData.enhance_value, 4, 10);
190 pProcRes->ProcResV11duo.enhance_chroma =
191 ClipValueV11Duo(pStManu->enhance_setting.EnhanceData.enhance_chroma, 4, 10);
192
193 // add for rk_aiq_uapi2_setMEnhanceStrth
194 if (MEnhanceStrth != ENHANCE_DEFAULT_LEVEL) {
195 level_diff = MEnhanceStrth > ENHANCE_DEFAULT_LEVEL
196 ? (MEnhanceStrth - ENHANCE_DEFAULT_LEVEL)
197 : (ENHANCE_DEFAULT_LEVEL - MEnhanceStrth);
198 level_up = MEnhanceStrth > ENHANCE_DEFAULT_LEVEL;
199 if (level_up) {
200 pProcRes->ProcResV11duo.enhance_value += level_diff * ENHANCE_VALUE_DEFAULT_STEP;
201 } else {
202 pProcRes->ProcResV11duo.enhance_value -= level_diff * ENHANCE_VALUE_DEFAULT_STEP;
203 }
204 pProcRes->ProcResV11duo.enhance_value =
205 LIMIT_VALUE(pProcRes->ProcResV11duo.enhance_value, BIT_14_MAX, BIT_MIN);
206 }
207
208 // add for rk_aiq_uapi2_setMEnhanceChromeStrth
209 if (MEnhanceChromeStrth != ENHANCE_DEFAULT_LEVEL) {
210 level_diff = MEnhanceChromeStrth > ENHANCE_DEFAULT_LEVEL
211 ? (MEnhanceChromeStrth - ENHANCE_DEFAULT_LEVEL)
212 : (ENHANCE_DEFAULT_LEVEL - MEnhanceChromeStrth);
213 level_up = MEnhanceChromeStrth > ENHANCE_DEFAULT_LEVEL;
214 if (level_up) {
215 pProcRes->ProcResV11duo.enhance_chroma += level_diff * ENHANCE_VALUE_DEFAULT_STEP;
216 } else {
217 pProcRes->ProcResV11duo.enhance_chroma -= level_diff * ENHANCE_VALUE_DEFAULT_STEP;
218 }
219 pProcRes->ProcResV11duo.enhance_chroma =
220 LIMIT_VALUE(pProcRes->ProcResV11duo.enhance_chroma, BIT_14_MAX, BIT_MIN);
221 }
222
223 for (int i = 0; i < DHAZ_V11_ENHANCE_CRUVE_NUM; i++)
224 pProcRes->ProcResV11duo.enh_curve[i] = (int)(pStManu->enhance_setting.enhance_curve[i]);
225
226 if (pProcRes->ProcResV11duo.dc_en && pProcRes->ProcResV11duo.enhance_en) {
227 LOGD_ADEHAZE("%s enhance_value:%f enhance_chroma:%f\n", __func__,
228 pStManu->enhance_setting.EnhanceData.enhance_value / 1024.0f,
229 pStManu->enhance_setting.EnhanceData.enhance_chroma / 1024.0f);
230 LOGD_ADEHAZE("%s enhance_value_reg:0x%x enhance_chroma_reg:0x%x\n", __func__,
231 pProcRes->ProcResV11duo.enhance_value, pProcRes->ProcResV11duo.enhance_chroma);
232 }
233
234 LOG1_ADEHAZE("EIXT: %s \n", __func__);
235 }
236
stManuGetHistParamsV11duo(mDehazeAttrV11_t * pStManu,RkAiqAdehazeProcResult_t * pProcRes)237 void stManuGetHistParamsV11duo(mDehazeAttrV11_t* pStManu, RkAiqAdehazeProcResult_t* pProcRes) {
238 LOG1_ADEHAZE("ENTER: %s \n", __func__);
239
240 pProcRes->ProcResV11duo.hpara_en =
241 pStManu->hist_setting.hist_para_en ? FUNCTION_ENABLE : FUNCTION_DISABLE;
242 // clip hpara_en
243 pProcRes->ProcResV11duo.hpara_en =
244 pProcRes->ProcResV11duo.dc_en ? pProcRes->ProcResV11duo.hpara_en : FUNCTION_ENABLE;
245
246 pProcRes->ProcResV11duo.hist_gratio =
247 ClipValueV11Duo(pStManu->hist_setting.HistData.hist_gratio, 5, 3);
248 pProcRes->ProcResV11duo.hist_th_off =
249 ClipValueV11Duo(pStManu->hist_setting.HistData.hist_th_off, 8, 0);
250 pProcRes->ProcResV11duo.hist_k = ClipValueV11Duo(pStManu->hist_setting.HistData.hist_k, 3, 2);
251 pProcRes->ProcResV11duo.hist_min =
252 ClipValueV11Duo(pStManu->hist_setting.HistData.hist_min, 1, 8);
253 pProcRes->ProcResV11duo.cfg_gratio =
254 ClipValueV11Duo(pStManu->hist_setting.HistData.cfg_gratio, 5, 8);
255 pProcRes->ProcResV11duo.hist_scale =
256 ClipValueV11Duo(pStManu->hist_setting.HistData.hist_scale, 5, 8);
257
258 if (pProcRes->ProcResV11duo.hist_en) {
259 LOGD_ADEHAZE(
260 "%s cfg_alpha:%f hist_para_en:%d hist_gratio:%f hist_th_off:%f hist_k:%f "
261 "hist_min:%f hist_scale:%f cfg_gratio:%f\n",
262 __func__, pProcRes->ProcResV11duo.cfg_alpha / 255.0f, pProcRes->ProcResV11duo.hpara_en,
263 pProcRes->ProcResV11duo.hist_gratio / 255.0f,
264 pProcRes->ProcResV11duo.hist_th_off / 1.0f, pProcRes->ProcResV11duo.hist_k / 4.0f,
265 pProcRes->ProcResV11duo.hist_min / 256.0f, pProcRes->ProcResV11duo.hist_scale / 256.0f,
266 pProcRes->ProcResV11duo.cfg_gratio / 256.0f);
267 LOGD_ADEHAZE(
268 "%s cfg_alpha_reg:0x%x hist_gratio_reg:0x%x hist_th_off_reg:0x%x hist_k_reg:0x%x "
269 "hist_min_reg:0x%x hist_scale_reg:0x%x cfg_gratio_reg:0x%x\n",
270 __func__, pProcRes->ProcResV11duo.cfg_alpha, pProcRes->ProcResV11duo.hist_gratio,
271 pProcRes->ProcResV11duo.hist_th_off, pProcRes->ProcResV11duo.hist_k,
272 pProcRes->ProcResV11duo.hist_min, pProcRes->ProcResV11duo.hist_scale,
273 pProcRes->ProcResV11duo.cfg_gratio);
274 }
275
276 LOG1_ADEHAZE("EIXT: %s \n", __func__);
277 }
278
GetDehazeParamsV11duo(CalibDbDehazeV11_t * pCalibV11Duo,RkAiqAdehazeProcResult_t * pProcRes,int rawWidth,int rawHeight,unsigned int MDehazeStrth,float CtrlValue)279 void GetDehazeParamsV11duo(CalibDbDehazeV11_t* pCalibV11Duo, RkAiqAdehazeProcResult_t* pProcRes,
280 int rawWidth, int rawHeight, unsigned int MDehazeStrth,
281 float CtrlValue) {
282 LOG1_ADEHAZE("ENTER: %s \n", __func__);
283 int lo = 0, hi = 0;
284 float ratio = GetInterpRatioV11Duo(pCalibV11Duo->dehaze_setting.DehazeData.CtrlData, lo, hi,
285 CtrlValue, DHAZ_CTRL_DATA_STEP_MAX);
286
287 pProcRes->ProcResV11duo.dc_min_th =
288 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.dc_min_th[hi] -
289 pCalibV11Duo->dehaze_setting.DehazeData.dc_min_th[lo]) +
290 pCalibV11Duo->dehaze_setting.DehazeData.dc_min_th[lo],
291 8, 0);
292 pProcRes->ProcResV11duo.dc_max_th =
293 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.dc_max_th[hi] -
294 pCalibV11Duo->dehaze_setting.DehazeData.dc_max_th[lo]) +
295 pCalibV11Duo->dehaze_setting.DehazeData.dc_max_th[lo],
296 8, 0);
297 pProcRes->ProcResV11duo.yhist_th =
298 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.yhist_th[hi] -
299 pCalibV11Duo->dehaze_setting.DehazeData.yhist_th[lo]) +
300 pCalibV11Duo->dehaze_setting.DehazeData.yhist_th[lo],
301 8, 0);
302 pProcRes->ProcResV11duo.yblk_th =
303 (ratio * (pCalibV11Duo->dehaze_setting.DehazeData.yblk_th[hi] -
304 pCalibV11Duo->dehaze_setting.DehazeData.yblk_th[lo]) +
305 pCalibV11Duo->dehaze_setting.DehazeData.yblk_th[lo]) *
306 ((rawWidth + 15) / 16) * ((rawHeight + 15) / 16);
307 pProcRes->ProcResV11duo.dark_th =
308 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.dark_th[hi] -
309 pCalibV11Duo->dehaze_setting.DehazeData.dark_th[lo]) +
310 pCalibV11Duo->dehaze_setting.DehazeData.dark_th[lo],
311 8, 0);
312
313 pProcRes->ProcResV11duo.bright_min =
314 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.bright_min[hi] -
315 pCalibV11Duo->dehaze_setting.DehazeData.bright_min[lo]) +
316 pCalibV11Duo->dehaze_setting.DehazeData.bright_min[lo],
317 8, 0);
318 pProcRes->ProcResV11duo.bright_max =
319 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.bright_max[hi] -
320 pCalibV11Duo->dehaze_setting.DehazeData.bright_max[lo]) +
321 pCalibV11Duo->dehaze_setting.DehazeData.bright_max[lo],
322 8, 0);
323 pProcRes->ProcResV11duo.wt_max =
324 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.wt_max[hi] -
325 pCalibV11Duo->dehaze_setting.DehazeData.wt_max[lo]) +
326 pCalibV11Duo->dehaze_setting.DehazeData.wt_max[lo],
327 0, 8);
328 pProcRes->ProcResV11duo.air_min =
329 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.air_min[hi] -
330 pCalibV11Duo->dehaze_setting.DehazeData.air_min[lo]) +
331 pCalibV11Duo->dehaze_setting.DehazeData.air_min[lo],
332 8, 0);
333 pProcRes->ProcResV11duo.air_max =
334 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.air_max[hi] -
335 pCalibV11Duo->dehaze_setting.DehazeData.air_max[lo]) +
336 pCalibV11Duo->dehaze_setting.DehazeData.air_max[lo],
337 8, 0);
338 pProcRes->ProcResV11duo.tmax_base =
339 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.tmax_base[hi] -
340 pCalibV11Duo->dehaze_setting.DehazeData.tmax_base[lo]) +
341 pCalibV11Duo->dehaze_setting.DehazeData.tmax_base[lo],
342 8, 0);
343 pProcRes->ProcResV11duo.tmax_off =
344 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.tmax_off[hi] -
345 pCalibV11Duo->dehaze_setting.DehazeData.tmax_off[lo]) +
346 pCalibV11Duo->dehaze_setting.DehazeData.tmax_off[lo],
347 0, 10);
348 pProcRes->ProcResV11duo.tmax_max =
349 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.tmax_max[hi] -
350 pCalibV11Duo->dehaze_setting.DehazeData.tmax_max[lo]) +
351 pCalibV11Duo->dehaze_setting.DehazeData.tmax_max[lo],
352 0, 10);
353 pProcRes->ProcResV11duo.cfg_wt =
354 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.cfg_wt[hi] -
355 pCalibV11Duo->dehaze_setting.DehazeData.cfg_wt[lo]) +
356 pCalibV11Duo->dehaze_setting.DehazeData.cfg_wt[lo],
357 0, 8);
358 pProcRes->ProcResV11duo.cfg_air =
359 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.cfg_air[hi] -
360 pCalibV11Duo->dehaze_setting.DehazeData.cfg_air[lo]) +
361 pCalibV11Duo->dehaze_setting.DehazeData.cfg_air[lo],
362 8, 0);
363 pProcRes->ProcResV11duo.cfg_tmax =
364 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.cfg_tmax[hi] -
365 pCalibV11Duo->dehaze_setting.DehazeData.cfg_tmax[lo]) +
366 pCalibV11Duo->dehaze_setting.DehazeData.cfg_tmax[lo],
367 0, 10);
368 pProcRes->ProcResV11duo.range_sima =
369 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.range_sigma[hi] -
370 pCalibV11Duo->dehaze_setting.DehazeData.range_sigma[lo]) +
371 pCalibV11Duo->dehaze_setting.DehazeData.range_sigma[lo],
372 0, 8);
373 pProcRes->ProcResV11duo.space_sigma_cur =
374 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.space_sigma_cur[hi] -
375 pCalibV11Duo->dehaze_setting.DehazeData.space_sigma_cur[lo]) +
376 pCalibV11Duo->dehaze_setting.DehazeData.space_sigma_cur[lo],
377 0, 8);
378 pProcRes->ProcResV11duo.space_sigma_pre =
379 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.space_sigma_pre[hi] -
380 pCalibV11Duo->dehaze_setting.DehazeData.space_sigma_pre[lo]) +
381 pCalibV11Duo->dehaze_setting.DehazeData.space_sigma_pre[lo],
382 0, 8);
383 pProcRes->ProcResV11duo.bf_weight =
384 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.bf_weight[hi] -
385 pCalibV11Duo->dehaze_setting.DehazeData.bf_weight[lo]) +
386 pCalibV11Duo->dehaze_setting.DehazeData.bf_weight[lo],
387 0, 8);
388 pProcRes->ProcResV11duo.dc_weitcur =
389 ClipValueV11Duo(ratio * (pCalibV11Duo->dehaze_setting.DehazeData.dc_weitcur[hi] -
390 pCalibV11Duo->dehaze_setting.DehazeData.dc_weitcur[lo]) +
391 pCalibV11Duo->dehaze_setting.DehazeData.dc_weitcur[lo],
392 0, 8);
393 pProcRes->ProcResV11duo.air_lc_en =
394 pCalibV11Duo->dehaze_setting.air_lc_en ? FUNCTION_ENABLE : FUNCTION_DISABLE;
395 pProcRes->ProcResV11duo.stab_fnum =
396 ClipValueV11Duo(pCalibV11Duo->dehaze_setting.stab_fnum, 5, 0);
397 if (pCalibV11Duo->dehaze_setting.sigma)
398 pProcRes->ProcResV11duo.iir_sigma =
399 LIMIT_VALUE(int(256.0f / pCalibV11Duo->dehaze_setting.sigma), 255, 0);
400 else
401 pProcRes->ProcResV11duo.iir_sigma = 0x1;
402 if (pCalibV11Duo->dehaze_setting.wt_sigma >= 0.0f)
403 pProcRes->ProcResV11duo.iir_wt_sigma = LIMIT_VALUE(
404 int(1024.0f / (8.0f * pCalibV11Duo->dehaze_setting.wt_sigma + 0.5f)), 0x7ff, 0);
405 else
406 pProcRes->ProcResV11duo.iir_wt_sigma = 0x7ff;
407 if (pCalibV11Duo->dehaze_setting.air_sigma)
408 pProcRes->ProcResV11duo.iir_air_sigma =
409 LIMIT_VALUE(int(1024.0f / pCalibV11Duo->dehaze_setting.air_sigma), 255, 0);
410 else
411 pProcRes->ProcResV11duo.iir_air_sigma = 0x8;
412 if (pCalibV11Duo->dehaze_setting.tmax_sigma)
413 pProcRes->ProcResV11duo.iir_tmax_sigma =
414 LIMIT_VALUE(int(1.0f / pCalibV11Duo->dehaze_setting.tmax_sigma), 0x7ff, 0);
415 else
416 pProcRes->ProcResV11duo.iir_tmax_sigma = 0x5f;
417 pProcRes->ProcResV11duo.iir_pre_wet =
418 LIMIT_VALUE(int(pCalibV11Duo->dehaze_setting.pre_wet - 1.0f), 15, 0);
419 pProcRes->ProcResV11duo.gaus_h0 = DEHAZE_GAUS_H4;
420 pProcRes->ProcResV11duo.gaus_h1 = DEHAZE_GAUS_H1;
421 pProcRes->ProcResV11duo.gaus_h2 = DEHAZE_GAUS_H0;
422
423 // add for rk_aiq_uapi2_setMDehazeStrth
424 if (MDehazeStrth != DEHAZE_DEFAULT_LEVEL) {
425 pProcRes->ProcResV11duo.cfg_alpha = BIT_8_MAX;
426 unsigned int level_diff = MDehazeStrth > DEHAZE_DEFAULT_LEVEL
427 ? (MDehazeStrth - DEHAZE_DEFAULT_LEVEL)
428 : (DEHAZE_DEFAULT_LEVEL - MDehazeStrth);
429 bool level_up = MDehazeStrth > DEHAZE_DEFAULT_LEVEL;
430 if (level_up) {
431 pProcRes->ProcResV11duo.cfg_wt += level_diff * DEHAZE_DEFAULT_CFG_WT_STEP;
432 pProcRes->ProcResV11duo.cfg_air += level_diff * DEHAZE_DEFAULT_CFG_AIR_STEP;
433 pProcRes->ProcResV11duo.cfg_tmax += level_diff * DEHAZE_DEFAULT_CFG_TMAX_STEP;
434 } else {
435 pProcRes->ProcResV11duo.cfg_wt -= level_diff * DEHAZE_DEFAULT_CFG_WT_STEP;
436 pProcRes->ProcResV11duo.cfg_air -= level_diff * DEHAZE_DEFAULT_CFG_AIR_STEP;
437 pProcRes->ProcResV11duo.cfg_tmax -= level_diff * DEHAZE_DEFAULT_CFG_TMAX_STEP;
438 }
439 pProcRes->ProcResV11duo.cfg_wt =
440 LIMIT_VALUE(pProcRes->ProcResV11duo.cfg_wt, BIT_8_MAX, BIT_MIN);
441 pProcRes->ProcResV11duo.cfg_air =
442 LIMIT_VALUE(pProcRes->ProcResV11duo.cfg_air, BIT_8_MAX, BIT_MIN);
443 pProcRes->ProcResV11duo.cfg_tmax =
444 LIMIT_VALUE(pProcRes->ProcResV11duo.cfg_tmax, BIT_10_MAX, BIT_MIN);
445 }
446
447 if (pProcRes->ProcResV11duo.dc_en && !(pProcRes->ProcResV11duo.enhance_en)) {
448 if (pProcRes->ProcResV11duo.cfg_alpha == 255) {
449 LOGD_ADEHAZE("%s cfg_alpha:1 CtrlValue:%f cfg_air:%f cfg_tmax:%f cfg_wt:%f\n", __func__,
450 CtrlValue, pProcRes->ProcResV11duo.cfg_air / 1.0f,
451 pProcRes->ProcResV11duo.cfg_tmax / 1023.0f,
452 pProcRes->ProcResV11duo.cfg_wt / 255.0f);
453 LOGD_ADEHAZE("%s cfg_alpha_reg:0x255 cfg_air:0x%x cfg_tmax:0x%x cfg_wt:0x%x\n",
454 __func__, pProcRes->ProcResV11duo.cfg_air,
455 pProcRes->ProcResV11duo.cfg_tmax, pProcRes->ProcResV11duo.cfg_wt);
456 } else if (pProcRes->ProcResV11duo.cfg_alpha == 0) {
457 LOGD_ADEHAZE(
458 "%s cfg_alpha:0 CtrlValue:%f air_max:%f air_min:%f tmax_base:%f wt_max:%f\n",
459 __func__, CtrlValue, pProcRes->ProcResV11duo.air_max / 1.0f,
460 pProcRes->ProcResV11duo.air_min / 1.0f, pProcRes->ProcResV11duo.tmax_base / 1.0f,
461 pProcRes->ProcResV11duo.wt_max / 255.0f);
462 LOGD_ADEHAZE(
463 "%s cfg_alpha_reg:0x0 air_max:0x%x air_min:0x%x tmax_base:0x%x wt_max:0x%x\n",
464 __func__, pProcRes->ProcResV11duo.air_max, pProcRes->ProcResV11duo.air_min,
465 pProcRes->ProcResV11duo.tmax_base, pProcRes->ProcResV11duo.wt_max);
466 }
467 }
468
469 LOG1_ADEHAZE("EIXT: %s \n", __func__);
470 }
471
GetEnhanceParamsV11duo(CalibDbDehazeV11_t * pCalibV11Duo,RkAiqAdehazeProcResult_t * pProcRes,unsigned int MEnhanceStrth,unsigned int MEnhanceChromeStrth,float CtrlValue)472 void GetEnhanceParamsV11duo(CalibDbDehazeV11_t* pCalibV11Duo, RkAiqAdehazeProcResult_t* pProcRes,
473 unsigned int MEnhanceStrth, unsigned int MEnhanceChromeStrth,
474 float CtrlValue) {
475 LOG1_ADEHAZE("ENTER: %s \n", __func__);
476 bool level_up = false;
477 unsigned int level_diff = 0;
478 int lo = 0, hi = 0;
479 float ratio = GetInterpRatioV11Duo(pCalibV11Duo->enhance_setting.EnhanceData.CtrlData, lo, hi,
480 CtrlValue, DHAZ_CTRL_DATA_STEP_MAX);
481
482 pProcRes->ProcResV11duo.enhance_value =
483 ClipValueV11Duo(ratio * (pCalibV11Duo->enhance_setting.EnhanceData.enhance_value[hi] -
484 pCalibV11Duo->enhance_setting.EnhanceData.enhance_value[lo]) +
485 pCalibV11Duo->enhance_setting.EnhanceData.enhance_value[lo],
486 4, 10);
487 pProcRes->ProcResV11duo.enhance_chroma =
488 ClipValueV11Duo(ratio * (pCalibV11Duo->enhance_setting.EnhanceData.enhance_chroma[hi] -
489 pCalibV11Duo->enhance_setting.EnhanceData.enhance_chroma[lo]) +
490 pCalibV11Duo->enhance_setting.EnhanceData.enhance_chroma[lo],
491 4, 10);
492
493 // add for rk_aiq_uapi2_setMEnhanceStrth
494 if (MEnhanceStrth != ENHANCE_DEFAULT_LEVEL) {
495 level_diff = MEnhanceStrth > ENHANCE_DEFAULT_LEVEL
496 ? (MEnhanceStrth - ENHANCE_DEFAULT_LEVEL)
497 : (ENHANCE_DEFAULT_LEVEL - MEnhanceStrth);
498 level_up = MEnhanceStrth > ENHANCE_DEFAULT_LEVEL;
499 if (level_up) {
500 pProcRes->ProcResV11duo.enhance_value += level_diff * ENHANCE_VALUE_DEFAULT_STEP;
501 } else {
502 pProcRes->ProcResV11duo.enhance_value -= level_diff * ENHANCE_VALUE_DEFAULT_STEP;
503 }
504 pProcRes->ProcResV11duo.enhance_value =
505 LIMIT_VALUE(pProcRes->ProcResV11duo.enhance_value, BIT_14_MAX, BIT_MIN);
506 }
507
508 // add for rk_aiq_uapi2_setMEnhanceChromeStrth
509 if (MEnhanceChromeStrth != ENHANCE_DEFAULT_LEVEL) {
510 level_diff = MEnhanceChromeStrth > ENHANCE_DEFAULT_LEVEL
511 ? (MEnhanceChromeStrth - ENHANCE_DEFAULT_LEVEL)
512 : (ENHANCE_DEFAULT_LEVEL - MEnhanceChromeStrth);
513 level_up = MEnhanceChromeStrth > ENHANCE_DEFAULT_LEVEL;
514 if (level_up) {
515 pProcRes->ProcResV11duo.enhance_chroma += level_diff * ENHANCE_VALUE_DEFAULT_STEP;
516 } else {
517 pProcRes->ProcResV11duo.enhance_chroma -= level_diff * ENHANCE_VALUE_DEFAULT_STEP;
518 }
519 pProcRes->ProcResV11duo.enhance_chroma =
520 LIMIT_VALUE(pProcRes->ProcResV11duo.enhance_chroma, BIT_14_MAX, BIT_MIN);
521 }
522
523 for (int i = 0; i < DHAZ_V11_ENHANCE_CRUVE_NUM; i++)
524 pProcRes->ProcResV11duo.enh_curve[i] =
525 (int)(pCalibV11Duo->enhance_setting.enhance_curve[i]);
526
527 if (pProcRes->ProcResV11duo.dc_en && pProcRes->ProcResV11duo.enhance_en) {
528 LOGD_ADEHAZE("%s CtrlValue:%f enhance_value:%f enhance_chroma:%f\n", __func__, CtrlValue,
529 pProcRes->ProcResV11duo.enhance_value / 1024.0f,
530 pProcRes->ProcResV11duo.enhance_chroma / 1024.0f);
531 LOGD_ADEHAZE("%s enhance_value_reg:0x%x enhance_chroma_reg:0x%x\n", __func__,
532 pProcRes->ProcResV11duo.enhance_value, pProcRes->ProcResV11duo.enhance_chroma);
533 }
534
535 LOG1_ADEHAZE("EIXT: %s \n", __func__);
536 }
537
GetHistParamsV11duo(CalibDbDehazeV11_t * pCalibV11Duo,RkAiqAdehazeProcResult_t * pProcRes,float CtrlValue)538 void GetHistParamsV11duo(CalibDbDehazeV11_t* pCalibV11Duo, RkAiqAdehazeProcResult_t* pProcRes,
539 float CtrlValue) {
540 LOG1_ADEHAZE("ENTER: %s \n", __func__);
541 int lo = 0, hi = 0;
542 float ratio = GetInterpRatioV11Duo(pCalibV11Duo->hist_setting.HistData.CtrlData, lo, hi,
543 CtrlValue, DHAZ_CTRL_DATA_STEP_MAX);
544
545 pProcRes->ProcResV11duo.hist_gratio =
546 ClipValueV11Duo(ratio * (pCalibV11Duo->hist_setting.HistData.hist_gratio[hi] -
547 pCalibV11Duo->hist_setting.HistData.hist_gratio[lo]) +
548 pCalibV11Duo->hist_setting.HistData.hist_gratio[lo],
549 5, 3);
550 pProcRes->ProcResV11duo.hist_th_off =
551 ClipValueV11Duo(ratio * (pCalibV11Duo->hist_setting.HistData.hist_th_off[hi] -
552 pCalibV11Duo->hist_setting.HistData.hist_th_off[lo]) +
553 pCalibV11Duo->hist_setting.HistData.hist_th_off[lo],
554 8, 0);
555 pProcRes->ProcResV11duo.hist_k =
556 ClipValueV11Duo(ratio * (pCalibV11Duo->hist_setting.HistData.hist_k[hi] -
557 pCalibV11Duo->hist_setting.HistData.hist_k[lo]) +
558 pCalibV11Duo->hist_setting.HistData.hist_k[lo],
559 3, 2);
560 pProcRes->ProcResV11duo.hist_min =
561 ClipValueV11Duo(ratio * (pCalibV11Duo->hist_setting.HistData.hist_min[hi] -
562 pCalibV11Duo->hist_setting.HistData.hist_min[lo]) +
563 pCalibV11Duo->hist_setting.HistData.hist_min[lo],
564 1, 8);
565 pProcRes->ProcResV11duo.cfg_gratio =
566 ClipValueV11Duo(ratio * (pCalibV11Duo->hist_setting.HistData.cfg_gratio[hi] -
567 pCalibV11Duo->hist_setting.HistData.cfg_gratio[lo]) +
568 pCalibV11Duo->hist_setting.HistData.cfg_gratio[lo],
569 5, 8);
570 pProcRes->ProcResV11duo.hist_scale =
571 ClipValueV11Duo(ratio * (pCalibV11Duo->hist_setting.HistData.hist_scale[hi] -
572 pCalibV11Duo->hist_setting.HistData.hist_scale[lo]) +
573 pCalibV11Duo->hist_setting.HistData.hist_scale[lo],
574 5, 8);
575 pProcRes->ProcResV11duo.hpara_en =
576 pCalibV11Duo->hist_setting.hist_para_en ? FUNCTION_ENABLE : FUNCTION_DISABLE;
577 // clip hpara_en
578 pProcRes->ProcResV11duo.hpara_en = pProcRes->ProcResV11duo.dc_en
579 ? pProcRes->ProcResV11duo.hpara_en
580 : FUNCTION_ENABLE; // dc en �رգ�hpara���迪
581
582 if (pProcRes->ProcResV11duo.hist_en) {
583 LOGD_ADEHAZE(
584 "%s cfg_alpha:%f CtrlValue:%f hist_para_en:%d hist_gratio:%f hist_th_off:%f hist_k:%f "
585 "hist_min:%f hist_scale:%f cfg_gratio:%f\n",
586 __func__, pProcRes->ProcResV11duo.cfg_alpha / 255.0f, CtrlValue,
587 pProcRes->ProcResV11duo.hpara_en, pProcRes->ProcResV11duo.hist_gratio / 255.0f,
588 pProcRes->ProcResV11duo.hist_th_off / 1.0f, pProcRes->ProcResV11duo.hist_k / 4.0f,
589 pProcRes->ProcResV11duo.hist_min / 256.0f, pProcRes->ProcResV11duo.hist_scale / 256.0f,
590 pProcRes->ProcResV11duo.cfg_gratio / 256.0f);
591 LOGD_ADEHAZE(
592 "%s cfg_alpha_reg:0x%x hist_gratio_reg:0x%x hist_th_off_reg:0x%x hist_k_reg:0x%x "
593 "hist_min_reg:0x%x hist_scale_reg:0x%x cfg_gratio_reg:0x%x\n",
594 __func__, pProcRes->ProcResV11duo.cfg_alpha, pProcRes->ProcResV11duo.hist_gratio,
595 pProcRes->ProcResV11duo.hist_th_off, pProcRes->ProcResV11duo.hist_k,
596 pProcRes->ProcResV11duo.hist_min, pProcRes->ProcResV11duo.hist_scale,
597 pProcRes->ProcResV11duo.cfg_gratio);
598 }
599
600 LOG1_ADEHAZE("EIXT: %s \n", __func__);
601 }
602
GetDehazeHistDuoISPSettingV11(RkAiqAdehazeProcResult_t * pProcRes,dehaze_stats_v11_duo_t * pStats,bool DuoCamera,int FrameID)603 static void GetDehazeHistDuoISPSettingV11(RkAiqAdehazeProcResult_t* pProcRes,
604 dehaze_stats_v11_duo_t* pStats, bool DuoCamera, int FrameID) {
605 LOG1_ADEHAZE("ENTER: %s \n", __func__);
606
607 // round_en
608 pProcRes->ProcResV11duo.round_en = FUNCTION_ENABLE;
609
610 // deahze duo setting
611 if (DuoCamera) {
612 pProcRes->ProcResV11duo.soft_wr_en = FUNCTION_ENABLE;
613 #if 1
614 // support default value for kernel calc
615 for (int i = 0; i < DHAZ_V11_HIST_WR_NUM; i++) {
616 pProcRes->ProcResV11duo.hist_wr[i] = 16 * (i + 1);
617 pProcRes->ProcResV11duo.hist_wr[i] = pProcRes->ProcResV11duo.hist_wr[i] > 1023
618 ? 1023
619 : pProcRes->ProcResV11duo.hist_wr[i];
620 }
621 #else
622 pProcRes->ProcResV11duo.adp_air_wr = pStats->dehaze_stats_v11_duo.dhaz_adp_air_base;
623 pProcRes->ProcResV11duo.adp_gratio_wr = pStats->dehaze_stats_v11_duo.dhaz_adp_gratio;
624 pProcRes->ProcResV11duo.adp_tmax_wr = pStats->dehaze_stats_v11_duo.dhaz_adp_tmax;
625 pProcRes->ProcResV11duo.adp_wt_wr = pStats->dehaze_stats_v11_duo.dhaz_adp_wt;
626
627 static int hist_wr[64];
628 if (!FrameID)
629 for (int i = 0; i < 64; i++) {
630 hist_wr[i] = 16 * (i + 1);
631 hist_wr[i] = hist_wr[i] > 1023 ? 1023 : hist_wr[i];
632 pProcRes->ProcResV11duo.hist_wr[i] = hist_wr[i];
633 }
634 else {
635 int num = MIN(FrameID + 1, pProcRes->ProcResV11duo.stab_fnum);
636 int tmp = 0;
637 for (int i = 0; i < 64; i++) {
638 tmp = (hist_wr[i] * (num - 1) + pStats->dehaze_stats_v11_duo.h_rgb_iir[i]) / num;
639 pProcRes->ProcResV11duo.hist_wr[i] = tmp;
640 hist_wr[i] = tmp;
641 }
642 }
643
644 LOGD_ADEHAZE("%s adp_air_wr:0x%x adp_gratio_wr:0x%x adp_tmax_wr:0x%x adp_wt_wr:0x%x\n",
645 __func__, pProcRes->ProcResV11duo.adp_air_wr,
646 pProcRes->ProcResV11duo.adp_gratio_wr, pProcRes->ProcResV11duo.adp_tmax_wr,
647 pProcRes->ProcResV11duo.adp_wt_wr);
648
649 LOGV_ADEHAZE("%s hist_wr:0x%x", __func__, pProcRes->ProcResV11duo.hist_wr[0]);
650 for (int i = 1; i < 63; i++) LOGV_ADEHAZE(" 0x%x", pProcRes->ProcResV11duo.hist_wr[i]);
651 LOGV_ADEHAZE(" 0x%x\n", pProcRes->ProcResV11duo.hist_wr[63]);
652 #endif
653 LOGD_ADEHAZE("%s DuoCamera:%d soft_wr_en:%d\n", __func__, DuoCamera,
654 pProcRes->ProcResV11duo.soft_wr_en);
655 } else
656 pProcRes->ProcResV11duo.soft_wr_en = FUNCTION_DISABLE;
657
658 LOG1_ADEHAZE("EIXT: %s \n", __func__);
659 }
660
GetDehazeLocalGainSettingV11Duo(RkAiqAdehazeProcResult_t * pProcRes,float * sigma)661 XCamReturn GetDehazeLocalGainSettingV11Duo(RkAiqAdehazeProcResult_t* pProcRes, float* sigma) {
662 LOG1_ADEHAZE("ENTER: %s \n", __func__);
663 XCamReturn ret = XCAM_RETURN_NO_ERROR;
664
665 // get sigma_idx
666 for (int i = 0; i < DHAZ_V11_SIGMA_IDX_NUM; i++)
667 pProcRes->ProcResV11duo.sigma_idx[i] = (i + 1) * YNR_CURVE_STEP;
668
669 // get sigma_lut
670 float sigam_total = 0.0f;
671 for (int i = 0; i < DHAZ_V11_SIGMA_IDX_NUM; i++) sigam_total += sigma[i];
672
673 if (sigam_total < FLT_EPSILON) {
674 for (int i = 0; i < DHAZ_V11_SIGMA_IDX_NUM; i++)
675 pProcRes->ProcResV11duo.sigma_lut[i] = 0x200;
676 } else {
677 int tmp = 0;
678 for (int i = 0; i < DHAZ_V11_SIGMA_LUT_NUM; i++) {
679 tmp = LIMIT_VALUE(8.0f * sigma[i], BIT_10_MAX, BIT_MIN);
680 pProcRes->ProcResV11duo.sigma_lut[i] = tmp;
681 }
682 }
683
684 LOGV_ADEHAZE("%s(%d) ynr sigma(0~5): %f %f %f %f %f %f\n", __func__, __LINE__, sigma[0],
685 sigma[1], sigma[2], sigma[3], sigma[4], sigma[5]);
686 LOGV_ADEHAZE("%s(%d) dehaze local gain IDX(0~5): 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", __func__,
687 __LINE__, pProcRes->ProcResV11duo.sigma_idx[0],
688 pProcRes->ProcResV11duo.sigma_idx[1], pProcRes->ProcResV11duo.sigma_idx[2],
689 pProcRes->ProcResV11duo.sigma_idx[3], pProcRes->ProcResV11duo.sigma_idx[4],
690 pProcRes->ProcResV11duo.sigma_idx[5]);
691 LOGV_ADEHAZE("%s(%d) dehaze local gain LUT(0~5): 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", __func__,
692 __LINE__, pProcRes->ProcResV11duo.sigma_lut[0],
693 pProcRes->ProcResV11duo.sigma_lut[1], pProcRes->ProcResV11duo.sigma_lut[2],
694 pProcRes->ProcResV11duo.sigma_lut[3], pProcRes->ProcResV11duo.sigma_lut[4],
695 pProcRes->ProcResV11duo.sigma_lut[5]);
696
697 LOG1_ADEHAZE("EIXT: %s \n", __func__);
698 return ret;
699 }
700
701 #ifdef RKAIQ_ENABLE_CAMGROUP
AdehazeGetCurrDataGroup(AdehazeHandle_t * pAdehazeCtx,rk_aiq_singlecam_3a_result_t * pCamgrpParams)702 XCamReturn AdehazeGetCurrDataGroup(AdehazeHandle_t* pAdehazeCtx,
703 rk_aiq_singlecam_3a_result_t* pCamgrpParams) {
704 LOG1_ADEHAZE("%s:enter!\n", __FUNCTION__);
705 XCamReturn ret = XCAM_RETURN_NO_ERROR;
706
707 // get ynr res
708 for (int i = 0; i < YNR_V3_ISO_CURVE_POINT_NUM; i++)
709 pAdehazeCtx->YnrProcResV3_sigma[i] = pCamgrpParams->aynr_sigma._aynr_sigma_v3[i];
710
711 if (pCamgrpParams) {
712 // get EnvLv
713 if (pCamgrpParams->aec._aePreRes) {
714 RkAiqAlgoPreResAe* pAEPreRes =
715 (RkAiqAlgoPreResAe*)pCamgrpParams->aec._aePreRes->map(pCamgrpParams->aec._aePreRes);
716
717 if (pAEPreRes) {
718 switch (pAdehazeCtx->FrameNumber) {
719 case LINEAR_NUM:
720 pAdehazeCtx->CurrDataV11duo.EnvLv = pAEPreRes->ae_pre_res_rk.GlobalEnvLv[0];
721 break;
722 case HDR_2X_NUM:
723 pAdehazeCtx->CurrDataV11duo.EnvLv = pAEPreRes->ae_pre_res_rk.GlobalEnvLv[1];
724 break;
725 case HDR_3X_NUM:
726 pAdehazeCtx->CurrDataV11duo.EnvLv = pAEPreRes->ae_pre_res_rk.GlobalEnvLv[1];
727 break;
728 default:
729 LOGE_ADEHAZE("%s: Wrong frame number in HDR mode!!!\n", __FUNCTION__);
730 break;
731 }
732
733 // Normalize the current envLv for AEC
734 pAdehazeCtx->CurrDataV11duo.EnvLv =
735 (pAdehazeCtx->CurrDataV11duo.EnvLv - MIN_ENV_LV) / (MAX_ENV_LV - MIN_ENV_LV);
736 pAdehazeCtx->CurrDataV11duo.EnvLv =
737 LIMIT_VALUE(pAdehazeCtx->CurrDataV11duo.EnvLv, ENVLVMAX, ENVLVMIN);
738 } else {
739 pAdehazeCtx->CurrDataV11duo.EnvLv = ENVLVMIN;
740 LOGW_ADEHAZE("%s:_aePreRes Res is NULL!\n", __FUNCTION__);
741 }
742 } else {
743 pAdehazeCtx->CurrDataV11duo.EnvLv = ENVLVMIN;
744 LOGW_ADEHAZE("%s:_aePreRes Res is NULL!\n", __FUNCTION__);
745 }
746
747 // get iso
748 if (pAdehazeCtx->FrameNumber == LINEAR_NUM) {
749 pAdehazeCtx->CurrDataV11duo.ISO =
750 pCamgrpParams->aec._effAecExpInfo.LinearExp.exp_real_params.analog_gain *
751 pCamgrpParams->aec._effAecExpInfo.LinearExp.exp_real_params.digital_gain *
752 pCamgrpParams->aec._effAecExpInfo.LinearExp.exp_real_params.isp_dgain * ISOMIN;
753 } else if (pAdehazeCtx->FrameNumber == HDR_2X_NUM ||
754 pAdehazeCtx->FrameNumber == HDR_3X_NUM) {
755 pAdehazeCtx->CurrDataV11duo.ISO =
756 pCamgrpParams->aec._effAecExpInfo.HdrExp[1].exp_real_params.analog_gain *
757 pCamgrpParams->aec._effAecExpInfo.HdrExp[1].exp_real_params.digital_gain *
758 pCamgrpParams->aec._effAecExpInfo.HdrExp[1].exp_real_params.isp_dgain * ISOMIN;
759 }
760 } else {
761 pAdehazeCtx->CurrDataV11duo.EnvLv = ENVLVMIN;
762 pAdehazeCtx->CurrDataV11duo.ISO = ISOMIN;
763 LOGW_ADEHAZE("%s: camgroupParmasArray[0] Res is NULL!\n", __FUNCTION__);
764 }
765
766 LOG1_ADEHAZE("%s:exit!\n", __FUNCTION__);
767 return ret;
768 }
769 #endif
AdehazeGetCurrData(AdehazeHandle_t * pAdehazeCtx,RkAiqAlgoProcAdhaz * pProcPara)770 XCamReturn AdehazeGetCurrData(AdehazeHandle_t* pAdehazeCtx, RkAiqAlgoProcAdhaz* pProcPara) {
771 LOG1_ADEHAZE("%s:enter!\n", __FUNCTION__);
772 XCamReturn ret = XCAM_RETURN_NO_ERROR;
773
774 // get ynr res
775 for (int i = 0; i < YNR_V3_ISO_CURVE_POINT_NUM; i++)
776 pAdehazeCtx->YnrProcResV3_sigma[i] = pProcPara->sigma_v3[i];
777
778 // get EnvLv
779 XCamVideoBuffer* xCamAePreRes = pProcPara->com.u.proc.res_comb->ae_pre_res;
780 if (xCamAePreRes) {
781 RkAiqAlgoPreResAe* pAEPreRes = (RkAiqAlgoPreResAe*)xCamAePreRes->map(xCamAePreRes);
782
783 if (pAEPreRes) {
784 switch (pAdehazeCtx->FrameNumber) {
785 case LINEAR_NUM:
786 pAdehazeCtx->CurrDataV11duo.EnvLv = pAEPreRes->ae_pre_res_rk.GlobalEnvLv[0];
787 break;
788 case HDR_2X_NUM:
789 pAdehazeCtx->CurrDataV11duo.EnvLv = pAEPreRes->ae_pre_res_rk.GlobalEnvLv[1];
790 break;
791 case HDR_3X_NUM:
792 pAdehazeCtx->CurrDataV11duo.EnvLv = pAEPreRes->ae_pre_res_rk.GlobalEnvLv[1];
793 break;
794 default:
795 LOGE_ADEHAZE("%s: Wrong frame number in HDR mode!!!\n", __FUNCTION__);
796 break;
797 }
798 // Normalize the current envLv for AEC
799 pAdehazeCtx->CurrDataV11duo.EnvLv =
800 (pAdehazeCtx->CurrDataV11duo.EnvLv - MIN_ENV_LV) / (MAX_ENV_LV - MIN_ENV_LV);
801 pAdehazeCtx->CurrDataV11duo.EnvLv =
802 LIMIT_VALUE(pAdehazeCtx->CurrDataV11duo.EnvLv, ENVLVMAX, ENVLVMIN);
803 } else {
804 pAdehazeCtx->CurrDataV11duo.EnvLv = ENVLVMIN;
805 LOGW_ADEHAZE("%s:PreResBuf is NULL!\n", __FUNCTION__);
806 }
807 } else {
808 pAdehazeCtx->CurrDataV11duo.EnvLv = ENVLVMIN;
809 LOGW_ADEHAZE("%s:PreResBuf is NULL!\n", __FUNCTION__);
810 }
811
812 // get ISO
813 if (pProcPara->com.u.proc.curExp) {
814 if (pAdehazeCtx->FrameNumber == LINEAR_NUM) {
815 pAdehazeCtx->CurrDataV11duo.ISO =
816 pProcPara->com.u.proc.curExp->LinearExp.exp_real_params.analog_gain *
817 pProcPara->com.u.proc.curExp->LinearExp.exp_real_params.digital_gain *
818 pProcPara->com.u.proc.curExp->LinearExp.exp_real_params.isp_dgain * ISOMIN;
819 } else if (pAdehazeCtx->FrameNumber == HDR_2X_NUM ||
820 pAdehazeCtx->FrameNumber == HDR_3X_NUM) {
821 pAdehazeCtx->CurrDataV11duo.ISO =
822 pProcPara->com.u.proc.curExp->HdrExp[1].exp_real_params.analog_gain *
823 pProcPara->com.u.proc.curExp->HdrExp[1].exp_real_params.digital_gain *
824 pProcPara->com.u.proc.curExp->HdrExp[1].exp_real_params.isp_dgain * ISOMIN;
825 }
826 } else {
827 pAdehazeCtx->CurrDataV11duo.ISO = ISOMIN;
828 LOGW_ADEHAZE("%s:AE cur expo is NULL!\n", __FUNCTION__);
829 }
830
831 LOG1_ADEHAZE("%s:exit!\n", __FUNCTION__);
832 return ret;
833 }
834
AdehazeInit(AdehazeHandle_t ** pAdehazeCtx,CamCalibDbV2Context_t * pCalib)835 XCamReturn AdehazeInit(AdehazeHandle_t** pAdehazeCtx, CamCalibDbV2Context_t* pCalib) {
836 LOG1_ADEHAZE("ENTER: %s \n", __func__);
837 XCamReturn ret = XCAM_RETURN_NO_ERROR;
838 AdehazeHandle_t* handle = (AdehazeHandle_t*)calloc(1, sizeof(AdehazeHandle_t));
839
840 CalibDbV2_dehaze_v11_t* calibv2_adehaze_calib_V11_duo =
841 (CalibDbV2_dehaze_v11_t*)(CALIBDBV2_GET_MODULE_PTR(pCalib, adehaze_calib));
842 memcpy(&handle->AdehazeAtrrV11duo.stAuto, calibv2_adehaze_calib_V11_duo,
843 sizeof(CalibDbV2_dehaze_v11_t));
844 handle->AdehazeAtrrV11duo.mode = DEHAZE_API_AUTO;
845 handle->AdehazeAtrrV11duo.Info.MDehazeStrth = DEHAZE_DEFAULT_LEVEL;
846 handle->AdehazeAtrrV11duo.Info.MEnhanceStrth = ENHANCE_DEFAULT_LEVEL;
847 handle->AdehazeAtrrV11duo.Info.MEnhanceChromeStrth = ENHANCE_DEFAULT_LEVEL;
848 handle->ifReCalcStAuto = true;
849 handle->ifReCalcStManual = false;
850 handle->isCapture = false;
851 handle->is_multi_isp_mode = false;
852
853 *pAdehazeCtx = handle;
854 LOG1_ADEHAZE("EXIT: %s \n", __func__);
855 return (ret);
856 }
857
AdehazeRelease(AdehazeHandle_t * pAdehazeCtx)858 XCamReturn AdehazeRelease(AdehazeHandle_t* pAdehazeCtx) {
859 LOG1_ADEHAZE("ENTER: %s \n", __func__);
860 XCamReturn ret = XCAM_RETURN_NO_ERROR;
861 if (pAdehazeCtx) free(pAdehazeCtx);
862 LOG1_ADEHAZE("EXIT: %s \n", __func__);
863 return (ret);
864 }
865
AdehazeProcess(AdehazeHandle_t * pAdehazeCtx,dehaze_stats_v11_duo_t * pStats,RkAiqAdehazeProcResult_t * pAdehzeProcRes)866 XCamReturn AdehazeProcess(AdehazeHandle_t* pAdehazeCtx, dehaze_stats_v11_duo_t* pStats,
867 RkAiqAdehazeProcResult_t* pAdehzeProcRes) {
868 XCamReturn ret = XCAM_RETURN_NO_ERROR;
869 LOG1_ADEHAZE("ENTER: %s \n", __func__);
870 LOGD_ADEHAZE(" %s: Dehaze module en:%d Dehaze en:%d, Enhance en:%d, Hist en:%d\n", __func__,
871 pAdehzeProcRes->enable,
872 (pAdehzeProcRes->ProcResV11duo.dc_en & FUNCTION_ENABLE) &&
873 (!(pAdehzeProcRes->ProcResV11duo.enhance_en & FUNCTION_ENABLE)),
874 (pAdehzeProcRes->ProcResV11duo.dc_en & FUNCTION_ENABLE) &&
875 (pAdehzeProcRes->ProcResV11duo.enhance_en & FUNCTION_ENABLE),
876 pAdehzeProcRes->ProcResV11duo.hist_en);
877
878 if (pAdehazeCtx->AdehazeAtrrV11duo.mode == DEHAZE_API_AUTO) {
879 float CtrlValue = pAdehazeCtx->CurrDataV11duo.EnvLv;
880 if (pAdehazeCtx->CurrDataV11duo.CtrlDataType == CTRLDATATYPE_ISO)
881 CtrlValue = pAdehazeCtx->CurrDataV11duo.ISO;
882
883 // cfg setting
884 pAdehzeProcRes->ProcResV11duo.cfg_alpha =
885 LIMIT_VALUE(SHIFT8BIT(pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.cfg_alpha),
886 BIT_8_MAX, BIT_MIN);
887
888 // dehaze setting
889 if (pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.dehaze_setting.en ||
890 pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.enhance_setting.en ||
891 (pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.hist_setting.en &&
892 !pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.hist_setting.hist_para_en))
893 GetDehazeParamsV11duo(&pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara,
894 pAdehzeProcRes, pAdehazeCtx->width, pAdehazeCtx->height,
895 pAdehazeCtx->AdehazeAtrrV11duo.Info.MDehazeStrth, CtrlValue);
896
897 // enhance setting
898 if (pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.enhance_setting.en)
899 GetEnhanceParamsV11duo(
900 &pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara, pAdehzeProcRes,
901 pAdehazeCtx->AdehazeAtrrV11duo.Info.MEnhanceStrth,
902 pAdehazeCtx->AdehazeAtrrV11duo.Info.MEnhanceChromeStrth, CtrlValue);
903
904 // hist setting
905 if (pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.hist_setting.en)
906 GetHistParamsV11duo(&pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara,
907 pAdehzeProcRes, CtrlValue);
908 } else if (pAdehazeCtx->AdehazeAtrrV11duo.mode == DEHAZE_API_MANUAL) {
909 // cfg setting
910 pAdehzeProcRes->ProcResV11duo.cfg_alpha = LIMIT_VALUE(
911 SHIFT8BIT(pAdehazeCtx->AdehazeAtrrV11duo.stManual.cfg_alpha), BIT_8_MAX, BIT_MIN);
912
913 // dehaze setting
914 if (pAdehazeCtx->AdehazeAtrrV11duo.stManual.dehaze_setting.en ||
915 pAdehazeCtx->AdehazeAtrrV11duo.stManual.enhance_setting.en ||
916 (pAdehazeCtx->AdehazeAtrrV11duo.stManual.hist_setting.en &&
917 !pAdehazeCtx->AdehazeAtrrV11duo.stManual.hist_setting.hist_para_en))
918 stManuGetDehazeParamsV11duo(&pAdehazeCtx->AdehazeAtrrV11duo.stManual, pAdehzeProcRes,
919 pAdehazeCtx->width, pAdehazeCtx->height,
920 pAdehazeCtx->AdehazeAtrrV11duo.Info.MDehazeStrth);
921
922 // enhance setting
923 if (pAdehazeCtx->AdehazeAtrrV11duo.stManual.enhance_setting.en)
924 stManuGetEnhanceParamsV11duo(&pAdehazeCtx->AdehazeAtrrV11duo.stManual, pAdehzeProcRes,
925 pAdehazeCtx->AdehazeAtrrV11duo.Info.MEnhanceStrth,
926 pAdehazeCtx->AdehazeAtrrV11duo.Info.MEnhanceChromeStrth);
927
928 // hist setting
929 if (pAdehazeCtx->AdehazeAtrrV11duo.stManual.hist_setting.en)
930 stManuGetHistParamsV11duo(&pAdehazeCtx->AdehazeAtrrV11duo.stManual, pAdehzeProcRes);
931 } else
932 LOGE_ADEHAZE("%s:Wrong Adehaze API mode!!! \n", __func__);
933
934 // get local gain setting
935 ret = GetDehazeLocalGainSettingV11Duo(pAdehzeProcRes, pAdehazeCtx->YnrProcResV3_sigma);
936
937 // get Duo cam setting
938 GetDehazeHistDuoISPSettingV11(pAdehzeProcRes, pStats, pAdehazeCtx->is_multi_isp_mode,
939 pAdehazeCtx->FrameID);
940
941 // store pre data
942 pAdehazeCtx->PreDataV11duo.EnvLv = pAdehazeCtx->CurrDataV11duo.EnvLv;
943 pAdehazeCtx->PreDataV11duo.ISO = pAdehazeCtx->CurrDataV11duo.ISO;
944 pAdehazeCtx->PreDataV11duo.ApiMode = pAdehazeCtx->CurrDataV11duo.ApiMode;
945
946 LOG1_ADEHAZE("EXIT: %s \n", __func__);
947 return ret;
948 }
949
AdehazeByPassProcessing(AdehazeHandle_t * pAdehazeCtx)950 bool AdehazeByPassProcessing(AdehazeHandle_t* pAdehazeCtx) {
951 LOG1_ADEHAZE("ENTER: %s \n", __func__);
952 bool byPassProc = true;
953
954 pAdehazeCtx->CurrDataV11duo.CtrlDataType =
955 pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.CtrlDataType;
956
957 if (pAdehazeCtx->FrameID <= INIT_CALC_PARAMS_NUM)
958 byPassProc = false;
959 else if (pAdehazeCtx->AdehazeAtrrV11duo.mode != pAdehazeCtx->PreDataV11duo.ApiMode)
960 byPassProc = false;
961 else if (pAdehazeCtx->AdehazeAtrrV11duo.mode == DEHAZE_API_MANUAL)
962 byPassProc = !pAdehazeCtx->ifReCalcStManual;
963 else if (pAdehazeCtx->AdehazeAtrrV11duo.mode == DEHAZE_API_AUTO) {
964 float diff = 0.0f;
965 if (pAdehazeCtx->CurrDataV11duo.CtrlDataType == CTRLDATATYPE_ENVLV) {
966 diff = pAdehazeCtx->PreDataV11duo.EnvLv - pAdehazeCtx->CurrDataV11duo.EnvLv;
967 if (pAdehazeCtx->PreDataV11duo.EnvLv <= FLT_EPSILON) {
968 diff = pAdehazeCtx->CurrDataV11duo.EnvLv;
969 if (diff <= FLT_EPSILON)
970 byPassProc = true;
971 else
972 byPassProc = false;
973 } else {
974 diff /= pAdehazeCtx->PreDataV11duo.EnvLv;
975 if (diff >= pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.ByPassThr ||
976 diff <= -pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.ByPassThr)
977 byPassProc = false;
978 else
979 byPassProc = true;
980 }
981 } else if (pAdehazeCtx->CurrDataV11duo.CtrlDataType == CTRLDATATYPE_ISO) {
982 diff = pAdehazeCtx->PreDataV11duo.ISO - pAdehazeCtx->CurrDataV11duo.ISO;
983 diff /= pAdehazeCtx->PreDataV11duo.ISO;
984 if (diff >= pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.ByPassThr ||
985 diff <= -pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.ByPassThr)
986 byPassProc = false;
987 else
988 byPassProc = true;
989 }
990 byPassProc = byPassProc && !pAdehazeCtx->ifReCalcStAuto;
991 }
992
993 LOGD_ADEHAZE(
994 "%s:FrameID:%d DehazeApiMode:%d ifReCalcStAuto:%d ifReCalcStManual:%d CtrlDataType:%d "
995 "EnvLv:%f ISO:%f byPassProc:%d\n",
996 __func__, pAdehazeCtx->FrameID, pAdehazeCtx->AdehazeAtrrV11duo.mode,
997 pAdehazeCtx->ifReCalcStAuto, pAdehazeCtx->ifReCalcStManual,
998 pAdehazeCtx->CurrDataV11duo.CtrlDataType, pAdehazeCtx->CurrDataV11duo.EnvLv,
999 pAdehazeCtx->CurrDataV11duo.ISO, byPassProc);
1000
1001 LOG1_ADEHAZE("EXIT: %s \n", __func__);
1002 return byPassProc;
1003 }
1004 /******************************************************************************
1005 * DehazeEnableSetting()
1006 *
1007 *****************************************************************************/
DehazeEnableSetting(AdehazeHandle_t * pAdehazeCtx,RkAiqAdehazeProcResult_t * pAdehzeProcRes)1008 bool DehazeEnableSetting(AdehazeHandle_t* pAdehazeCtx, RkAiqAdehazeProcResult_t* pAdehzeProcRes) {
1009 LOG1_ADEHAZE("%s:enter!\n", __FUNCTION__);
1010
1011 if (pAdehazeCtx->AdehazeAtrrV11duo.mode == DEHAZE_API_AUTO) {
1012 pAdehzeProcRes->enable = pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.Enable;
1013
1014 if (pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.Enable) {
1015 if (pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.dehaze_setting.en &&
1016 pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.enhance_setting.en) {
1017 pAdehzeProcRes->ProcResV11duo.dc_en = FUNCTION_ENABLE;
1018 pAdehzeProcRes->ProcResV11duo.enhance_en = FUNCTION_ENABLE;
1019 } else if (pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.dehaze_setting.en &&
1020 !pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.enhance_setting.en) {
1021 pAdehzeProcRes->ProcResV11duo.dc_en = FUNCTION_ENABLE;
1022 pAdehzeProcRes->ProcResV11duo.enhance_en = FUNCTION_DISABLE;
1023 } else if (!pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.dehaze_setting.en &&
1024 pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.enhance_setting.en) {
1025 pAdehzeProcRes->ProcResV11duo.dc_en = FUNCTION_ENABLE;
1026 pAdehzeProcRes->ProcResV11duo.enhance_en = FUNCTION_ENABLE;
1027 } else {
1028 pAdehzeProcRes->ProcResV11duo.dc_en = FUNCTION_DISABLE;
1029 pAdehzeProcRes->ProcResV11duo.enhance_en = FUNCTION_DISABLE;
1030 }
1031
1032 if (pAdehazeCtx->AdehazeAtrrV11duo.stAuto.DehazeTuningPara.hist_setting.en)
1033 pAdehzeProcRes->ProcResV11duo.hist_en = FUNCTION_ENABLE;
1034 else
1035 pAdehzeProcRes->ProcResV11duo.hist_en = FUNCTION_DISABLE;
1036 }
1037 } else if (pAdehazeCtx->AdehazeAtrrV11duo.mode == DEHAZE_API_MANUAL) {
1038 pAdehzeProcRes->enable = pAdehazeCtx->AdehazeAtrrV11duo.stManual.Enable;
1039
1040 if (pAdehazeCtx->AdehazeAtrrV11duo.stManual.Enable) {
1041 if (pAdehazeCtx->AdehazeAtrrV11duo.stManual.dehaze_setting.en &&
1042 pAdehazeCtx->AdehazeAtrrV11duo.stManual.enhance_setting.en) {
1043 pAdehzeProcRes->ProcResV11duo.dc_en = FUNCTION_ENABLE;
1044 pAdehzeProcRes->ProcResV11duo.enhance_en = FUNCTION_ENABLE;
1045 } else if (pAdehazeCtx->AdehazeAtrrV11duo.stManual.dehaze_setting.en &&
1046 !pAdehazeCtx->AdehazeAtrrV11duo.stManual.enhance_setting.en) {
1047 pAdehzeProcRes->ProcResV11duo.dc_en = FUNCTION_ENABLE;
1048 pAdehzeProcRes->ProcResV11duo.enhance_en = FUNCTION_DISABLE;
1049 } else if (!pAdehazeCtx->AdehazeAtrrV11duo.stManual.dehaze_setting.en &&
1050 pAdehazeCtx->AdehazeAtrrV11duo.stManual.enhance_setting.en) {
1051 pAdehzeProcRes->ProcResV11duo.dc_en = FUNCTION_ENABLE;
1052 pAdehzeProcRes->ProcResV11duo.enhance_en = FUNCTION_ENABLE;
1053 } else {
1054 pAdehzeProcRes->ProcResV11duo.dc_en = FUNCTION_DISABLE;
1055 pAdehzeProcRes->ProcResV11duo.enhance_en = FUNCTION_DISABLE;
1056 }
1057
1058 if (pAdehazeCtx->AdehazeAtrrV11duo.stManual.hist_setting.en)
1059 pAdehzeProcRes->ProcResV11duo.hist_en = FUNCTION_ENABLE;
1060 else
1061 pAdehzeProcRes->ProcResV11duo.hist_en = FUNCTION_DISABLE;
1062 }
1063 } else {
1064 LOGE_ADEHAZE("%s: Dehaze api in WRONG MODE!!!, dehaze by pass!!!\n", __FUNCTION__);
1065 pAdehzeProcRes->enable = false;
1066 }
1067
1068 return pAdehzeProcRes->enable;
1069 LOG1_ADEHAZE("%s:exit!\n", __FUNCTION__);
1070 }
1071