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.h"
17
18 #include "RkAiqCamGroupHandleInt.h"
19 #include "algo_handlers/RkAiqAblcHandle.h"
20 #include "rk_aiq_user_api2_sysctl.h"
21
22 RKAIQ_BEGIN_DECLARE
23
24 #ifdef RK_SIMULATOR_HW
25 #define CHECK_USER_API_ENABLE
26 #endif
27
28 #if RKAIQ_HAVE_BLC_V1
29
30 XCamReturn
rk_aiq_user_api2_ablc_SetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const rk_aiq_blc_attrib_t * attr)31 rk_aiq_user_api2_ablc_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, const rk_aiq_blc_attrib_t *attr)
32 {
33 CHECK_USER_API_ENABLE2(sys_ctx);
34 CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_ABLC);
35 RKAIQ_API_SMART_LOCK(sys_ctx);
36 XCamReturn ret = XCAM_RETURN_NO_ERROR;
37
38 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
39 #ifdef RKAIQ_ENABLE_CAMGROUP
40
41 RkAiqCamGroupAblcHandleInt* algo_handle =
42 camgroupAlgoHandle<RkAiqCamGroupAblcHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
43
44 if (algo_handle) {
45 LOGD_ABLC("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
46 return algo_handle->setAttrib(attr);
47 } else {
48 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
49 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
50 if (!camCtx)
51 continue;
52
53 LOGD_ABLC("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
54 RkAiqAblcHandleInt* singleCam_algo_handle =
55 algoHandle<RkAiqAblcHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ABLC);
56 if (singleCam_algo_handle)
57 ret = singleCam_algo_handle->setAttrib(attr);
58 }
59 }
60 #else
61 return XCAM_RETURN_ERROR_FAILED;
62 #endif
63 } else {
64 RkAiqAblcHandleInt* algo_handle =
65 algoHandle<RkAiqAblcHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
66 LOGD_ABLC("%s:%d !!!!!!!!!!!!! single!!!!!!!!\n", __FUNCTION__, __LINE__);
67 if (algo_handle)
68 ret = algo_handle->setAttrib(attr);
69 }
70
71 LOGI_ABLC("attr=%d\n", attr->eMode);
72
73 return ret;
74 }
75
76 XCamReturn
rk_aiq_user_api2_ablc_GetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_blc_attrib_t * attr)77 rk_aiq_user_api2_ablc_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_blc_attrib_t *attr)
78 {
79
80 XCamReturn ret = XCAM_RETURN_NO_ERROR;
81 RKAIQ_API_SMART_LOCK(sys_ctx);
82
83 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
84 #ifdef RKAIQ_ENABLE_CAMGROUP
85
86 RkAiqCamGroupAblcHandleInt* algo_handle =
87 camgroupAlgoHandle<RkAiqCamGroupAblcHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
88 if (algo_handle) {
89 LOGD_ABLC("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
90 return algo_handle->getAttrib(attr);
91 } else {
92 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
93 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
94 if (!camCtx)
95 continue;
96 LOGD_ABLC("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
97 RkAiqAblcHandleInt* singleCam_algo_handle =
98 algoHandle<RkAiqAblcHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ABLC);
99 if (singleCam_algo_handle)
100 ret = singleCam_algo_handle->getAttrib(attr);
101 }
102 }
103 #else
104 return XCAM_RETURN_ERROR_FAILED;
105 #endif
106 } else {
107 RkAiqAblcHandleInt* algo_handle =
108 algoHandle<RkAiqAblcHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
109 LOGD_ABLC("%s:%d !!!!!!!!!!!!! single!!!!!!!!\n", __FUNCTION__, __LINE__);
110 if (algo_handle) {
111 return algo_handle->getAttrib(attr);
112 }
113 }
114
115
116 return XCAM_RETURN_NO_ERROR;
117 }
118
119 XCamReturn
rk_aiq_user_api2_ablc_GetInfo(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_ablc_info_t * pInfo)120 rk_aiq_user_api2_ablc_GetInfo(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_ablc_info_t *pInfo)
121 {
122
123 XCamReturn ret = XCAM_RETURN_NO_ERROR;
124 RKAIQ_API_SMART_LOCK(sys_ctx);
125
126 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
127 #ifdef RKAIQ_ENABLE_CAMGROUP
128
129 RkAiqCamGroupAblcHandleInt* algo_handle =
130 camgroupAlgoHandle<RkAiqCamGroupAblcHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
131 if (algo_handle) {
132 LOGD_ABLC("%s:%d !!!!!!!!!!!!!group!!!!!!!!\n", __FUNCTION__, __LINE__);
133 return algo_handle->getInfo(pInfo);
134 } else {
135 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
136 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
137 if (!camCtx)
138 continue;
139 LOGD_ABLC("%s:%d !!!!!!!!!!!!!multi single!!!!!!!!\n", __FUNCTION__, __LINE__);
140 RkAiqAblcHandleInt* singleCam_algo_handle =
141 algoHandle<RkAiqAblcHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ABLC);
142 if (singleCam_algo_handle)
143 ret = singleCam_algo_handle->getInfo(pInfo);
144 }
145 }
146 #else
147 return XCAM_RETURN_ERROR_FAILED;
148 #endif
149 } else {
150 RkAiqAblcHandleInt* algo_handle =
151 algoHandle<RkAiqAblcHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ABLC);
152 LOGD_ABLC("%s:%d !!!!!!!!!!!!! single!!!!!!!!\n", __FUNCTION__, __LINE__);
153 if (algo_handle) {
154 return algo_handle->getInfo(pInfo);
155 }
156 }
157
158
159 return XCAM_RETURN_NO_ERROR;
160 }
161
162
163 #else
164
165 XCamReturn
166 rk_aiq_user_api2_ablc_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, const rk_aiq_blc_attrib_t *attr)
167 {
168 return XCAM_RETURN_ERROR_UNKNOWN;
169 }
170
171 XCamReturn
172 rk_aiq_user_api2_ablc_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_blc_attrib_t *attr)
173 {
174 return XCAM_RETURN_ERROR_UNKNOWN;
175 }
176
177 XCamReturn
178 rk_aiq_user_api2_ablc_GetInfo(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_ablc_info_t *pInfo)
179 {
180 return XCAM_RETURN_ERROR_UNKNOWN;
181 }
182
183 #endif
184
185 RKAIQ_END_DECLARE
186