xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/uAPI2/rk_aiq_user_api2_ablc_v32.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (c) 2019-2022 Rockchip Eletronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include "uAPI2/rk_aiq_user_api2_ablc_v32.h"
17 
18 #include "RkAiqCamGroupHandleInt.h"
19 #include "algo_handlers/RkAiqAblcV32Handle.h"
20 #include "hwi/isp20/Isp20_module_dbg.h"
21 #include "rk_aiq_user_api2_sysctl.h"
22 
23 RKAIQ_BEGIN_DECLARE
24 
25 #ifdef RK_SIMULATOR_HW
26 #define CHECK_USER_API_ENABLE
27 #endif
28 
29 #if RKAIQ_HAVE_BLC_V32
30 
31 XCamReturn
rk_aiq_user_api2_ablcV32_SetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const rk_aiq_blc_attrib_V32_t * attr)32 rk_aiq_user_api2_ablcV32_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, const rk_aiq_blc_attrib_V32_t *attr)
33 {
34     CHECK_USER_API_ENABLE2(sys_ctx);
35     CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_ABLC);
36     RKAIQ_API_SMART_LOCK(sys_ctx);
37     XCamReturn ret = XCAM_RETURN_NO_ERROR;
38 
39     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
40 #ifdef RKAIQ_ENABLE_CAMGROUP
41 
42         RkAiqCamGroupAblcV32HandleInt* algo_handle =
43             camgroupAlgoHandle<RkAiqCamGroupAblcV32HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
44 
45         if (algo_handle) {
46             LOGD_ABLC("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
47             return algo_handle->setAttrib(attr);
48         } else {
49             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
50             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
51                 if (!camCtx)
52                     continue;
53 
54                 LOGD_ABLC("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
55                 RkAiqAblcV32HandleInt* singleCam_algo_handle =
56                     algoHandle<RkAiqAblcV32HandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ABLC);
57                 if (singleCam_algo_handle)
58                     ret = singleCam_algo_handle->setAttrib(attr);
59             }
60         }
61 #else
62         return XCAM_RETURN_ERROR_FAILED;
63 #endif
64     } else {
65         RkAiqAblcV32HandleInt* algo_handle =
66             algoHandle<RkAiqAblcV32HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
67         LOGD_ABLC("%s:%d !!!!!!!!!!!!! single!!!!!!!!\n", __FUNCTION__, __LINE__);
68         if (algo_handle)
69             ret = algo_handle->setAttrib(attr);
70     }
71 
72     LOGI_ABLC("attr=%d\n", attr->eMode);
73 
74     return ret;
75 }
76 
77 XCamReturn
rk_aiq_user_api2_ablcV32_GetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_blc_attrib_V32_t * attr)78 rk_aiq_user_api2_ablcV32_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_blc_attrib_V32_t *attr)
79 {
80 
81     XCamReturn ret = XCAM_RETURN_NO_ERROR;
82     RKAIQ_API_SMART_LOCK(sys_ctx);
83 
84     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
85 #ifdef RKAIQ_ENABLE_CAMGROUP
86 
87         RkAiqCamGroupAblcV32HandleInt* algo_handle =
88             camgroupAlgoHandle<RkAiqCamGroupAblcV32HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
89         if (algo_handle) {
90             LOGD_ABLC("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
91             return algo_handle->getAttrib(attr);
92         } else {
93             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
94             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
95                 if (!camCtx)
96                     continue;
97                 LOGD_ABLC("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
98                 RkAiqAblcV32HandleInt* singleCam_algo_handle =
99                     algoHandle<RkAiqAblcV32HandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ABLC);
100                 if (singleCam_algo_handle)
101                     ret = singleCam_algo_handle->getAttrib(attr);
102             }
103         }
104 #else
105         return XCAM_RETURN_ERROR_FAILED;
106 #endif
107     } else {
108         RkAiqAblcV32HandleInt* algo_handle =
109             algoHandle<RkAiqAblcV32HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
110         LOGD_ABLC("%s:%d !!!!!!!!!!!!! single!!!!!!!!\n", __FUNCTION__, __LINE__);
111         if (algo_handle) {
112             return algo_handle->getAttrib(attr);
113         }
114     }
115 
116 
117     return XCAM_RETURN_NO_ERROR;
118 }
119 
120 
121 XCamReturn
rk_aiq_user_api2_ablcV32_GetInfo(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_blc_info_v32_t * pInfo)122 rk_aiq_user_api2_ablcV32_GetInfo(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_blc_info_v32_t* pInfo)
123 {
124 
125     XCamReturn ret = XCAM_RETURN_NO_ERROR;
126     RKAIQ_API_SMART_LOCK(sys_ctx);
127 
128     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
129 #ifdef RKAIQ_ENABLE_CAMGROUP
130 
131         RkAiqCamGroupAblcV32HandleInt* algo_handle =
132             camgroupAlgoHandle<RkAiqCamGroupAblcV32HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
133         if (algo_handle) {
134             LOGD_ABLC("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
135             return algo_handle->getInfo(pInfo);
136         } else {
137             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
138             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
139                 if (!camCtx)
140                     continue;
141                 LOGD_ABLC("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
142                 RkAiqAblcV32HandleInt* singleCam_algo_handle =
143                     algoHandle<RkAiqAblcV32HandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ABLC);
144                 if (singleCam_algo_handle)
145                     ret = singleCam_algo_handle->getInfo(pInfo);
146             }
147         }
148 #else
149         return XCAM_RETURN_ERROR_FAILED;
150 #endif
151     } else {
152         RkAiqAblcV32HandleInt* algo_handle =
153             algoHandle<RkAiqAblcV32HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
154         LOGD_ABLC("%s:%d !!!!!!!!!!!!! single!!!!!!!!\n", __FUNCTION__, __LINE__);
155         if (algo_handle) {
156             return algo_handle->getInfo(pInfo);
157         }
158     }
159 
160     return XCAM_RETURN_NO_ERROR;
161 }
162 #else
163 
164 XCamReturn
165 rk_aiq_user_api2_ablcV32_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, const rk_aiq_blc_attrib_V32_t *attr)
166 {
167     return XCAM_RETURN_ERROR_UNKNOWN;
168 }
169 
170 XCamReturn
171 rk_aiq_user_api2_ablcV32_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_blc_attrib_V32_t *attr)
172 {
173     return XCAM_RETURN_ERROR_UNKNOWN;
174 }
175 
176 XCamReturn
177 rk_aiq_user_api2_ablcV32_GetInfo(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_blc_info_v32_t* pInfo)
178 {
179     return XCAM_RETURN_ERROR_UNKNOWN;
180 }
181 #endif
182 
183 RKAIQ_END_DECLARE
184