xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/uAPI2/rk_aiq_user_api2_adehaze.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (c) 2019-2022 Rockchip Eletronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include "uAPI2/rk_aiq_user_api2_adehaze.h"
17 
18 #include "algo_handlers/RkAiqAdehazeHandle.h"
19 
20 RKAIQ_BEGIN_DECLARE
21 
22 #ifdef RK_SIMULATOR_HW
23 #define CHECK_USER_API_ENABLE
24 #endif
25 
rk_aiq_user_api2_adehaze_setSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,adehaze_sw_V2_t attr)26 XCamReturn rk_aiq_user_api2_adehaze_setSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
27                                                 adehaze_sw_V2_t attr) {
28     XCamReturn ret = XCAM_RETURN_NO_ERROR;
29 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
30 
31     adehaze_sw_v11_t attr_v11;
32     memset(&attr_v11, 0x0, sizeof(adehaze_sw_v11_t));
33 
34     // set sync
35     attr_v11.sync.sync_mode = attr.sync.sync_mode;
36     attr_v11.sync.done      = attr.sync.done;
37     // set mode
38     attr_v11.mode = attr.mode;
39     // set stAuto
40     attr_v11.stAuto.DehazeTuningPara.Enable    = attr.stAuto.DehazeTuningPara.Enable;
41     attr_v11.stAuto.DehazeTuningPara.cfg_alpha = attr.stAuto.DehazeTuningPara.cfg_alpha;
42     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.en =
43         attr.stAuto.DehazeTuningPara.dehaze_setting.en;
44     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.air_lc_en =
45         attr.stAuto.DehazeTuningPara.dehaze_setting.air_lc_en;
46     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.stab_fnum =
47         attr.stAuto.DehazeTuningPara.dehaze_setting.stab_fnum;
48     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.sigma =
49         attr.stAuto.DehazeTuningPara.dehaze_setting.sigma;
50     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.wt_sigma =
51         attr.stAuto.DehazeTuningPara.dehaze_setting.wt_sigma;
52     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.air_sigma =
53         attr.stAuto.DehazeTuningPara.dehaze_setting.air_sigma;
54     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.tmax_sigma =
55         attr.stAuto.DehazeTuningPara.dehaze_setting.tmax_sigma;
56     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.pre_wet =
57         attr.stAuto.DehazeTuningPara.dehaze_setting.pre_wet;
58     attr_v11.stAuto.DehazeTuningPara.dehaze_setting.DehazeData =
59         attr.stAuto.DehazeTuningPara.dehaze_setting.DehazeData;
60     attr_v11.stAuto.DehazeTuningPara.enhance_setting.en =
61         attr.stAuto.DehazeTuningPara.enhance_setting.en;
62     attr_v11.stAuto.DehazeTuningPara.enhance_setting.EnhanceData =
63         attr.stAuto.DehazeTuningPara.enhance_setting.EnhanceData;
64     for (int i = 0; i < DHAZ_ENHANCE_CURVE_KNOTS_NUM; i++)
65         attr_v11.stAuto.DehazeTuningPara.enhance_setting.enhance_curve[i] =
66             attr.stAuto.DehazeTuningPara.enhance_setting.enhance_curve[i];
67     attr_v11.stAuto.DehazeTuningPara.hist_setting.en = attr.stAuto.DehazeTuningPara.hist_setting.en;
68     attr_v11.stAuto.DehazeTuningPara.hist_setting.hist_para_en =
69         attr.stAuto.DehazeTuningPara.hist_setting.hist_para_en;
70     attr_v11.stAuto.DehazeTuningPara.hist_setting.HistData =
71         attr.stAuto.DehazeTuningPara.hist_setting.HistData;
72     // set stManual
73     attr_v11.stManual.Enable                    = attr.stManual.Enable;
74     attr_v11.stManual.cfg_alpha                 = attr.stManual.cfg_alpha;
75     attr_v11.stManual.dehaze_setting.en         = attr.stManual.dehaze_setting.en;
76     attr_v11.stManual.dehaze_setting.air_lc_en  = attr.stManual.dehaze_setting.air_lc_en;
77     attr_v11.stManual.dehaze_setting.stab_fnum  = attr.stManual.dehaze_setting.stab_fnum;
78     attr_v11.stManual.dehaze_setting.sigma      = attr.stManual.dehaze_setting.sigma;
79     attr_v11.stManual.dehaze_setting.wt_sigma   = attr.stManual.dehaze_setting.wt_sigma;
80     attr_v11.stManual.dehaze_setting.air_sigma  = attr.stManual.dehaze_setting.air_sigma;
81     attr_v11.stManual.dehaze_setting.tmax_sigma = attr.stManual.dehaze_setting.tmax_sigma;
82     attr_v11.stManual.dehaze_setting.pre_wet    = attr.stManual.dehaze_setting.pre_wet;
83     attr_v11.stManual.dehaze_setting.DehazeData = attr.stManual.dehaze_setting.DehazeData;
84     attr_v11.stManual.enhance_setting.en        = attr.stManual.enhance_setting.en;
85     attr_v11.stManual.enhance_setting.EnhanceData.enhance_value =
86         attr.stManual.enhance_setting.EnhanceData.enhance_value;
87     attr_v11.stManual.enhance_setting.EnhanceData.enhance_chroma =
88         attr.stManual.enhance_setting.EnhanceData.enhance_chroma;
89     for (int i = 0; i < DHAZ_ENHANCE_CURVE_KNOTS_NUM; i++)
90         attr_v11.stManual.enhance_setting.enhance_curve[i] =
91             attr.stManual.enhance_setting.enhance_curve[i];
92     attr_v11.stManual.hist_setting.en           = attr.stManual.hist_setting.en;
93     attr_v11.stManual.hist_setting.hist_para_en = attr.stManual.hist_setting.hist_para_en;
94     attr_v11.stManual.hist_setting.HistData     = attr.stManual.hist_setting.HistData;
95     // set info
96     attr_v11.Info.updateMDehazeStrth  = attr.stDehazeManu.update;
97     attr_v11.Info.MDehazeStrth        = attr.stDehazeManu.level;
98     attr_v11.Info.updateMEnhanceStrth = attr.stEnhanceManu.update;
99     attr_v11.Info.MEnhanceStrth       = attr.stEnhanceManu.level;
100 
101     ret = rk_aiq_user_api2_adehaze_v11_setSwAttrib(sys_ctx, &attr_v11);
102 #endif
103     return ret;
104 }
rk_aiq_user_api2_adehaze_getSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,adehaze_sw_V2_t * attr)105 XCamReturn rk_aiq_user_api2_adehaze_getSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
106                                                 adehaze_sw_V2_t* attr) {
107     XCamReturn ret = XCAM_RETURN_NO_ERROR;
108 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
109 
110     adehaze_sw_v11_t attr_v11;
111     memset(&attr_v11, 0x0, sizeof(adehaze_sw_v11_t));
112     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(sys_ctx, &attr_v11);
113 
114     // set sync
115     attr->sync.sync_mode = attr_v11.sync.sync_mode;
116     attr->sync.done      = attr_v11.sync.done;
117     // set mode
118     attr->mode = attr_v11.mode;
119     // set stAuto
120     attr->stAuto.DehazeTuningPara.Enable    = attr_v11.stAuto.DehazeTuningPara.Enable;
121     attr->stAuto.DehazeTuningPara.cfg_alpha = attr_v11.stAuto.DehazeTuningPara.cfg_alpha;
122     attr->stAuto.DehazeTuningPara.dehaze_setting.en =
123         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.en;
124     attr->stAuto.DehazeTuningPara.dehaze_setting.air_lc_en =
125         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.air_lc_en;
126     attr->stAuto.DehazeTuningPara.dehaze_setting.stab_fnum =
127         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.stab_fnum;
128     attr->stAuto.DehazeTuningPara.dehaze_setting.sigma =
129         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.sigma;
130     attr->stAuto.DehazeTuningPara.dehaze_setting.wt_sigma =
131         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.wt_sigma;
132     attr->stAuto.DehazeTuningPara.dehaze_setting.air_sigma =
133         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.air_sigma;
134     attr->stAuto.DehazeTuningPara.dehaze_setting.tmax_sigma =
135         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.tmax_sigma;
136     attr->stAuto.DehazeTuningPara.dehaze_setting.pre_wet =
137         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.pre_wet;
138     attr->stAuto.DehazeTuningPara.dehaze_setting.DehazeData =
139         attr_v11.stAuto.DehazeTuningPara.dehaze_setting.DehazeData;
140     attr->stAuto.DehazeTuningPara.enhance_setting.en =
141         attr_v11.stAuto.DehazeTuningPara.enhance_setting.en;
142     attr->stAuto.DehazeTuningPara.enhance_setting.EnhanceData =
143         attr_v11.stAuto.DehazeTuningPara.enhance_setting.EnhanceData;
144     for (int i = 0; i < DHAZ_ENHANCE_CURVE_KNOTS_NUM; i++)
145         attr->stAuto.DehazeTuningPara.enhance_setting.enhance_curve[i] =
146             attr_v11.stAuto.DehazeTuningPara.enhance_setting.enhance_curve[i];
147     attr->stAuto.DehazeTuningPara.hist_setting.en =
148         attr_v11.stAuto.DehazeTuningPara.hist_setting.en;
149     attr->stAuto.DehazeTuningPara.hist_setting.hist_para_en =
150         attr_v11.stAuto.DehazeTuningPara.hist_setting.hist_para_en;
151     attr->stAuto.DehazeTuningPara.hist_setting.HistData =
152         attr_v11.stAuto.DehazeTuningPara.hist_setting.HistData;
153     // set stManual
154     attr->stManual.Enable                    = attr_v11.stManual.Enable;
155     attr->stManual.cfg_alpha                 = attr_v11.stManual.cfg_alpha;
156     attr->stManual.dehaze_setting.en         = attr_v11.stManual.dehaze_setting.en;
157     attr->stManual.dehaze_setting.air_lc_en  = attr_v11.stManual.dehaze_setting.air_lc_en;
158     attr->stManual.dehaze_setting.stab_fnum  = attr_v11.stManual.dehaze_setting.stab_fnum;
159     attr->stManual.dehaze_setting.sigma      = attr_v11.stManual.dehaze_setting.sigma;
160     attr->stManual.dehaze_setting.wt_sigma   = attr_v11.stManual.dehaze_setting.wt_sigma;
161     attr->stManual.dehaze_setting.air_sigma  = attr_v11.stManual.dehaze_setting.air_sigma;
162     attr->stManual.dehaze_setting.tmax_sigma = attr_v11.stManual.dehaze_setting.tmax_sigma;
163     attr->stManual.dehaze_setting.pre_wet    = attr_v11.stManual.dehaze_setting.pre_wet;
164     attr->stManual.dehaze_setting.DehazeData = attr_v11.stManual.dehaze_setting.DehazeData;
165     attr->stManual.enhance_setting.en        = attr_v11.stManual.enhance_setting.en;
166     attr->stManual.enhance_setting.EnhanceData.enhance_value =
167         attr_v11.stManual.enhance_setting.EnhanceData.enhance_value;
168     attr->stManual.enhance_setting.EnhanceData.enhance_chroma =
169         attr_v11.stManual.enhance_setting.EnhanceData.enhance_chroma;
170     for (int i = 0; i < DHAZ_ENHANCE_CURVE_KNOTS_NUM; i++)
171         attr->stManual.enhance_setting.enhance_curve[i] =
172             attr_v11.stManual.enhance_setting.enhance_curve[i];
173     attr->stManual.hist_setting.en           = attr_v11.stManual.hist_setting.en;
174     attr->stManual.hist_setting.hist_para_en = attr_v11.stManual.hist_setting.hist_para_en;
175     attr->stManual.hist_setting.HistData     = attr_v11.stManual.hist_setting.HistData;
176     // set info
177     attr->stDehazeManu.update  = attr_v11.Info.updateMDehazeStrth;
178     attr->stDehazeManu.level   = attr_v11.Info.MDehazeStrth;
179     attr->stEnhanceManu.update = attr_v11.Info.updateMEnhanceStrth;
180     attr->stEnhanceManu.level  = attr_v11.Info.MEnhanceStrth;
181 #endif
182     return ret;
183 }
184 
185 #if RKAIQ_HAVE_DEHAZE_V10
rk_aiq_user_api2_adehaze_v10_setSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,adehaze_sw_v10_t * attr)186 XCamReturn rk_aiq_user_api2_adehaze_v10_setSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
187                                                     adehaze_sw_v10_t* attr) {
188     CHECK_USER_API_ENABLE2(sys_ctx);
189     CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_ADHAZ);
190 
191     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
192 #ifdef RKAIQ_ENABLE_CAMGROUP
193         RkAiqCamGroupAdehazeHandleInt* algo_handle =
194             camgroupAlgoHandle<RkAiqCamGroupAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
195 
196         if (algo_handle) {
197             return algo_handle->setAttribV10(attr);
198         } else {
199             XCamReturn ret                            = XCAM_RETURN_NO_ERROR;
200             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
201             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
202                 if (!camCtx)
203                     continue;
204 
205                 RkAiqAdhazHandleInt* singleCam_algo_handle =
206                     algoHandle<RkAiqAdhazHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ADHAZ);
207                 if (singleCam_algo_handle) {
208                     ret = singleCam_algo_handle->setSwAttribV10(attr);
209                     if (ret != XCAM_RETURN_NO_ERROR) LOGE("%s returned: %d", __FUNCTION__, ret);
210                 }
211             }
212             return ret;
213         }
214 #else
215         return XCAM_RETURN_ERROR_FAILED;
216 #endif
217     } else {
218         RkAiqAdehazeHandleInt* algo_handle =
219             algoHandle<RkAiqAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
220 
221         if (algo_handle) {
222             return algo_handle->setSwAttribV10(attr);
223         }
224     }
225 
226     return XCAM_RETURN_NO_ERROR;
227 }
228 
rk_aiq_user_api2_adehaze_v10_getSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const adehaze_sw_v10_t * attr)229 XCamReturn rk_aiq_user_api2_adehaze_v10_getSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
230                                                     const adehaze_sw_v10_t* attr) {
231     RKAIQ_API_SMART_LOCK(sys_ctx);
232 
233     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
234 #ifdef RKAIQ_ENABLE_CAMGROUP
235         RkAiqCamGroupAdehazeHandleInt* algo_handle =
236             camgroupAlgoHandle<RkAiqCamGroupAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
237 
238         if (algo_handle) {
239             return algo_handle->getAttribV10(attr);
240         } else {
241             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
242             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
243                 if (!camCtx)
244                     continue;
245 
246                 RkAiqAdehazeHandleInt* singleCam_algo_handle =
247                     algoHandle<RkAiqAdehazeHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ADHAZ);
248                 if (singleCam_algo_handle) return singleCam_algo_handle->getSwAttribV10(attr);
249             }
250         }
251 #else
252         return XCAM_RETURN_ERROR_FAILED;
253 #endif
254     } else {
255         RkAiqAdehazeHandleInt* algo_handle =
256             algoHandle<RkAiqAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
257 
258         if (algo_handle) {
259             return algo_handle->getSwAttribV10(attr);
260         }
261     }
262 
263     return XCAM_RETURN_NO_ERROR;
264 }
265 #else
rk_aiq_user_api2_adehaze_v10_setSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const adehaze_sw_v10_t * attr)266 XCamReturn rk_aiq_user_api2_adehaze_v10_setSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
267                                                     const adehaze_sw_v10_t* attr) {
268     return XCAM_RETURN_ERROR_UNKNOWN;
269 }
270 
rk_aiq_user_api2_adehaze_v10_getSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,adehaze_sw_v10_t * attr)271 XCamReturn rk_aiq_user_api2_adehaze_v10_getSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
272                                                     adehaze_sw_v10_t* attr) {
273     return XCAM_RETURN_ERROR_UNKNOWN;
274 }
275 #endif
276 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
rk_aiq_user_api2_adehaze_v11_setSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const adehaze_sw_v11_t * attr)277 XCamReturn rk_aiq_user_api2_adehaze_v11_setSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
278                                                     const adehaze_sw_v11_t* attr) {
279     CHECK_USER_API_ENABLE2(sys_ctx);
280     CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_ADHAZ);
281     XCamReturn ret = XCAM_RETURN_NO_ERROR;
282 
283     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
284 #ifdef RKAIQ_ENABLE_CAMGROUP
285         RkAiqCamGroupAdehazeHandleInt* algo_handle =
286             camgroupAlgoHandle<RkAiqCamGroupAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
287 
288         if (algo_handle) {
289             return algo_handle->setAttribV11(attr);
290         } else {
291             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t*)sys_ctx;
292             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
293                 if (!camCtx) continue;
294 
295                 RkAiqAdehazeHandleInt* singleCam_algo_handle =
296                     algoHandle<RkAiqAdehazeHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ADHAZ);
297                 if (singleCam_algo_handle) ret = singleCam_algo_handle->setSwAttribV11(attr);
298             }
299         }
300 #else
301         return XCAM_RETURN_ERROR_FAILED;
302 #endif
303     } else {
304         RkAiqAdehazeHandleInt* algo_handle =
305             algoHandle<RkAiqAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
306 
307         if (algo_handle) {
308             return algo_handle->setSwAttribV11(attr);
309         }
310     }
311 
312     return ret;
313 }
314 
rk_aiq_user_api2_adehaze_v11_getSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,adehaze_sw_v11_t * attr)315 XCamReturn rk_aiq_user_api2_adehaze_v11_getSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
316                                                     adehaze_sw_v11_t* attr) {
317     RKAIQ_API_SMART_LOCK(sys_ctx);
318 
319     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
320 #ifdef RKAIQ_ENABLE_CAMGROUP
321         RkAiqCamGroupAdehazeHandleInt* algo_handle =
322             camgroupAlgoHandle<RkAiqCamGroupAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
323 
324         if (algo_handle) {
325             return algo_handle->getAttribV11(attr);
326         } else {
327             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t*)sys_ctx;
328             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
329                 if (!camCtx) continue;
330 
331                 RkAiqAdehazeHandleInt* singleCam_algo_handle =
332                     algoHandle<RkAiqAdehazeHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ADHAZ);
333                 if (singleCam_algo_handle) return singleCam_algo_handle->getSwAttribV11(attr);
334             }
335         }
336 #else
337         return XCAM_RETURN_ERROR_FAILED;
338 #endif
339     } else {
340         RkAiqAdehazeHandleInt* algo_handle =
341             algoHandle<RkAiqAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
342 
343         if (algo_handle) {
344             return algo_handle->getSwAttribV11(attr);
345         }
346     }
347 
348     return XCAM_RETURN_NO_ERROR;
349 }
350 #else
rk_aiq_user_api2_adehaze_v11_setSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const adehaze_sw_v11_t * attr)351 XCamReturn rk_aiq_user_api2_adehaze_v11_setSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
352                                                     const adehaze_sw_v11_t* attr) {
353     return XCAM_RETURN_ERROR_UNKNOWN;
354 }
355 
rk_aiq_user_api2_adehaze_v11_getSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,adehaze_sw_v11_t * attr)356 XCamReturn rk_aiq_user_api2_adehaze_v11_getSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
357                                                     adehaze_sw_v11_t* attr) {
358     return XCAM_RETURN_ERROR_UNKNOWN;
359 }
360 #endif
361 #if RKAIQ_HAVE_DEHAZE_V12
rk_aiq_user_api2_adehaze_v12_setSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const adehaze_sw_v12_t * attr)362 XCamReturn rk_aiq_user_api2_adehaze_v12_setSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
363                                                     const adehaze_sw_v12_t* attr) {
364     CHECK_USER_API_ENABLE2(sys_ctx);
365     CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_ADHAZ);
366     XCamReturn ret = XCAM_RETURN_NO_ERROR;
367 
368     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
369 #ifdef RKAIQ_ENABLE_CAMGROUP
370         RkAiqCamGroupAdehazeHandleInt* algo_handle =
371             camgroupAlgoHandle<RkAiqCamGroupAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
372 
373         if (algo_handle) {
374             return algo_handle->setAttribV12(attr);
375         } else {
376             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t*)sys_ctx;
377             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
378                 if (!camCtx) continue;
379 
380                 RkAiqAdehazeHandleInt* singleCam_algo_handle =
381                     algoHandle<RkAiqAdehazeHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ADHAZ);
382                 if (singleCam_algo_handle) ret = singleCam_algo_handle->setSwAttribV12(attr);
383             }
384         }
385 #else
386         return XCAM_RETURN_ERROR_FAILED;
387 #endif
388     } else {
389         RkAiqAdehazeHandleInt* algo_handle =
390             algoHandle<RkAiqAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
391 
392         if (algo_handle) {
393             return algo_handle->setSwAttribV12(attr);
394         }
395     }
396 
397     return ret;
398 }
399 
rk_aiq_user_api2_adehaze_v12_getSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,adehaze_sw_v12_t * attr)400 XCamReturn rk_aiq_user_api2_adehaze_v12_getSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
401                                                     adehaze_sw_v12_t* attr) {
402     RKAIQ_API_SMART_LOCK(sys_ctx);
403 
404     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
405 #ifdef RKAIQ_ENABLE_CAMGROUP
406         RkAiqCamGroupAdehazeHandleInt* algo_handle =
407             camgroupAlgoHandle<RkAiqCamGroupAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
408 
409         if (algo_handle) {
410             return algo_handle->getAttribV12(attr);
411         } else {
412             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t*)sys_ctx;
413             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
414                 if (!camCtx) continue;
415 
416                 RkAiqAdehazeHandleInt* singleCam_algo_handle =
417                     algoHandle<RkAiqAdehazeHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ADHAZ);
418                 if (singleCam_algo_handle) return singleCam_algo_handle->getSwAttribV12(attr);
419             }
420         }
421 #else
422         return XCAM_RETURN_ERROR_FAILED;
423 #endif
424     } else {
425         RkAiqAdehazeHandleInt* algo_handle =
426             algoHandle<RkAiqAdehazeHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ADHAZ);
427 
428         if (algo_handle) {
429             return algo_handle->getSwAttribV12(attr);
430         }
431     }
432 
433     return XCAM_RETURN_NO_ERROR;
434 }
435 #else
rk_aiq_user_api2_adehaze_v12_setSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const adehaze_sw_v12_t * attr)436 XCamReturn rk_aiq_user_api2_adehaze_v12_setSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
437                                                     const adehaze_sw_v12_t* attr) {
438     return XCAM_RETURN_ERROR_UNKNOWN;
439 }
440 
rk_aiq_user_api2_adehaze_v12_getSwAttrib(const rk_aiq_sys_ctx_t * sys_ctx,adehaze_sw_v12_t * attr)441 XCamReturn rk_aiq_user_api2_adehaze_v12_getSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
442                                                     adehaze_sw_v12_t* attr) {
443     return XCAM_RETURN_ERROR_UNKNOWN;
444 }
445 #endif
446 
447 RKAIQ_END_DECLARE
448