xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/uAPI2/rk_aiq_user_api2_ablc.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.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