xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/uAPI2/rk_aiq_user_api2_alsc.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 "rk_aiq_user_api2_alsc.h"
17 
18 #include "algo_handlers/RkAiqAlscHandle.h"
19 
20 RKAIQ_BEGIN_DECLARE
21 
22 #ifdef RK_SIMULATOR_HW
23 #define CHECK_USER_API_ENABLE
24 #endif
25 
26 #if RKAIQ_HAVE_LSC_V1 || RKAIQ_HAVE_LSC_V2 || RKAIQ_HAVE_LSC_V3
rk_aiq_user_api2_alsc_SetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_lsc_attrib_t attr)27 XCamReturn rk_aiq_user_api2_alsc_SetAttrib(const rk_aiq_sys_ctx_t *sys_ctx,
28                                            rk_aiq_lsc_attrib_t attr) {
29   XCamReturn ret = XCAM_RETURN_NO_ERROR;
30   CHECK_USER_API_ENABLE2(sys_ctx);
31   CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_ALSC);
32   RKAIQ_API_SMART_LOCK(sys_ctx);
33 
34   if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
35 #ifdef RKAIQ_ENABLE_CAMGROUP
36     RkAiqCamGroupAlscHandleInt *algo_handle =
37         camgroupAlgoHandle<RkAiqCamGroupAlscHandleInt>(sys_ctx,
38                                                        RK_AIQ_ALGO_TYPE_ALSC);
39 
40     if (algo_handle) {
41       return algo_handle->setAttrib(attr);
42     } else {
43       const rk_aiq_camgroup_ctx_t *camgroup_ctx =
44           (rk_aiq_camgroup_ctx_t *)sys_ctx;
45       for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
46         if (!camCtx)
47           continue;
48 
49         RkAiqAlscHandleInt *singleCam_algo_handle =
50             algoHandle<RkAiqAlscHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ALSC);
51         if (singleCam_algo_handle)
52           ret = singleCam_algo_handle->setAttrib(attr);
53       }
54     }
55 #else
56     return XCAM_RETURN_ERROR_FAILED;
57 #endif
58   } else {
59     RkAiqAlscHandleInt *algo_handle =
60         algoHandle<RkAiqAlscHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ALSC);
61 
62     if (algo_handle) {
63       return algo_handle->setAttrib(attr);
64     }
65   }
66 
67   return (ret);
68 }
69 
rk_aiq_user_api2_alsc_GetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_lsc_attrib_t * attr)70 XCamReturn rk_aiq_user_api2_alsc_GetAttrib(const rk_aiq_sys_ctx_t *sys_ctx,
71                                            rk_aiq_lsc_attrib_t *attr) {
72   RKAIQ_API_SMART_LOCK(sys_ctx);
73   XCamReturn ret = XCAM_RETURN_NO_ERROR;
74 
75   if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
76 #ifdef RKAIQ_ENABLE_CAMGROUP
77     RkAiqCamGroupAlscHandleInt *algo_handle =
78         camgroupAlgoHandle<RkAiqCamGroupAlscHandleInt>(sys_ctx,
79                                                        RK_AIQ_ALGO_TYPE_ALSC);
80 
81     if (algo_handle) {
82       return algo_handle->getAttrib(attr);
83     } else {
84       const rk_aiq_camgroup_ctx_t *camgroup_ctx =
85           (rk_aiq_camgroup_ctx_t *)sys_ctx;
86       for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
87         if (!camCtx)
88           continue;
89 
90         RkAiqAlscHandleInt *singleCam_algo_handle =
91             algoHandle<RkAiqAlscHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ALSC);
92         if (singleCam_algo_handle)
93           ret = singleCam_algo_handle->getAttrib(attr);
94       }
95     }
96 #else
97     return XCAM_RETURN_ERROR_FAILED;
98 #endif
99   } else {
100     RkAiqAlscHandleInt *algo_handle =
101         algoHandle<RkAiqAlscHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ALSC);
102 
103     if (algo_handle) {
104       return algo_handle->getAttrib(attr);
105     }
106   }
107 
108   return (ret);
109 }
110 
111 XCamReturn
rk_aiq_user_api2_alsc_QueryLscInfo(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_lsc_querry_info_t * lsc_querry_info)112 rk_aiq_user_api2_alsc_QueryLscInfo(const rk_aiq_sys_ctx_t *sys_ctx,
113                                    rk_aiq_lsc_querry_info_t *lsc_querry_info) {
114   RKAIQ_API_SMART_LOCK(sys_ctx);
115 
116   if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
117 #ifdef RKAIQ_ENABLE_CAMGROUP
118     RkAiqCamGroupAlscHandleInt *algo_handle =
119         camgroupAlgoHandle<RkAiqCamGroupAlscHandleInt>(sys_ctx,
120                                                        RK_AIQ_ALGO_TYPE_ALSC);
121 
122     if (algo_handle) {
123       return algo_handle->queryLscInfo(lsc_querry_info);
124     } else {
125       const rk_aiq_camgroup_ctx_t *camgroup_ctx =
126           (rk_aiq_camgroup_ctx_t *)sys_ctx;
127       for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
128         if (!camCtx)
129           continue;
130 
131         RkAiqAlscHandleInt *singleCam_algo_handle =
132             algoHandle<RkAiqAlscHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ALSC);
133         if (singleCam_algo_handle)
134           return singleCam_algo_handle->queryLscInfo(lsc_querry_info);
135       }
136     }
137 #else
138     return XCAM_RETURN_ERROR_FAILED;
139 #endif
140   } else {
141     RkAiqAlscHandleInt *algo_handle =
142         algoHandle<RkAiqAlscHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ALSC);
143 
144     if (algo_handle) {
145       return algo_handle->queryLscInfo(lsc_querry_info);
146     }
147   }
148 
149   return XCAM_RETURN_NO_ERROR;
150 }
151 
152 #else
153 
154 XCamReturn rk_aiq_user_api2_alsc_SetAttrib(const rk_aiq_sys_ctx_t *sys_ctx,
155                                            rk_aiq_lsc_attrib_t attr) {
156     return XCAM_RETURN_ERROR_FAILED;
157 }
158 
159 XCamReturn rk_aiq_user_api2_alsc_GetAttrib(const rk_aiq_sys_ctx_t *sys_ctx,
160                                            rk_aiq_lsc_attrib_t *attr) {
161     return XCAM_RETURN_ERROR_FAILED;
162 }
163 
164 XCamReturn rk_aiq_user_api2_alsc_QueryLscInfo(const rk_aiq_sys_ctx_t* sys_ctx,
165                                               rk_aiq_lsc_querry_info_t* lsc_querry_info) {
166     return XCAM_RETURN_ERROR_FAILED;
167 }
168 
169 #endif  // RKAIQ_HAVE_LSC_V1 || RKAIQ_HAVE_LSC_V2 || RKAIQ_HAVE_LSC_V3
170 
171 RKAIQ_END_DECLARE
172