xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/adehaze/rk_aiq_adehaze_algo_v11_duo.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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