xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/uAPI2/rk_aiq_user_api2_imgproc.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  *  Copyright (c) 2019 Rockchip Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 
18 #include "include/uAPI2/rk_aiq_user_api2_imgproc.h"
19 
20 #ifdef RK_SIMULATOR_HW
21 #define CHECK_USER_API_ENABLE
22 #endif
23 
24 #define RKAIQ_IMGPROC_CHECK_RET(ret, format, ...) \
25     if (ret) { \
26         LOGE(format, ##__VA_ARGS__); \
27         return ret; \
28     }
29 
30 #define IMGPROC_FUNC_ENTER LOGD("%s: enter", __FUNCTION__);
31 #define IMGPROC_FUNC_EXIT LOGD("%s: exit", __FUNCTION__);
32 
33 RKAIQ_BEGIN_DECLARE
34 
35 /*
36 **********************************************************
37 *                        API of AEC module of V2
38 **********************************************************
39 */
40 
41 /*
42 *****************************
43 * Desc: set ae mode
44 * Argument:
45 *   mode contains: auto & manual
46 *
47 *****************************
48 */
rk_aiq_uapi2_setAeLock(const rk_aiq_sys_ctx_t * ctx,bool on)49 XCamReturn rk_aiq_uapi2_setAeLock
50 (
51     const rk_aiq_sys_ctx_t* ctx,
52     bool on
53 ) {
54 
55     IMGPROC_FUNC_ENTER
56     XCamReturn ret = XCAM_RETURN_NO_ERROR;
57     Uapi_ExpSwAttrV2_t expSwAttr;
58     if (ctx == NULL) {
59         ret = XCAM_RETURN_ERROR_PARAM;
60         RKAIQ_IMGPROC_CHECK_RET(ret, "param invalid!");
61     }
62 
63     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
64     RKAIQ_IMGPROC_CHECK_RET(ret, "failed in getExpSwAttr!");
65     expSwAttr.Enable = (!on);
66     ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
67     RKAIQ_IMGPROC_CHECK_RET(ret, "failed in setExpSwAttr!");
68     IMGPROC_FUNC_EXIT
69     return (ret);
70 
71 }
rk_aiq_uapi2_setExpMode(const rk_aiq_sys_ctx_t * ctx,opMode_t mode)72 XCamReturn rk_aiq_uapi2_setExpMode
73 (
74     const rk_aiq_sys_ctx_t* ctx,
75     opMode_t mode
76 ) {
77 
78     IMGPROC_FUNC_ENTER
79     XCamReturn ret = XCAM_RETURN_NO_ERROR;
80     Uapi_ExpSwAttrV2_t expSwAttr;
81     if (ctx == NULL) {
82         ret = XCAM_RETURN_ERROR_PARAM;
83         RKAIQ_IMGPROC_CHECK_RET(ret, "param invalid!");
84     }
85 
86     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
87     RKAIQ_IMGPROC_CHECK_RET(ret, "setExpMode failed in getExpSwAttr!");
88     if (mode == OP_AUTO) {
89         expSwAttr.AecOpType = RK_AIQ_OP_MODE_AUTO;
90     } else if (mode == OP_MANUAL) {
91         if (isHDRmode(ctx)) {
92             expSwAttr.AecOpType = RK_AIQ_OP_MODE_MANUAL;
93             expSwAttr.stManual.HdrAE.ManualGainEn = true;
94             expSwAttr.stManual.HdrAE.ManualTimeEn = true;
95         } else {
96             expSwAttr.AecOpType = RK_AIQ_OP_MODE_MANUAL;
97             expSwAttr.stManual.LinearAE.ManualGainEn = true;
98             expSwAttr.stManual.LinearAE.ManualTimeEn = true;
99         }
100     } else {
101         ret = XCAM_RETURN_ERROR_PARAM;
102         RKAIQ_IMGPROC_CHECK_RET(ret, "mode is not supported!");
103     }
104     ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
105     RKAIQ_IMGPROC_CHECK_RET(ret, "setExpMode failed in setExpSwAttr!");
106     IMGPROC_FUNC_EXIT
107     return (ret);
108 
109 }
rk_aiq_uapi2_getExpMode(const rk_aiq_sys_ctx_t * ctx,opMode_t * mode)110 XCamReturn rk_aiq_uapi2_getExpMode
111 (
112     const rk_aiq_sys_ctx_t* ctx,
113     opMode_t *mode
114 ) {
115     XCamReturn ret = XCAM_RETURN_NO_ERROR;
116     Uapi_ExpSwAttrV2_t expSwAttr;
117     IMGPROC_FUNC_ENTER
118     if ((ctx == NULL) || (mode == NULL)) {
119         ret = XCAM_RETURN_ERROR_PARAM;
120         RKAIQ_IMGPROC_CHECK_RET(ret, "param invalid!");
121     }
122     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
123     RKAIQ_IMGPROC_CHECK_RET(ret, "getExpMode failed in getExpSwAttr!");
124     if (expSwAttr.AecOpType == RK_AIQ_OP_MODE_AUTO) {
125         *mode = OP_AUTO;
126     } else if (expSwAttr.AecOpType == RK_AIQ_OP_MODE_MANUAL) {
127         *mode = OP_MANUAL;
128     }
129     IMGPROC_FUNC_EXIT
130     return (ret);
131 }
132 
133 /*
134 *****************************
135 *
136 * Desc: set exposure parameter
137 * Argument:
138 *    auto exposure mode:
139 *      exposure gain will be adjust between [gain->min, gain->max]
140 *    manual exposure mode:
141 *      gain->min == gain->max
142 *
143 *****************************
144 */
rk_aiq_uapi2_setExpGainRange(const rk_aiq_sys_ctx_t * ctx,paRange_t * gain)145 XCamReturn rk_aiq_uapi2_setExpGainRange
146 (
147     const rk_aiq_sys_ctx_t* ctx,
148     paRange_t *gain
149 ) {
150     XCamReturn ret = XCAM_RETURN_NO_ERROR;
151     Uapi_ExpSwAttrV2_t expSwAttr;
152     IMGPROC_FUNC_ENTER
153     if ((ctx == NULL) || (gain == NULL)) {
154         ret = XCAM_RETURN_ERROR_PARAM;
155         RKAIQ_IMGPROC_CHECK_RET(ret, "param invalid!");
156     }
157     LOGD("set range: [%f, %f]", gain->min, gain->max);
158 
159     if (gain->min < 1.0f || gain->max < 1.0f || (gain->min > gain->max)) {
160         ret = XCAM_RETURN_ERROR_PARAM;
161         RKAIQ_IMGPROC_CHECK_RET(ret, "gain range is wrong!");
162     }
163     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
164     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetExpGainRange failed!");
165 
166     expSwAttr.stAdvanced.SetAeRangeEn = true;
167     if (isHDRmode(ctx)) {
168         expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[0].Max = gain->max;
169         expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[0].Min = gain->min;
170         expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[1].Max = gain->max;
171         expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[1].Min = gain->min;
172         expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[2].Max = gain->max;
173         expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[2].Min = gain->min;
174     } else {
175         expSwAttr.stAdvanced.SetLinAeRange.stGainRange.Max = gain->max;
176         expSwAttr.stAdvanced.SetLinAeRange.stGainRange.Min = gain->min;
177     }
178     ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
179     RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetExpGainRange failed!");
180     IMGPROC_FUNC_EXIT
181     return (ret);
182 
183 }
rk_aiq_uapi2_getExpGainRange(const rk_aiq_sys_ctx_t * ctx,paRange_t * gain)184 XCamReturn rk_aiq_uapi2_getExpGainRange
185 (
186     const rk_aiq_sys_ctx_t* ctx,
187     paRange_t *gain
188 ) {
189     XCamReturn ret = XCAM_RETURN_NO_ERROR;
190     Uapi_ExpSwAttrV2_t expSwAttr;
191     IMGPROC_FUNC_ENTER
192     if ((ctx == NULL) || (gain == NULL)) {
193         ret = XCAM_RETURN_ERROR_PARAM;
194         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
195     }
196 
197     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
198     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\ngetExpGainRange failed!");
199     if (isHDRmode(ctx)) {
200         int index = getHDRFrameNum(ctx);
201         gain->max = expSwAttr.stAuto.HdrAeRange.stGainRange[index - 1].Max;
202         gain->min = expSwAttr.stAuto.HdrAeRange.stGainRange[index - 1].Min;
203     } else {
204         gain->max = expSwAttr.stAuto.LinAeRange.stGainRange.Max;
205         gain->min = expSwAttr.stAuto.LinAeRange.stGainRange.Min;
206     }
207 
208     IMGPROC_FUNC_EXIT
209     return (ret);
210 
211 }
212 /*
213 *****************************
214 *
215 * Desc: set exposure parameter
216 * Argument:
217 *    auto exposure mode:
218 *       exposure time will be adjust between [time->min, time->max]
219 *    manual exposure mode:
220 *       exposure time will be set gain->min == gain->max;
221 *
222 *****************************
223 */
rk_aiq_uapi2_setExpTimeRange(const rk_aiq_sys_ctx_t * ctx,paRange_t * time)224 XCamReturn rk_aiq_uapi2_setExpTimeRange
225 (
226     const rk_aiq_sys_ctx_t* ctx,
227     paRange_t *time
228 ) {
229     XCamReturn ret = XCAM_RETURN_NO_ERROR;
230     Uapi_ExpSwAttrV2_t expSwAttr;
231     IMGPROC_FUNC_ENTER
232     if ((ctx == NULL) || (time == NULL)) {
233         ret = XCAM_RETURN_ERROR_PARAM;
234         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
235     }
236     if ( time->min > time->max ) {
237         ret = XCAM_RETURN_ERROR_PARAM;
238         RKAIQ_IMGPROC_CHECK_RET(ret, "time range is wrong!");
239     }
240     LOGD("set range: [%f, %f]", time->min, time->max);
241     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
242     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetExpTimeRange failed!");
243 
244     expSwAttr.stAdvanced.SetAeRangeEn = true;
245     if (isHDRmode(ctx)) {
246         expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[0].Max = time->max;
247         expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[0].Min = time->min;
248         expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[1].Max = time->max;
249         expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[1].Min = time->min;
250         expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[2].Max = time->max;
251         expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[2].Min = time->min;
252     } else {
253         expSwAttr.stAdvanced.SetLinAeRange.stExpTimeRange.Max = time->max;
254         expSwAttr.stAdvanced.SetLinAeRange.stExpTimeRange.Min = time->min;
255     }
256     ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
257     RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetExpTimeRange failed!");
258     IMGPROC_FUNC_EXIT
259     return (ret);
260 
261 }
rk_aiq_uapi2_getExpTimeRange(const rk_aiq_sys_ctx_t * ctx,paRange_t * time)262 XCamReturn rk_aiq_uapi2_getExpTimeRange
263 (
264     const rk_aiq_sys_ctx_t* ctx,
265     paRange_t *time
266 ) {
267     XCamReturn ret = XCAM_RETURN_NO_ERROR;
268     Uapi_ExpSwAttrV2_t expSwAttr;
269     IMGPROC_FUNC_ENTER
270     if ((ctx == NULL) || (time == NULL)) {
271         ret = XCAM_RETURN_ERROR_PARAM;
272         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
273     }
274 
275     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
276     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\ngetExpTimeRange failed!");
277     if (isHDRmode(ctx)) {
278         int index = getHDRFrameNum(ctx);
279         time->max = expSwAttr.stAuto.HdrAeRange.stExpTimeRange[index - 1].Max;
280         time->min = expSwAttr.stAuto.HdrAeRange.stExpTimeRange[index - 1].Min;
281     } else {
282         time->max = expSwAttr.stAuto.LinAeRange.stExpTimeRange.Max;
283         time->min = expSwAttr.stAuto.LinAeRange.stExpTimeRange.Min;
284     }
285 
286     IMGPROC_FUNC_EXIT
287     return (ret);
288 
289 }
290 
291 /*
292 *****************************
293 *
294 * Desc: backlight compensation
295 * Argument:
296 *      on:  1  on
297 *           0  off
298 *      areaType: backlight compensation area
299 *
300 *****************************
301 */
rk_aiq_uapi2_setBLCMode(const rk_aiq_sys_ctx_t * ctx,bool on,aeMeasAreaType_t areaType)302 XCamReturn rk_aiq_uapi2_setBLCMode(const rk_aiq_sys_ctx_t* ctx, bool on, aeMeasAreaType_t areaType)
303 {
304     XCamReturn ret = XCAM_RETURN_NO_ERROR;
305 
306     Uapi_LinExpAttrV2_t LineExpAttr;
307     memset(&LineExpAttr, 0x00, sizeof(Uapi_LinExpAttrV2_t));
308     IMGPROC_FUNC_ENTER
309     if (ctx == NULL) {
310         ret = XCAM_RETURN_ERROR_PARAM;
311         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
312     }
313     if (isHDRmode(ctx)) {
314         ret = XCAM_RETURN_ERROR_FAILED;
315         RKAIQ_IMGPROC_CHECK_RET(ret, "Not support in HDR mode!");
316     }
317 
318     ret = rk_aiq_user_api2_ae_getLinExpAttr(ctx, &LineExpAttr);
319     RKAIQ_IMGPROC_CHECK_RET(ret, "getLinExpAttr error!");
320     LineExpAttr.Params.BackLightCtrl.Enable = on ? 1 : 0;
321     LineExpAttr.Params.BackLightCtrl.MeasArea = (CalibDb_AecMeasAreaModeV2_t)areaType;
322     LineExpAttr.Params.BackLightCtrl.StrBias = 0;
323     ret = rk_aiq_user_api2_ae_setLinExpAttr(ctx, LineExpAttr);
324     RKAIQ_IMGPROC_CHECK_RET(ret, "setBLCMode error!");
325     IMGPROC_FUNC_EXIT
326     return ret;
327 }
328 
329 /*
330 *****************************
331 *
332 * Desc: backlight compensation strength,only available in normal mode
333 * Argument:
334 *      strength:  [1,100]
335 *****************************
336 */
rk_aiq_uapi2_setBLCStrength(const rk_aiq_sys_ctx_t * ctx,int strength)337 XCamReturn rk_aiq_uapi2_setBLCStrength(const rk_aiq_sys_ctx_t* ctx, int strength)
338 {
339     XCamReturn ret = XCAM_RETURN_NO_ERROR;
340     Uapi_LinExpAttrV2_t LineExpAttr;
341     memset(&LineExpAttr, 0x00, sizeof(Uapi_LinExpAttrV2_t));
342 
343     IMGPROC_FUNC_ENTER
344     if (ctx == NULL) {
345         ret = XCAM_RETURN_ERROR_PARAM;
346         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
347     }
348     if (isHDRmode(ctx)) {
349         ret = XCAM_RETURN_ERROR_FAILED;
350         RKAIQ_IMGPROC_CHECK_RET(ret, "Not support in HDR mode!");
351     } else {
352         ret = rk_aiq_user_api2_ae_getLinExpAttr(ctx, &LineExpAttr);
353         RKAIQ_IMGPROC_CHECK_RET(ret, "getLinExpAttr error!");
354         if(0 == LineExpAttr.Params.BackLightCtrl.Enable)
355             RKAIQ_IMGPROC_CHECK_RET(ret, "blc mode is not enabled!");
356         LineExpAttr.Params.BackLightCtrl.StrBias = strength;
357         ret = rk_aiq_user_api2_ae_setLinExpAttr(ctx, LineExpAttr);
358         RKAIQ_IMGPROC_CHECK_RET(ret, "setBLCStrength error!");
359     }
360 
361     IMGPROC_FUNC_EXIT
362     return ret;
363 }
364 
365 /*
366 *****************************
367 *
368 * Desc: highlight compensation
369 * Argument:
370 *      on:  1  on
371 *           0  off
372 *****************************
373 */
rk_aiq_uapi2_setHLCMode(const rk_aiq_sys_ctx_t * ctx,bool on)374 XCamReturn rk_aiq_uapi2_setHLCMode(const rk_aiq_sys_ctx_t* ctx, bool on)
375 {
376     XCamReturn ret = XCAM_RETURN_NO_ERROR;
377     Uapi_LinExpAttrV2_t LinExpAttr;
378     memset(&LinExpAttr, 0x00, sizeof(Uapi_LinExpAttrV2_t));
379     IMGPROC_FUNC_ENTER
380     if (ctx == NULL) {
381         ret = XCAM_RETURN_ERROR_PARAM;
382         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
383     }
384 
385     if (isHDRmode(ctx)) {
386         ret = XCAM_RETURN_ERROR_FAILED;
387         RKAIQ_IMGPROC_CHECK_RET(ret, "Not support in HDR mode!");
388     } else {
389         ret = rk_aiq_user_api2_ae_getLinExpAttr(ctx, &LinExpAttr);
390         RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\n setHLCMode failed!");
391         LinExpAttr.Params.OverExpCtrl.Enable = on ? 1 : 0;
392         LinExpAttr.Params.OverExpCtrl.StrBias = 0;
393         ret = rk_aiq_user_api2_ae_setLinExpAttr(ctx, LinExpAttr);
394         RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\n setHLCMode failed!");
395     }
396     IMGPROC_FUNC_EXIT
397     return ret;
398 
399 }
400 
401 /*
402 *****************************
403 *
404 * Desc: highlight compensation strength
405 * Argument:
406 *      strength:  [1,100]
407 *****************************
408 */
rk_aiq_uapi2_setHLCStrength(const rk_aiq_sys_ctx_t * ctx,int strength)409 XCamReturn rk_aiq_uapi2_setHLCStrength(const rk_aiq_sys_ctx_t* ctx, int strength)
410 {
411     XCamReturn ret = XCAM_RETURN_NO_ERROR;
412     Uapi_LinExpAttrV2_t LinExpAttr;
413     memset(&LinExpAttr, 0x00, sizeof(Uapi_LinExpAttrV2_t));
414     IMGPROC_FUNC_ENTER
415     if (ctx == NULL) {
416         ret = XCAM_RETURN_ERROR_PARAM;
417         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
418     }
419     if (isHDRmode(ctx)) {
420         ret = XCAM_RETURN_ERROR_FAILED;
421         RKAIQ_IMGPROC_CHECK_RET(ret, "Not support in HDR mode!");
422     } else {
423         ret = rk_aiq_user_api2_ae_getLinExpAttr(ctx, &LinExpAttr);
424         RKAIQ_IMGPROC_CHECK_RET(ret, "getLinExpAttr error!");
425         if(0 == LinExpAttr.Params.OverExpCtrl.Enable)
426             RKAIQ_IMGPROC_CHECK_RET(ret, "hlc mode is not enabled!");
427         LinExpAttr.Params.OverExpCtrl.StrBias = strength;
428         ret = rk_aiq_user_api2_ae_setLinExpAttr(ctx, LinExpAttr);
429         RKAIQ_IMGPROC_CHECK_RET(ret, "setHLCStrength error!");
430     }
431     IMGPROC_FUNC_EXIT
432     return ret;
433 
434 }
435 /*
436 *****************************
437 *
438 * Desc: set anti-flicker mode
439 * Argument:
440 *    mode
441 *
442 *****************************
443 */
rk_aiq_uapi2_setAntiFlickerEn(const rk_aiq_sys_ctx_t * ctx,bool on)444 XCamReturn rk_aiq_uapi2_setAntiFlickerEn(const rk_aiq_sys_ctx_t* ctx, bool on)
445 {
446     XCamReturn ret = XCAM_RETURN_NO_ERROR;
447     Uapi_ExpSwAttrV2_t expSwAttr;
448     IMGPROC_FUNC_ENTER
449     if (ctx == NULL) {
450         ret = XCAM_RETURN_ERROR_PARAM;
451         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
452     }
453 
454     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
455     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetAntiFlickerEn failed!");
456     expSwAttr.stAuto.stAntiFlicker.enable = on;
457 
458     ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
459     RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetAntiFlickerEn failed!");
460     IMGPROC_FUNC_EXIT
461     return ret;
462 }
463 /*
464 *****************************
465 *
466 * Desc: set anti-flicker mode
467 * Argument:
468 *    mode
469 *
470 *****************************
471 */
rk_aiq_uapi2_getAntiFlickerEn(const rk_aiq_sys_ctx_t * ctx,bool * on)472 XCamReturn rk_aiq_uapi2_getAntiFlickerEn(const rk_aiq_sys_ctx_t* ctx, bool* on)
473 {
474 
475     XCamReturn ret = XCAM_RETURN_NO_ERROR;
476     Uapi_ExpSwAttrV2_t expSwAttr;
477     IMGPROC_FUNC_ENTER
478     if (ctx == NULL) {
479         ret = XCAM_RETURN_ERROR_PARAM;
480         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
481     }
482 
483     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
484     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\ngetAntiFlickerEn!");
485     *on = expSwAttr.stAuto.stAntiFlicker.enable;
486     IMGPROC_FUNC_EXIT
487     return ret;
488 }
489 
490 /*
491 *****************************
492 *
493 * Desc: set anti-flicker mode
494 * Argument:
495 *    mode
496 *
497 *****************************
498 */
499 
rk_aiq_uapi2_setAntiFlickerMode(const rk_aiq_sys_ctx_t * ctx,antiFlickerMode_t mode)500 XCamReturn rk_aiq_uapi2_setAntiFlickerMode(const rk_aiq_sys_ctx_t* ctx, antiFlickerMode_t mode)
501 {
502     XCamReturn ret = XCAM_RETURN_NO_ERROR;
503     Uapi_ExpSwAttrV2_t expSwAttr;
504     IMGPROC_FUNC_ENTER
505     if (ctx == NULL) {
506         ret = XCAM_RETURN_ERROR_PARAM;
507         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
508     }
509 
510     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
511     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetAntiFlickerMode failed!");
512     if (mode == ANTIFLICKER_AUTO_MODE) {
513         expSwAttr.stAuto.stAntiFlicker.enable = true;
514         expSwAttr.stAuto.stAntiFlicker.Mode = AECV2_ANTIFLICKER_AUTO_MODE;
515     } else if(mode == ANTIFLICKER_NORMAL_MODE) {
516         expSwAttr.stAuto.stAntiFlicker.enable = true;
517         expSwAttr.stAuto.stAntiFlicker.Mode = AECV2_ANTIFLICKER_NORMAL_MODE;
518     } else {
519         ret = XCAM_RETURN_ERROR_PARAM;
520         RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
521     }
522     ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
523     RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetAntiFlickerMode failed!");
524     IMGPROC_FUNC_EXIT
525     return ret;
526 }
527 
rk_aiq_uapi2_getAntiFlickerMode(const rk_aiq_sys_ctx_t * ctx,antiFlickerMode_t * mode)528 XCamReturn rk_aiq_uapi2_getAntiFlickerMode(const rk_aiq_sys_ctx_t* ctx, antiFlickerMode_t *mode)
529 {
530     XCamReturn ret = XCAM_RETURN_NO_ERROR;
531     Uapi_ExpSwAttrV2_t expSwAttr;
532     IMGPROC_FUNC_ENTER
533     if (ctx == NULL) {
534         ret = XCAM_RETURN_ERROR_PARAM;
535         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
536     }
537 
538     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
539 
540     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\ngetAntiFlickerMode!");
541     if (expSwAttr.stAuto.stAntiFlicker.Mode == AECV2_ANTIFLICKER_AUTO_MODE)
542         *mode = ANTIFLICKER_AUTO_MODE;
543     else if (expSwAttr.stAuto.stAntiFlicker.Mode == AECV2_ANTIFLICKER_NORMAL_MODE)
544         *mode = ANTIFLICKER_NORMAL_MODE;
545     IMGPROC_FUNC_EXIT
546     return ret;
547 }
548 
549 /*
550 *****************************
551 *
552 * Desc: set power line frequence
553 * Argument:
554 *    freq
555 *
556 *****************************
557 */
rk_aiq_uapi2_setExpPwrLineFreqMode(const rk_aiq_sys_ctx_t * ctx,expPwrLineFreq_t freq)558 XCamReturn rk_aiq_uapi2_setExpPwrLineFreqMode(const rk_aiq_sys_ctx_t* ctx, expPwrLineFreq_t freq)
559 {
560     XCamReturn ret = XCAM_RETURN_NO_ERROR;
561     Uapi_ExpSwAttrV2_t expSwAttr;
562     IMGPROC_FUNC_ENTER
563     if (ctx == NULL) {
564         ret = XCAM_RETURN_ERROR_PARAM;
565         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
566     }
567     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
568     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetExpPwrLineFreqMode failed!");
569     if (freq == EXP_PWR_LINE_FREQ_50HZ) {
570         expSwAttr.stAuto.stAntiFlicker.enable = true;
571         expSwAttr.stAuto.stAntiFlicker.Frequency = AECV2_FLICKER_FREQUENCY_50HZ;
572     } else if (freq == EXP_PWR_LINE_FREQ_60HZ) {
573         expSwAttr.stAuto.stAntiFlicker.enable = true;
574         expSwAttr.stAuto.stAntiFlicker.Frequency = AECV2_FLICKER_FREQUENCY_60HZ;
575     } else if (freq == EXP_PWR_LINE_FREQ_DIS) {
576         expSwAttr.stAuto.stAntiFlicker.enable = true;
577         expSwAttr.stAuto.stAntiFlicker.Frequency = AECV2_FLICKER_FREQUENCY_OFF;
578     } else {
579         ret = XCAM_RETURN_ERROR_PARAM;
580         RKAIQ_IMGPROC_CHECK_RET(ret, "freq is invalid!");
581     }
582     ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
583     RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetExpPwrLineFreqMode failed!");
584     IMGPROC_FUNC_EXIT
585     return (ret);
586 }
rk_aiq_uapi2_getExpPwrLineFreqMode(const rk_aiq_sys_ctx_t * ctx,expPwrLineFreq_t * freq)587 XCamReturn rk_aiq_uapi2_getExpPwrLineFreqMode
588 (
589     const rk_aiq_sys_ctx_t* ctx,
590     expPwrLineFreq_t *freq
591 ) {
592     XCamReturn ret = XCAM_RETURN_NO_ERROR;
593     Uapi_ExpSwAttrV2_t expSwAttr;
594     IMGPROC_FUNC_ENTER
595     if (ctx == NULL) {
596         ret = XCAM_RETURN_ERROR_PARAM;
597         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
598     }
599 
600     ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
601     RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetExpPwrLineFreqMode failed!");
602     if (expSwAttr.stAuto.stAntiFlicker.Frequency == AECV2_FLICKER_FREQUENCY_50HZ) {
603         *freq = EXP_PWR_LINE_FREQ_50HZ;
604     } else if (expSwAttr.stAuto.stAntiFlicker.Frequency == AECV2_FLICKER_FREQUENCY_60HZ) {
605         *freq = EXP_PWR_LINE_FREQ_60HZ;
606     } else if (expSwAttr.stAuto.stAntiFlicker.Frequency == AECV2_FLICKER_FREQUENCY_OFF) {
607         *freq = EXP_PWR_LINE_FREQ_DIS;
608     } else {
609         ret = XCAM_RETURN_ERROR_PARAM;
610         RKAIQ_IMGPROC_CHECK_RET(ret, "freq is invalid!");
611     }
612     IMGPROC_FUNC_EXIT
613     return (ret);
614 
615 }
616 
617 /*
618 *****************************
619 *
620 * Desc: Adjust image gamma
621 *
622 * Argument:
623 *   GammaCoef: [0, 100]
624 *   SlopeAtZero: [-0.05, 0.05]
625 *****************************
626 */
rk_aiq_uapi2_setGammaCoef(const rk_aiq_sys_ctx_t * ctx,float GammaCoef,float SlopeAtZero)627 XCamReturn rk_aiq_uapi2_setGammaCoef(const rk_aiq_sys_ctx_t* ctx, float GammaCoef, float SlopeAtZero)
628 {
629     XCamReturn ret = XCAM_RETURN_NO_ERROR;
630     IMGPROC_FUNC_ENTER
631     if (ctx == NULL) {
632         ret = XCAM_RETURN_ERROR_PARAM;
633         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setGammaCoef failed!");
634     }
635 
636     if (GammaCoef < 0 || GammaCoef > 100) {
637         ret = XCAM_RETURN_ERROR_PARAM;
638         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, GammaCoef range is [0,100]!");
639     }
640     if (SlopeAtZero < -0.05 || SlopeAtZero > 0.05) {
641         ret = XCAM_RETURN_ERROR_PARAM;
642         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, SlopeAtZero range is [-0.05,0.05]!");
643     }
644 
645 #if RKAIQ_HAVE_GAMMA_V10
646     rk_aiq_gamma_v10_attr_t gammaAttr;
647     memset(&gammaAttr, 0x0, sizeof(rk_aiq_gamma_v10_attr_t));
648     gammaAttr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
649     gammaAttr.sync.done      = false;
650 
651     gammaAttr.mode                                    = RK_AIQ_GAMMA_MODE_AUTO;
652     gammaAttr.stAuto.GammaTuningPara.Gamma_en         = true;
653     gammaAttr.stAuto.GammaTuningPara.Gamma_out_segnum = GAMMATYPE_LOG;
654     gammaAttr.stAuto.GammaTuningPara.Gamma_out_offset = 0;
655     float gamma_X_v10[CALIBDB_AGAMMA_KNOTS_NUM_V10]   = {
656         0,   1,   2,   3,   4,   5,   6,    7,    8,    10,   12,   14,   16,   20,   24,
657         28,  32,  40,  48,  56,  64,  80,   96,   112,  128,  160,  192,  224,  256,  320,
658         384, 448, 512, 640, 768, 896, 1024, 1280, 1536, 1792, 2048, 2560, 3072, 3584, 4095
659     };
660     float gamma_Y_v10[CALIBDB_AGAMMA_KNOTS_NUM_V10];
661     for (int i = 0; i < CALIBDB_AGAMMA_KNOTS_NUM_V10; i++) {
662         gamma_Y_v10[i] = 4095 * pow(gamma_X_v10[i] / 4095, 1 / GammaCoef + SlopeAtZero);
663         gamma_Y_v10[i] = gamma_Y_v10[i] > 4095 ? 4095 : gamma_Y_v10[i] < 0 ? 0 : gamma_Y_v10[i];
664         gammaAttr.stAuto.GammaTuningPara.Gamma_curve[i] = (int)(gamma_Y_v10[i] + 0.5);
665     }
666     ret = rk_aiq_user_api2_agamma_v10_SetAttrib(ctx, &gammaAttr);
667 #endif
668 #if RKAIQ_HAVE_GAMMA_V11
669     rk_aiq_gamma_v11_attr_t gammaAttr;
670     memset(&gammaAttr, 0x0, sizeof(rk_aiq_gamma_v11_attr_t));
671     gammaAttr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
672     gammaAttr.sync.done      = false;
673 
674     gammaAttr.mode                                    = RK_AIQ_GAMMA_MODE_AUTO;
675     gammaAttr.stAuto.GammaTuningPara.Gamma_en         = true;
676     gammaAttr.stAuto.GammaTuningPara.Gamma_out_offset = 0;
677     float gamma_X_v11[CALIBDB_AGAMMA_KNOTS_NUM_V11]   = {
678         0,    1,    2,    3,    4,    5,    6,    7,    8,    10,  12,   14,   16,
679         20,   24,   28,   32,   40,   48,   56,   64,   80,   96,  112,  128,  160,
680         192,  224,  256,  320,  384,  448,  512,  640,  768,  896, 1024, 1280, 1536,
681         1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4095
682     };
683     float gamma_Y_v11[CALIBDB_AGAMMA_KNOTS_NUM_V11];
684     for (int i = 0; i < CALIBDB_AGAMMA_KNOTS_NUM_V11; i++) {
685         gamma_Y_v11[i] = 4095 * pow(gamma_X_v11[i] / 4095, 1 / GammaCoef + SlopeAtZero);
686         gamma_Y_v11[i] = gamma_Y_v11[i] > 4095 ? 4095 : gamma_Y_v11[i] < 0 ? 0 : gamma_Y_v11[i];
687         gammaAttr.stAuto.GammaTuningPara.Gamma_curve[i] = (int)(gamma_Y_v11[i] + 0.5);
688     }
689     ret = rk_aiq_user_api2_agamma_v11_SetAttrib(ctx, &gammaAttr);
690 #endif
691 
692     IMGPROC_FUNC_EXIT
693     return ret;
694 }
695 /*
696 *****************************
697 *
698 * Desc: set manual dehaze module enable
699 *     enable/disable dehaze module function, including dehaze, enhance and hist
700 *
701 *****************************
702 */
rk_aiq_uapi2_setDehazeModuleEnable(const rk_aiq_sys_ctx_t * ctx,bool on)703 XCamReturn rk_aiq_uapi2_setDehazeModuleEnable(const rk_aiq_sys_ctx_t* ctx, bool on) {
704     XCamReturn ret = XCAM_RETURN_NO_ERROR;
705     IMGPROC_FUNC_ENTER
706 
707     if (ctx == NULL) {
708         ret = XCAM_RETURN_ERROR_PARAM;
709         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
710     }
711 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
712     adehaze_sw_v11_t attr_v11;
713     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
714     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
715 
716     attr_v11.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
717     attr_v11.sync.done      = false;
718 
719     if (attr_v11.mode == DEHAZE_API_AUTO) {
720         if (on)
721             attr_v11.stAuto.DehazeTuningPara.Enable = true;
722         else
723             attr_v11.stAuto.DehazeTuningPara.Enable = false;
724     } else if (attr_v11.mode == DEHAZE_API_MANUAL) {
725         if (on)
726             attr_v11.stManual.Enable = true;
727         else
728             attr_v11.stManual.Enable = false;
729     }
730     ret = rk_aiq_user_api2_adehaze_v11_setSwAttrib(ctx, &attr_v11);
731     RKAIQ_IMGPROC_CHECK_RET(ret, "setDehazeModuleEnable failed!");
732 #endif
733 #if RKAIQ_HAVE_DEHAZE_V12
734     adehaze_sw_v12_t attr_v12;
735     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
736     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
737 
738     attr_v12.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
739     attr_v12.sync.done      = false;
740 
741     if (attr_v12.mode == DEHAZE_API_AUTO) {
742         if (on)
743             attr_v12.stAuto.DehazeTuningPara.Enable = true;
744         else
745             attr_v12.stAuto.DehazeTuningPara.Enable = false;
746     } else if (attr_v12.mode == DEHAZE_API_MANUAL) {
747         if (on)
748             attr_v12.stManual.Enable = true;
749         else
750             attr_v12.stManual.Enable = false;
751     }
752     ret = rk_aiq_user_api2_adehaze_v12_setSwAttrib(ctx, &attr_v12);
753     RKAIQ_IMGPROC_CHECK_RET(ret, "setDehazeModuleEnable failed!");
754 #endif
755     IMGPROC_FUNC_EXIT
756     return ret;
757 }
758 
759 /*
760 *****************************
761 *
762 * Desc: set manual dehaze enable
763 *     enable/disable dehaze function
764 *
765 *****************************
766 */
rk_aiq_uapi2_setDehazeEnable(const rk_aiq_sys_ctx_t * ctx,bool on)767 XCamReturn rk_aiq_uapi2_setDehazeEnable(const rk_aiq_sys_ctx_t* ctx, bool on) {
768     XCamReturn ret = XCAM_RETURN_NO_ERROR;
769     IMGPROC_FUNC_ENTER
770 
771     if (ctx == NULL) {
772         ret = XCAM_RETURN_ERROR_PARAM;
773         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
774     }
775 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
776     adehaze_sw_v11_t attr_v11;
777     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
778     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
779 
780     attr_v11.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
781     attr_v11.sync.done      = false;
782 
783     if (attr_v11.mode == DEHAZE_API_AUTO) {
784         if (on) {
785             attr_v11.stAuto.DehazeTuningPara.dehaze_setting.en  = true;
786             attr_v11.stAuto.DehazeTuningPara.enhance_setting.en = false;
787         } else
788             attr_v11.stAuto.DehazeTuningPara.dehaze_setting.en = false;
789     } else if (attr_v11.mode == DEHAZE_API_MANUAL) {
790         if (on) {
791             attr_v11.stManual.dehaze_setting.en  = true;
792             attr_v11.stManual.enhance_setting.en = false;
793         } else
794             attr_v11.stManual.dehaze_setting.en = false;
795     }
796     ret = rk_aiq_user_api2_adehaze_v11_setSwAttrib(ctx, &attr_v11);
797     RKAIQ_IMGPROC_CHECK_RET(ret, "setDehazeEnable failed!");
798 #endif
799 #if RKAIQ_HAVE_DEHAZE_V12
800     adehaze_sw_v12_t attr_v12;
801     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
802     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
803 
804     attr_v12.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
805     attr_v12.sync.done      = false;
806 
807     if (attr_v12.mode == DEHAZE_API_AUTO) {
808         if (on) {
809             attr_v12.stAuto.DehazeTuningPara.dehaze_setting.en  = true;
810             attr_v12.stAuto.DehazeTuningPara.enhance_setting.en = false;
811         } else
812             attr_v12.stAuto.DehazeTuningPara.dehaze_setting.en = false;
813     } else if (attr_v12.mode == DEHAZE_API_MANUAL) {
814         if (on) {
815             attr_v12.stManual.dehaze_setting.en  = true;
816             attr_v12.stManual.enhance_setting.en = false;
817         } else
818             attr_v12.stManual.dehaze_setting.en = false;
819     }
820     ret = rk_aiq_user_api2_adehaze_v12_setSwAttrib(ctx, &attr_v12);
821     RKAIQ_IMGPROC_CHECK_RET(ret, "setDehazeEnable failed!");
822 #endif
823     IMGPROC_FUNC_EXIT
824     return ret;
825 }
826 
827 /*
828 *****************************
829 *
830 * Desc: set/get manual dehaze strength
831 *     this function is active for dehaze is manual mode
832 * Argument:
833 *   level: [0, 100]
834 *
835 *****************************
836 */
rk_aiq_uapi2_setMDehazeStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int level)837 XCamReturn rk_aiq_uapi2_setMDehazeStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
838 {
839     XCamReturn ret = XCAM_RETURN_NO_ERROR;
840     IMGPROC_FUNC_ENTER
841     if (ctx == NULL) {
842         ret = XCAM_RETURN_ERROR_PARAM;
843         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
844     }
845     if (level > 100) {
846         ret = XCAM_RETURN_ERROR_PARAM;
847         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, strength range is [0,100]!");
848     }
849 #if RKAIQ_HAVE_DEHAZE_V10
850 #if 0
851     adehaze_sw_v10_t attr_v10;
852     memset(&attr_v10, 0, sizeof(adehaze_sw_v10_t));
853     ret = rk_aiq_user_api2_adehaze_v10_getSwAttrib(ctx, &attr_v10);
854     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
855 
856     attr_v10.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
857     attr_v10.sync.done                                  = false;
858     attr_v10.mode                                       = DEHAZE_API_AUTO;
859     attr_v10.stAuto.DehazeTuningPara.Enable             = true;
860     attr_v10.stAuto.DehazeTuningPara.dehaze_setting.en  = true;
861     attr_v10.stAuto.DehazeTuningPara.enhance_setting.en = false;
862     attr_v10.stAuto.DehazeTuningPara.cfg_alpha          = NORMALIZE_MAX;
863     attr_v10.stAuto.DehazeTuningPara.ByPassThr          = NORMALIZE_MIN;
864     // attr_v10.i.MDehazeStrth = level;
865     for (int i = 0; i < attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.CtrlData_len;
866             i++) {
867         float level_diff = (float)(level - DEHAZE_DEFAULT_LEVEL);
868         // sw_dhaz_cfg_wt
869         attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt[i] +=
870             level_diff * DEHAZE_DEFAULT_CFG_WT_STEP;
871         attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt[i] =
872             LIMIT_VALUE(attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt[i],
873                         NORMALIZE_MAX, NORMALIZE_MIN);
874 
875         // sw_dhaz_cfg_air
876         attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_air[i] +=
877             level_diff * DEHAZE_DEFAULT_CFG_AIR_STEP;
878         attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_air[i] = LIMIT_VALUE(
879                     attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_air[i], 255, 0);
880 
881         // sw_dhaz_cfg_tmax
882         attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax[i] +=
883             level_diff * DEHAZE_DEFAULT_CFG_TMAX_STEP;
884         attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax[i] =
885             LIMIT_VALUE(attr_v10.stAuto.DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax[i],
886                         NORMALIZE_MAX, NORMALIZE_MIN);
887     }
888 
889     ret = rk_aiq_user_api2_adehaze_v10_setSwAttrib(ctx, &attr_v10);
890     RKAIQ_IMGPROC_CHECK_RET(ret, "setMDhzStrth failed!");
891 #endif
892 #endif
893 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
894     adehaze_sw_v11_t attr_v11;
895     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
896     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
897     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
898     if (attr_v11.mode == DEHAZE_API_AUTO) {
899         if (!attr_v11.stAuto.DehazeTuningPara.Enable ||
900             !attr_v11.stAuto.DehazeTuningPara.dehaze_setting.en ||
901             attr_v11.stAuto.DehazeTuningPara.enhance_setting.en) {
902             LOGW_ADEHAZE("%s: Dehaze is OFF! level is invalid\n", __FUNCTION__);
903         }
904     } else if (attr_v11.mode == DEHAZE_API_MANUAL) {
905         if (!attr_v11.stManual.Enable || !attr_v11.stManual.dehaze_setting.en ||
906             attr_v11.stManual.enhance_setting.en) {
907             LOGW_ADEHAZE("%s: Dehaze is OFF! level is invalid\n", __FUNCTION__);
908         }
909     }
910 
911     attr_v11.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
912     attr_v11.sync.done                                  = false;
913     attr_v11.Info.updateMDehazeStrth                    = true;
914     attr_v11.Info.MDehazeStrth                          = level;
915     ret = rk_aiq_user_api2_adehaze_v11_setSwAttrib(ctx, &attr_v11);
916     RKAIQ_IMGPROC_CHECK_RET(ret, "setMDhzStrth failed!");
917 #endif
918 #if RKAIQ_HAVE_DEHAZE_V12
919     adehaze_sw_v12_t attr_v12;
920     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
921     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
922     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
923     if (attr_v12.mode == DEHAZE_API_AUTO) {
924         if (!attr_v12.stAuto.DehazeTuningPara.Enable ||
925             !attr_v12.stAuto.DehazeTuningPara.dehaze_setting.en ||
926             attr_v12.stAuto.DehazeTuningPara.enhance_setting.en) {
927             LOGW_ADEHAZE("%s: Dehaze is OFF! level is invalid\n", __FUNCTION__);
928         }
929     } else if (attr_v12.mode == DEHAZE_API_MANUAL) {
930         if (!attr_v12.stManual.Enable || !attr_v12.stManual.dehaze_setting.en ||
931             attr_v12.stManual.enhance_setting.en) {
932             LOGW_ADEHAZE("%s: Dehaze is OFF! level is invalid\n", __FUNCTION__);
933         }
934     }
935 
936     attr_v12.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
937     attr_v12.sync.done                                  = false;
938     attr_v12.Info.updateMDehazeStrth                    = true;
939     attr_v12.Info.MDehazeStrth                          = level;
940     ret = rk_aiq_user_api2_adehaze_v12_setSwAttrib(ctx, &attr_v12);
941     RKAIQ_IMGPROC_CHECK_RET(ret, "setMDhzStrth failed!");
942 #endif
943 
944     IMGPROC_FUNC_EXIT
945     return ret;
946 }
947 
rk_aiq_uapi2_getMDehazeStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)948 XCamReturn rk_aiq_uapi2_getMDehazeStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
949 {
950     XCamReturn ret = XCAM_RETURN_NO_ERROR;
951     IMGPROC_FUNC_ENTER
952     if (ctx == NULL) {
953         ret = XCAM_RETURN_ERROR_PARAM;
954         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
955     }
956 #if RKAIQ_HAVE_DEHAZE_V10
957     adehaze_sw_v10_info_t attr_v10_info;
958     memset(&attr_v10_info, 0, sizeof(adehaze_sw_v10_info_t));
959     ret = rk_aiq_user_api2_adehaze_v10_getSwAttrib(ctx, &attr_v10_info);
960     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed in get attrib!");
961     *level = attr_v10_info.CtrlInfo.MDehazeStrth;
962 #endif
963 #if RKAIQ_HAVE_DEHAZE_V11
964     adehaze_sw_v11_t attr_v11;
965     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
966     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
967     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed in get attrib!");
968     *level = attr_v11.Info.MDehazeStrth;
969 #endif
970 #if RKAIQ_HAVE_DEHAZE_V12
971     adehaze_sw_v12_t attr_v12;
972     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
973     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
974     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed in get attrib!");
975     *level = attr_v12.Info.MDehazeStrth;
976 #endif
977 
978     IMGPROC_FUNC_EXIT
979     return ret;
980 }
981 
982 /*
983 *****************************
984 *
985 * Desc: set manual enhance enable
986 *     enable/disable enhance function
987 *
988 *****************************
989 */
rk_aiq_uapi2_setEnhanceEnable(const rk_aiq_sys_ctx_t * ctx,bool on)990 XCamReturn rk_aiq_uapi2_setEnhanceEnable(const rk_aiq_sys_ctx_t* ctx, bool on) {
991     XCamReturn ret = XCAM_RETURN_NO_ERROR;
992     IMGPROC_FUNC_ENTER
993 
994     if (ctx == NULL) {
995         ret = XCAM_RETURN_ERROR_PARAM;
996         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
997     }
998 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
999     adehaze_sw_v11_t attr_v11;
1000     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
1001     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
1002 
1003     attr_v11.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1004     attr_v11.sync.done      = false;
1005 
1006     if (attr_v11.mode == DEHAZE_API_AUTO) {
1007         if (on)
1008             attr_v11.stAuto.DehazeTuningPara.enhance_setting.en = true;
1009         else
1010             attr_v11.stAuto.DehazeTuningPara.enhance_setting.en = false;
1011     } else if (attr_v11.mode == DEHAZE_API_MANUAL) {
1012         if (on)
1013             attr_v11.stManual.enhance_setting.en = true;
1014         else
1015             attr_v11.stManual.enhance_setting.en = false;
1016     }
1017     ret = rk_aiq_user_api2_adehaze_v11_setSwAttrib(ctx, &attr_v11);
1018     RKAIQ_IMGPROC_CHECK_RET(ret, "setEnhanceEnable failed!");
1019 #endif
1020 #if RKAIQ_HAVE_DEHAZE_V12
1021     adehaze_sw_v12_t attr_v12;
1022     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
1023     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
1024 
1025     attr_v12.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1026     attr_v12.sync.done      = false;
1027 
1028     if (attr_v12.mode == DEHAZE_API_AUTO) {
1029         if (on)
1030             attr_v12.stAuto.DehazeTuningPara.enhance_setting.en = true;
1031         else
1032             attr_v12.stAuto.DehazeTuningPara.enhance_setting.en = false;
1033     } else if (attr_v12.mode == DEHAZE_API_MANUAL) {
1034         if (on)
1035             attr_v12.stManual.enhance_setting.en = true;
1036         else
1037             attr_v12.stManual.enhance_setting.en = false;
1038     }
1039     ret = rk_aiq_user_api2_adehaze_v12_setSwAttrib(ctx, &attr_v12);
1040     RKAIQ_IMGPROC_CHECK_RET(ret, "setEnhanceEnable failed!");
1041 #endif
1042     IMGPROC_FUNC_EXIT
1043     return ret;
1044 }
1045 
1046 /*
1047 *****************************
1048 *
1049 * Desc: set/get manual enhance strength
1050 *     this function is active for dehaze is manual mode
1051 * Argument:
1052 *   level: [0, 100]
1053 *
1054 *****************************
1055 */
rk_aiq_uapi2_setMEnhanceStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int level)1056 XCamReturn rk_aiq_uapi2_setMEnhanceStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
1057 {
1058     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1059     IMGPROC_FUNC_ENTER
1060     if (ctx == NULL) {
1061         ret = XCAM_RETURN_ERROR_PARAM;
1062         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1063     }
1064     if (level > 100) {
1065         ret = XCAM_RETURN_ERROR_PARAM;
1066         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, level range is [0,100]!");
1067     }
1068 #if RKAIQ_HAVE_DEHAZE_V10
1069 #if 0
1070     adehaze_sw_v10_info_t attr_v10_info;
1071     memset(&attr_v10_info, 0, sizeof(adehaze_sw_v10_info_t));
1072     ret = rk_aiq_user_api2_adehaze_v10_getSwAttribInfo(ctx, &attr_v10_info);
1073     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzInfo failed!");
1074     attr_v10_info.CtrlInfo.MEnhanceStrth = level;
1075     ret = rk_aiq_user_api2_adehaze_v10_setSwAttribInfo(ctx, &attr_v10_info);
1076     RKAIQ_IMGPROC_CHECK_RET(ret, "setMDhzInfo failed!");
1077 
1078     adehaze_sw_v10_t attr_v10;
1079     memset(&attr_v10, 0, sizeof(adehaze_sw_v10_t));
1080     ret = rk_aiq_user_api2_adehaze_v10_getSwAttrib(ctx, &attr_v10);
1081     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
1082     attr_v10.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
1083     attr_v10.sync.done                                  = false;
1084     attr_v10.mode                                       = DEHAZE_API_AUTO;
1085     attr_v10.stAuto.DehazeTuningPara.Enable             = true;
1086     attr_v10.stAuto.DehazeTuningPara.dehaze_setting.en  = false;
1087     attr_v10.stAuto.DehazeTuningPara.enhance_setting.en = true;
1088     attr_v10.stAuto.DehazeTuningPara.cfg_alpha          = NORMALIZE_MAX;
1089     attr_v10.stAuto.DehazeTuningPara.ByPassThr          = NORMALIZE_MIN;
1090     ret = rk_aiq_user_api2_adehaze_v10_setSwAttrib(ctx, &attr_v10);
1091     RKAIQ_IMGPROC_CHECK_RET(ret, "setMEnhanceStrth failed!");
1092 #endif
1093 #endif
1094 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
1095     adehaze_sw_v11_t attr_v11;
1096     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
1097     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
1098     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
1099     if (attr_v11.mode == DEHAZE_API_AUTO) {
1100         if (!attr_v11.stAuto.DehazeTuningPara.Enable ||
1101             !attr_v11.stAuto.DehazeTuningPara.enhance_setting.en) {
1102             LOGW_ADEHAZE("%s: Enhance is OFF! level is invalid\n", __FUNCTION__);
1103         }
1104     } else if (attr_v11.mode == DEHAZE_API_MANUAL) {
1105         if (!attr_v11.stManual.Enable || !attr_v11.stManual.enhance_setting.en) {
1106             LOGW_ADEHAZE("%s: Enhance is OFF! level is invalid\n", __FUNCTION__);
1107         }
1108     }
1109 
1110     attr_v11.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
1111     attr_v11.sync.done                                  = false;
1112     attr_v11.Info.updateMEnhanceStrth                   = true;
1113     attr_v11.Info.MEnhanceStrth                         = level;
1114     ret = rk_aiq_user_api2_adehaze_v11_setSwAttrib(ctx, &attr_v11);
1115     RKAIQ_IMGPROC_CHECK_RET(ret, "setMEnhanceStrth failed!");
1116 #endif
1117 #if RKAIQ_HAVE_DEHAZE_V12
1118     adehaze_sw_v12_t attr_v12;
1119     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
1120     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
1121     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
1122     if (attr_v12.mode == DEHAZE_API_AUTO) {
1123         if (!attr_v12.stAuto.DehazeTuningPara.Enable ||
1124             !attr_v12.stAuto.DehazeTuningPara.enhance_setting.en) {
1125             LOGW_ADEHAZE("%s: Enhance is OFF! level is invalid\n", __FUNCTION__);
1126         }
1127     } else if (attr_v12.mode == DEHAZE_API_MANUAL) {
1128         if (!attr_v12.stManual.Enable || !attr_v12.stManual.enhance_setting.en) {
1129             LOGW_ADEHAZE("%s: Enhance is OFF! level is invalid\n", __FUNCTION__);
1130         }
1131     }
1132 
1133     attr_v12.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
1134     attr_v12.sync.done                                  = false;
1135     attr_v12.Info.updateMEnhanceStrth                   = true;
1136     attr_v12.Info.MEnhanceStrth                         = level;
1137     ret = rk_aiq_user_api2_adehaze_v12_setSwAttrib(ctx, &attr_v12);
1138     RKAIQ_IMGPROC_CHECK_RET(ret, "setMEnhanceStrth failed!");
1139 #endif
1140 
1141     IMGPROC_FUNC_EXIT
1142     return ret;
1143 }
1144 
rk_aiq_uapi2_getMEnhanceStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)1145 XCamReturn rk_aiq_uapi2_getMEnhanceStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
1146 {
1147     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1148     IMGPROC_FUNC_ENTER
1149     if (ctx == NULL) {
1150         ret = XCAM_RETURN_ERROR_PARAM;
1151         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1152     }
1153 #if RKAIQ_HAVE_DEHAZE_V10
1154     adehaze_sw_v10_info_t attr_v10_info;
1155     memset(&attr_v10_info, 0, sizeof(adehaze_sw_v10_info_t));
1156     ret = rk_aiq_user_api2_adehaze_v10_getSwAttribInfo(ctx, &attr_v10_info);
1157     RKAIQ_IMGPROC_CHECK_RET(ret, "getMEnhanceStrth failed in get attrib!");
1158     *level = attr_v10_info.CtrlInfo.MEnhanceStrth;
1159 #endif
1160 #if RKAIQ_HAVE_DEHAZE_V11
1161     adehaze_sw_v11_t attr_v11;
1162     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
1163     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
1164     RKAIQ_IMGPROC_CHECK_RET(ret, "getMEnhanceStrth failed in get attrib!");
1165     *level = attr_v11.Info.MEnhanceStrth;
1166 #endif
1167 #if RKAIQ_HAVE_DEHAZE_V12
1168     adehaze_sw_v12_t attr_v12;
1169     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
1170     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
1171     RKAIQ_IMGPROC_CHECK_RET(ret, "getMEnhanceStrth failed in get attrib!");
1172     *level = attr_v12.Info.MEnhanceStrth;
1173 #endif
1174     IMGPROC_FUNC_EXIT
1175     return ret;
1176 }
1177 /*
1178 *****************************
1179 *
1180 * Desc: set/get manual enhance chrome strength
1181 *     this function is active for dehaze is manual mode
1182 * Argument:
1183 *   level: [0, 100]
1184 *
1185 *****************************
1186 */
rk_aiq_uapi2_setMEnhanceChromeStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int level)1187 XCamReturn rk_aiq_uapi2_setMEnhanceChromeStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level) {
1188     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1189     IMGPROC_FUNC_ENTER
1190     if (ctx == NULL) {
1191         ret = XCAM_RETURN_ERROR_PARAM;
1192         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1193     }
1194     if (level > 100) {
1195         ret = XCAM_RETURN_ERROR_PARAM;
1196         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, level range is [0,100]!");
1197     }
1198 #if RKAIQ_HAVE_DEHAZE_V10
1199 #if 0
1200     adehaze_sw_v10_info_t attr_v10_info;
1201     memset(&attr_v10_info, 0, sizeof(adehaze_sw_v10_info_t));
1202     ret = rk_aiq_user_api2_adehaze_v10_getSwAttribInfo(ctx, &attr_v10_info);
1203     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzInfo failed!");
1204     attr_v10_info.CtrlInfo.MEnhanceChromeStrth = level;
1205     ret = rk_aiq_user_api2_adehaze_v10_setSwAttribInfo(ctx, &attr_v10_info);
1206     RKAIQ_IMGPROC_CHECK_RET(ret, "setMDhzInfo failed!");
1207 
1208     adehaze_sw_v10_t attr_v10;
1209     memset(&attr_v10, 0, sizeof(adehaze_sw_v10_t));
1210     ret = rk_aiq_user_api2_adehaze_v10_getSwAttrib(ctx, &attr_v10);
1211     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
1212 
1213     attr_v10.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
1214     attr_v10.sync.done                                  = false;
1215     attr_v10.mode                                       = DEHAZE_API_AUTO;
1216     attr_v10.stAuto.DehazeTuningPara.Enable             = true;
1217     attr_v10.stAuto.DehazeTuningPara.dehaze_setting.en  = false;
1218     attr_v10.stAuto.DehazeTuningPara.enhance_setting.en = true;
1219     attr_v10.stAuto.DehazeTuningPara.cfg_alpha          = NORMALIZE_MAX;
1220     attr_v10.stAuto.DehazeTuningPara.ByPassThr          = NORMALIZE_MIN;
1221     float level_diff = (float)(level - ENHANCE_DEFAULT_LEVEL);
1222     for (int i = 0; i < attr_v10.stAuto.DehazeTuningPara.enhance_setting.EnhanceData.CtrlData_len;
1223             i++) {
1224         // enhance_chroma
1225         attr_v10.stAuto.DehazeTuningPara.enhance_setting.EnhanceData[i].enhance_chroma +=
1226             level_diff * ENHANCE_VALUE_DEFAULT_STEP;
1227         attr_v10.stAuto.DehazeTuningPara.enhance_setting.EnhanceData[i].enhance_chroma =
1228             LIMIT_VALUE(
1229                 attr_v10.stAuto.DehazeTuningPara.enhance_setting.EnhanceData[i].enhance_chroma,
1230                 16.0, 1.0);
1231     }
1232     ret = rk_aiq_user_api2_adehaze_v10_setSwAttrib(ctx, &attr_v10);
1233     RKAIQ_IMGPROC_CHECK_RET(ret, "setMEnhanceStrth failed!");
1234 #endif
1235 #endif
1236 #if RKAIQ_HAVE_DEHAZE_V11 || RKAIQ_HAVE_DEHAZE_V11_DUO
1237     adehaze_sw_v11_t attr_v11;
1238     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
1239     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
1240     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
1241     if (attr_v11.mode == DEHAZE_API_AUTO) {
1242         if (!attr_v11.stAuto.DehazeTuningPara.Enable ||
1243             !attr_v11.stAuto.DehazeTuningPara.enhance_setting.en) {
1244             LOGW_ADEHAZE("%s: Enhance is OFF! level is invalid\n", __FUNCTION__);
1245         }
1246     } else if (attr_v11.mode == DEHAZE_API_MANUAL) {
1247         if (!attr_v11.stManual.Enable || !attr_v11.stManual.enhance_setting.en) {
1248             LOGW_ADEHAZE("%s: Enhance is OFF! level is invalid\n", __FUNCTION__);
1249         }
1250     }
1251 
1252     attr_v11.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
1253     attr_v11.sync.done                                  = false;
1254     attr_v11.Info.updateMEnhanceChromeStrth             = true;
1255     attr_v11.Info.MEnhanceChromeStrth                   = level;
1256     ret = rk_aiq_user_api2_adehaze_v11_setSwAttrib(ctx, &attr_v11);
1257     RKAIQ_IMGPROC_CHECK_RET(ret, "setMEnhanceStrth failed!");
1258 #endif
1259 #if RKAIQ_HAVE_DEHAZE_V12
1260     adehaze_sw_v12_t attr_v12;
1261     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
1262     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
1263     RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed!");
1264     if (attr_v12.mode == DEHAZE_API_AUTO) {
1265         if (!attr_v12.stAuto.DehazeTuningPara.Enable ||
1266             !attr_v12.stAuto.DehazeTuningPara.enhance_setting.en) {
1267             LOGW_ADEHAZE("%s: Enhance is OFF! level is invalid\n", __FUNCTION__);
1268         }
1269     } else if (attr_v12.mode == DEHAZE_API_MANUAL) {
1270         if (!attr_v12.stManual.Enable || !attr_v12.stManual.enhance_setting.en) {
1271             LOGW_ADEHAZE("%s: Enhance is OFF! level is invalid\n", __FUNCTION__);
1272         }
1273     }
1274 
1275     attr_v12.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
1276     attr_v12.sync.done                                  = false;
1277     attr_v12.Info.updateMEnhanceChromeStrth             = true;
1278     attr_v12.Info.MEnhanceChromeStrth                   = level;
1279     ret = rk_aiq_user_api2_adehaze_v12_setSwAttrib(ctx, &attr_v12);
1280     RKAIQ_IMGPROC_CHECK_RET(ret, "setMEnhanceStrth failed!");
1281 #endif
1282 
1283     IMGPROC_FUNC_EXIT
1284 
1285     return ret;
1286 }
1287 
rk_aiq_uapi2_getMEnhanceChromeStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)1288 XCamReturn rk_aiq_uapi2_getMEnhanceChromeStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int* level) {
1289     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1290     IMGPROC_FUNC_ENTER
1291     if (ctx == NULL) {
1292         ret = XCAM_RETURN_ERROR_PARAM;
1293         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1294     }
1295 #if RKAIQ_HAVE_DEHAZE_V10
1296     adehaze_sw_v10_info_t attr_v10_info;
1297     memset(&attr_v10_info, 0, sizeof(adehaze_sw_v10_info_t));
1298     ret = rk_aiq_user_api2_adehaze_v10_getSwAttribInfo(ctx, &attr_v10_info);
1299     RKAIQ_IMGPROC_CHECK_RET(ret, "getMEnhanceChromeStrth failed in get attrib!");
1300     *level = attr_v10_info.CtrlInfo.MEnhanceChromeStrth;
1301 #endif
1302 #if RKAIQ_HAVE_DEHAZE_V11
1303     adehaze_sw_v11_t attr_v11;
1304     memset(&attr_v11, 0, sizeof(adehaze_sw_v11_t));
1305     ret = rk_aiq_user_api2_adehaze_v11_getSwAttrib(ctx, &attr_v11);
1306     RKAIQ_IMGPROC_CHECK_RET(ret, "getMEnhanceChromeStrth failed in get attrib!");
1307     *level = attr_v11.Info.MEnhanceChromeStrth;
1308 #endif
1309 #if RKAIQ_HAVE_DEHAZE_V12
1310     adehaze_sw_v12_t attr_v12;
1311     memset(&attr_v12, 0, sizeof(adehaze_sw_v12_t));
1312     ret = rk_aiq_user_api2_adehaze_v12_getSwAttrib(ctx, &attr_v12);
1313     RKAIQ_IMGPROC_CHECK_RET(ret, "getMEnhanceChromeStrth failed in get attrib!");
1314     *level = attr_v12.Info.MEnhanceChromeStrth;
1315 #endif
1316     IMGPROC_FUNC_EXIT
1317     return ret;
1318 }
1319 
1320 /*
1321 *****************************
1322 *
1323 * Desc: set/get manual drc Local TMO
1324 *     this function is active for DRC is Auto mode
1325 *     use in RK356x, RV1106
1326 * Argument:
1327 *   LocalWeit: [0, 1]
1328 *   GlobalContrast: [0, 1]
1329 *   LoLitContrast: [0, 1]
1330 *   only valid in RK356x
1331 *****************************
1332 */
rk_aiq_uapi2_setDrcLocalTMO(const rk_aiq_sys_ctx_t * ctx,float LocalWeit,float GlobalContrast,float LoLitContrast)1333 XCamReturn rk_aiq_uapi2_setDrcLocalTMO(const rk_aiq_sys_ctx_t* ctx, float LocalWeit, float GlobalContrast, float LoLitContrast)
1334 {
1335     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1336     IMGPROC_FUNC_ENTER
1337 
1338     if (ctx == NULL) {
1339         ret = XCAM_RETURN_ERROR_PARAM;
1340         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1341     }
1342     if (LocalWeit < 0 || LocalWeit > 1) {
1343         ret = XCAM_RETURN_ERROR_PARAM;
1344         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LocalWeit range is [0,1]!");
1345     }
1346     if (GlobalContrast < 0 || GlobalContrast > 1) {
1347         ret = XCAM_RETURN_ERROR_PARAM;
1348         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, GlobalContrast range is [0,1]!");
1349     }
1350     if (LoLitContrast < 0 || LoLitContrast > 1) {
1351         ret = XCAM_RETURN_ERROR_PARAM;
1352         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LoLitContrast range is [0,1]!");
1353     }
1354 
1355 #if RKAIQ_HAVE_DRC_V10
1356     drcAttrV10_t attr_v10;
1357     memset(&attr_v10, 0, sizeof(drcAttrV10_t));
1358     ret = rk_aiq_user_api2_adrc_v10_GetAttrib(ctx, &attr_v10);
1359     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcLocalTMO failed in get attrib!");
1360     attr_v10.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1361     attr_v10.sync.done      = false;
1362 
1363     if (attr_v10.opMode == DRC_OPMODE_AUTO) {
1364         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++) {
1365             attr_v10.stAuto.DrcTuningPara.LocalTMOSetting.LocalTMOData.LocalWeit[i] = LocalWeit;
1366             attr_v10.stAuto.DrcTuningPara.LocalTMOSetting.LocalTMOData.GlobalContrast[i] =
1367                 GlobalContrast;
1368             attr_v10.stAuto.DrcTuningPara.LocalTMOSetting.LocalTMOData.LoLitContrast[i] =
1369                 LoLitContrast;
1370         }
1371     } else if (attr_v10.opMode == DRC_OPMODE_MANUAL) {
1372         attr_v10.stManual.LocalTMOSetting.LocalTMOData.LocalWeit      = LocalWeit;
1373         attr_v10.stManual.LocalTMOSetting.LocalTMOData.GlobalContrast = GlobalContrast;
1374         attr_v10.stManual.LocalTMOSetting.LocalTMOData.LoLitContrast  = LoLitContrast;
1375     }
1376     ret = rk_aiq_user_api2_adrc_v10_SetAttrib(ctx, &attr_v10);
1377     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcLocalTMO failed!");
1378 #endif
1379 #if RKAIQ_HAVE_DRC_V11
1380     ret = XCAM_RETURN_ERROR_PARAM;
1381     RKAIQ_IMGPROC_CHECK_RET(ret,
1382                             "RK3588 do not support rk_aiq_uapi2_setDrcLocalTMO! Please use "
1383                             "rk_aiq_uapi2_setDrcLocalData");
1384 #endif
1385 #if RKAIQ_HAVE_DRC_V12
1386     ret = XCAM_RETURN_ERROR_PARAM;
1387     RKAIQ_IMGPROC_CHECK_RET(ret,
1388                             "RV1106 do not support rk_aiq_uapi2_setDrcLocalTMO! Please use "
1389                             "rk_aiq_uapi2_setDrcLocalData");
1390 #endif
1391 #if RKAIQ_HAVE_DRC_V12_LITE
1392     ret = XCAM_RETURN_ERROR_PARAM;
1393     RKAIQ_IMGPROC_CHECK_RET(ret,
1394                             "RK3562 do not support rk_aiq_uapi2_setDrcLocalTMO! Please use "
1395                             "rk_aiq_uapi2_setDrcLocalData");
1396 #endif
1397 
1398     IMGPROC_FUNC_EXIT
1399     return ret;
1400 }
1401 
rk_aiq_uapi2_getDrcLocalTMO(const rk_aiq_sys_ctx_t * ctx,float * LocalWeit,float * GlobalContrast,float * LoLitContrast)1402 XCamReturn rk_aiq_uapi2_getDrcLocalTMO(const rk_aiq_sys_ctx_t* ctx, float * LocalWeit, float * GlobalContrast, float * LoLitContrast)
1403 {
1404     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1405 
1406     IMGPROC_FUNC_ENTER
1407     if (ctx == NULL) {
1408         ret = XCAM_RETURN_ERROR_PARAM;
1409         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1410     }
1411 
1412 #if RKAIQ_HAVE_DRC_V10
1413     drcAttrV10_t attr_v10;
1414     memset(&attr_v10, 0, sizeof(drcAttrV10_t));
1415     ret = rk_aiq_user_api2_adrc_v10_GetAttrib(ctx, &attr_v10);
1416     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcLocalTMO failed in get attrib!");
1417     *LocalWeit      = attr_v10.Info.ValidParams.LocalTMOSetting.LocalTMOData.LocalWeit;
1418     *GlobalContrast = attr_v10.Info.ValidParams.LocalTMOSetting.LocalTMOData.GlobalContrast;
1419     *LoLitContrast  = attr_v10.Info.ValidParams.LocalTMOSetting.LocalTMOData.LoLitContrast;
1420 #endif
1421 #if RKAIQ_HAVE_DRC_V11
1422     ret = XCAM_RETURN_ERROR_PARAM;
1423     RKAIQ_IMGPROC_CHECK_RET(ret,
1424                             "RK3588 do not support rk_aiq_uapi2_getDrcLocalTMO! Please use "
1425                             "rk_aiq_uapi2_getDrcLocalData");
1426 #endif
1427 #if RKAIQ_HAVE_DRC_V12
1428     ret = XCAM_RETURN_ERROR_PARAM;
1429     RKAIQ_IMGPROC_CHECK_RET(ret,
1430                             "RV1106 do not support rk_aiq_uapi2_getDrcLocalTMO! Please use "
1431                             "rk_aiq_uapi2_getDrcLocalData");
1432 #endif
1433 #if RKAIQ_HAVE_DRC_V12_LITE
1434     ret = XCAM_RETURN_ERROR_PARAM;
1435     RKAIQ_IMGPROC_CHECK_RET(ret,
1436                             "RK3562 do not support rk_aiq_uapi2_getDrcLocalTMO! Please use "
1437                             "rk_aiq_uapi2_getDrcLocalData");
1438 #endif
1439 
1440     IMGPROC_FUNC_EXIT
1441     return ret;
1442 }
1443 /*
1444 *****************************
1445 *
1446 * Desc: set/get manual drc Local Data
1447 *     this function is active for DRC is Auto mode
1448 *     use in RK356x, RV1106
1449 * Argument:
1450 *   LocalWeit: [0, 1]
1451 *   GlobalContrast: [0, 1]
1452 *   LoLitContrast: [0, 1]
1453 *   LocalAutoEnable: [0, 1]
1454 *   LocalAutoWeit: [0, 1]
1455 *
1456 *****************************
1457 */
rk_aiq_uapi2_setDrcLocalData(const rk_aiq_sys_ctx_t * ctx,float LocalWeit,float GlobalContrast,float LoLitContrast,int LocalAutoEnable,float LocalAutoWeit)1458 XCamReturn rk_aiq_uapi2_setDrcLocalData(const rk_aiq_sys_ctx_t* ctx, float LocalWeit, float GlobalContrast,
1459                                         float LoLitContrast, int LocalAutoEnable, float LocalAutoWeit)
1460 {
1461     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1462     IMGPROC_FUNC_ENTER
1463 
1464     if (ctx == NULL) {
1465         ret = XCAM_RETURN_ERROR_PARAM;
1466         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1467     }
1468     if (LocalWeit < 0 || LocalWeit > 1) {
1469         ret = XCAM_RETURN_ERROR_PARAM;
1470         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LocalWeit range is [0,1]!");
1471     }
1472     if (GlobalContrast < 0 || GlobalContrast > 1) {
1473         ret = XCAM_RETURN_ERROR_PARAM;
1474         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, GlobalContrast range is [0,1]!");
1475     }
1476     if (LoLitContrast < 0 || LoLitContrast > 1) {
1477         ret = XCAM_RETURN_ERROR_PARAM;
1478         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LoLitContrast range is [0,1]!");
1479     }
1480     if (LocalAutoEnable < 0 || LocalAutoEnable > 1) {
1481         ret = XCAM_RETURN_ERROR_PARAM;
1482         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LocalAutoEnable range is [0,1]!");
1483     }
1484     if (LocalAutoWeit < 0 || LocalAutoWeit > 1) {
1485         ret = XCAM_RETURN_ERROR_PARAM;
1486         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LocalAutoWeit range is [0,1]!");
1487     }
1488 #if RKAIQ_HAVE_DRC_V10
1489     ret = XCAM_RETURN_ERROR_PARAM;
1490     RKAIQ_IMGPROC_CHECK_RET(ret,
1491                             "RK356x do not support rk_aiq_uapi2_setDrcLocalData! Please use "
1492                             "rk_aiq_uapi2_setDrcLocalTMO");
1493 #endif
1494 #if RKAIQ_HAVE_DRC_V11
1495     drcAttrV11_t attr_v11;
1496     memset(&attr_v11, 0, sizeof(drcAttrV11_t));
1497     ret = rk_aiq_user_api2_adrc_v11_GetAttrib(ctx, &attr_v11);
1498     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcLocalData failed!");
1499     attr_v11.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1500     attr_v11.sync.done      = false;
1501 
1502     if (attr_v11.opMode == DRC_OPMODE_AUTO) {
1503         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++) {
1504             attr_v11.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalWeit[i]      = LocalWeit;
1505             attr_v11.stAuto.DrcTuningPara.LocalSetting.LocalData.GlobalContrast[i] = GlobalContrast;
1506             attr_v11.stAuto.DrcTuningPara.LocalSetting.LocalData.LoLitContrast[i]  = LoLitContrast;
1507             attr_v11.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalAutoEnable[i] =
1508                 LocalAutoEnable;
1509             attr_v11.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalAutoWeit[i] = LocalAutoWeit;
1510         }
1511     } else if (attr_v11.opMode == DRC_OPMODE_MANUAL) {
1512         attr_v11.stManual.LocalSetting.LocalData.LocalWeit       = LocalWeit;
1513         attr_v11.stManual.LocalSetting.LocalData.GlobalContrast  = GlobalContrast;
1514         attr_v11.stManual.LocalSetting.LocalData.LoLitContrast   = LoLitContrast;
1515         attr_v11.stManual.LocalSetting.LocalData.LocalAutoEnable = LocalAutoEnable;
1516         attr_v11.stManual.LocalSetting.LocalData.LocalAutoWeit   = LocalAutoWeit;
1517     }
1518     ret = rk_aiq_user_api2_adrc_v11_SetAttrib(ctx, &attr_v11);
1519     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
1520 #endif
1521 #if RKAIQ_HAVE_DRC_V12
1522     drcAttrV12_t attr_v12;
1523     memset(&attr_v12, 0, sizeof(drcAttrV12_t));
1524     ret = rk_aiq_user_api2_adrc_v12_GetAttrib(ctx, &attr_v12);
1525     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcLocalData failed!");
1526     attr_v12.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1527     attr_v12.sync.done      = false;
1528     if (attr_v12.opMode == DRC_OPMODE_AUTO) {
1529         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++) {
1530             attr_v12.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalWeit[i]      = LocalWeit;
1531             attr_v12.stAuto.DrcTuningPara.LocalSetting.LocalData.GlobalContrast[i] = GlobalContrast;
1532             attr_v12.stAuto.DrcTuningPara.LocalSetting.LocalData.LoLitContrast[i]  = LoLitContrast;
1533             attr_v12.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalAutoEnable[i] =
1534                 LocalAutoEnable;
1535             attr_v12.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalAutoWeit[i] = LocalAutoWeit;
1536         }
1537     } else if (attr_v12.opMode == DRC_OPMODE_MANUAL) {
1538         attr_v12.stManual.LocalSetting.LocalData.LocalWeit       = LocalWeit;
1539         attr_v12.stManual.LocalSetting.LocalData.GlobalContrast  = GlobalContrast;
1540         attr_v12.stManual.LocalSetting.LocalData.LoLitContrast   = LoLitContrast;
1541         attr_v12.stManual.LocalSetting.LocalData.LocalAutoEnable = LocalAutoEnable;
1542         attr_v12.stManual.LocalSetting.LocalData.LocalAutoWeit   = LocalAutoWeit;
1543     }
1544     ret = rk_aiq_user_api2_adrc_v12_SetAttrib(ctx, &attr_v12);
1545     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
1546 #endif
1547 #if RKAIQ_HAVE_DRC_V12_LITE
1548     drcAttrV12Lite_t attr_v12_lite;
1549     memset(&attr_v12_lite, 0, sizeof(drcAttrV12Lite_t));
1550     ret = rk_aiq_user_api2_adrc_v12_lite_GetAttrib(ctx, &attr_v12_lite);
1551     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcLocalData failed!");
1552     attr_v12_lite.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1553     attr_v12_lite.sync.done      = false;
1554     if (attr_v12_lite.opMode == DRC_OPMODE_AUTO) {
1555         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++) {
1556             attr_v12_lite.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalWeit[i] = LocalWeit;
1557             attr_v12_lite.stAuto.DrcTuningPara.LocalSetting.LocalData.GlobalContrast[i] =
1558                 GlobalContrast;
1559             attr_v12_lite.stAuto.DrcTuningPara.LocalSetting.LocalData.LoLitContrast[i] =
1560                 LoLitContrast;
1561             attr_v12_lite.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalAutoEnable[i] =
1562                 LocalAutoEnable;
1563             attr_v12_lite.stAuto.DrcTuningPara.LocalSetting.LocalData.LocalAutoWeit[i] =
1564                 LocalAutoWeit;
1565         }
1566     } else if (attr_v12_lite.opMode == DRC_OPMODE_MANUAL) {
1567         attr_v12_lite.stManual.LocalSetting.LocalData.LocalWeit       = LocalWeit;
1568         attr_v12_lite.stManual.LocalSetting.LocalData.GlobalContrast  = GlobalContrast;
1569         attr_v12_lite.stManual.LocalSetting.LocalData.LoLitContrast   = LoLitContrast;
1570         attr_v12_lite.stManual.LocalSetting.LocalData.LocalAutoEnable = LocalAutoEnable;
1571         attr_v12_lite.stManual.LocalSetting.LocalData.LocalAutoWeit   = LocalAutoWeit;
1572     }
1573     ret = rk_aiq_user_api2_adrc_v12_lite_SetAttrib(ctx, &attr_v12_lite);
1574     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
1575 #endif
1576 
1577     IMGPROC_FUNC_EXIT
1578     return ret;
1579 }
1580 
rk_aiq_uapi2_getDrcLocalData(const rk_aiq_sys_ctx_t * ctx,float * LocalWeit,float * GlobalContrast,float * LoLitContrast,int * LocalAutoEnable,float * LocalAutoWeit)1581 XCamReturn rk_aiq_uapi2_getDrcLocalData(const rk_aiq_sys_ctx_t* ctx, float * LocalWeit, float * GlobalContrast,
1582                                         float * LoLitContrast, int* LocalAutoEnable, float* LocalAutoWeit)
1583 {
1584     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1585     IMGPROC_FUNC_ENTER
1586     if (ctx == NULL) {
1587         ret = XCAM_RETURN_ERROR_PARAM;
1588         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1589     }
1590 
1591 #if RKAIQ_HAVE_DRC_V10
1592     ret = XCAM_RETURN_ERROR_PARAM;
1593     RKAIQ_IMGPROC_CHECK_RET(ret,
1594                             "RK356x do not support rk_aiq_uapi2_getDrcLocalData! Please use "
1595                             "rk_aiq_uapi2_getDrcLocalTMO");
1596 #endif
1597 #if RKAIQ_HAVE_DRC_V11
1598     drcAttrV11_t attr_v11;
1599     memset(&attr_v11, 0, sizeof(drcAttrV11_t));
1600     ret = rk_aiq_user_api2_adrc_v11_GetAttrib(ctx, &attr_v11);
1601     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcLocalData failed in get attrib!");
1602     *LocalWeit       = attr_v11.Info.ValidParams.LocalSetting.LocalData.LocalWeit;
1603     *GlobalContrast  = attr_v11.Info.ValidParams.LocalSetting.LocalData.GlobalContrast;
1604     *LoLitContrast   = attr_v11.Info.ValidParams.LocalSetting.LocalData.LoLitContrast;
1605     *LocalAutoEnable = attr_v11.Info.ValidParams.LocalSetting.LocalData.LocalAutoEnable;
1606     *LocalAutoWeit   = attr_v11.Info.ValidParams.LocalSetting.LocalData.LocalAutoWeit;
1607 #endif
1608 #if RKAIQ_HAVE_DRC_V12
1609     drcAttrV12_t attr_v12;
1610     memset(&attr_v12, 0, sizeof(drcAttrV12_t));
1611     ret = rk_aiq_user_api2_adrc_v12_GetAttrib(ctx, &attr_v12);
1612     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcLocalData failed in get attrib!");
1613     *LocalWeit       = attr_v12.Info.ValidParams.LocalSetting.LocalData.LocalWeit;
1614     *GlobalContrast  = attr_v12.Info.ValidParams.LocalSetting.LocalData.GlobalContrast;
1615     *LoLitContrast   = attr_v12.Info.ValidParams.LocalSetting.LocalData.LoLitContrast;
1616     *LocalAutoEnable = attr_v12.Info.ValidParams.LocalSetting.LocalData.LocalAutoEnable;
1617     *LocalAutoWeit   = attr_v12.Info.ValidParams.LocalSetting.LocalData.LocalAutoWeit;
1618 #endif
1619 #if RKAIQ_HAVE_DRC_V12_LITE
1620     drcAttrV12Lite_t attr_v12_lite;
1621     memset(&attr_v12_lite, 0, sizeof(drcAttrV12Lite_t));
1622     ret = rk_aiq_user_api2_adrc_v12_lite_GetAttrib(ctx, &attr_v12_lite);
1623     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcLocalData failed in get attrib!");
1624     *LocalWeit       = attr_v12_lite.Info.ValidParams.LocalSetting.LocalData.LocalWeit;
1625     *GlobalContrast  = attr_v12_lite.Info.ValidParams.LocalSetting.LocalData.GlobalContrast;
1626     *LoLitContrast   = attr_v12_lite.Info.ValidParams.LocalSetting.LocalData.LoLitContrast;
1627     *LocalAutoEnable = attr_v12_lite.Info.ValidParams.LocalSetting.LocalData.LocalAutoEnable;
1628     *LocalAutoWeit   = attr_v12_lite.Info.ValidParams.LocalSetting.LocalData.LocalAutoWeit;
1629 #endif
1630 
1631     IMGPROC_FUNC_EXIT
1632     return ret;
1633 }
1634 
1635 /*
1636 *****************************
1637 *
1638 * Desc: set/get manual drc HiLit
1639 *     this function is active for DRC is Auto mode
1640 *     use in RK356x, RV1106
1641 * Argument:
1642 *   Strength: [0, 1]
1643 *
1644 *****************************
1645 */
rk_aiq_uapi2_setDrcHiLit(const rk_aiq_sys_ctx_t * ctx,float Strength)1646 XCamReturn rk_aiq_uapi2_setDrcHiLit(const rk_aiq_sys_ctx_t* ctx, float Strength)
1647 {
1648     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1649     IMGPROC_FUNC_ENTER
1650     if (ctx == NULL) {
1651         ret = XCAM_RETURN_ERROR_PARAM;
1652         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1653     }
1654     if (Strength < 0 || Strength > 1) {
1655         ret = XCAM_RETURN_ERROR_PARAM;
1656         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, Strength range is [0,1]!");
1657     }
1658 #if RKAIQ_HAVE_DRC_V10
1659     drcAttrV10_t attr_v10;
1660     memset(&attr_v10, 0, sizeof(drcAttrV10_t));
1661     ret = rk_aiq_user_api2_adrc_v10_GetAttrib(ctx, &attr_v10);
1662     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcHiLit failed!");
1663     attr_v10.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1664     attr_v10.sync.done      = false;
1665 
1666     if (attr_v10.opMode == DRC_OPMODE_AUTO) {
1667         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++)
1668             attr_v10.stAuto.DrcTuningPara.HiLight.Strength[i] = Strength;
1669     } else if (attr_v10.opMode == DRC_OPMODE_MANUAL) {
1670         attr_v10.stManual.HiLight.Strength = Strength;
1671     }
1672     ret = rk_aiq_user_api2_adrc_v10_SetAttrib(ctx, &attr_v10);
1673     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcHiLit failed!");
1674 #endif
1675 #if RKAIQ_HAVE_DRC_V11
1676     drcAttrV11_t attr_v11;
1677     memset(&attr_v11, 0, sizeof(drcAttrV11_t));
1678     ret = rk_aiq_user_api2_adrc_v11_GetAttrib(ctx, &attr_v11);
1679     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcHiLit failed!");
1680     attr_v11.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1681     attr_v11.sync.done      = false;
1682 
1683     if (attr_v11.opMode == DRC_OPMODE_AUTO) {
1684         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++)
1685             attr_v11.stAuto.DrcTuningPara.HiLight.Strength[i] = Strength;
1686     } else if (attr_v11.opMode == DRC_OPMODE_MANUAL) {
1687         attr_v11.stManual.HiLight.Strength = Strength;
1688     }
1689     ret = rk_aiq_user_api2_adrc_v11_SetAttrib(ctx, &attr_v11);
1690     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcHiLit failed!");
1691 #endif
1692 #if RKAIQ_HAVE_DRC_V12
1693     drcAttrV12_t attr_v12;
1694     memset(&attr_v12, 0, sizeof(drcAttrV12_t));
1695     ret = rk_aiq_user_api2_adrc_v12_GetAttrib(ctx, &attr_v12);
1696     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcHiLit failed!");
1697     attr_v12.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1698     attr_v12.sync.done      = false;
1699 
1700     if (attr_v12.opMode == DRC_OPMODE_AUTO) {
1701         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++)
1702             attr_v12.stAuto.DrcTuningPara.HiLight.HiLightData.Strength[i] = Strength;
1703     } else if (attr_v12.opMode == DRC_OPMODE_MANUAL) {
1704         attr_v12.stManual.HiLight.HiLightData.Strength = Strength;
1705     }
1706     ret = rk_aiq_user_api2_adrc_v12_SetAttrib(ctx, &attr_v12);
1707     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcHiLit failed!");
1708 #endif
1709 #if RKAIQ_HAVE_DRC_V12_LITE
1710     drcAttrV12Lite_t attr_v12_lite;
1711     memset(&attr_v12_lite, 0, sizeof(drcAttrV12Lite_t));
1712     ret = rk_aiq_user_api2_adrc_v12_lite_GetAttrib(ctx, &attr_v12_lite);
1713     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcHiLit failed!");
1714     attr_v12_lite.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1715     attr_v12_lite.sync.done      = false;
1716 
1717     if (attr_v12_lite.opMode == DRC_OPMODE_AUTO) {
1718         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++)
1719             attr_v12_lite.stAuto.DrcTuningPara.HiLight.HiLightData.Strength[i] = Strength;
1720     } else if (attr_v12_lite.opMode == DRC_OPMODE_MANUAL) {
1721         attr_v12_lite.stManual.HiLight.HiLightData.Strength = Strength;
1722     }
1723     ret = rk_aiq_user_api2_adrc_v12_lite_SetAttrib(ctx, &attr_v12_lite);
1724     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcHiLit failed!");
1725 #endif
1726 
1727     IMGPROC_FUNC_EXIT
1728     return ret;
1729 }
1730 
rk_aiq_uapi2_getDrcHiLit(const rk_aiq_sys_ctx_t * ctx,float * Strength)1731 XCamReturn rk_aiq_uapi2_getDrcHiLit(const rk_aiq_sys_ctx_t* ctx, float * Strength)
1732 {
1733     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1734     IMGPROC_FUNC_ENTER
1735     if (ctx == NULL) {
1736         ret = XCAM_RETURN_ERROR_PARAM;
1737         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1738     }
1739 #if RKAIQ_HAVE_DRC_V10
1740     drcAttrV10_t attr_v10;
1741     memset(&attr_v10, 0, sizeof(drcAttrV10_t));
1742     ret = rk_aiq_user_api2_adrc_v10_GetAttrib(ctx, &attr_v10);
1743     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcHiLit failed in get attrib!");
1744     *Strength = attr_v10.Info.ValidParams.HiLight.Strength;
1745 #endif
1746 #if RKAIQ_HAVE_DRC_V11
1747     drcAttrV11_t attr_v11;
1748     memset(&attr_v11, 0, sizeof(drcAttrV11_t));
1749     ret = rk_aiq_user_api2_adrc_v11_GetAttrib(ctx, &attr_v11);
1750     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcHiLit failed in get attrib!");
1751     *Strength = attr_v11.Info.ValidParams.HiLight.Strength;
1752 #endif
1753 #if RKAIQ_HAVE_DRC_V12
1754     drcAttrV12_t attr_v12;
1755     memset(&attr_v12, 0, sizeof(drcAttrV12_t));
1756     ret = rk_aiq_user_api2_adrc_v12_GetAttrib(ctx, &attr_v12);
1757     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcHiLit failed in get attrib!");
1758     *Strength = attr_v12.Info.ValidParams.HiLight.HiLightData.Strength;
1759 #endif
1760 #if RKAIQ_HAVE_DRC_V12_LITE
1761     drcAttrV12Lite_t attr_v12_lite;
1762     memset(&attr_v12_lite, 0, sizeof(drcAttrV12Lite_t));
1763     ret = rk_aiq_user_api2_adrc_v12_lite_GetAttrib(ctx, &attr_v12_lite);
1764     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcHiLit failed in get attrib!");
1765     *Strength = attr_v12_lite.Info.ValidParams.HiLight.HiLightData.Strength;
1766 #endif
1767 
1768     IMGPROC_FUNC_EXIT
1769     return ret;
1770 }
1771 
1772 /*
1773 *****************************
1774 *
1775 * Desc: set/get manual drc Gain
1776 *     this function is active for DRC is Auto mode
1777 *     use in RK356x, RV1106
1778 * Argument:
1779 *   Gain: [1, 8]
1780 *   Alpha: [0, 1]
1781 *   Clip: [0, 64]
1782 *
1783 *****************************
1784 */
rk_aiq_uapi2_setDrcGain(const rk_aiq_sys_ctx_t * ctx,float Gain,float Alpha,float Clip)1785 XCamReturn rk_aiq_uapi2_setDrcGain(const rk_aiq_sys_ctx_t* ctx, float Gain, float Alpha, float Clip)
1786 {
1787     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1788 
1789     IMGPROC_FUNC_ENTER
1790 
1791     if (ctx == NULL) {
1792         ret = XCAM_RETURN_ERROR_PARAM;
1793         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1794     }
1795     if (Gain < 1 || Gain > 8) {
1796         ret = XCAM_RETURN_ERROR_PARAM;
1797         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, Gain range is [1,8]!");
1798     }
1799     if (Alpha < 0 || Alpha > 1) {
1800         ret = XCAM_RETURN_ERROR_PARAM;
1801         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, Alpha range is [0,1]!");
1802     }
1803     if (Clip < 0 || Clip > 64) {
1804         ret = XCAM_RETURN_ERROR_PARAM;
1805         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, Clip range is [0,64]!");
1806     }
1807 #if RKAIQ_HAVE_DRC_V10
1808     drcAttrV10_t attr_v10;
1809     memset(&attr_v10, 0, sizeof(drcAttrV10_t));
1810     ret = rk_aiq_user_api2_adrc_v10_GetAttrib(ctx, &attr_v10);
1811     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcGain failed!");
1812     attr_v10.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1813     attr_v10.sync.done      = false;
1814 
1815     if (attr_v10.opMode == DRC_OPMODE_AUTO) {
1816         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++) {
1817             attr_v10.stAuto.DrcTuningPara.DrcGain.DrcGain[i] = Gain;
1818             attr_v10.stAuto.DrcTuningPara.DrcGain.Alpha[i]   = Alpha;
1819             attr_v10.stAuto.DrcTuningPara.DrcGain.Clip[i]    = Clip;
1820         }
1821     } else if (attr_v10.opMode == DRC_OPMODE_MANUAL) {
1822         attr_v10.stManual.DrcGain.DrcGain = Gain;
1823         attr_v10.stManual.DrcGain.Alpha   = Alpha;
1824         attr_v10.stManual.DrcGain.Clip    = Clip;
1825     }
1826     ret = rk_aiq_user_api2_adrc_v10_SetAttrib(ctx, &attr_v10);
1827     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
1828 #endif
1829 #if RKAIQ_HAVE_DRC_V11
1830     drcAttrV11_t attr_v11;
1831     memset(&attr_v11, 0, sizeof(drcAttrV11_t));
1832     ret = rk_aiq_user_api2_adrc_v11_GetAttrib(ctx, &attr_v11);
1833     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcGain failed!");
1834     attr_v11.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1835     attr_v11.sync.done      = false;
1836 
1837     if (attr_v11.opMode == DRC_OPMODE_AUTO) {
1838         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++) {
1839             attr_v11.stAuto.DrcTuningPara.DrcGain.DrcGain[i] = Gain;
1840             attr_v11.stAuto.DrcTuningPara.DrcGain.Alpha[i]   = Alpha;
1841             attr_v11.stAuto.DrcTuningPara.DrcGain.Clip[i]    = Clip;
1842         }
1843     } else if (attr_v11.opMode == DRC_OPMODE_MANUAL) {
1844         attr_v11.stManual.DrcGain.DrcGain = Gain;
1845         attr_v11.stManual.DrcGain.Alpha   = Alpha;
1846         attr_v11.stManual.DrcGain.Clip    = Clip;
1847     }
1848     ret = rk_aiq_user_api2_adrc_v11_SetAttrib(ctx, &attr_v11);
1849     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
1850 #endif
1851 #if RKAIQ_HAVE_DRC_V12
1852     drcAttrV12_t attr_v12;
1853     memset(&attr_v12, 0, sizeof(drcAttrV12_t));
1854     ret = rk_aiq_user_api2_adrc_v12_GetAttrib(ctx, &attr_v12);
1855     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcGain failed!");
1856     attr_v12.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1857     attr_v12.sync.done      = false;
1858 
1859     if (attr_v12.opMode == DRC_OPMODE_AUTO) {
1860         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++) {
1861             attr_v12.stAuto.DrcTuningPara.DrcGain.DrcGain[i] = Gain;
1862             attr_v12.stAuto.DrcTuningPara.DrcGain.Alpha[i]   = Alpha;
1863             attr_v12.stAuto.DrcTuningPara.DrcGain.Clip[i]    = Clip;
1864         }
1865     } else if (attr_v12.opMode == DRC_OPMODE_MANUAL) {
1866         attr_v12.stManual.DrcGain.DrcGain = Gain;
1867         attr_v12.stManual.DrcGain.Alpha   = Alpha;
1868         attr_v12.stManual.DrcGain.Clip    = Clip;
1869     }
1870     ret = rk_aiq_user_api2_adrc_v12_SetAttrib(ctx, &attr_v12);
1871     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
1872 #endif
1873 #if RKAIQ_HAVE_DRC_V12_LITE
1874     drcAttrV12Lite_t attr_v12_lite;
1875     memset(&attr_v12_lite, 0, sizeof(drcAttrV12Lite_t));
1876     ret = rk_aiq_user_api2_adrc_v12_lite_GetAttrib(ctx, &attr_v12_lite);
1877     RKAIQ_IMGPROC_CHECK_RET(ret, "getDrcGain failed!");
1878     attr_v12_lite.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
1879     attr_v12_lite.sync.done      = false;
1880 
1881     if (attr_v12_lite.opMode == DRC_OPMODE_AUTO) {
1882         for (int i = 0; i < ADRC_ENVLV_STEP_MAX; i++) {
1883             attr_v12_lite.stAuto.DrcTuningPara.DrcGain.DrcGain[i] = Gain;
1884             attr_v12_lite.stAuto.DrcTuningPara.DrcGain.Alpha[i]   = Alpha;
1885             attr_v12_lite.stAuto.DrcTuningPara.DrcGain.Clip[i]    = Clip;
1886         }
1887     } else if (attr_v12_lite.opMode == DRC_OPMODE_MANUAL) {
1888         attr_v12_lite.stManual.DrcGain.DrcGain = Gain;
1889         attr_v12_lite.stManual.DrcGain.Alpha   = Alpha;
1890         attr_v12_lite.stManual.DrcGain.Clip    = Clip;
1891     }
1892     ret = rk_aiq_user_api2_adrc_v12_lite_SetAttrib(ctx, &attr_v12_lite);
1893     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
1894 #endif
1895 
1896     IMGPROC_FUNC_EXIT
1897     return ret;
1898 }
1899 
rk_aiq_uapi2_getDrcGain(const rk_aiq_sys_ctx_t * ctx,float * Gain,float * Alpha,float * Clip)1900 XCamReturn rk_aiq_uapi2_getDrcGain(const rk_aiq_sys_ctx_t* ctx, float * Gain, float * Alpha, float * Clip)
1901 {
1902     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1903     IMGPROC_FUNC_ENTER
1904     if (ctx == NULL) {
1905         ret = XCAM_RETURN_ERROR_PARAM;
1906         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
1907     }
1908 #if RKAIQ_HAVE_DRC_V10
1909     drcAttrV10_t attr_v10;
1910     memset(&attr_v10, 0, sizeof(drcAttrV10_t));
1911     ret = rk_aiq_user_api2_adrc_v10_GetAttrib(ctx, &attr_v10);
1912     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed in get attrib!");
1913     *Gain  = attr_v10.Info.ValidParams.DrcGain.DrcGain;
1914     *Alpha = attr_v10.Info.ValidParams.DrcGain.Alpha;
1915     *Clip  = attr_v10.Info.ValidParams.DrcGain.Clip;
1916 #endif
1917 #if RKAIQ_HAVE_DRC_V11
1918     drcAttrV11_t attr_v11;
1919     memset(&attr_v11, 0, sizeof(drcAttrV11_t));
1920     ret = rk_aiq_user_api2_adrc_v11_GetAttrib(ctx, &attr_v11);
1921     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed in get attrib!");
1922     *Gain  = attr_v11.Info.ValidParams.DrcGain.DrcGain;
1923     *Alpha = attr_v11.Info.ValidParams.DrcGain.Alpha;
1924     *Clip  = attr_v11.Info.ValidParams.DrcGain.Clip;
1925 #endif
1926 #if RKAIQ_HAVE_DRC_V12
1927     drcAttrV12_t attr_v12;
1928     memset(&attr_v12, 0, sizeof(drcAttrV12_t));
1929     ret = rk_aiq_user_api2_adrc_v12_GetAttrib(ctx, &attr_v12);
1930     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed in get attrib!");
1931     *Gain  = attr_v12.Info.ValidParams.DrcGain.DrcGain;
1932     *Alpha = attr_v12.Info.ValidParams.DrcGain.Alpha;
1933     *Clip  = attr_v12.Info.ValidParams.DrcGain.Clip;
1934 #endif
1935 #if RKAIQ_HAVE_DRC_V12_LITE
1936     drcAttrV12Lite_t attr_v12_lite;
1937     memset(&attr_v12_lite, 0, sizeof(drcAttrV12Lite_t));
1938     ret = rk_aiq_user_api2_adrc_v12_lite_GetAttrib(ctx, &attr_v12_lite);
1939     RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed in get attrib!");
1940     *Gain  = attr_v12_lite.Info.ValidParams.DrcGain.DrcGain;
1941     *Alpha = attr_v12_lite.Info.ValidParams.DrcGain.Alpha;
1942     *Clip  = attr_v12_lite.Info.ValidParams.DrcGain.Clip;
1943 #endif
1944 
1945     IMGPROC_FUNC_EXIT
1946     return ret;
1947 }
1948 
1949 /*
1950 *****************************
1951 *
1952 * Desc: set/get dark area boost strength
1953 *    this function is active for normal mode
1954 * Argument:
1955 *   level: [1, 10]
1956 *   only valid in RV1109/RV1126
1957 *****************************
1958 */
rk_aiq_uapi2_getDarkAreaBoostStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)1959 XCamReturn rk_aiq_uapi2_getDarkAreaBoostStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
1960 {
1961     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1962 
1963 #if RKAIQ_HAVE_DRC_V10
1964     ret = XCAM_RETURN_ERROR_PARAM;
1965     RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.1 do not support tmo api!");
1966 #endif
1967 #if RKAIQ_HAVE_DRC_V11
1968     ret = XCAM_RETURN_ERROR_PARAM;
1969     RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.0 do not support tmo api!");
1970 #endif
1971 #if RKAIQ_HAVE_DRC_V12
1972     ret = XCAM_RETURN_ERROR_PARAM;
1973     RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.2 do not support tmo api!");
1974 #endif
1975 #if RKAIQ_HAVE_DRC_V12_LITE
1976     ret = XCAM_RETURN_ERROR_PARAM;
1977     RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.2 lite do not support tmo api!");
1978 #endif
1979 
1980     return ret;
1981 }
1982 
rk_aiq_uapi2_setDarkAreaBoostStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int level)1983 XCamReturn rk_aiq_uapi2_setDarkAreaBoostStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
1984 {
1985     XCamReturn ret = XCAM_RETURN_NO_ERROR;
1986 
1987 #if RKAIQ_HAVE_DRC_V10
1988     ret = XCAM_RETURN_ERROR_PARAM;
1989     RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.1 do not support tmo api!");
1990 #endif
1991 #if RKAIQ_HAVE_DRC_V11
1992     ret = XCAM_RETURN_ERROR_PARAM;
1993     RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.0 do not support tmo api!");
1994 #endif
1995 #if RKAIQ_HAVE_DRC_V12
1996     ret = XCAM_RETURN_ERROR_PARAM;
1997     RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.2 do not support tmo api!");
1998 #endif
1999 #if RKAIQ_HAVE_DRC_V12_LITE
2000     ret = XCAM_RETURN_ERROR_PARAM;
2001     RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.2 lite do not support tmo api!");
2002 #endif
2003 
2004     return ret;
2005 }
2006 
2007 /*
2008 *****************************
2009 *
2010 * Desc: set/get manual hdr strength
2011 *    this function is active for HDR is manual mode
2012 * Argument:
2013 *   level: [1, 100]
2014 *
2015 *****************************
2016 */
rk_aiq_uapi2_setMHDRStrth(const rk_aiq_sys_ctx_t * ctx,bool on,unsigned int level)2017 XCamReturn rk_aiq_uapi2_setMHDRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level)
2018 {
2019     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2020     /*
2021         if(CHECK_ISP_HW_V20()) {
2022             atmo_attrib_t attr;
2023             memset(&attr, 0, sizeof(attr));
2024             IMGPROC_FUNC_ENTER
2025             if (ctx == NULL) {
2026                 ret = XCAM_RETURN_ERROR_PARAM;
2027                 RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setMHDRStrth failed!");
2028             }
2029 
2030             if (!isHDRmode(ctx)) {
2031                 ret = XCAM_RETURN_ERROR_FAILED;
2032                 RKAIQ_IMGPROC_CHECK_RET(ret, "not in HDR mode!");
2033             }
2034             if (level < 1 || level > 100) {
2035                 ret = XCAM_RETURN_ERROR_OUTOFRANGE;
2036                 RKAIQ_IMGPROC_CHECK_RET(ret, "level(%d) is out of range, setMHDRStrth failed!");
2037             }
2038 
2039             attr.stSetLevel.level = level;
2040             attr.opMode = TMO_OPMODE_SET_LEVEL;
2041             ret = rk_aiq_user_api2_atmo_SetAttrib(ctx, attr);
2042             RKAIQ_IMGPROC_CHECK_RET(ret, "setMHDRStrth failed!");
2043             IMGPROC_FUNC_EXIT
2044         }
2045         else if(CHECK_ISP_HW_V21()) {
2046             ret = XCAM_RETURN_ERROR_PARAM;
2047             RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.1 do not support tmo api, ctx is NULL!");
2048         }
2049         else if(CHECK_ISP_HW_V30()) {
2050             ret = XCAM_RETURN_ERROR_PARAM;
2051             RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.0 do not support tmo api!");
2052         }
2053     */
2054     return ret;
2055 }
rk_aiq_uapi2_getMHDRStrth(const rk_aiq_sys_ctx_t * ctx,bool * on,unsigned int * level)2056 XCamReturn rk_aiq_uapi2_getMHDRStrth(const rk_aiq_sys_ctx_t* ctx, bool * on, unsigned int *level)
2057 {
2058     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2059     /*
2060         if(CHECK_ISP_HW_V20()) {
2061             atmo_attrib_t attr;
2062             memset(&attr, 0, sizeof(attr));
2063             IMGPROC_FUNC_ENTER
2064             if (ctx == NULL) {
2065                 ret = XCAM_RETURN_ERROR_PARAM;
2066                 RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getMHDRStrth failed!");
2067             }
2068             if (!isHDRmode(ctx)) {
2069                 ret = XCAM_RETURN_ERROR_FAILED;
2070                 RKAIQ_IMGPROC_CHECK_RET(ret, "not in HDR mode!");
2071             }
2072             ret = rk_aiq_user_api2_atmo_GetAttrib(ctx, &attr);
2073             RKAIQ_IMGPROC_CHECK_RET(ret, "getMHDRStrth failed in get attrib!");
2074 
2075             *level = attr.stSetLevel.level;
2076             IMGPROC_FUNC_EXIT
2077 
2078         }
2079         else if(CHECK_ISP_HW_V21()) {
2080             ret = XCAM_RETURN_ERROR_PARAM;
2081             RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.1 do not support tmo api, ctx is NULL!");
2082         }
2083         else if(CHECK_ISP_HW_V30()) {
2084             ret = XCAM_RETURN_ERROR_PARAM;
2085             RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.0 do not support tmo api!");
2086         }
2087     */
2088     return ret;
2089 }
2090 
2091 
2092 /*
2093 **********************************************************
2094 * Noise reduction
2095 **********************************************************
2096 */
2097 /*
2098 *****************************
2099 *
2100 * Desc: set noise reduction mode
2101 * Argument:
2102 *   mode:
2103 *     auto: auto noise reduction
2104 *     manual:manual noise reduction
2105 *
2106 *****************************
2107 */
rk_aiq_uapi2_setNRMode(const rk_aiq_sys_ctx_t * ctx,opMode_t mode)2108 XCamReturn rk_aiq_uapi2_setNRMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
2109 {
2110     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2111 
2112     IMGPROC_FUNC_ENTER
2113 
2114     if (CHECK_ISP_HW_V20()) {
2115         rk_aiq_nr_attrib_t attr;
2116         ret = rk_aiq_user_api2_anr_GetAttrib(ctx, &attr);
2117         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2118         if (mode == OP_AUTO) {
2119             attr.eMode = ANR_OP_MODE_AUTO;
2120         } else if (mode == OP_MANUAL) {
2121             attr.eMode = ANR_OP_MODE_MANUAL;
2122         } else {
2123             ret = XCAM_RETURN_ERROR_PARAM;
2124             RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
2125         }
2126         ret = rk_aiq_user_api2_anr_SetAttrib(ctx, &attr);
2127     }
2128 
2129     if (CHECK_ISP_HW_V21()) {
2130         rk_aiq_ynr_attrib_v2_t ynrV2_attr;
2131         rk_aiq_bayernr_attrib_v2_t bayernrV2_attr;
2132         rk_aiq_cnr_attrib_v1_t cnrV1_attr;
2133         ret = rk_aiq_user_api2_aynrV2_GetAttrib(ctx, &ynrV2_attr);
2134         ret = rk_aiq_user_api2_abayernrV2_GetAttrib(ctx, &bayernrV2_attr);
2135         ret = rk_aiq_user_api2_acnrV1_GetAttrib(ctx, &cnrV1_attr);
2136         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2137         if (mode == OP_AUTO) {
2138             bayernrV2_attr.eMode = ABAYERNR_OP_MODE_AUTO;
2139             ynrV2_attr.eMode = AYNR_OP_MODE_AUTO;
2140             cnrV1_attr.eMode = ACNR_OP_MODE_AUTO;
2141         } else if (mode == OP_MANUAL) {
2142             bayernrV2_attr.eMode = ABAYERNR_OP_MODE_MANUAL;
2143             ynrV2_attr.eMode = AYNR_OP_MODE_MANUAL;
2144             cnrV1_attr.eMode = ACNR_OP_MODE_MANUAL;
2145         } else {
2146             ret = XCAM_RETURN_ERROR_PARAM;
2147             RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
2148         }
2149         ret = rk_aiq_user_api2_aynrV2_SetAttrib(ctx, &ynrV2_attr);
2150         ret = rk_aiq_user_api2_abayernrV2_SetAttrib(ctx, &bayernrV2_attr);
2151         ret = rk_aiq_user_api2_acnrV1_SetAttrib(ctx, &cnrV1_attr);
2152     }
2153 
2154     if (CHECK_ISP_HW_V30()) {
2155         rk_aiq_ynr_attrib_v3_t ynrV3_attr;
2156         ynrV3_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2157         rk_aiq_cnr_attrib_v2_t cnrV2_attr;
2158         cnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2159         rk_aiq_bayer2dnr_attrib_v2_t bayer2dnrV2_attr;
2160         bayer2dnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2161         rk_aiq_bayertnr_attrib_v2_t bayertnrV2_attr;
2162         bayertnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2163         ret = rk_aiq_user_api2_aynrV3_GetAttrib(ctx, &ynrV3_attr);
2164         ret = rk_aiq_user_api2_acnrV2_GetAttrib(ctx, &cnrV2_attr);
2165         ret = rk_aiq_user_api2_abayer2dnrV2_GetAttrib(ctx, &bayer2dnrV2_attr);
2166         ret = rk_aiq_user_api2_abayertnrV2_GetAttrib(ctx, &bayertnrV2_attr);
2167         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2168 
2169         if (mode == OP_AUTO) {
2170             ynrV3_attr.eMode = AYNRV3_OP_MODE_AUTO;
2171             cnrV2_attr.eMode = ACNRV2_OP_MODE_AUTO;
2172             bayer2dnrV2_attr.eMode = ABAYER2DNR_OP_MODE_AUTO;
2173             bayertnrV2_attr.eMode = ABAYERTNRV2_OP_MODE_AUTO;
2174         } else if (mode == OP_MANUAL) {
2175             ynrV3_attr.eMode = AYNRV3_OP_MODE_MANUAL;
2176             cnrV2_attr.eMode = ACNRV2_OP_MODE_MANUAL;
2177             bayer2dnrV2_attr.eMode = ABAYER2DNR_OP_MODE_MANUAL;
2178             bayertnrV2_attr.eMode = ABAYERTNRV2_OP_MODE_MANUAL;
2179         } else if(mode == OP_REG_MANUAL) {
2180             ynrV3_attr.eMode = AYNRV3_OP_MODE_REG_MANUAL;
2181             cnrV2_attr.eMode = ACNRV2_OP_MODE_REG_MANUAL;
2182             bayer2dnrV2_attr.eMode = ABAYER2DNR_OP_MODE_REG_MANUAL;
2183             bayertnrV2_attr.eMode = ABAYERTNRV2_OP_MODE_REG_MANUAL;
2184         } else {
2185             ret = XCAM_RETURN_ERROR_PARAM;
2186             RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
2187         }
2188         ret = rk_aiq_user_api2_aynrV3_SetAttrib(ctx, &ynrV3_attr);
2189         ret = rk_aiq_user_api2_acnrV2_SetAttrib(ctx, &cnrV2_attr);
2190         ret = rk_aiq_user_api2_abayer2dnrV2_SetAttrib(ctx, &bayer2dnrV2_attr);
2191         ret = rk_aiq_user_api2_abayertnrV2_SetAttrib(ctx, &bayertnrV2_attr);
2192     }
2193 
2194     if (CHECK_ISP_HW_V32()) {
2195         rk_aiq_ynr_attrib_v22_t ynrV22_attr;
2196         ynrV22_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2197         rk_aiq_cnr_attrib_v30_t cnrV30_attr;
2198         cnrV30_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2199         rk_aiq_bayer2dnr_attrib_v23_t bayer2dnrV23_attr;
2200         bayer2dnrV23_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2201         rk_aiq_bayertnr_attrib_v23_t bayertnrV23_attr;
2202         bayertnrV23_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2203         ret = rk_aiq_user_api2_aynrV22_GetAttrib(ctx, &ynrV22_attr);
2204         ret = rk_aiq_user_api2_acnrV30_GetAttrib(ctx, &cnrV30_attr);
2205         ret = rk_aiq_user_api2_abayer2dnrV23_GetAttrib(ctx, &bayer2dnrV23_attr);
2206         ret = rk_aiq_user_api2_abayertnrV23_GetAttrib(ctx, &bayertnrV23_attr);
2207         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2208 
2209         if (mode == OP_AUTO) {
2210             ynrV22_attr.eMode = AYNRV22_OP_MODE_AUTO;
2211             cnrV30_attr.eMode = ACNRV30_OP_MODE_AUTO;
2212             bayer2dnrV23_attr.eMode = ABAYER2DNR_V23_OP_MODE_AUTO;
2213             bayertnrV23_attr.eMode = ABAYERTNRV23_OP_MODE_AUTO;
2214         } else if (mode == OP_MANUAL) {
2215             ynrV22_attr.eMode = AYNRV22_OP_MODE_MANUAL;
2216             cnrV30_attr.eMode = ACNRV30_OP_MODE_MANUAL;
2217             bayer2dnrV23_attr.eMode = ABAYER2DNR_V23_OP_MODE_MANUAL;
2218             bayertnrV23_attr.eMode = ABAYERTNRV23_OP_MODE_MANUAL;
2219         } else if(mode == OP_REG_MANUAL) {
2220             ynrV22_attr.eMode = AYNRV22_OP_MODE_REG_MANUAL;
2221             cnrV30_attr.eMode = ACNRV30_OP_MODE_REG_MANUAL;
2222             bayer2dnrV23_attr.eMode = ABAYER2DNR_V23_OP_MODE_REG_MANUAL;
2223             bayertnrV23_attr.eMode = ABAYERTNRV23_OP_MODE_REG_MANUAL;
2224         } else {
2225             ret = XCAM_RETURN_ERROR_PARAM;
2226             RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
2227         }
2228         ret = rk_aiq_user_api2_aynrV22_SetAttrib(ctx, &ynrV22_attr);
2229         ret = rk_aiq_user_api2_acnrV30_SetAttrib(ctx, &cnrV30_attr);
2230         ret = rk_aiq_user_api2_abayer2dnrV23_SetAttrib(ctx, &bayer2dnrV23_attr);
2231         ret = rk_aiq_user_api2_abayertnrV23_SetAttrib(ctx, &bayertnrV23_attr);
2232     }
2233 
2234     if (CHECK_ISP_HW_V32_LITE()) {
2235         rk_aiq_ynr_attrib_v22_t ynrV22_attr;
2236         ynrV22_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2237         rk_aiq_cnr_attrib_v30_t cnrV30_attr;
2238         cnrV30_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2239         rk_aiq_bayertnr_attrib_v23L_t bayertnrV23_attr;
2240         bayertnrV23_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2241         ret                             = rk_aiq_user_api2_aynrV22_GetAttrib(ctx, &ynrV22_attr);
2242         ret                             = rk_aiq_user_api2_acnrV30_GetAttrib(ctx, &cnrV30_attr);
2243         ret = rk_aiq_user_api2_abayertnrV23Lite_GetAttrib(ctx, &bayertnrV23_attr);
2244         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2245 
2246         if (mode == OP_AUTO) {
2247             ynrV22_attr.eMode      = AYNRV22_OP_MODE_AUTO;
2248             cnrV30_attr.eMode      = ACNRV30_OP_MODE_AUTO;
2249             bayertnrV23_attr.eMode = ABAYERTNRV23_OP_MODE_AUTO;
2250         } else if (mode == OP_MANUAL) {
2251             ynrV22_attr.eMode      = AYNRV22_OP_MODE_MANUAL;
2252             cnrV30_attr.eMode      = ACNRV30_OP_MODE_MANUAL;
2253             bayertnrV23_attr.eMode = ABAYERTNRV23_OP_MODE_MANUAL;
2254         } else if (mode == OP_REG_MANUAL) {
2255             ynrV22_attr.eMode      = AYNRV22_OP_MODE_REG_MANUAL;
2256             cnrV30_attr.eMode      = ACNRV30_OP_MODE_REG_MANUAL;
2257             bayertnrV23_attr.eMode = ABAYERTNRV23_OP_MODE_REG_MANUAL;
2258         } else {
2259             ret = XCAM_RETURN_ERROR_PARAM;
2260             RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
2261         }
2262         ret = rk_aiq_user_api2_aynrV22_SetAttrib(ctx, &ynrV22_attr);
2263         ret = rk_aiq_user_api2_acnrV30_SetAttrib(ctx, &cnrV30_attr);
2264         ret = rk_aiq_user_api2_abayertnrV23Lite_SetAttrib(ctx, &bayertnrV23_attr);
2265     }
2266 
2267     RKAIQ_IMGPROC_CHECK_RET(ret, "setNRMode failed!", ret);
2268     IMGPROC_FUNC_EXIT
2269 
2270     return ret;
2271 }
2272 
2273 
rk_aiq_uapi2_getNRMode(const rk_aiq_sys_ctx_t * ctx,opMode_t * mode)2274 XCamReturn rk_aiq_uapi2_getNRMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode)
2275 {
2276     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2277     IMGPROC_FUNC_ENTER
2278 
2279     if (CHECK_ISP_HW_V20()) {
2280         rk_aiq_nr_attrib_t attr;
2281         ret = rk_aiq_user_api2_anr_GetAttrib(ctx, &attr);
2282         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2283         if (attr.eMode == ANR_OP_MODE_AUTO) {
2284             *mode = OP_AUTO;
2285         } else if (attr.eMode == ANR_OP_MODE_MANUAL) {
2286             *mode = OP_MANUAL;
2287         } else if (attr.eMode == ANR_OP_MODE_INVALID) {
2288             *mode = OP_INVAL;
2289         }
2290     }
2291 
2292     if (CHECK_ISP_HW_V21()) {
2293         rk_aiq_ynr_attrib_v2_t ynrV2_attr;
2294         rk_aiq_bayernr_attrib_v2_t bayernrV2_attr;
2295         rk_aiq_cnr_attrib_v1_t cnrV1_attr;
2296         ret = rk_aiq_user_api2_aynrV2_GetAttrib(ctx, &ynrV2_attr);
2297         ret = rk_aiq_user_api2_abayernrV2_GetAttrib(ctx, &bayernrV2_attr);
2298         ret = rk_aiq_user_api2_acnrV1_GetAttrib(ctx, &cnrV1_attr);
2299         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2300 
2301         if (bayernrV2_attr.eMode == ABAYERNR_OP_MODE_AUTO
2302                 && ynrV2_attr.eMode == AYNR_OP_MODE_AUTO
2303                 && cnrV1_attr.eMode == ACNR_OP_MODE_AUTO) {
2304             *mode = OP_AUTO;
2305         } else if (bayernrV2_attr.eMode == ABAYERNR_OP_MODE_MANUAL
2306                    && ynrV2_attr.eMode == AYNR_OP_MODE_MANUAL
2307                    && cnrV1_attr.eMode == ACNR_OP_MODE_MANUAL) {
2308             *mode = OP_MANUAL;
2309         } else if (bayernrV2_attr.eMode == ABAYERNR_OP_MODE_INVALID
2310                    && ynrV2_attr.eMode == AYNR_OP_MODE_INVALID
2311                    && cnrV1_attr.eMode == ACNR_OP_MODE_INVALID) {
2312             *mode = OP_INVAL;
2313         } else {
2314             LOGE_ANR("bayernr.mode:%d  ynr.mode:%d cnr.mode:%d\n",
2315                      bayernrV2_attr.eMode,
2316                      ynrV2_attr.eMode,
2317                      cnrV1_attr.eMode);
2318         }
2319 
2320     }
2321 
2322     if (CHECK_ISP_HW_V30()) {
2323         rk_aiq_ynr_attrib_v3_t ynrV3_attr;
2324         ynrV3_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2325         rk_aiq_cnr_attrib_v2_t cnrV2_attr;
2326         cnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2327         rk_aiq_bayer2dnr_attrib_v2_t bayer2dnrV2_attr;
2328         bayer2dnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2329         rk_aiq_bayertnr_attrib_v2_t bayertnrV2_attr;
2330         bayertnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2331         ret = rk_aiq_user_api2_aynrV3_GetAttrib(ctx, &ynrV3_attr);
2332         ret = rk_aiq_user_api2_acnrV2_GetAttrib(ctx, &cnrV2_attr);
2333         ret = rk_aiq_user_api2_abayer2dnrV2_GetAttrib(ctx, &bayer2dnrV2_attr);
2334         ret = rk_aiq_user_api2_abayertnrV2_GetAttrib(ctx, &bayertnrV2_attr);
2335         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2336 
2337         if(ynrV3_attr.eMode == AYNRV3_OP_MODE_AUTO
2338                 && cnrV2_attr.eMode == ACNRV2_OP_MODE_AUTO
2339                 && bayer2dnrV2_attr.eMode == ABAYER2DNR_OP_MODE_AUTO
2340                 && bayertnrV2_attr.eMode == ABAYERTNRV2_OP_MODE_AUTO) {
2341             *mode = OP_AUTO;
2342         } else if(ynrV3_attr.eMode == AYNRV3_OP_MODE_MANUAL
2343                   && cnrV2_attr.eMode == ACNRV2_OP_MODE_MANUAL
2344                   && bayer2dnrV2_attr.eMode == ABAYER2DNR_OP_MODE_MANUAL
2345                   && bayertnrV2_attr.eMode == ABAYERTNRV2_OP_MODE_MANUAL) {
2346             *mode = OP_MANUAL;
2347         } else if(ynrV3_attr.eMode == AYNRV3_OP_MODE_REG_MANUAL
2348                   && cnrV2_attr.eMode == ACNRV2_OP_MODE_REG_MANUAL
2349                   && bayer2dnrV2_attr.eMode == ABAYER2DNR_OP_MODE_REG_MANUAL
2350                   && bayertnrV2_attr.eMode == ABAYERTNRV2_OP_MODE_REG_MANUAL) {
2351             *mode = OP_REG_MANUAL;
2352         } else {
2353             LOGE_ANR("ynr.mode:%d cnr.mode:%d bayer2dnr.mode:%d bayertnr.mode:%d\n",
2354                      ynrV3_attr.eMode,
2355                      cnrV2_attr.eMode,
2356                      bayer2dnrV2_attr.eMode,
2357                      bayertnrV2_attr.eMode);
2358         }
2359     }
2360 
2361     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2362         rk_aiq_ynr_attrib_v22_t ynrV22_attr;
2363         ynrV22_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2364         rk_aiq_cnr_attrib_v30_t cnrV30_attr;
2365         cnrV30_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2366         rk_aiq_bayer2dnr_attrib_v23_t bayer2dnrV23_attr;
2367         bayer2dnrV23_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2368         rk_aiq_bayertnr_attrib_v23_t bayertnrV23_attr;
2369         bayertnrV23_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2370         ret = rk_aiq_user_api2_aynrV22_GetAttrib(ctx, &ynrV22_attr);
2371         ret = rk_aiq_user_api2_acnrV30_GetAttrib(ctx, &cnrV30_attr);
2372         ret = rk_aiq_user_api2_abayer2dnrV23_GetAttrib(ctx, &bayer2dnrV23_attr);
2373         ret = rk_aiq_user_api2_abayertnrV23_GetAttrib(ctx, &bayertnrV23_attr);
2374         RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
2375 
2376         if(ynrV22_attr.eMode == AYNRV22_OP_MODE_AUTO
2377                 && cnrV30_attr.eMode == ACNRV30_OP_MODE_AUTO
2378                 && bayer2dnrV23_attr.eMode == ABAYER2DNR_V23_OP_MODE_AUTO
2379                 && bayertnrV23_attr.eMode == ABAYERTNRV23_OP_MODE_AUTO) {
2380             *mode = OP_AUTO;
2381         } else if(ynrV22_attr.eMode == AYNRV22_OP_MODE_MANUAL
2382                   && cnrV30_attr.eMode == ACNRV30_OP_MODE_MANUAL
2383                   && bayer2dnrV23_attr.eMode == ABAYER2DNR_V23_OP_MODE_MANUAL
2384                   && bayertnrV23_attr.eMode == ABAYERTNRV23_OP_MODE_MANUAL) {
2385             *mode = OP_MANUAL;
2386         } else if(ynrV22_attr.eMode == AYNRV22_OP_MODE_REG_MANUAL
2387                   && cnrV30_attr.eMode == ACNRV30_OP_MODE_REG_MANUAL
2388                   && bayer2dnrV23_attr.eMode == ABAYER2DNR_V23_OP_MODE_REG_MANUAL
2389                   && bayertnrV23_attr.eMode == ABAYERTNRV23_OP_MODE_REG_MANUAL) {
2390             *mode = OP_REG_MANUAL;
2391         } else {
2392             LOGE_ANR("ynr.mode:%d cnr.mode:%d bayer2dnr.mode:%d bayertnr.mode:%d\n",
2393                      ynrV22_attr.eMode,
2394                      cnrV30_attr.eMode,
2395                      bayer2dnrV23_attr.eMode,
2396                      bayertnrV23_attr.eMode);
2397         }
2398     }
2399 
2400     IMGPROC_FUNC_EXIT
2401     return ret;
2402 }
2403 
2404 
2405 
2406 /*
2407 *****************************
2408 *
2409 * Desc: set normal noise reduction strength
2410 * Argument:
2411 *   level: [0, 100]
2412 * Normal mode
2413 *****************************
2414 */
rk_aiq_uapi2_setANRStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int level)2415 XCamReturn rk_aiq_uapi2_setANRStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
2416 {
2417     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2418 
2419     IMGPROC_FUNC_ENTER
2420 
2421     if (ctx == NULL) {
2422         ret = XCAM_RETURN_ERROR_PARAM;
2423         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setANRStrth failed!");
2424     }
2425 
2426     if (CHECK_ISP_HW_V20()) {
2427         ret = rk_aiq_user_api2_anr_SetLumaSFStrength(ctx, level / 100.0);
2428         ret = rk_aiq_user_api2_anr_SetLumaTFStrength(ctx, level / 100.0);
2429         RKAIQ_IMGPROC_CHECK_RET(ret, "setANRStrth failed!", ret);
2430     }
2431 
2432     if (CHECK_ISP_HW_V21()) {
2433         ret = rk_aiq_user_api2_aynrV2_SetStrength(ctx, level / 100.0);
2434         ret = rk_aiq_user_api2_abayernrV2_SetSFStrength(ctx, level / 100.0);
2435         ret = rk_aiq_user_api2_abayernrV2_SetTFStrength(ctx, level / 100.0);
2436         RKAIQ_IMGPROC_CHECK_RET(ret, "setANRStrth failed!", ret);
2437     }
2438 
2439     if (CHECK_ISP_HW_V30()) {
2440         rk_aiq_ynr_strength_v3_t ynrStrenght;
2441         ynrStrenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2442         ynrStrenght.percent = level / 100.0;
2443         ret = rk_aiq_user_api2_aynrV3_SetStrength(ctx, &ynrStrenght);
2444         rk_aiq_bayer2dnr_strength_v2_t bayer2dnrV2Strenght;
2445         bayer2dnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2446         bayer2dnrV2Strenght.percent = level / 100.0;
2447         ret = rk_aiq_user_api2_abayer2dnrV2_SetStrength(ctx, &bayer2dnrV2Strenght);
2448         rk_aiq_bayertnr_strength_v2_t bayertnrV2Strenght;
2449         bayertnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2450         bayertnrV2Strenght.percent = level / 100.0;
2451         ret = rk_aiq_user_api2_abayertnrV2_SetStrength(ctx, &bayertnrV2Strenght);
2452         RKAIQ_IMGPROC_CHECK_RET(ret, "setANRStrth failed!", ret);
2453     }
2454 
2455     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2456         rk_aiq_ynr_strength_v22_t ynrV22Strength;
2457         ynrV22Strength.strength_enable = true;
2458         ynrV22Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2459         ynrV22Strength.percent = level / 100.0;
2460         ret = rk_aiq_user_api2_aynrV22_SetStrength(ctx, &ynrV22Strength);
2461         rk_aiq_bayer2dnr_strength_v23_t bayer2dnrV23Strength;
2462         bayer2dnrV23Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2463         bayer2dnrV23Strength.strength_enable = true;
2464         bayer2dnrV23Strength.percent = level / 100.0;
2465         ret = rk_aiq_user_api2_abayer2dnrV23_SetStrength(ctx, &bayer2dnrV23Strength);
2466         rk_aiq_bayertnr_strength_v23_t bayertnrV23Strength;
2467         bayertnrV23Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2468         bayertnrV23Strength.strength_enable = true;
2469         bayertnrV23Strength.percent = level / 100.0;
2470         ret = rk_aiq_user_api2_abayertnrV23_SetStrength(ctx, &bayertnrV23Strength);
2471         RKAIQ_IMGPROC_CHECK_RET(ret, "setANRStrth failed!", ret);
2472     }
2473 
2474     IMGPROC_FUNC_EXIT
2475     return ret;
2476 }
2477 
2478 
rk_aiq_uapi2_getANRStrth(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)2479 XCamReturn rk_aiq_uapi2_getANRStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
2480 {
2481     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2482     float percent = 0.0f;
2483 
2484     IMGPROC_FUNC_ENTER
2485 
2486     if (ctx == NULL) {
2487         ret = XCAM_RETURN_ERROR_PARAM;
2488         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getANRStrth failed!");
2489     }
2490 
2491     if (CHECK_ISP_HW_V20()) {
2492         ret = rk_aiq_user_api2_anr_GetLumaTFStrength(ctx, &percent);
2493         RKAIQ_IMGPROC_CHECK_RET(ret, "getANRStrth failed!", ret);
2494         *level = (unsigned int)(percent * 100);
2495     }
2496 
2497     if (CHECK_ISP_HW_V21()) {
2498         ret = rk_aiq_user_api2_abayernrV2_GetTFStrength(ctx, &percent);
2499         RKAIQ_IMGPROC_CHECK_RET(ret, "getANRStrth failed!", ret);
2500         *level = (unsigned int)(percent * 100);
2501     }
2502 
2503     if (CHECK_ISP_HW_V30()) {
2504         rk_aiq_bayertnr_strength_v2_t bayertnrV2Strenght;
2505         bayertnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2506         ret = rk_aiq_user_api2_abayertnrV2_GetStrength(ctx, &bayertnrV2Strenght);
2507         percent = bayertnrV2Strenght.percent;
2508         RKAIQ_IMGPROC_CHECK_RET(ret, "getANRStrth failed!", ret);
2509         *level = (unsigned int)(percent * 100);
2510     }
2511 
2512     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2513         rk_aiq_bayertnr_strength_v23_t bayertnrV23Strength;
2514         bayertnrV23Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2515         ret = rk_aiq_user_api2_abayertnrV23_GetStrength(ctx, &bayertnrV23Strength);
2516         RKAIQ_IMGPROC_CHECK_RET(ret, "getANRStrth failed!", ret);
2517         *level = (unsigned int)(bayertnrV23Strength.percent * 100);
2518     }
2519 
2520 
2521 
2522     IMGPROC_FUNC_EXIT
2523     return ret;
2524 }
2525 
2526 
2527 /*
2528 *****************************
2529 *
2530 * Desc: set manual spatial noise reduction strength
2531 *    this function is active for NR is manual mode
2532 * Argument:
2533 *   level: [0, 100]
2534 *
2535 *****************************
2536 */
rk_aiq_uapi2_setMSpaNRStrth(const rk_aiq_sys_ctx_t * ctx,bool on,unsigned int level)2537 XCamReturn rk_aiq_uapi2_setMSpaNRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level)
2538 {
2539     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2540     IMGPROC_FUNC_ENTER
2541 
2542     if (ctx == NULL) {
2543         ret = XCAM_RETURN_ERROR_PARAM;
2544         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setMSpaNRStrth failed!");
2545     }
2546 
2547     if (CHECK_ISP_HW_V20()) {
2548         ret = rk_aiq_user_api2_anr_SetLumaSFStrength(ctx, level / 100.0);
2549     }
2550 
2551     if (CHECK_ISP_HW_V21()) {
2552         ret = rk_aiq_user_api2_abayernrV2_SetSFStrength(ctx, level / 100.0);
2553         ret = rk_aiq_user_api2_aynrV2_SetStrength(ctx, level / 100.0);
2554     }
2555 
2556     if (CHECK_ISP_HW_V30()) {
2557         rk_aiq_ynr_strength_v3_t ynrStrenght;
2558         ynrStrenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2559         ynrStrenght.strength_enable = true;
2560         ynrStrenght.percent = level / 100.0;
2561         ret = rk_aiq_user_api2_aynrV3_SetStrength(ctx, &ynrStrenght);
2562         rk_aiq_bayer2dnr_strength_v2_t bayer2dnrV2Strenght;
2563         bayer2dnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2564         bayer2dnrV2Strenght.strength_enable = true;
2565         bayer2dnrV2Strenght.percent = level / 100.0;
2566         ret = rk_aiq_user_api2_abayer2dnrV2_SetStrength(ctx, &bayer2dnrV2Strenght);
2567     }
2568 
2569     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2570         rk_aiq_ynr_strength_v22_t ynrStrength;
2571         ynrStrength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2572         ynrStrength.strength_enable = true;
2573         ynrStrength.percent = level / 100.0;
2574         ret = rk_aiq_user_api2_aynrV22_SetStrength(ctx, &ynrStrength);
2575         rk_aiq_bayer2dnr_strength_v23_t bayer2dnrV23Strength;
2576         bayer2dnrV23Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2577         bayer2dnrV23Strength.strength_enable = true;
2578         bayer2dnrV23Strength.percent = level / 100.0;
2579         ret = rk_aiq_user_api2_abayer2dnrV23_SetStrength(ctx, &bayer2dnrV23Strength);
2580     }
2581 
2582     RKAIQ_IMGPROC_CHECK_RET(ret, "setMSpaNRStrth failed!", ret);
2583     IMGPROC_FUNC_EXIT
2584     return ret;
2585 }
2586 
2587 
2588 
2589 /*
2590 *****************************
2591 *
2592 * Desc: get manual spatial noise reduction strength
2593 *    this function is active for NR is manual mode
2594 * Argument:
2595 *   level: [0, 100]
2596 *
2597 *****************************
2598 */
rk_aiq_uapi2_getMSpaNRStrth(const rk_aiq_sys_ctx_t * ctx,bool * on,unsigned int * level)2599 XCamReturn rk_aiq_uapi2_getMSpaNRStrth(const rk_aiq_sys_ctx_t* ctx, bool * on, unsigned int *level)
2600 {
2601     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2602     float percent = 0.0f;
2603     IMGPROC_FUNC_ENTER
2604     if (ctx == NULL) {
2605         ret = XCAM_RETURN_ERROR_PARAM;
2606         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getMSpaNRStrth failed!");
2607     }
2608 
2609     if (CHECK_ISP_HW_V20()) {
2610         ret = rk_aiq_user_api2_anr_GetLumaSFStrength(ctx, &percent);
2611     }
2612 
2613     if (CHECK_ISP_HW_V21()) {
2614         ret = rk_aiq_user_api2_abayernrV2_GetSFStrength(ctx, &percent);
2615     }
2616 
2617     if (CHECK_ISP_HW_V30()) {
2618         rk_aiq_bayer2dnr_strength_v2_t bayer2dnrV2Strenght;
2619         bayer2dnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2620         ret = rk_aiq_user_api2_abayer2dnrV2_GetStrength(ctx, &bayer2dnrV2Strenght);
2621         percent = bayer2dnrV2Strenght.percent;
2622     }
2623 
2624     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2625         rk_aiq_bayer2dnr_strength_v23_t bayer2dnrV23Strength;
2626         bayer2dnrV23Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2627         ret = rk_aiq_user_api2_abayer2dnrV23_GetStrength(ctx, &bayer2dnrV23Strength);
2628         percent = bayer2dnrV23Strength.percent;
2629     }
2630 
2631 
2632     RKAIQ_IMGPROC_CHECK_RET(ret, "getMSpaNRStrth failed!", ret);
2633     *level = (unsigned int)(percent * 100);
2634     IMGPROC_FUNC_EXIT
2635     return ret;
2636 }
2637 
2638 
2639 
2640 /*
2641 *****************************
2642 *
2643 * Desc: set manual time noise reduction strength
2644 *     this function is active for NR is manual mode
2645 * Argument:
2646 *   level: [0, 100]
2647 *
2648 *****************************
2649 */
rk_aiq_uapi2_setMTNRStrth(const rk_aiq_sys_ctx_t * ctx,bool on,unsigned int level)2650 XCamReturn rk_aiq_uapi2_setMTNRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level)
2651 {
2652     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2653     IMGPROC_FUNC_ENTER
2654     LOGD("level=%d", level);
2655     if (ctx == NULL) {
2656         ret = XCAM_RETURN_ERROR_PARAM;
2657         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setMTNRStrth failed!");
2658     }
2659 
2660     if (CHECK_ISP_HW_V20()) {
2661         ret = rk_aiq_user_api2_anr_SetLumaTFStrength(ctx, level / 100.0);
2662     }
2663 
2664     if (CHECK_ISP_HW_V21()) {
2665         ret = rk_aiq_user_api2_abayernrV2_SetTFStrength(ctx, level / 100.0);
2666     }
2667 
2668     if (CHECK_ISP_HW_V30()) {
2669         rk_aiq_bayertnr_strength_v2_t bayertnrV2Strenght;
2670         bayertnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2671         bayertnrV2Strenght.strength_enable = true;
2672         bayertnrV2Strenght.percent = level / 100.0;
2673         ret = rk_aiq_user_api2_abayertnrV2_SetStrength(ctx, &bayertnrV2Strenght);
2674     }
2675 
2676     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2677         rk_aiq_bayertnr_strength_v23_t bayertnrV23Strength;
2678         bayertnrV23Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2679         bayertnrV23Strength.strength_enable = true;
2680         bayertnrV23Strength.percent = level / 100.0;
2681         ret = rk_aiq_user_api2_abayertnrV23_SetStrength(ctx, &bayertnrV23Strength);
2682     }
2683     RKAIQ_IMGPROC_CHECK_RET(ret, "setMTNRStrth failed!", ret);
2684     IMGPROC_FUNC_EXIT
2685     return ret;
2686 }
2687 
2688 
2689 
2690 /*
2691 *****************************
2692 *
2693 * Desc: get manual time noise reduction strength
2694 *     this function is active for NR is manual mode
2695 * Argument:
2696 *   level: [0, 100]
2697 *
2698 *****************************
2699 */
rk_aiq_uapi2_getMTNRStrth(const rk_aiq_sys_ctx_t * ctx,bool * on,unsigned int * level)2700 XCamReturn rk_aiq_uapi2_getMTNRStrth(const rk_aiq_sys_ctx_t* ctx, bool * on, unsigned int *level)
2701 {
2702     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2703     float percent = 0.0f;
2704     IMGPROC_FUNC_ENTER
2705     if (ctx == NULL) {
2706         ret = XCAM_RETURN_ERROR_PARAM;
2707         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getMTNRStrth failed!");
2708     }
2709 
2710     if (CHECK_ISP_HW_V20()) {
2711         ret = rk_aiq_user_api2_anr_GetLumaTFStrength(ctx, &percent);
2712     }
2713 
2714     if (CHECK_ISP_HW_V21()) {
2715         ret = rk_aiq_user_api2_abayernrV2_GetTFStrength(ctx, &percent);
2716     }
2717 
2718     if (CHECK_ISP_HW_V30()) {
2719         rk_aiq_bayertnr_strength_v2_t bayertnrV2Strenght;
2720         bayertnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2721         ret = rk_aiq_user_api2_abayertnrV2_GetStrength(ctx, &bayertnrV2Strenght);
2722         percent = bayertnrV2Strenght.percent;
2723     }
2724 
2725     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2726         rk_aiq_bayertnr_strength_v23_t bayertnrV23Strength;
2727         bayertnrV23Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2728         ret = rk_aiq_user_api2_abayertnrV23_GetStrength(ctx, &bayertnrV23Strength);
2729         percent = bayertnrV23Strength.percent;
2730     }
2731     RKAIQ_IMGPROC_CHECK_RET(ret, "getMTNRStrth failed!", ret);
2732     *level = (unsigned int)(percent * 100);
2733     IMGPROC_FUNC_EXIT
2734     return ret;
2735 }
2736 
2737 
2738 /*
2739 *****************************
2740 *
2741 * Desc: Adjust image sharpness level
2742 * Argument:
2743 *    level: sharpness level, [0, 100]
2744 *****************************
2745 */
rk_aiq_uapi2_setSharpness(const rk_aiq_sys_ctx_t * ctx,unsigned int level)2746 XCamReturn rk_aiq_uapi2_setSharpness(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
2747 {
2748     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2749     float fPercent = 0.0f;
2750 
2751     IMGPROC_FUNC_ENTER
2752     if (ctx == NULL) {
2753         ret = XCAM_RETURN_ERROR_PARAM;
2754         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, set sharpeness failed!");
2755     }
2756 
2757     LOGD("setSharpness enter, level=%d\n", level);
2758     if ((int)level < 0 || level > 100) {
2759         ret = XCAM_RETURN_ERROR_PARAM;
2760         RKAIQ_IMGPROC_CHECK_RET(ret, "level out of range, set sharpeness failed!");
2761     }
2762     fPercent = level / 100.0f;
2763 
2764 
2765     if (CHECK_ISP_HW_V21()) {
2766         ret = rk_aiq_user_api2_asharpV3_SetStrength(ctx, fPercent);
2767     }
2768 
2769     if (CHECK_ISP_HW_V30()) {
2770         rk_aiq_sharp_strength_v4_t sharpV4Strenght;
2771         sharpV4Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2772         sharpV4Strenght.strength_enable = true;
2773         sharpV4Strenght.percent = fPercent;
2774         ret = rk_aiq_user_api2_asharpV4_SetStrength(ctx, &sharpV4Strenght);
2775     }
2776 
2777     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2778         rk_aiq_sharp_strength_v33_t sharpV33Strength;
2779         sharpV33Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2780         sharpV33Strength.strength_enable = true;
2781         sharpV33Strength.percent = fPercent;
2782         ret = rk_aiq_user_api2_asharpV33_SetStrength(ctx, &sharpV33Strength);
2783     }
2784     RKAIQ_IMGPROC_CHECK_RET(ret, "set sharpeness failed!");
2785     IMGPROC_FUNC_EXIT
2786 
2787     return ret;
2788 }
2789 
rk_aiq_uapi2_getSharpness(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)2790 XCamReturn rk_aiq_uapi2_getSharpness(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
2791 {
2792     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2793     float fPercent = 0.0f;
2794 
2795     IMGPROC_FUNC_ENTER
2796     if (level == NULL || ctx == NULL) {
2797         ret = XCAM_RETURN_ERROR_PARAM;
2798         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get sharpeness failed!");
2799     }
2800 
2801     if (CHECK_ISP_HW_V21()) {
2802         ret = rk_aiq_user_api2_asharpV3_GetStrength(ctx, &fPercent);
2803     }
2804 
2805     if (CHECK_ISP_HW_V30()) {
2806         rk_aiq_sharp_strength_v4_t sharpV4Strenght;
2807         sharpV4Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2808         ret = rk_aiq_user_api2_asharpV4_GetStrength(ctx, &sharpV4Strenght);
2809         fPercent = sharpV4Strenght.percent;
2810     }
2811 
2812     if (CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
2813         rk_aiq_sharp_strength_v33_t sharpV33Strength;
2814         sharpV33Strength.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
2815         ret = rk_aiq_user_api2_asharpV33_GetStrength(ctx, &sharpV33Strength);
2816         fPercent = sharpV33Strength.percent;
2817     }
2818     RKAIQ_IMGPROC_CHECK_RET(ret, "get sharpeness failed!");
2819 
2820     *level = (unsigned int)(fPercent * 100);
2821     IMGPROC_FUNC_EXIT
2822     return ret;
2823 }
2824 
2825 
2826 /*
2827 **********************************************************
2828 * White balance & Color
2829 **********************************************************
2830 */
2831 
2832 /*
2833 *****************************
2834 *
2835 * Desc: set white balance mode
2836 * Argument:
2837 *   mode:  auto: auto white balance
2838 *          manual: manual white balance
2839 *****************************
2840 */
rk_aiq_uapi2_setWBMode(const rk_aiq_sys_ctx_t * ctx,opMode_t mode)2841 XCamReturn rk_aiq_uapi2_setWBMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
2842 {
2843     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2844     rk_aiq_uapiV2_wb_opMode_t attr;
2845     memset(&attr, 0, sizeof(attr));
2846     IMGPROC_FUNC_ENTER
2847     if (mode >= OP_INVAL || mode < OP_AUTO) {
2848         ret = XCAM_RETURN_ERROR_PARAM;
2849         RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
2850     }
2851     if (mode == OP_AUTO) {
2852         attr.mode = RK_AIQ_WB_MODE_AUTO;
2853     } else if (mode == OP_MANUAL) {
2854         attr.mode = RK_AIQ_WB_MODE_MANUAL;
2855     } else {
2856         ret = XCAM_RETURN_ERROR_PARAM;
2857         RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
2858     }
2859     ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, attr);
2860     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
2861     IMGPROC_FUNC_EXIT
2862     return ret;
2863 }
2864 
rk_aiq_uapi2_getWBMode(const rk_aiq_sys_ctx_t * ctx,opMode_t * mode)2865 XCamReturn rk_aiq_uapi2_getWBMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode)
2866 {
2867     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2868     rk_aiq_uapiV2_wb_opMode_t attr;
2869     IMGPROC_FUNC_ENTER
2870     ret = rk_aiq_user_api2_awb_GetWpModeAttrib(ctx, &attr);
2871     RKAIQ_IMGPROC_CHECK_RET(ret, "getWBMode failed!");
2872     if (attr.mode == RK_AIQ_WB_MODE_AUTO) {
2873         *mode = OP_AUTO;
2874     } else if (attr.mode == RK_AIQ_WB_MODE_MANUAL) {
2875         *mode = OP_MANUAL;
2876     } else {
2877         *mode = OP_INVAL;
2878     }
2879     IMGPROC_FUNC_EXIT
2880     return ret;
2881 }
2882 
2883 
2884 
2885 /*
2886 *****************************
2887 *
2888 * Desc: lock/unlock auto white balance
2889 * Argument:
2890 *
2891 *
2892 *****************************
2893 */
rk_aiq_uapi2_lockAWB(const rk_aiq_sys_ctx_t * ctx)2894 XCamReturn rk_aiq_uapi2_lockAWB(const rk_aiq_sys_ctx_t* ctx)
2895 {
2896     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2897     IMGPROC_FUNC_ENTER
2898     ret = rk_aiq_user_api2_awb_Lock(ctx);
2899     IMGPROC_FUNC_EXIT
2900     return ret;
2901 }
2902 
rk_aiq_uapi2_unlockAWB(const rk_aiq_sys_ctx_t * ctx)2903 XCamReturn rk_aiq_uapi2_unlockAWB(const rk_aiq_sys_ctx_t* ctx)
2904 {
2905     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2906     IMGPROC_FUNC_ENTER
2907     ret = rk_aiq_user_api2_awb_Unlock(ctx);
2908     IMGPROC_FUNC_EXIT
2909     return ret;
2910 }
2911 
2912 /*
2913 *****************************
2914 *
2915 * Desc: set manual white balance scene mode
2916 * Argument:
2917 *   ct_scene:
2918 *
2919 *****************************
2920 */
rk_aiq_uapi2_setMWBScene(const rk_aiq_sys_ctx_t * ctx,rk_aiq_wb_scene_t scene)2921 XCamReturn rk_aiq_uapi2_setMWBScene(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_scene_t scene)
2922 {
2923     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2924     rk_aiq_wb_mwb_attrib_t attr;
2925     memset(&attr, 0, sizeof(attr));
2926     IMGPROC_FUNC_ENTER
2927     if (ctx == NULL) {
2928         ret = XCAM_RETURN_ERROR_PARAM;
2929         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setMWBScene failed!");
2930     }
2931 
2932     if (scene < RK_AIQ_WBCT_INCANDESCENT || scene > RK_AIQ_WBCT_SHADE) {
2933         ret = XCAM_RETURN_ERROR_PARAM;
2934         RKAIQ_IMGPROC_CHECK_RET(ret, "invalid scene mode, setMWBScene failed!");
2935     }
2936     rk_aiq_uapiV2_wb_opMode_t opMode;
2937     memset(&opMode, 0, sizeof(opMode));
2938     opMode.mode = RK_AIQ_WB_MODE_MANUAL;
2939     ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
2940     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
2941     attr.mode = RK_AIQ_MWB_MODE_SCENE;
2942     attr.para.scene = scene;
2943     ret = rk_aiq_user_api2_awb_SetMwbAttrib(ctx, attr);
2944     RKAIQ_IMGPROC_CHECK_RET(ret, "setMWBScene failed!");
2945     IMGPROC_FUNC_EXIT
2946     return ret;
2947 }
2948 
rk_aiq_uapi2_getMWBScene(const rk_aiq_sys_ctx_t * ctx,rk_aiq_wb_scene_t * scene)2949 XCamReturn rk_aiq_uapi2_getMWBScene(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_scene_t *scene)
2950 {
2951     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2952     rk_aiq_wb_mwb_attrib_t attr;
2953     memset(&attr, 0, sizeof(attr));
2954     IMGPROC_FUNC_ENTER
2955     if ((ctx == NULL) || (scene == NULL)) {
2956         ret = XCAM_RETURN_ERROR_PARAM;
2957         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getMWBScene failed!");
2958     }
2959     //attr.mode = RK_AIQ_WB_MODE_MANUAL;
2960     ret = rk_aiq_user_api2_awb_GetMwbAttrib(ctx, &attr);
2961     RKAIQ_IMGPROC_CHECK_RET(ret, "getMWBScene failed!");
2962     if(attr.mode == RK_AIQ_MWB_MODE_SCENE) {
2963         *scene = attr.para.scene;
2964     } else {
2965         LOGE("get manual wb scene failed, since current manual mode is not RK_AIQ_MWB_MODE_SCENE ");
2966     }
2967     IMGPROC_FUNC_EXIT
2968     return ret;
2969 }
2970 
2971 
2972 /*
2973 *****************************
2974 *
2975 * Desc: set manual white balance r/b gain
2976 * Argument:
2977 *   ct_scene:
2978 *
2979 *****************************
2980 */
rk_aiq_uapi2_setMWBGain(const rk_aiq_sys_ctx_t * ctx,rk_aiq_wb_gain_t * gain)2981 XCamReturn rk_aiq_uapi2_setMWBGain(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_gain_t *gain)
2982 {
2983     XCamReturn ret = XCAM_RETURN_NO_ERROR;
2984     rk_aiq_wb_mwb_attrib_t attr;
2985     memset(&attr, 0, sizeof(attr));
2986     IMGPROC_FUNC_ENTER
2987     if ((ctx == NULL) || (gain == NULL)) {
2988         ret = XCAM_RETURN_ERROR_PARAM;
2989         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setMWBGain failed!");
2990     }
2991     rk_aiq_uapiV2_wb_opMode_t opMode;
2992     memset(&opMode, 0, sizeof(opMode));
2993     opMode.mode = RK_AIQ_WB_MODE_MANUAL;
2994     ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
2995     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
2996     attr.mode = RK_AIQ_MWB_MODE_WBGAIN;
2997     attr.para.gain = *gain;
2998     ret = rk_aiq_user_api2_awb_SetMwbAttrib(ctx, attr);
2999     RKAIQ_IMGPROC_CHECK_RET(ret, "setMWBGain failed!");
3000     IMGPROC_FUNC_EXIT
3001     return ret;
3002 }
3003 
rk_aiq_uapi2_getWBGain(const rk_aiq_sys_ctx_t * ctx,rk_aiq_wb_gain_t * gain)3004 XCamReturn rk_aiq_uapi2_getWBGain(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_gain_t *gain)
3005 {
3006     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3007 
3008     rk_aiq_wb_querry_info_t query_info;
3009     IMGPROC_FUNC_ENTER
3010     if ((ctx == NULL) || (gain == NULL)) {
3011         ret = XCAM_RETURN_ERROR_PARAM;
3012         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getMWBGain failed!");
3013     }
3014     ret = rk_aiq_user_api2_awb_QueryWBInfo(ctx, &query_info);
3015     RKAIQ_IMGPROC_CHECK_RET(ret, "getMWBGain failed!");
3016     *gain = query_info.gain;
3017     IMGPROC_FUNC_EXIT
3018 
3019     return ret;
3020 }
3021 
3022 /*
3023 *****************************
3024 *
3025 * Desc: set manual white balance color temperature
3026 * Argument:
3027 *   ct: color temperature value [2800, 7500]K
3028 *
3029 *****************************
3030 */
rk_aiq_uapi2_setMWBCT(const rk_aiq_sys_ctx_t * ctx,unsigned int ct)3031 XCamReturn rk_aiq_uapi2_setMWBCT(const rk_aiq_sys_ctx_t* ctx, unsigned int ct)
3032 {
3033     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3034     rk_aiq_wb_mwb_attrib_t attr;
3035     memset(&attr, 0, sizeof(attr));
3036     IMGPROC_FUNC_ENTER
3037     if (ctx == NULL) {
3038         ret = XCAM_RETURN_ERROR_PARAM;
3039         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setMWBCT failed!");
3040     }
3041     rk_aiq_uapiV2_wb_opMode_t opMode;
3042     memset(&opMode, 0, sizeof(opMode));
3043     opMode.mode = RK_AIQ_WB_MODE_MANUAL;
3044     ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
3045     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
3046     attr.mode = RK_AIQ_MWB_MODE_CCT;
3047     attr.para.cct.CCT = (float)ct;
3048     attr.para.cct.CCRI = 0.0f;
3049     ret = rk_aiq_user_api2_awb_SetMwbAttrib(ctx, attr);
3050     RKAIQ_IMGPROC_CHECK_RET(ret, "setMWBCT failed!");
3051     IMGPROC_FUNC_EXIT
3052     return ret;
3053 
3054 }
3055 
rk_aiq_uapi2_getWBCT(const rk_aiq_sys_ctx_t * ctx,unsigned int * ct)3056 XCamReturn rk_aiq_uapi2_getWBCT(const rk_aiq_sys_ctx_t* ctx, unsigned int *ct)
3057 {
3058     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3059     rk_aiq_wb_cct_t cct;
3060     IMGPROC_FUNC_ENTER
3061     if ((ctx == NULL) || (ct == NULL)) {
3062         ret = XCAM_RETURN_ERROR_PARAM;
3063         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getMWBCT failed!");
3064     }
3065     ret = rk_aiq_user_api2_awb_GetCCT(ctx, &cct);
3066     *ct = (unsigned int)cct.CCT;
3067 
3068     IMGPROC_FUNC_EXIT
3069     return ret;
3070 }
3071 
3072 
rk_aiq_uapi2_setAwbGainOffsetAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wb_awb_wbGainOffset_t offset)3073 XCamReturn rk_aiq_uapi2_setAwbGainOffsetAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_wbGainOffset_t offset)
3074 {
3075     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3076     IMGPROC_FUNC_ENTER
3077     if (ctx == NULL) {
3078         ret = XCAM_RETURN_ERROR_PARAM;
3079         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setWbGainOffsetAttrib failed!");
3080     }
3081     rk_aiq_uapiV2_wb_opMode_t opMode;
3082     memset(&opMode, 0, sizeof(opMode));
3083     opMode.mode = RK_AIQ_WB_MODE_AUTO;
3084     opMode.sync.sync_mode = offset.sync.sync_mode;
3085     ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
3086     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
3087     ret = rk_aiq_user_api2_awb_SetWbGainOffsetAttrib(ctx, offset);
3088     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbGainOffsetAttrib failed!");
3089     IMGPROC_FUNC_EXIT
3090     return ret;
3091 
3092 }
3093 
rk_aiq_uapi2_getAwbGainOffsetAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wb_awb_wbGainOffset_t * offset)3094 XCamReturn rk_aiq_uapi2_getAwbGainOffsetAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_wbGainOffset_t *offset)
3095 {
3096     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3097     IMGPROC_FUNC_ENTER
3098     if ((ctx == NULL) || (offset == NULL)) {
3099         ret = XCAM_RETURN_ERROR_PARAM;
3100         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getWbGainOffsetAttrib( failed!");
3101     }
3102     ret = rk_aiq_user_api2_awb_GetWbGainOffsetAttrib(ctx, offset);
3103     RKAIQ_IMGPROC_CHECK_RET(ret, "getWbGainOffsetAttrib failed!");
3104 
3105     IMGPROC_FUNC_EXIT
3106     return ret;
3107 }
3108 
rk_aiq_uapi2_setAwbGainAdjustAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wb_awb_wbGainAdjust_t adjust)3109 XCamReturn rk_aiq_uapi2_setAwbGainAdjustAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_wbGainAdjust_t adjust)
3110 {
3111     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3112     IMGPROC_FUNC_ENTER
3113     if (ctx == NULL) {
3114         ret = XCAM_RETURN_ERROR_PARAM;
3115         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setWbGainAdjustAttrib failed!");
3116     }
3117     rk_aiq_uapiV2_wb_opMode_t opMode;
3118 
3119     memset(&opMode, 0, sizeof(opMode));
3120     opMode.sync.sync_mode = adjust.sync.sync_mode;
3121     opMode.mode = RK_AIQ_WB_MODE_AUTO;
3122     ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
3123     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
3124     ret = rk_aiq_user_api2_awb_SetWbGainAdjustAttrib(ctx, adjust);
3125     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbGainAdjustAttrib failed!");
3126     IMGPROC_FUNC_EXIT
3127     return ret;
3128 
3129 }
3130 
rk_aiq_uapi2_getAwbGainAdjustAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wb_awb_wbGainAdjust_t * adjust)3131 XCamReturn rk_aiq_uapi2_getAwbGainAdjustAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_wbGainAdjust_t *adjust)
3132 {
3133     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3134     IMGPROC_FUNC_ENTER
3135     if ((ctx == NULL) || (adjust == NULL)) {
3136         ret = XCAM_RETURN_ERROR_PARAM;
3137         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getWbGainAdjustAttrib failed!");
3138     }
3139     ret = rk_aiq_user_api2_awb_GetWbGainAdjustAttrib(ctx, adjust);
3140     RKAIQ_IMGPROC_CHECK_RET(ret, "getWbGainAdjustAttrib failed!");
3141 
3142     IMGPROC_FUNC_EXIT
3143     return ret;
3144 }
3145 
3146 
rk_aiq_uapi2_setAwbMultiWindowAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wb_awb_mulWindow_t multiwindow)3147 XCamReturn rk_aiq_uapi2_setAwbMultiWindowAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_mulWindow_t multiwindow)
3148 {
3149     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3150     IMGPROC_FUNC_ENTER
3151     if (ctx == NULL) {
3152         ret = XCAM_RETURN_ERROR_PARAM;
3153         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setAwbMultiWindowAttrib failed!");
3154     }
3155     rk_aiq_uapiV2_wb_opMode_t opMode;
3156     memset(&opMode, 0, sizeof(opMode));
3157     opMode.mode = RK_AIQ_WB_MODE_AUTO;
3158     opMode.sync.sync_mode = multiwindow.sync.sync_mode;
3159     ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
3160     RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
3161     ret = rk_aiq_user_api2_awb_SetMultiWindowAttrib(ctx, multiwindow);
3162     RKAIQ_IMGPROC_CHECK_RET(ret, "setAwbMultiWindowAttrib failed!");
3163     IMGPROC_FUNC_EXIT
3164     return ret;
3165 
3166 }
3167 
rk_aiq_uapi2_getAwbMultiWindowAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wb_awb_mulWindow_t * multiwindow)3168 XCamReturn rk_aiq_uapi2_getAwbMultiWindowAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_mulWindow_t *multiwindow)
3169 {
3170     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3171     IMGPROC_FUNC_ENTER
3172     if ((ctx == NULL) || (multiwindow == NULL)) {
3173         ret = XCAM_RETURN_ERROR_PARAM;
3174         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAwbMultiWindowAttrib failed!");
3175     }
3176     ret = rk_aiq_user_api2_awb_GetMultiWindowAttrib(ctx, multiwindow);
3177     RKAIQ_IMGPROC_CHECK_RET(ret, "getAwbMultiWindowAttrib failed!");
3178 
3179     IMGPROC_FUNC_EXIT
3180     return ret;
3181 }
3182 
rk_aiq_uapi2_setAwbV30AllAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wbV30_attrib_t attr)3183 XCamReturn rk_aiq_uapi2_setAwbV30AllAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wbV30_attrib_t attr)
3184 {
3185     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3186     IMGPROC_FUNC_ENTER
3187     if (ctx == NULL) {
3188         ret = XCAM_RETURN_ERROR_PARAM;
3189         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setAwbV30AllAttrib failed!");
3190     }
3191     ret = rk_aiq_user_api2_awbV30_SetAllAttrib(ctx, attr);
3192     RKAIQ_IMGPROC_CHECK_RET(ret, "setAwbV30AllAttrib failed!");
3193     IMGPROC_FUNC_EXIT
3194     return ret;
3195 
3196 }
3197 
rk_aiq_uapi2_getAwbV30AllAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wbV30_attrib_t * attr)3198 XCamReturn rk_aiq_uapi2_getAwbV30AllAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wbV30_attrib_t *attr)
3199 {
3200     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3201     IMGPROC_FUNC_ENTER
3202     if ((ctx == NULL) || (attr == NULL)) {
3203         ret = XCAM_RETURN_ERROR_PARAM;
3204         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAwbV30AllAttrib failed!");
3205     }
3206     ret = rk_aiq_user_api2_awbV30_GetAllAttrib(ctx, attr);
3207     RKAIQ_IMGPROC_CHECK_RET(ret, "getAwbV30AllAttrib failed!");
3208 
3209     IMGPROC_FUNC_EXIT
3210     return ret;
3211 }
3212 
rk_aiq_uapi2_setAwbV21AllAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wbV21_attrib_t attr)3213 XCamReturn rk_aiq_uapi2_setAwbV21AllAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wbV21_attrib_t attr)
3214 {
3215     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3216     IMGPROC_FUNC_ENTER
3217     if (ctx == NULL) {
3218         ret = XCAM_RETURN_ERROR_PARAM;
3219         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setAwbV21AllAttrib failed!");
3220     }
3221     ret = rk_aiq_user_api2_awbV21_SetAllAttrib(ctx, attr);
3222     RKAIQ_IMGPROC_CHECK_RET(ret, "setAwbV21AllAttrib failed!");
3223     IMGPROC_FUNC_EXIT
3224     return ret;
3225 
3226 }
3227 
rk_aiq_uapi2_getAwbV21AllAttrib(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapiV2_wbV21_attrib_t * attr)3228 XCamReturn rk_aiq_uapi2_getAwbV21AllAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wbV21_attrib_t *attr)
3229 {
3230     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3231     IMGPROC_FUNC_ENTER
3232     if ((ctx == NULL) || (attr == NULL)) {
3233         ret = XCAM_RETURN_ERROR_PARAM;
3234         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAwbV21AllAttrib failed!");
3235     }
3236     ret = rk_aiq_user_api2_awbV21_GetAllAttrib(ctx, attr);
3237     RKAIQ_IMGPROC_CHECK_RET(ret, "getAwbV21AllAttrib failed!");
3238 
3239     IMGPROC_FUNC_EXIT
3240     return ret;
3241 }
3242 
3243 
3244 /*
3245 **********************************************************
3246 * Focus & Zoom
3247 **********************************************************
3248 */
rk_aiq_uapi2_setFocusMode(const rk_aiq_sys_ctx_t * ctx,opMode_t mode)3249 XCamReturn rk_aiq_uapi2_setFocusMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
3250 {
3251     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3252 
3253     rk_aiq_af_attrib_t attr;
3254     ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
3255     RKAIQ_IMGPROC_CHECK_RET(ret, "setFocusMode failed!");
3256     if (mode == OP_AUTO) {
3257         attr.AfMode = RKAIQ_AF_MODE_CONTINUOUS_PICTURE;
3258     } else if (mode == OP_MANUAL) {
3259         attr.AfMode = RKAIQ_AF_MODE_FIXED;
3260     } else if (mode == OP_SEMI_AUTO) {
3261         attr.AfMode = RKAIQ_AF_MODE_ONESHOT_AFTER_ZOOM;
3262     } else {
3263         ret = XCAM_RETURN_ERROR_PARAM;
3264         RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
3265     }
3266 
3267     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
3268     ret = rk_aiq_user_api2_af_SetAttrib(ctx, &attr);
3269     RKAIQ_IMGPROC_CHECK_RET(ret, "setFocusMode failed!");
3270     return ret;
3271 }
3272 
rk_aiq_uapi2_getFocusMode(const rk_aiq_sys_ctx_t * ctx,opMode_t * mode)3273 XCamReturn rk_aiq_uapi2_getFocusMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode)
3274 {
3275     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3276 
3277     rk_aiq_af_attrib_t attr;
3278     ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
3279     RKAIQ_IMGPROC_CHECK_RET(ret, "getFocusMode failed!");
3280     if (attr.AfMode == RKAIQ_AF_MODE_FIXED) {
3281         *mode = OP_MANUAL;
3282     } else if (attr.AfMode == RKAIQ_AF_MODE_NOT_SET) {
3283         *mode = OP_INVAL;
3284     } else if (attr.AfMode == RKAIQ_AF_MODE_ONESHOT_AFTER_ZOOM) {
3285         *mode = OP_SEMI_AUTO;
3286     } else {
3287         *mode = OP_AUTO;
3288     }
3289 
3290     return ret;
3291 }
3292 
rk_aiq_uapi2_setFocusPosition(const rk_aiq_sys_ctx_t * ctx,short code)3293 XCamReturn rk_aiq_uapi2_setFocusPosition(const rk_aiq_sys_ctx_t* ctx, short code)
3294 {
3295     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3296     rk_aiq_af_attrib_t attr;
3297 
3298     IMGPROC_FUNC_ENTER
3299     ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
3300     RKAIQ_IMGPROC_CHECK_RET(ret, "setFixedModeCode failed!");
3301     attr.fixedModeDefCode = code;
3302     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
3303     ret = rk_aiq_user_api2_af_SetAttrib(ctx, &attr);
3304     RKAIQ_IMGPROC_CHECK_RET(ret, "setFixedModeCode failed!");
3305     IMGPROC_FUNC_EXIT
3306     return ret;
3307 }
3308 
rk_aiq_uapi2_getFocusPosition(const rk_aiq_sys_ctx_t * ctx,short * code)3309 XCamReturn rk_aiq_uapi2_getFocusPosition(const rk_aiq_sys_ctx_t* ctx, short * code)
3310 {
3311     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3312     rk_aiq_af_attrib_t attr;
3313     IMGPROC_FUNC_ENTER
3314     ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
3315     RKAIQ_IMGPROC_CHECK_RET(ret, "getFixedModeCode failed!");
3316     *code = attr.fixedModeDefCode;
3317     IMGPROC_FUNC_EXIT
3318     return ret;
3319 }
3320 
rk_aiq_uapi2_setFocusWin(const rk_aiq_sys_ctx_t * ctx,paRect_t * rect)3321 XCamReturn rk_aiq_uapi2_setFocusWin(const rk_aiq_sys_ctx_t* ctx, paRect_t *rect)
3322 {
3323     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3324     rk_aiq_af_attrib_t attr;
3325     IMGPROC_FUNC_ENTER
3326     ret = rk_aiq_user_api_af_GetAttrib(ctx, &attr);
3327     RKAIQ_IMGPROC_CHECK_RET(ret, "setFocusWin failed!");
3328 
3329     attr.h_offs = rect->x;
3330     attr.v_offs = rect->y;
3331     attr.h_size = rect->w;
3332     attr.v_size = rect->h;
3333     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
3334     ret = rk_aiq_user_api2_af_SetAttrib(ctx, &attr);
3335     RKAIQ_IMGPROC_CHECK_RET(ret, "setFocusWin failed!");
3336     IMGPROC_FUNC_EXIT
3337     return ret;
3338 }
3339 
rk_aiq_uapi2_getFocusWin(const rk_aiq_sys_ctx_t * ctx,paRect_t * rect)3340 XCamReturn rk_aiq_uapi2_getFocusWin(const rk_aiq_sys_ctx_t* ctx, paRect_t *rect)
3341 {
3342     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3343     rk_aiq_af_attrib_t attr;
3344     IMGPROC_FUNC_ENTER
3345     ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
3346     RKAIQ_IMGPROC_CHECK_RET(ret, "getFocusWin failed!");
3347 
3348     rect->x = attr.h_offs;
3349     rect->y = attr.v_offs;
3350     rect->w = attr.h_size;
3351     rect->h = attr.v_size;
3352     IMGPROC_FUNC_EXIT
3353     return ret;
3354 }
3355 
rk_aiq_uapi2_lockFocus(const rk_aiq_sys_ctx_t * ctx)3356 XCamReturn rk_aiq_uapi2_lockFocus(const rk_aiq_sys_ctx_t* ctx)
3357 {
3358     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3359     IMGPROC_FUNC_ENTER
3360     ret = rk_aiq_user_api2_af_Lock(ctx);
3361     IMGPROC_FUNC_EXIT
3362     return ret;
3363 }
3364 
rk_aiq_uapi2_unlockFocus(const rk_aiq_sys_ctx_t * ctx)3365 XCamReturn rk_aiq_uapi2_unlockFocus(const rk_aiq_sys_ctx_t* ctx)
3366 {
3367     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3368     IMGPROC_FUNC_ENTER
3369     ret = rk_aiq_user_api2_af_Unlock(ctx);
3370     IMGPROC_FUNC_EXIT
3371     return ret;
3372 }
3373 
rk_aiq_uapi2_oneshotFocus(const rk_aiq_sys_ctx_t * ctx)3374 XCamReturn rk_aiq_uapi2_oneshotFocus(const rk_aiq_sys_ctx_t* ctx)
3375 {
3376     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3377     IMGPROC_FUNC_ENTER
3378     ret = rk_aiq_user_api2_af_Oneshot(ctx);
3379     IMGPROC_FUNC_EXIT
3380     return ret;
3381 }
3382 
rk_aiq_uapi2_manualTrigerFocus(const rk_aiq_sys_ctx_t * ctx)3383 XCamReturn rk_aiq_uapi2_manualTrigerFocus(const rk_aiq_sys_ctx_t* ctx)
3384 {
3385     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3386     IMGPROC_FUNC_ENTER
3387     ret = rk_aiq_user_api2_af_ManualTriger(ctx);
3388     IMGPROC_FUNC_EXIT
3389     return ret;
3390 }
3391 
rk_aiq_uapi2_trackingFocus(const rk_aiq_sys_ctx_t * ctx)3392 XCamReturn rk_aiq_uapi2_trackingFocus(const rk_aiq_sys_ctx_t* ctx)
3393 {
3394     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3395     IMGPROC_FUNC_ENTER
3396     ret = rk_aiq_user_api2_af_Tracking(ctx);
3397     IMGPROC_FUNC_EXIT
3398     return ret;
3399 }
3400 
rk_aiq_uapi2_getSearchPath(const rk_aiq_sys_ctx_t * ctx,rk_aiq_af_sec_path_t * path)3401 XCamReturn rk_aiq_uapi2_getSearchPath(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_sec_path_t* path)
3402 {
3403     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3404     IMGPROC_FUNC_ENTER
3405     ret = rk_aiq_user_api2_af_GetSearchPath(ctx, path);
3406     IMGPROC_FUNC_EXIT
3407 
3408     return ret;
3409 }
3410 
rk_aiq_uapi2_getSearchResult(const rk_aiq_sys_ctx_t * ctx,rk_aiq_af_result_t * result)3411 XCamReturn rk_aiq_uapi2_getSearchResult(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_result_t* result)
3412 {
3413     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3414 
3415     IMGPROC_FUNC_ENTER
3416     ret = rk_aiq_user_api2_af_GetSearchResult(ctx, result);
3417     IMGPROC_FUNC_EXIT
3418 
3419     return ret;
3420 }
3421 
rk_aiq_uapi2_setOpZoomPosition(const rk_aiq_sys_ctx_t * ctx,int pos)3422 XCamReturn rk_aiq_uapi2_setOpZoomPosition(const rk_aiq_sys_ctx_t* ctx, int pos)
3423 {
3424     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3425     IMGPROC_FUNC_ENTER
3426     ret = rk_aiq_user_api2_af_SetZoomIndex(ctx, pos);
3427     IMGPROC_FUNC_EXIT
3428 
3429     return ret;
3430 }
3431 
rk_aiq_uapi2_getOpZoomPosition(const rk_aiq_sys_ctx_t * ctx,int * pos)3432 XCamReturn rk_aiq_uapi2_getOpZoomPosition(const rk_aiq_sys_ctx_t* ctx, int *pos)
3433 {
3434     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3435     IMGPROC_FUNC_ENTER
3436     ret = rk_aiq_user_api2_af_GetZoomIndex(ctx, pos);
3437     IMGPROC_FUNC_EXIT
3438 
3439     return ret;
3440 }
3441 
rk_aiq_uapi2_endOpZoomChange(const rk_aiq_sys_ctx_t * ctx)3442 XCamReturn rk_aiq_uapi2_endOpZoomChange(const rk_aiq_sys_ctx_t* ctx)
3443 {
3444     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3445 
3446     IMGPROC_FUNC_ENTER
3447     ret = rk_aiq_user_api2_af_EndZoomChg(ctx);
3448     IMGPROC_FUNC_EXIT
3449 
3450     return ret;
3451 }
3452 
rk_aiq_uapi2_getZoomRange(const rk_aiq_sys_ctx_t * ctx,rk_aiq_af_zoomrange * range)3453 XCamReturn rk_aiq_uapi2_getZoomRange(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_zoomrange * range)
3454 {
3455     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3456     IMGPROC_FUNC_ENTER
3457     ret = rk_aiq_user_api2_af_GetZoomRange(ctx, range);
3458     IMGPROC_FUNC_EXIT
3459 
3460     return ret;
3461 }
3462 
rk_aiq_uapi2_getFocusRange(const rk_aiq_sys_ctx_t * ctx,rk_aiq_af_focusrange * range)3463 XCamReturn rk_aiq_uapi2_getFocusRange(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_focusrange* range)
3464 {
3465     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3466     IMGPROC_FUNC_ENTER
3467     ret = rk_aiq_user_api2_af_GetFocusRange(ctx, range);
3468     IMGPROC_FUNC_EXIT
3469 
3470     return ret;
3471 }
3472 
rk_aiq_uapi2_startZoomCalib(const rk_aiq_sys_ctx_t * ctx)3473 XCamReturn rk_aiq_uapi2_startZoomCalib(const rk_aiq_sys_ctx_t* ctx)
3474 {
3475     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3476     IMGPROC_FUNC_ENTER
3477     ret = rk_aiq_user_api2_af_StartZoomCalib(ctx);
3478     IMGPROC_FUNC_EXIT
3479 
3480     return ret;
3481 }
3482 
rk_aiq_uapi2_resetZoom(const rk_aiq_sys_ctx_t * ctx)3483 XCamReturn rk_aiq_uapi2_resetZoom(const rk_aiq_sys_ctx_t* ctx)
3484 {
3485     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3486     IMGPROC_FUNC_ENTER
3487     ret = rk_aiq_user_api2_af_resetZoom(ctx);
3488     IMGPROC_FUNC_EXIT
3489 
3490     return ret;
3491 }
3492 
rk_aiq_uapi2_setAngleZ(const rk_aiq_sys_ctx_t * ctx,float angleZ)3493 XCamReturn rk_aiq_uapi2_setAngleZ(const rk_aiq_sys_ctx_t* ctx, float angleZ)
3494 {
3495     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3496     IMGPROC_FUNC_ENTER
3497     ret = rk_aiq_user_api2_af_setAngleZ(ctx, angleZ);
3498     IMGPROC_FUNC_EXIT
3499 
3500     return ret;
3501 }
3502 
3503 /*
3504 **********************************************************
3505 * Color Correction
3506 **********************************************************
3507 */
3508 /*
3509 *****************************
3510 *
3511 * Desc: set/get color correction mode
3512 * Argument:
3513 *   mode:
3514 *     auto: auto color correction
3515 *     manual: manual color correction
3516 *
3517 *****************************
3518 */
rk_aiq_uapi2_setCCMMode(const rk_aiq_sys_ctx_t * ctx,opMode_t mode)3519 XCamReturn rk_aiq_uapi2_setCCMMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
3520 {
3521     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3522 #if RKAIQ_HAVE_CCM_V1
3523     rk_aiq_ccm_attrib_t attr;
3524     memset(&attr, 0, sizeof(attr));
3525     IMGPROC_FUNC_ENTER
3526     if (mode >= OP_INVAL || mode < OP_AUTO) {
3527         ret = XCAM_RETURN_ERROR_PARAM;
3528         RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
3529     }
3530     ret = rk_aiq_user_api2_accm_GetAttrib(ctx, &attr);
3531     RKAIQ_IMGPROC_CHECK_RET(ret, "setCCMMode failed in getting accm attrib!");
3532 
3533     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
3534     if (mode == OP_AUTO) {
3535         attr.mode = RK_AIQ_CCM_MODE_AUTO;
3536     } else if (mode == OP_MANUAL) {
3537         attr.mode = RK_AIQ_CCM_MODE_MANUAL;
3538     } else {
3539         ret = XCAM_RETURN_ERROR_PARAM;
3540         RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
3541     }
3542     ret = rk_aiq_user_api2_accm_SetAttrib(ctx, &attr);
3543 #elif RKAIQ_HAVE_CCM_V2
3544     rk_aiq_ccm_v2_attrib_t attr;
3545     memset(&attr, 0, sizeof(attr));
3546     IMGPROC_FUNC_ENTER
3547     if (mode >= OP_INVAL || mode < OP_AUTO) {
3548         ret = XCAM_RETURN_ERROR_PARAM;
3549         RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
3550     }
3551     ret = rk_aiq_user_api2_accm_v2_GetAttrib(ctx, &attr);
3552     RKAIQ_IMGPROC_CHECK_RET(ret, "setCCMMode failed in getting accm attrib!");
3553 
3554     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
3555     if (mode == OP_AUTO) {
3556         attr.mode = RK_AIQ_CCM_MODE_AUTO;
3557     } else if (mode == OP_MANUAL) {
3558         attr.mode = RK_AIQ_CCM_MODE_MANUAL;
3559     } else {
3560         ret = XCAM_RETURN_ERROR_PARAM;
3561         RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
3562     }
3563     ret = rk_aiq_user_api2_accm_v2_SetAttrib(ctx, &attr);
3564 #endif
3565     RKAIQ_IMGPROC_CHECK_RET(ret, "setCCMMode failed!");
3566     IMGPROC_FUNC_EXIT
3567     return ret;
3568 }
3569 
rk_aiq_uapi2_getCCMMode(const rk_aiq_sys_ctx_t * ctx,opMode_t * mode)3570 XCamReturn rk_aiq_uapi2_getCCMMode(const rk_aiq_sys_ctx_t* ctx, opMode_t* mode)
3571 {
3572     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3573 #if RKAIQ_HAVE_CCM_V1
3574     rk_aiq_ccm_attrib_t attr;
3575     memset(&attr, 0, sizeof(attr));
3576     IMGPROC_FUNC_ENTER
3577     ret = rk_aiq_user_api2_accm_GetAttrib(ctx, &attr);
3578     RKAIQ_IMGPROC_CHECK_RET(ret, "getCCMMode failed!");
3579     if (attr.mode == RK_AIQ_CCM_MODE_AUTO) {
3580         *mode = OP_AUTO;
3581     } else if (attr.mode == RK_AIQ_CCM_MODE_MANUAL) {
3582         *mode = OP_MANUAL;
3583     } else {
3584         *mode = OP_INVAL;
3585     }
3586 #elif RKAIQ_HAVE_CCM_V2
3587     rk_aiq_ccm_v2_attrib_t attr;
3588     memset(&attr, 0, sizeof(attr));
3589     IMGPROC_FUNC_ENTER
3590     ret = rk_aiq_user_api2_accm_v2_GetAttrib(ctx, &attr);
3591     RKAIQ_IMGPROC_CHECK_RET(ret, "getCCMMode failed!");
3592     if (attr.mode == RK_AIQ_CCM_MODE_AUTO) {
3593         *mode = OP_AUTO;
3594     } else if (attr.mode == RK_AIQ_CCM_MODE_MANUAL) {
3595         *mode = OP_MANUAL;
3596     } else {
3597         *mode = OP_INVAL;
3598     }
3599 #endif
3600     IMGPROC_FUNC_EXIT
3601     return ret;
3602 }
3603 
3604 /*
3605 *****************************
3606 *
3607 * Desc: set manual color correction matrix
3608 *     this function is active for color correction is manual mode
3609         get color correction matrix
3610 * Argument:
3611 * mccm:
3612 *                   3x3 matrix
3613 *                   1x3 offset
3614 *
3615 *****************************
3616 */
rk_aiq_uapi2_setMCcCoef(const rk_aiq_sys_ctx_t * ctx,rk_aiq_ccm_matrix_t * mccm)3617 XCamReturn rk_aiq_uapi2_setMCcCoef(const rk_aiq_sys_ctx_t* ctx, rk_aiq_ccm_matrix_t* mccm)
3618 {
3619     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3620 #if RKAIQ_HAVE_CCM_V1
3621     rk_aiq_ccm_attrib_t attr;
3622     memset(&attr, 0, sizeof(attr));
3623     IMGPROC_FUNC_ENTER
3624     if ((ctx == NULL) || (mccm == NULL) ) {
3625         ret = XCAM_RETURN_ERROR_PARAM;
3626         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, set CCM Manual Matrix failed!");
3627     }
3628     ret = rk_aiq_user_api2_accm_GetAttrib(ctx, &attr);
3629     RKAIQ_IMGPROC_CHECK_RET(ret, "Set CCM Manual Matrix failed in getting accm attrib!!");
3630 
3631     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
3632     attr.mode = RK_AIQ_CCM_MODE_MANUAL;
3633     memcpy(attr.stManual.ccMatrix, mccm->ccMatrix, sizeof(float) * 9);
3634     memcpy(attr.stManual.ccOffsets, mccm->ccOffsets, sizeof(float) * 3);
3635     ret = rk_aiq_user_api2_accm_SetAttrib(ctx, &attr);
3636 #elif RKAIQ_HAVE_CCM_V2
3637     rk_aiq_ccm_v2_attrib_t attr;
3638     memset(&attr, 0, sizeof(attr));
3639     IMGPROC_FUNC_ENTER
3640     if ((ctx == NULL) || (mccm == NULL) ) {
3641         ret = XCAM_RETURN_ERROR_PARAM;
3642         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, set CCM Manual Matrix failed!");
3643     }
3644     ret = rk_aiq_user_api2_accm_v2_GetAttrib(ctx, &attr);
3645     RKAIQ_IMGPROC_CHECK_RET(ret, "Set CCM Manual Matrix failed in getting accm attrib!!");
3646 
3647     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
3648     attr.mode = RK_AIQ_CCM_MODE_MANUAL;
3649     memcpy(attr.stManual.ccMatrix, mccm->ccMatrix, sizeof(float) * 9);
3650     memcpy(attr.stManual.ccOffsets, mccm->ccOffsets, sizeof(float) * 3);
3651     ret = rk_aiq_user_api2_accm_v2_SetAttrib(ctx, &attr);
3652 #endif
3653     RKAIQ_IMGPROC_CHECK_RET(ret, "set CCM Manual Matrix failed!");
3654     IMGPROC_FUNC_EXIT
3655     return ret;
3656 }
3657 
rk_aiq_uapi2_getMCcCoef(const rk_aiq_sys_ctx_t * ctx,rk_aiq_ccm_matrix_t * mccm)3658 XCamReturn rk_aiq_uapi2_getMCcCoef(const rk_aiq_sys_ctx_t* ctx, rk_aiq_ccm_matrix_t* mccm)
3659 {
3660     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3661     rk_aiq_ccm_querry_info_t ccm_querry_info;
3662     IMGPROC_FUNC_ENTER
3663     if ((ctx == NULL) || (mccm == NULL)) {
3664         ret = XCAM_RETURN_ERROR_PARAM;
3665         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get CCM Matrix failed!");
3666     }
3667 
3668     ret = rk_aiq_user_api2_accm_QueryCcmInfo(ctx, &ccm_querry_info);
3669     RKAIQ_IMGPROC_CHECK_RET(ret, "get CCM Matrix failed!");
3670 
3671     for (int i = 0; i < 9; i++)
3672         mccm->ccMatrix[i] = ccm_querry_info.ccMatrix[i];
3673     for (int i = 0; i < 3; i++)
3674         mccm->ccOffsets[i] = ccm_querry_info.ccOffsets[i];
3675     IMGPROC_FUNC_EXIT
3676     return ret;
3677 }
3678 
3679 /*
3680 *****************************
3681 *
3682 * Desc: get auto color correction saturation
3683 *     this function is active for color correction is auto mode
3684 * Argument:
3685 *   finalsat : range in [0, 100]
3686 *
3687 *****************************
3688 */
rk_aiq_uapi2_getACcmSat(const rk_aiq_sys_ctx_t * ctx,float * finalsat)3689 XCamReturn rk_aiq_uapi2_getACcmSat(const rk_aiq_sys_ctx_t* ctx, float* finalsat)
3690 {
3691     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3692     rk_aiq_ccm_querry_info_t ccm_querry_info;
3693     IMGPROC_FUNC_ENTER
3694     if ((ctx == NULL) || (finalsat == NULL)) {
3695         ret = XCAM_RETURN_ERROR_PARAM;
3696         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get Auto CCM Saturation failed!");
3697     }
3698 
3699     ret = rk_aiq_user_api2_accm_QueryCcmInfo(ctx, &ccm_querry_info);
3700     RKAIQ_IMGPROC_CHECK_RET(ret, "get CCM Auto CCM Saturation failed!");
3701     *finalsat = ccm_querry_info.finalSat;
3702     IMGPROC_FUNC_EXIT
3703     return ret;
3704 }
3705 
3706 /*
3707 *****************************
3708 *
3709 * Desc: get auto color correction used ccm name
3710 *     this function is active for color correction is auto mode
3711 * Argument:
3712 *    ccm_name[2]
3713 *
3714 *****************************
3715 */
rk_aiq_uapi2_getACcmMatrixName(const rk_aiq_sys_ctx_t * ctx,char ** ccm_name)3716 XCamReturn rk_aiq_uapi2_getACcmMatrixName(const rk_aiq_sys_ctx_t* ctx, char** ccm_name)
3717 {
3718     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3719     rk_aiq_ccm_querry_info_t ccm_querry_info;
3720     IMGPROC_FUNC_ENTER
3721     if ((ctx == NULL) || (ccm_name == NULL)) {
3722         ret = XCAM_RETURN_ERROR_PARAM;
3723         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get Auto CCM Name failed!");
3724     }
3725 
3726     ret = rk_aiq_user_api2_accm_QueryCcmInfo(ctx, &ccm_querry_info);
3727     RKAIQ_IMGPROC_CHECK_RET(ret, "get CCM Auto CCM Name failed!");
3728     strcpy(ccm_name[0], ccm_querry_info.ccmname1);
3729     strcpy(ccm_name[1], ccm_querry_info.ccmname2);
3730     IMGPROC_FUNC_EXIT
3731     return ret;
3732 }
3733 
3734 /*
3735 **********************************************************
3736 * 3-Dimensional Look Up Table
3737 **********************************************************
3738 */
3739 /*
3740 *****************************
3741 *
3742 * Desc: set/get 3dlut mode
3743 * Argument:
3744 *   mode:
3745 *     auto: auto 3dlut
3746 *     manual: manual 3dlut
3747 *
3748 *****************************
3749 */
rk_aiq_uapi2_setLut3dMode(const rk_aiq_sys_ctx_t * ctx,opMode_t mode)3750 XCamReturn rk_aiq_uapi2_setLut3dMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
3751 {
3752     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3753     rk_aiq_lut3d_attrib_t attr;
3754     memset(&attr, 0, sizeof(attr));
3755     IMGPROC_FUNC_ENTER
3756     if (mode >= OP_INVAL || mode < OP_AUTO) {
3757         ret = XCAM_RETURN_ERROR_PARAM;
3758         RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
3759     }
3760     ret = rk_aiq_user_api2_a3dlut_GetAttrib(ctx, &attr);
3761     RKAIQ_IMGPROC_CHECK_RET(ret, "set 3DLUT Mode failed in getting 3dlut attrib!");
3762 
3763     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
3764     if (mode == OP_AUTO) {
3765         attr.mode = RK_AIQ_LUT3D_MODE_AUTO;
3766     } else if (mode == OP_MANUAL) {
3767         attr.mode = RK_AIQ_LUT3D_MODE_MANUAL;
3768     } else {
3769         ret = XCAM_RETURN_ERROR_PARAM;
3770         RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
3771     }
3772     ret = rk_aiq_user_api2_a3dlut_SetAttrib(ctx, &attr);
3773     RKAIQ_IMGPROC_CHECK_RET(ret, "set 3DLUT Mode failed!");
3774     IMGPROC_FUNC_EXIT
3775     return ret;
3776 
3777 }
3778 
rk_aiq_uapi2_getLut3dMode(const rk_aiq_sys_ctx_t * ctx,opMode_t * mode)3779 XCamReturn rk_aiq_uapi2_getLut3dMode(const rk_aiq_sys_ctx_t* ctx, opMode_t* mode)
3780 {
3781     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3782     rk_aiq_lut3d_attrib_t attr;
3783     memset(&attr, 0, sizeof(attr));
3784     IMGPROC_FUNC_ENTER
3785     ret = rk_aiq_user_api2_a3dlut_GetAttrib(ctx, &attr);
3786     RKAIQ_IMGPROC_CHECK_RET(ret, "get 3DLUT Mode failed!");
3787     if (attr.mode == RK_AIQ_LUT3D_MODE_AUTO) {
3788         *mode = OP_AUTO;
3789     } else if (attr.mode == RK_AIQ_LUT3D_MODE_MANUAL) {
3790         *mode = OP_MANUAL;
3791     } else {
3792         *mode = OP_INVAL;
3793     }
3794     IMGPROC_FUNC_EXIT
3795     return ret;
3796 }
3797 
3798 /*
3799 *****************************
3800 *
3801 * Desc: set manual 3d Look-up-table
3802 *     this function is active for 3dlut is manual mode
3803         get 3d Look-up-table
3804 * Argument:
3805 *     mlut:
3806 *           lut_r[729]
3807 *           lut_g[729]
3808 *           lut_b[729]
3809 *
3810 *****************************
3811 */
rk_aiq_uapi2_setM3dLut(const rk_aiq_sys_ctx_t * ctx,rk_aiq_lut3d_table_t * mlut)3812 XCamReturn rk_aiq_uapi2_setM3dLut(const rk_aiq_sys_ctx_t* ctx, rk_aiq_lut3d_table_t* mlut)
3813 {
3814     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3815     rk_aiq_lut3d_attrib_t attr;
3816     memset(&attr, 0, sizeof(attr));
3817     IMGPROC_FUNC_ENTER
3818     if ((ctx == NULL) || (mlut == NULL) ) {
3819         ret = XCAM_RETURN_ERROR_PARAM;
3820         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, set manual 3d Look-up-table failed!");
3821     }
3822 
3823     ret = rk_aiq_user_api2_a3dlut_GetAttrib(ctx, &attr);
3824     RKAIQ_IMGPROC_CHECK_RET(ret, "set manual 3d Look-up-table in getting 3dlut attrib!");
3825 
3826     attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
3827     attr.mode = RK_AIQ_LUT3D_MODE_MANUAL;
3828     memcpy(attr.stManual.look_up_table_r, mlut->look_up_table_r, sizeof(unsigned short) * 729);
3829     memcpy(attr.stManual.look_up_table_g, mlut->look_up_table_g, sizeof(unsigned short) * 729);
3830     memcpy(attr.stManual.look_up_table_b, mlut->look_up_table_b, sizeof(unsigned short) * 729);
3831     ret = rk_aiq_user_api2_a3dlut_SetAttrib(ctx, &attr);
3832     RKAIQ_IMGPROC_CHECK_RET(ret, "set manual 3d Look-up-table failed!");
3833     IMGPROC_FUNC_EXIT
3834     return ret;
3835 }
3836 
rk_aiq_uapi2_getM3dLut(const rk_aiq_sys_ctx_t * ctx,rk_aiq_lut3d_table_t * mlut)3837 XCamReturn rk_aiq_uapi2_getM3dLut(const rk_aiq_sys_ctx_t* ctx, rk_aiq_lut3d_table_t* mlut)
3838 {
3839     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3840     rk_aiq_lut3d_querry_info_t lut3d_querry_info;
3841     IMGPROC_FUNC_ENTER
3842     if ((ctx == NULL) || (mlut == NULL)) {
3843         ret = XCAM_RETURN_ERROR_PARAM;
3844         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get 3d Look-up-table failed!");
3845     }
3846 
3847     ret = rk_aiq_user_api2_a3dlut_Query3dlutInfo(ctx, &lut3d_querry_info);
3848     RKAIQ_IMGPROC_CHECK_RET(ret, "get 3d Look-up-table failed!");
3849 
3850     memcpy(mlut->look_up_table_r, lut3d_querry_info.look_up_table_r, sizeof(unsigned short) * 729);
3851     memcpy(mlut->look_up_table_g, lut3d_querry_info.look_up_table_g, sizeof(unsigned short) * 729);
3852     memcpy(mlut->look_up_table_b, lut3d_querry_info.look_up_table_b, sizeof(unsigned short) * 729);
3853 
3854     IMGPROC_FUNC_EXIT
3855     return ret;
3856 }
3857 
3858 /*
3859 *****************************
3860 *
3861 * Desc: get auto 3d Look-up-table strength
3862 *     this function is active for 3d Look-up-table is auto mode
3863 * Argument:
3864 *   alpha : range in [0, 1]
3865 *
3866 *****************************
3867 */
rk_aiq_uapi2_getA3dLutStrth(const rk_aiq_sys_ctx_t * ctx,float * alpha)3868 XCamReturn rk_aiq_uapi2_getA3dLutStrth(const rk_aiq_sys_ctx_t* ctx, float* alpha)
3869 {
3870     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3871     rk_aiq_lut3d_querry_info_t lut3d_querry_info;
3872     IMGPROC_FUNC_ENTER
3873     if ((ctx == NULL) || (alpha == NULL)) {
3874         ret = XCAM_RETURN_ERROR_PARAM;
3875         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAuto3DLUT 3d Look-up-table Strength failed!");
3876     }
3877 
3878     ret = rk_aiq_user_api2_a3dlut_Query3dlutInfo(ctx, &lut3d_querry_info);
3879     RKAIQ_IMGPROC_CHECK_RET(ret, "getAuto3DLUT 3d Look-up-table Strength failed!");
3880     *alpha = lut3d_querry_info.alpha;
3881     IMGPROC_FUNC_EXIT
3882     return ret;
3883 }
3884 
3885 /*
3886 *****************************
3887 *
3888 * Desc: get auto 3d Look-up-table used lut name
3889 *     this function is active for 3d Look-up-table is auto mode
3890 * Argument:
3891 *    name
3892 *
3893 *****************************
3894 */
rk_aiq_uapi2_getA3dLutName(const rk_aiq_sys_ctx_t * ctx,char * name)3895 XCamReturn rk_aiq_uapi2_getA3dLutName(const rk_aiq_sys_ctx_t* ctx, char* name)
3896 {
3897     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3898     rk_aiq_lut3d_querry_info_t lut3d_querry_info;
3899     IMGPROC_FUNC_ENTER
3900     if ((ctx == NULL) || (name == NULL)) {
3901         ret = XCAM_RETURN_ERROR_PARAM;
3902         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAuto3DLUT 3d Look-up-table Name failed!");
3903     }
3904 
3905     ret = rk_aiq_user_api2_a3dlut_Query3dlutInfo(ctx, &lut3d_querry_info);
3906     RKAIQ_IMGPROC_CHECK_RET(ret, "getAuto3DLUT 3d Look-up-table Name failed!");
3907     strcpy(name, lut3d_querry_info.name);
3908     IMGPROC_FUNC_EXIT
3909     return ret;
3910 }
3911 
rk_aiq_uapi2_setLdchEn(const rk_aiq_sys_ctx_t * ctx,bool en)3912 XCamReturn rk_aiq_uapi2_setLdchEn(const rk_aiq_sys_ctx_t* ctx, bool en)
3913 {
3914     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3915     IMGPROC_FUNC_ENTER
3916     if (ctx == NULL) {
3917         ret = XCAM_RETURN_ERROR_PARAM;
3918         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
3919     }
3920     rk_aiq_ldch_attrib_t ldchAttr;
3921     ret = rk_aiq_user_api2_aldch_GetAttrib(ctx, &ldchAttr);
3922     RKAIQ_IMGPROC_CHECK_RET(ret, "get ldch attrib failed!");
3923     ldchAttr.en = en;
3924     ret = rk_aiq_user_api2_aldch_SetAttrib(ctx, &ldchAttr);
3925     IMGPROC_FUNC_EXIT
3926     return ret;
3927 }
3928 
rk_aiq_uapi2_setLdchCorrectLevel(const rk_aiq_sys_ctx_t * ctx,int correctLevel)3929 XCamReturn rk_aiq_uapi2_setLdchCorrectLevel(const rk_aiq_sys_ctx_t* ctx, int correctLevel)
3930 {
3931     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3932     IMGPROC_FUNC_ENTER
3933     if (ctx == NULL) {
3934         ret = XCAM_RETURN_ERROR_PARAM;
3935         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
3936     }
3937     rk_aiq_ldch_attrib_t ldchAttr;
3938     ret = rk_aiq_user_api2_aldch_GetAttrib(ctx, &ldchAttr);
3939     RKAIQ_IMGPROC_CHECK_RET(ret, "get ldch attrib failed!");
3940     ldchAttr.correct_level = correctLevel;
3941     ret = rk_aiq_user_api2_aldch_SetAttrib(ctx, &ldchAttr);
3942     IMGPROC_FUNC_EXIT
3943     return ret;
3944 }
3945 
rk_aiq_uapi2_setFecEn(const rk_aiq_sys_ctx_t * ctx,bool en)3946 XCamReturn rk_aiq_uapi2_setFecEn(const rk_aiq_sys_ctx_t* ctx, bool en)
3947 {
3948     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3949     IMGPROC_FUNC_ENTER
3950     if (ctx == NULL) {
3951         ret = XCAM_RETURN_ERROR_PARAM;
3952         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
3953     }
3954     rk_aiq_fec_attrib_t fecAttr;
3955     ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
3956     RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
3957     fecAttr.en = en;
3958     ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
3959     IMGPROC_FUNC_EXIT
3960     return ret;
3961 }
3962 
rk_aiq_uapi2_setFecBypass(const rk_aiq_sys_ctx_t * ctx,bool bypass)3963 XCamReturn rk_aiq_uapi2_setFecBypass(const rk_aiq_sys_ctx_t* ctx, bool bypass)
3964 {
3965     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3966     IMGPROC_FUNC_ENTER
3967     if (ctx == NULL) {
3968         ret = XCAM_RETURN_ERROR_PARAM;
3969         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
3970     }
3971     rk_aiq_fec_attrib_t fecAttr;
3972     ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
3973     RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
3974     fecAttr.bypass = bypass;
3975     ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
3976     IMGPROC_FUNC_EXIT
3977     return ret;
3978 }
3979 
rk_aiq_uapi2_setFecCorrectLevel(const rk_aiq_sys_ctx_t * ctx,int correctLevel)3980 XCamReturn rk_aiq_uapi2_setFecCorrectLevel(const rk_aiq_sys_ctx_t* ctx, int correctLevel)
3981 {
3982     XCamReturn ret = XCAM_RETURN_NO_ERROR;
3983     IMGPROC_FUNC_ENTER
3984     if (ctx == NULL) {
3985         ret = XCAM_RETURN_ERROR_PARAM;
3986         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
3987     }
3988     rk_aiq_fec_attrib_t fecAttr;
3989     ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
3990     RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
3991     fecAttr.correct_level = correctLevel;
3992     ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
3993     IMGPROC_FUNC_EXIT
3994     return ret;
3995 }
3996 
rk_aiq_uapi2_setFecCorrectDirection(const rk_aiq_sys_ctx_t * ctx,const fec_correct_direction_t direction)3997 XCamReturn rk_aiq_uapi2_setFecCorrectDirection(const rk_aiq_sys_ctx_t* ctx,
3998         const fec_correct_direction_t direction)
3999 {
4000     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4001     IMGPROC_FUNC_ENTER
4002     if (ctx == NULL) {
4003         ret = XCAM_RETURN_ERROR_PARAM;
4004         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
4005     }
4006     rk_aiq_fec_attrib_t fecAttr;
4007     ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
4008     RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
4009     fecAttr.direction = direction;
4010     ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
4011     IMGPROC_FUNC_EXIT
4012     return ret;
4013 }
4014 
rk_aiq_uapi2_setFecCorrectMode(const rk_aiq_sys_ctx_t * ctx,const fec_correct_mode_t mode)4015 XCamReturn rk_aiq_uapi2_setFecCorrectMode(const rk_aiq_sys_ctx_t* ctx,
4016         const fec_correct_mode_t mode)
4017 {
4018     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4019     IMGPROC_FUNC_ENTER
4020     if (ctx == NULL) {
4021         ret = XCAM_RETURN_ERROR_PARAM;
4022         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
4023     }
4024     rk_aiq_fec_attrib_t fecAttr;
4025     ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
4026     RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
4027     fecAttr.mode = mode;
4028     ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
4029     IMGPROC_FUNC_EXIT
4030     return ret;
4031 }
4032 
rk_aiq_uapi2_setMirrorFlip(const rk_aiq_sys_ctx_t * ctx,bool mirror,bool flip,int skip_frm_cnt)4033 XCamReturn rk_aiq_uapi2_setMirrorFlip(const rk_aiq_sys_ctx_t* ctx, bool mirror, bool flip,
4034                                       int skip_frm_cnt) {
4035     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4036     IMGPROC_FUNC_ENTER
4037     if (ctx == NULL) {
4038         ret = XCAM_RETURN_ERROR_PARAM;
4039         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
4040     }
4041     return ctx->_rkAiqManager->setMirrorFlip(mirror, flip, skip_frm_cnt);
4042 }
4043 
rk_aiq_uapi2_getMirrorFlip(const rk_aiq_sys_ctx_t * ctx,bool * mirror,bool * flip)4044 XCamReturn rk_aiq_uapi2_getMirrorFlip(const rk_aiq_sys_ctx_t* ctx, bool* mirror, bool* flip) {
4045     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4046     IMGPROC_FUNC_ENTER
4047     if (ctx == NULL || mirror == NULL || flip == NULL) {
4048         ret = XCAM_RETURN_ERROR_PARAM;
4049         RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
4050     }
4051     return ctx->_rkAiqManager->getMirrorFlip(*mirror, *flip);
4052 }
4053 
4054 /*
4055 **********************************************************
4056 * Color Process
4057 **********************************************************
4058 */
4059 
4060 /*
4061 *****************************
4062 *
4063 * Desc: Adjust image contrast level
4064 * Argument:
4065 *    level: contrast level, [0, 255]
4066 *****************************
4067 */
rk_aiq_uapi2_setContrast(const rk_aiq_sys_ctx_t * ctx,unsigned int level)4068 XCamReturn rk_aiq_uapi2_setContrast(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
4069 {
4070     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4071     IMGPROC_FUNC_ENTER
4072 
4073     LOGD("setContrast enter, level=%d\n", level);
4074     acp_attrib_t attrib;
4075     if ((int)level < 0 || level > 255) {
4076         ret = XCAM_RETURN_ERROR_PARAM;
4077         RKAIQ_IMGPROC_CHECK_RET(ret, "level out of range, setContrast failed!");
4078     }
4079 
4080     ret = rk_aiq_user_api2_acp_GetAttrib(ctx, &attrib);
4081     RKAIQ_IMGPROC_CHECK_RET(ret, "getAttrib error,set contrast failed!");
4082     attrib.contrast = level;
4083     ret = rk_aiq_user_api2_acp_SetAttrib(ctx, &attrib);
4084     RKAIQ_IMGPROC_CHECK_RET(ret, "set contrast failed!");
4085     IMGPROC_FUNC_EXIT
4086 
4087     return ret;
4088 }
4089 
rk_aiq_uapi2_getContrast(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)4090 XCamReturn rk_aiq_uapi2_getContrast(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
4091 {
4092     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4093     IMGPROC_FUNC_ENTER
4094     acp_attrib_t attrib;
4095     if (level == NULL || ctx == NULL) {
4096         ret = XCAM_RETURN_ERROR_PARAM;
4097         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getContrast failed!");
4098     }
4099     ret = rk_aiq_user_api2_acp_GetAttrib(ctx, &attrib);
4100     RKAIQ_IMGPROC_CHECK_RET(ret, "get contrast failed!");
4101     *level = attrib.contrast;
4102     IMGPROC_FUNC_EXIT
4103     return ret;
4104 }
4105 
4106 /*
4107 *****************************
4108 *
4109 * Desc: Adjust image brightness level
4110 * Argument:
4111 *    level: brightness level, [0, 255]
4112 *****************************
4113 */
rk_aiq_uapi2_setBrightness(const rk_aiq_sys_ctx_t * ctx,unsigned int level)4114 XCamReturn rk_aiq_uapi2_setBrightness(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
4115 {
4116     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4117     acp_attrib_t attrib;
4118 
4119     IMGPROC_FUNC_ENTER
4120     if (ctx == NULL) {
4121         ret = XCAM_RETURN_ERROR_PARAM;
4122         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, set brightness failed!");
4123     }
4124 
4125     LOGD("setBrightness enter, level=%d\n", level);
4126     if ((int)level < 0 || level > 255) {
4127         ret = XCAM_RETURN_ERROR_PARAM;
4128         RKAIQ_IMGPROC_CHECK_RET(ret, "level out of range, set brightness failed!");
4129     }
4130     ret = rk_aiq_user_api2_acp_GetAttrib(ctx, &attrib);
4131     RKAIQ_IMGPROC_CHECK_RET(ret, "getAttrib error,set brightness failed!");
4132     attrib.brightness = level;
4133     ret = rk_aiq_user_api2_acp_SetAttrib(ctx, &attrib);
4134     RKAIQ_IMGPROC_CHECK_RET(ret, "set brightness failed!");
4135     IMGPROC_FUNC_EXIT
4136     return ret;
4137 }
4138 
rk_aiq_uapi2_getBrightness(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)4139 XCamReturn rk_aiq_uapi2_getBrightness(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
4140 {
4141     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4142     IMGPROC_FUNC_ENTER
4143     acp_attrib_t attrib;
4144     if (level == NULL || ctx == NULL) {
4145         ret = XCAM_RETURN_ERROR_PARAM;
4146         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get brightness failed!");
4147     }
4148     ret = rk_aiq_user_api2_acp_GetAttrib(ctx, &attrib);
4149     RKAIQ_IMGPROC_CHECK_RET(ret, "get brightness failed!");
4150     *level = attrib.brightness;
4151     IMGPROC_FUNC_EXIT
4152     return ret;
4153 }
4154 
4155 /*
4156 *****************************
4157 *
4158 * Desc: Adjust image saturation level
4159 * Argument:
4160 *    level: saturation level, [0, 255]
4161 *****************************
4162 */
rk_aiq_uapi2_setSaturation(const rk_aiq_sys_ctx_t * ctx,unsigned int level)4163 XCamReturn rk_aiq_uapi2_setSaturation(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
4164 {
4165     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4166     acp_attrib_t attrib;
4167 
4168     IMGPROC_FUNC_ENTER
4169     if (ctx == NULL) {
4170         ret = XCAM_RETURN_ERROR_PARAM;
4171         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, set saturation failed!");
4172     }
4173 
4174     LOGD("setSaturation enter, level=%d\n", level);
4175     if ((int)level < 0 || level > 255) {
4176         ret = XCAM_RETURN_ERROR_PARAM;
4177         RKAIQ_IMGPROC_CHECK_RET(ret, "level out of range, set saturation failed!");
4178     }
4179     ret = rk_aiq_user_api2_acp_GetAttrib(ctx, &attrib);
4180     RKAIQ_IMGPROC_CHECK_RET(ret, "getAttrib error,set saturation failed!");
4181     attrib.saturation = level;
4182     ret = rk_aiq_user_api2_acp_SetAttrib(ctx, &attrib);
4183     RKAIQ_IMGPROC_CHECK_RET(ret, "set saturation failed!");
4184     IMGPROC_FUNC_EXIT
4185     return ret;
4186 }
4187 
rk_aiq_uapi2_getSaturation(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)4188 XCamReturn rk_aiq_uapi2_getSaturation(const rk_aiq_sys_ctx_t* ctx, unsigned int* level)
4189 {
4190     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4191     IMGPROC_FUNC_ENTER
4192     acp_attrib_t attrib;
4193     if (level == NULL || ctx == NULL) {
4194         ret = XCAM_RETURN_ERROR_PARAM;
4195         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get saturation failed!");
4196     }
4197     ret = rk_aiq_user_api2_acp_GetAttrib(ctx, &attrib);
4198     RKAIQ_IMGPROC_CHECK_RET(ret, "get saturation failed!");
4199     *level = attrib.saturation;
4200     IMGPROC_FUNC_EXIT
4201     return ret;
4202 }
4203 
4204 /*
4205 *****************************
4206 *
4207 * Desc: Adjust image hue level
4208 * Argument:
4209 *    level: hue level, [0, 255]
4210 *****************************
4211 */
rk_aiq_uapi2_setHue(const rk_aiq_sys_ctx_t * ctx,unsigned int level)4212 XCamReturn rk_aiq_uapi2_setHue(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
4213 {
4214     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4215     acp_attrib_t attrib;
4216 
4217     IMGPROC_FUNC_ENTER
4218     if (ctx == NULL) {
4219         ret = XCAM_RETURN_ERROR_PARAM;
4220         RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, set hue failed!");
4221     }
4222 
4223     LOGD("setHue enter, level=%d\n", level);
4224     if ((int)level < 0 || level > 255) {
4225         ret = XCAM_RETURN_ERROR_PARAM;
4226         RKAIQ_IMGPROC_CHECK_RET(ret, "level out of range, set hue failed!");
4227     }
4228     ret = rk_aiq_user_api2_acp_GetAttrib(ctx, &attrib);
4229     RKAIQ_IMGPROC_CHECK_RET(ret, "getAttrib error,set hue failed!");
4230     attrib.hue = level;
4231     ret = rk_aiq_user_api2_acp_SetAttrib(ctx, &attrib);
4232     RKAIQ_IMGPROC_CHECK_RET(ret, "set hue failed!");
4233     IMGPROC_FUNC_EXIT
4234     return ret;
4235 }
4236 
rk_aiq_uapi2_getHue(const rk_aiq_sys_ctx_t * ctx,unsigned int * level)4237 XCamReturn rk_aiq_uapi2_getHue(const rk_aiq_sys_ctx_t* ctx, unsigned int* level)
4238 {
4239     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4240     IMGPROC_FUNC_ENTER
4241     acp_attrib_t attrib;
4242     if (level == NULL || ctx == NULL) {
4243         ret = XCAM_RETURN_ERROR_PARAM;
4244         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get hue failed!");
4245     }
4246     ret = rk_aiq_user_api2_acp_GetAttrib(ctx, &attrib);
4247     RKAIQ_IMGPROC_CHECK_RET(ret, "get hue failed!");
4248     *level = attrib.hue;
4249     IMGPROC_FUNC_EXIT
4250     return ret;
4251 }
4252 
4253 /*
4254 **********************************************************
4255 * Image Effect
4256 **********************************************************
4257 */
4258 
4259 /*
4260 *****************************
4261 *
4262 * Desc: Set Color Mode
4263 * Argument:
4264 *    mode:
4265 *        [0  NONE
4266 *         1  BW
4267 *         2  NEGATIVE
4268 *         3  SEPIA
4269 *         4  EMBOSS
4270 *         5  SKETCH
4271 *         6  SHARPEN]
4272 * Note: rv1106 only support {0,1}
4273 *****************************
4274 */
rk_aiq_uapi2_setColorMode(const rk_aiq_sys_ctx_t * ctx,unsigned int mode)4275 XCamReturn rk_aiq_uapi2_setColorMode(const rk_aiq_sys_ctx_t* ctx, unsigned int mode)
4276 {
4277     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4278     IMGPROC_FUNC_ENTER
4279 
4280     LOGD("setColorMode enter, mode=%d\n", mode);
4281     aie_attrib_t attrib;
4282     if ((int)mode < 0 || mode > 6) {
4283         ret = XCAM_RETURN_ERROR_PARAM;
4284         RKAIQ_IMGPROC_CHECK_RET(ret, "mode out of range, setColorMode failed!");
4285     }
4286 
4287     ret = rk_aiq_user_api2_aie_GetAttrib(ctx, &attrib);
4288     RKAIQ_IMGPROC_CHECK_RET(ret, "getAttrib error,set ColorMode failed!");
4289     attrib.mode = (rk_aiq_ie_effect_t)mode;
4290     ret = rk_aiq_user_api2_aie_SetAttrib(ctx, &attrib);
4291     RKAIQ_IMGPROC_CHECK_RET(ret, "set ColorMode failed!");
4292     IMGPROC_FUNC_EXIT
4293 
4294     return ret;
4295 }
4296 
rk_aiq_uapi2_getColorMode(const rk_aiq_sys_ctx_t * ctx,unsigned int * mode)4297 XCamReturn rk_aiq_uapi2_getColorMode(const rk_aiq_sys_ctx_t* ctx, unsigned int *mode)
4298 {
4299     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4300     IMGPROC_FUNC_ENTER
4301     aie_attrib_t attrib;
4302     if (mode == NULL || ctx == NULL) {
4303         ret = XCAM_RETURN_ERROR_PARAM;
4304         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getColorMode failed!");
4305     }
4306     ret = rk_aiq_user_api2_aie_GetAttrib(ctx, &attrib);
4307     RKAIQ_IMGPROC_CHECK_RET(ret, "get ColorMode failed!");
4308     *mode = (unsigned int)attrib.mode;
4309     IMGPROC_FUNC_EXIT
4310     return ret;
4311 }
4312 
rk_aiq_uapi2_setGrayMode(const rk_aiq_sys_ctx_t * ctx,rk_aiq_gray_mode_t mode)4313 XCamReturn rk_aiq_uapi2_setGrayMode(const rk_aiq_sys_ctx_t* ctx, rk_aiq_gray_mode_t mode)
4314 {
4315     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4316     if (ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
4317 #ifdef RKAIQ_ENABLE_CAMGROUP
4318         const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)ctx;
4319         for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
4320             if (!camCtx)
4321                 continue;
4322 
4323             ret = camCtx->_analyzer->setGrayMode(mode);
4324         }
4325 #else
4326         return XCAM_RETURN_ERROR_FAILED;
4327 #endif
4328     } else {
4329         ret = ctx->_analyzer->setGrayMode(mode);
4330     }
4331 
4332     return ret;
4333 }
4334 
rk_aiq_uapi2_getGrayMode(const rk_aiq_sys_ctx_t * ctx)4335 rk_aiq_gray_mode_t rk_aiq_uapi2_getGrayMode(const rk_aiq_sys_ctx_t* ctx)
4336 {
4337     if (ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
4338 #ifdef RKAIQ_ENABLE_CAMGROUP
4339         const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)ctx;
4340         for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
4341             if (!camCtx)
4342                 continue;
4343 
4344             return camCtx->_analyzer->getGrayMode();
4345         }
4346 #else
4347         return RK_AIQ_GRAY_MODE_OFF;
4348 #endif
4349     } else {
4350         return ctx->_analyzer->getGrayMode();
4351     }
4352 
4353     return RK_AIQ_GRAY_MODE_OFF;
4354 }
4355 
4356 /*
4357 **********************************************************
4358 * Color Space
4359 **********************************************************
4360 */
4361 
4362 /*
4363 *****************************
4364 *
4365 * Desc: Set Color Space
4366 * Argument:
4367 *    Cspace:
4368 *        [0  BT.601 FULL
4369 *         1  BT.601 LIMIT
4370 *         2  BT.709 FULL
4371 *         3  BT.709 LIMIT
4372 *         255 OTHER]
4373 *****************************
4374 */
rk_aiq_uapi2_setColorSpace(const rk_aiq_sys_ctx_t * ctx,int Cspace)4375 XCamReturn rk_aiq_uapi2_setColorSpace(const rk_aiq_sys_ctx_t* ctx, int Cspace)
4376 {
4377     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4378     IMGPROC_FUNC_ENTER
4379 
4380     LOGD("setColorSpace enter, Cspace=%d\n", Cspace);
4381     rk_aiq_uapi_acsm_attrib_t csm_attrib;
4382     rk_aiq_uapi_acgc_attrib_t cgc_attrib;
4383     memset(&csm_attrib, 0, sizeof(rk_aiq_uapi_acsm_attrib_t));
4384     memset(&cgc_attrib, 0, sizeof(rk_aiq_uapi_acgc_attrib_t));
4385     if (Cspace < 0 || Cspace > 3) {
4386         ret = XCAM_RETURN_ERROR_PARAM;
4387         RKAIQ_IMGPROC_CHECK_RET(ret, "mode out of range, setColorSpace failed!");
4388     }
4389 
4390     XCamReturn ret1 = XCAM_RETURN_NO_ERROR;
4391     XCamReturn ret2 = XCAM_RETURN_NO_ERROR;
4392 
4393     ret1 = rk_aiq_user_api2_acsm_GetAttrib(ctx, &csm_attrib);
4394     ret2 = rk_aiq_user_api2_acgc_GetAttrib(ctx, &cgc_attrib);
4395     if (ret1 != XCAM_RETURN_NO_ERROR || ret2 != XCAM_RETURN_NO_ERROR) {
4396         LOGE("getAttrib error,set ColorSpace failed!");
4397         return XCAM_RETURN_ERROR_FAILED;
4398     }
4399 
4400     csm_attrib.param.op_mode = RK_AIQ_OP_MODE_MANUAL;
4401     cgc_attrib.param.op_mode = RK_AIQ_OP_MODE_MANUAL;
4402     switch (Cspace) {
4403     case 0:
4404         csm_attrib.param.full_range = true;
4405         csm_attrib.param.y_offset = 0;
4406         csm_attrib.param.c_offset = 0;
4407         csm_attrib.param.coeff[0] = 0.299;
4408         csm_attrib.param.coeff[1] = 0.587;
4409         csm_attrib.param.coeff[2] = 0.114;
4410         csm_attrib.param.coeff[3] = -0.169;
4411         csm_attrib.param.coeff[4] = -0.331;
4412         csm_attrib.param.coeff[5] = 0.5;
4413         csm_attrib.param.coeff[6] = 0.5;
4414         csm_attrib.param.coeff[7] = -0.419;
4415         csm_attrib.param.coeff[8] = -0.081;
4416         cgc_attrib.param.cgc_ratio_en = 0;
4417         cgc_attrib.param.cgc_yuv_limit = 0;
4418         break;
4419     case 1:
4420         csm_attrib.param.full_range = true;
4421         csm_attrib.param.y_offset = 0;
4422         csm_attrib.param.c_offset = 0;
4423         csm_attrib.param.coeff[0] = 0.257;
4424         csm_attrib.param.coeff[1] = 0.504;
4425         csm_attrib.param.coeff[2] = 0.098;
4426         csm_attrib.param.coeff[3] = -0.148;
4427         csm_attrib.param.coeff[4] = -0.291;
4428         csm_attrib.param.coeff[5] = 0.439;
4429         csm_attrib.param.coeff[6] = 0.439;
4430         csm_attrib.param.coeff[7] = -0.368;
4431         csm_attrib.param.coeff[8] = -0.071;
4432         cgc_attrib.param.cgc_ratio_en = 0;
4433         cgc_attrib.param.cgc_yuv_limit = 1;
4434         break;
4435     case 2:
4436         csm_attrib.param.full_range = true;
4437         csm_attrib.param.y_offset = 0;
4438         csm_attrib.param.c_offset = 0;
4439         csm_attrib.param.coeff[0] = 0.2126;
4440         csm_attrib.param.coeff[1] = 0.7152;
4441         csm_attrib.param.coeff[2] = 0.0722;
4442         csm_attrib.param.coeff[3] = -0.1146;
4443         csm_attrib.param.coeff[4] = -0.3854;
4444         csm_attrib.param.coeff[5] = 0.5;
4445         csm_attrib.param.coeff[6] = 0.5;
4446         csm_attrib.param.coeff[7] = -0.4542;
4447         csm_attrib.param.coeff[8] = -0.0468;
4448         cgc_attrib.param.cgc_ratio_en = 0;
4449         cgc_attrib.param.cgc_yuv_limit = 0;
4450         break;
4451     case 3:
4452         csm_attrib.param.full_range = true;
4453         csm_attrib.param.y_offset = 0;
4454         csm_attrib.param.c_offset = 0;
4455         csm_attrib.param.coeff[0] = 0.1826;
4456         csm_attrib.param.coeff[1] = 0.6142;
4457         csm_attrib.param.coeff[2] = 0.0620;
4458         csm_attrib.param.coeff[3] = -0.1006;
4459         csm_attrib.param.coeff[4] = -0.3386;
4460         csm_attrib.param.coeff[5] = 0.4392;
4461         csm_attrib.param.coeff[6] = 0.4392;
4462         csm_attrib.param.coeff[7] = -0.3989;
4463         csm_attrib.param.coeff[8] = -0.0403;
4464         cgc_attrib.param.cgc_ratio_en = 0;
4465         cgc_attrib.param.cgc_yuv_limit = 1;
4466         break;
4467     default:
4468         break;
4469     }
4470     ret1 = rk_aiq_user_api2_acsm_SetAttrib(ctx, &csm_attrib);
4471     ret2 = rk_aiq_user_api2_acgc_SetAttrib(ctx, &cgc_attrib);
4472     if (ret1 != XCAM_RETURN_NO_ERROR || ret2 != XCAM_RETURN_NO_ERROR) {
4473         LOGE("set ColorSpace failed!");
4474         return XCAM_RETURN_ERROR_FAILED;
4475     }
4476     IMGPROC_FUNC_EXIT
4477 
4478     return ret;
4479 }
4480 
rk_aiq_uapi2_getColorSpace(const rk_aiq_sys_ctx_t * ctx,int * Cspace)4481 XCamReturn rk_aiq_uapi2_getColorSpace(const rk_aiq_sys_ctx_t* ctx, int *Cspace)
4482 {
4483     XCamReturn ret = XCAM_RETURN_NO_ERROR;
4484     IMGPROC_FUNC_ENTER
4485     rk_aiq_uapi_acsm_attrib_t csm_attrib;
4486     rk_aiq_uapi_acgc_attrib_t cgc_attrib;
4487     memset(&csm_attrib, 0, sizeof(rk_aiq_uapi_acsm_attrib_t));
4488     memset(&cgc_attrib, 0, sizeof(rk_aiq_uapi_acgc_attrib_t));
4489     if (Cspace == NULL || ctx == NULL) {
4490         ret = XCAM_RETURN_ERROR_PARAM;
4491         RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getColorSpace failed!");
4492     }
4493     XCamReturn ret1 = XCAM_RETURN_NO_ERROR;
4494     XCamReturn ret2 = XCAM_RETURN_NO_ERROR;
4495 
4496     ret1 = rk_aiq_user_api2_acsm_GetAttrib(ctx, &csm_attrib);
4497     ret2 = rk_aiq_user_api2_acgc_GetAttrib(ctx, &cgc_attrib);
4498     if (ret1 != XCAM_RETURN_NO_ERROR || ret2 != XCAM_RETURN_NO_ERROR) {
4499         LOGE("getAttrib error,get ColorSpace failed!");
4500         return XCAM_RETURN_ERROR_FAILED;
4501     }
4502 
4503     static Csm_Param_t g_csm_601fa_def = {
4504         .op_mode = RK_AIQ_OP_MODE_AUTO,
4505         .full_range = true,
4506         .y_offset = 0,
4507         .c_offset = 0,
4508         .coeff = {
4509                 0.299, 0.587, 0.114,
4510                 -0.169, -0.331, 0.5,
4511                 0.5, -0.419, -0.081
4512         }
4513     };
4514     static Csm_Param_t g_csm_601fm_def = {
4515         .op_mode = RK_AIQ_OP_MODE_MANUAL,
4516         .full_range = true,
4517         .y_offset = 0,
4518         .c_offset = 0,
4519         .coeff = {
4520                 0.299, 0.587, 0.114,
4521                 -0.169, -0.331, 0.5,
4522                 0.5, -0.419, -0.081
4523         }
4524     };
4525     static Csm_Param_t g_csm_601l_def = {
4526         .op_mode = RK_AIQ_OP_MODE_MANUAL,
4527         .full_range = true,
4528         .y_offset = 0,
4529         .c_offset = 0,
4530         .coeff = {
4531                 0.257, 0.504, 0.098,
4532                 -0.148, -0.291, 0.439,
4533                 0.439, -0.368, -0.071
4534         }
4535     };
4536     static Csm_Param_t g_csm_709fa_def = {
4537         .op_mode = RK_AIQ_OP_MODE_AUTO,
4538         .full_range = true,
4539         .y_offset = 0,
4540         .c_offset = 0,
4541         .coeff = {
4542                 0.2126, 0.7152, 0.0722,
4543                 -0.1146, -0.3854, 0.5000,
4544                 0.5000, -0.4542, -0.0468,
4545         }
4546     };
4547     static Csm_Param_t g_csm_709fm_def = {
4548         .op_mode = RK_AIQ_OP_MODE_MANUAL,
4549         .full_range = true,
4550         .y_offset = 0,
4551         .c_offset = 0,
4552         .coeff = {
4553                 0.2126, 0.7152, 0.0722,
4554                 -0.1146, -0.3854, 0.5000,
4555                 0.5000, -0.4542, -0.0468,
4556         }
4557     };
4558     static Csm_Param_t g_csm_709l_def = {
4559         .op_mode = RK_AIQ_OP_MODE_MANUAL,
4560         .full_range = true,
4561         .y_offset = 0,
4562         .c_offset = 0,
4563         .coeff = {
4564                 0.1826, 0.6142, 0.0620,
4565                 -0.1006, -0.3386, 0.4392,
4566                 0.4392, -0.3989, -0.0403
4567         }
4568     };
4569     if (cgc_attrib.param.cgc_yuv_limit == true) {
4570         if (!memcmp(&csm_attrib.param, &g_csm_601l_def, sizeof(g_csm_601l_def)))
4571             *Cspace = 1;
4572         else if (!memcmp(&csm_attrib.param, &g_csm_709l_def, sizeof(g_csm_709l_def)))
4573             *Cspace = 3;
4574         else
4575             *Cspace = 255;
4576     } else {
4577         if (!memcmp(&csm_attrib.param, &g_csm_601fa_def, sizeof(g_csm_601fa_def)) ||
4578                 !memcmp(&csm_attrib.param, &g_csm_601fm_def, sizeof(g_csm_601fm_def)))
4579             *Cspace = 0;
4580         else if (!memcmp(&csm_attrib.param, &g_csm_709fa_def, sizeof(g_csm_709fa_def)) ||
4581                 !memcmp(&csm_attrib.param, &g_csm_709fm_def, sizeof(g_csm_709fm_def)))
4582             *Cspace = 2;
4583         else
4584             *Cspace = 255;
4585     }
4586 
4587     IMGPROC_FUNC_EXIT
4588     return ret;
4589 }
4590 RKAIQ_END_DECLARE
4591