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 "rk_aiq_user_api_acnr_v30.h"
17
18 #include "RkAiqCamGroupHandleInt.h"
19 #include "algo_handlers/RkAiqAcnrV30Handle.h"
20
21 RKAIQ_BEGIN_DECLARE
22
23 #ifdef RK_SIMULATOR_HW
24 #define CHECK_USER_API_ENABLE
25 #endif
26
27 #if (RKAIQ_HAVE_CNR_V30 || RKAIQ_HAVE_CNR_V30_LITE)
28
29 XCamReturn
rk_aiq_user_api_acnrV30_SetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const rk_aiq_cnr_attrib_v30_t * attr)30 rk_aiq_user_api_acnrV30_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, const rk_aiq_cnr_attrib_v30_t* attr)
31 {
32 XCamReturn ret = XCAM_RETURN_NO_ERROR;
33 CHECK_USER_API_ENABLE2(sys_ctx);
34 CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_ACNR);
35 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
36 #ifdef RKAIQ_ENABLE_CAMGROUP
37
38 RkAiqCamGroupAcnrV30HandleInt* algo_handle =
39 camgroupAlgoHandle<RkAiqCamGroupAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
40
41 if (algo_handle) {
42 LOGD_ANR("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
43 return algo_handle->setAttrib(attr);
44 } else {
45 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
46 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
47 if (!camCtx)
48 continue;
49
50 LOGD_ANR("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
51 RkAiqAcnrV30HandleInt* singleCam_algo_handle =
52 algoHandle<RkAiqAcnrV30HandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ACNR);
53 if (singleCam_algo_handle)
54 ret = singleCam_algo_handle->setAttrib(attr);
55 }
56 }
57 #else
58 return XCAM_RETURN_ERROR_FAILED;
59 #endif
60
61 } else {
62 RkAiqAcnrV30HandleInt* algo_handle =
63 algoHandle<RkAiqAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
64 LOGD_ANR("%s:%d !!!!!!!!!!!!! single!!!!!!!!\n", __FUNCTION__, __LINE__);
65 if (algo_handle) {
66 return algo_handle->setAttrib(attr);
67 }
68 }
69
70 return ret;
71 }
72
73 XCamReturn
rk_aiq_user_api_acnrV30_GetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_cnr_attrib_v30_t * attr)74 rk_aiq_user_api_acnrV30_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_cnr_attrib_v30_t* attr)
75 {
76 XCamReturn ret = XCAM_RETURN_NO_ERROR;
77
78 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
79 #ifdef RKAIQ_ENABLE_CAMGROUP
80 RkAiqCamGroupAcnrV30HandleInt* algo_handle =
81 camgroupAlgoHandle<RkAiqCamGroupAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
82
83 if (algo_handle) {
84 LOGD_ANR("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
85 return algo_handle->getAttrib(attr);
86 } else {
87 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
88 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
89 if (!camCtx)
90 continue;
91 LOGD_ANR("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
92 RkAiqAcnrV30HandleInt* singleCam_algo_handle =
93 algoHandle<RkAiqAcnrV30HandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ACNR);
94 if (singleCam_algo_handle)
95 ret = singleCam_algo_handle->getAttrib(attr);
96 }
97 }
98 #else
99 return XCAM_RETURN_ERROR_FAILED;
100 #endif
101
102 } else {
103 RkAiqAcnrV30HandleInt* algo_handle =
104 algoHandle<RkAiqAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
105 LOGD_ANR("%s:%d !!!!!!!!!!!!!single!!!!!!!!\n", __FUNCTION__, __LINE__);
106 if (algo_handle) {
107 return algo_handle->getAttrib(attr);
108 }
109 }
110
111
112 return ret;
113 }
114
115 XCamReturn
rk_aiq_user_api_acnrV30_SetStrength(const rk_aiq_sys_ctx_t * sys_ctx,const rk_aiq_cnr_strength_v30_t * pStrength)116 rk_aiq_user_api_acnrV30_SetStrength(const rk_aiq_sys_ctx_t* sys_ctx, const rk_aiq_cnr_strength_v30_t *pStrength)
117 {
118 XCamReturn ret = XCAM_RETURN_NO_ERROR;
119 RKAIQ_API_SMART_LOCK(sys_ctx);
120
121 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
122 #ifdef RKAIQ_ENABLE_CAMGROUP
123
124 RkAiqCamGroupAcnrV30HandleInt* algo_handle =
125 camgroupAlgoHandle<RkAiqCamGroupAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
126
127 if (algo_handle) {
128 LOGD_ANR("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
129 return algo_handle->setStrength(pStrength);
130 } else {
131 LOGD_ANR("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
132 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
133 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
134 if (!camCtx)
135 continue;
136
137 RkAiqAcnrV30HandleInt* singleCam_algo_handle =
138 algoHandle<RkAiqAcnrV30HandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ACNR);
139 if (singleCam_algo_handle)
140 ret = singleCam_algo_handle->setStrength(pStrength);
141 }
142 }
143 #else
144 return XCAM_RETURN_ERROR_FAILED;
145 #endif
146
147 } else {
148 LOGD_ANR("%s:%d !!!!!!!!!!!!!single!!!!!!!!\n", __FUNCTION__, __LINE__);
149 RkAiqAcnrV30HandleInt* algo_handle =
150 algoHandle<RkAiqAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
151
152 if (algo_handle) {
153 return algo_handle->setStrength(pStrength);
154 }
155 }
156
157 return ret;
158 }
159
160
161 XCamReturn
rk_aiq_user_api_acnrV30_GetStrength(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_cnr_strength_v30_t * pStrength)162 rk_aiq_user_api_acnrV30_GetStrength(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_cnr_strength_v30_t *pStrength)
163 {
164 XCamReturn ret = XCAM_RETURN_NO_ERROR;
165 RKAIQ_API_SMART_LOCK(sys_ctx);
166
167
168 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
169 #ifdef RKAIQ_ENABLE_CAMGROUP
170
171 RkAiqCamGroupAcnrV30HandleInt* algo_handle =
172 camgroupAlgoHandle<RkAiqCamGroupAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
173
174 if (algo_handle) {
175 LOGD_ANR("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
176 return algo_handle->getStrength(pStrength);
177 } else {
178 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
179 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
180 if (!camCtx)
181 continue;
182 LOGD_ANR("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
183 RkAiqAcnrV30HandleInt* singleCam_algo_handle =
184 algoHandle<RkAiqAcnrV30HandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ACNR);
185 if (singleCam_algo_handle)
186 ret = singleCam_algo_handle->getStrength(pStrength);
187 }
188 }
189 #else
190 return XCAM_RETURN_ERROR_FAILED;
191 #endif
192
193 } else {
194 RkAiqAcnrV30HandleInt* algo_handle =
195 algoHandle<RkAiqAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
196 LOGD_ANR("%s:%d !!!!!!!!!!!!!single!!!!!!!!\n", __FUNCTION__, __LINE__);
197 if (algo_handle) {
198 return algo_handle->getStrength(pStrength);
199 }
200 }
201
202 return ret;
203
204 }
205
206 XCamReturn
rk_aiq_user_api_acnrV30_GetInfo(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_cnr_info_v30_t * pInfo)207 rk_aiq_user_api_acnrV30_GetInfo(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_cnr_info_v30_t *pInfo)
208 {
209 XCamReturn ret = XCAM_RETURN_NO_ERROR;
210 RKAIQ_API_SMART_LOCK(sys_ctx);
211
212
213 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
214 #ifdef RKAIQ_ENABLE_CAMGROUP
215
216 RkAiqCamGroupAcnrV30HandleInt* algo_handle =
217 camgroupAlgoHandle<RkAiqCamGroupAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
218
219 if (algo_handle) {
220 LOGD_ANR("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
221 return algo_handle->getInfo(pInfo);
222 } else {
223 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
224 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
225 if (!camCtx)
226 continue;
227 LOGD_ANR("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
228 RkAiqAcnrV30HandleInt* singleCam_algo_handle =
229 algoHandle<RkAiqAcnrV30HandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ACNR);
230 if (singleCam_algo_handle)
231 ret = singleCam_algo_handle->getInfo(pInfo);
232 }
233 }
234 #else
235 return XCAM_RETURN_ERROR_FAILED;
236 #endif
237
238 } else {
239 RkAiqAcnrV30HandleInt* algo_handle =
240 algoHandle<RkAiqAcnrV30HandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACNR);
241 LOGD_ANR("%s:%d !!!!!!!!!!!!!single!!!!!!!!\n", __FUNCTION__, __LINE__);
242 if (algo_handle) {
243 return algo_handle->getInfo(pInfo);
244 }
245 }
246
247 return ret;
248
249 }
250
251
252 #else
253 XCamReturn
254 rk_aiq_user_api_acnrV30_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, const rk_aiq_cnr_attrib_v30_t* attr)
255 {
256 return XCAM_RETURN_ERROR_UNKNOWN;
257 }
258
259
260 XCamReturn
261 rk_aiq_user_api_acnrV30_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_cnr_attrib_v30_t* attr)
262 {
263 return XCAM_RETURN_ERROR_UNKNOWN;
264 }
265
266
267 XCamReturn
268 rk_aiq_user_api_acnrV30_SetStrength(const rk_aiq_sys_ctx_t* sys_ctx, const rk_aiq_cnr_strength_v30_t *pStrength)
269 {
270 return XCAM_RETURN_ERROR_UNKNOWN;
271 }
272
273
274 XCamReturn
275 rk_aiq_user_api_acnrV30_GetStrength(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_cnr_strength_v30_t *pStrength)
276 {
277 return XCAM_RETURN_ERROR_UNKNOWN;
278 }
279
280 XCamReturn
281 rk_aiq_user_api_acnrV30_GetInfo(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_cnr_info_v30_t *pInfo)
282 {
283 return XCAM_RETURN_ERROR_UNKNOWN;
284 }
285
286 #endif
287
288 RKAIQ_END_DECLARE
289