xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/uAPI2/rk_aiq_user_api2_agic.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  *  Copyright (c) 2019-2022 Rockchip Electronics 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_agic.h"
17 
18 #include "uAPI/include/rk_aiq_user_api_agic.h"
19 #include "uAPI/rk_aiq_api_private.h"
20 
21 RKAIQ_BEGIN_DECLARE
22 
23 #if RKAIQ_HAVE_GIC_V1
rk_aiq_user_api2_agic_v1_SetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const rkaiq_gic_v1_api_attr_t * attr)24 XCamReturn rk_aiq_user_api2_agic_v1_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
25                                               const rkaiq_gic_v1_api_attr_t* attr) {
26     CHECK_USER_API_ENABLE2(sys_ctx);
27     CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_AGIC);
28 
29     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
30 #ifdef RKAIQ_ENABLE_CAMGROUP
31         RkAiqCamGroupAgicHandleInt* algo_handle =
32             camgroupAlgoHandle<RkAiqCamGroupAgicHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_AGIC);
33 
34         if (algo_handle) {
35             return algo_handle->setAttribV1(attr);
36         } else {
37             XCamReturn ret                            = XCAM_RETURN_NO_ERROR;
38             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t*)sys_ctx;
39             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
40                 if (!camCtx) continue;
41 
42                 RkAiqAgicHandleInt* singleCam_algo_handle =
43                     algoHandle<RkAiqAgicHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_AGIC);
44                 if (singleCam_algo_handle) {
45                     ret = singleCam_algo_handle->setAttribV1(attr);
46                     if (ret != XCAM_RETURN_NO_ERROR) LOGE("%s returned: %d", __FUNCTION__, ret);
47                 }
48             }
49             return ret;
50         }
51 #else
52         return XCAM_RETURN_ERROR_FAILED;
53 #endif
54     } else {
55         RkAiqAgicHandleInt* algo_handle =
56             algoHandle<RkAiqAgicHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_AGIC);
57 
58         if (algo_handle) {
59             return algo_handle->setAttribV1(attr);
60         }
61     }
62 
63     return XCAM_RETURN_NO_ERROR;
64 }
65 
rk_aiq_user_api2_agic_v1_GetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rkaiq_gic_v1_api_attr_t * attr)66 XCamReturn rk_aiq_user_api2_agic_v1_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
67                                               rkaiq_gic_v1_api_attr_t* attr) {
68     RKAIQ_API_SMART_LOCK(sys_ctx);
69 
70     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
71 #ifdef RKAIQ_ENABLE_CAMGROUP
72         RkAiqCamGroupAgicHandleInt* algo_handle =
73             camgroupAlgoHandle<RkAiqCamGroupAgicHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_AGIC);
74 
75         if (algo_handle) {
76             return algo_handle->getAttribV1(attr);
77         } else {
78             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t*)sys_ctx;
79             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
80                 if (!camCtx) continue;
81 
82                 RkAiqAgicHandleInt* singleCam_algo_handle =
83                     algoHandle<RkAiqAgicHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_AGIC);
84                 if (singleCam_algo_handle) return singleCam_algo_handle->getAttribV1(attr);
85             }
86         }
87 #else
88         return XCAM_RETURN_ERROR_FAILED;
89 #endif
90     } else {
91         RkAiqAgicHandleInt* algo_handle =
92             algoHandle<RkAiqAgicHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_AGIC);
93 
94         if (algo_handle) {
95             return algo_handle->getAttribV1(attr);
96         }
97     }
98 
99     return XCAM_RETURN_NO_ERROR;
100 }
101 #else
102 
103 XCamReturn rk_aiq_user_api2_agic_v1_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
104                                               const rkaiq_gic_v1_api_attr_t* attr) {
105     return XCAM_RETURN_ERROR_UNKNOWN;
106 }
107 
108 XCamReturn rk_aiq_user_api2_agic_v1_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
109                                               rkaiq_gic_v1_api_attr_t* attr) {
110     return XCAM_RETURN_ERROR_UNKNOWN;
111 }
112 
113 #endif
114 
115 #if RKAIQ_HAVE_GIC_V2
rk_aiq_user_api2_agic_v2_SetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const rkaiq_gic_v2_api_attr_t * attr)116 XCamReturn rk_aiq_user_api2_agic_v2_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
117                                               const rkaiq_gic_v2_api_attr_t* attr) {
118     CHECK_USER_API_ENABLE2(sys_ctx);
119     CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_AGIC);
120     XCamReturn ret = XCAM_RETURN_NO_ERROR;
121 
122     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
123 #ifdef RKAIQ_ENABLE_CAMGROUP
124         RkAiqCamGroupAgicHandleInt* algo_handle =
125             camgroupAlgoHandle<RkAiqCamGroupAgicHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_AGIC);
126 
127         if (algo_handle) {
128             return algo_handle->setAttribV2(attr);
129         } else {
130             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t*)sys_ctx;
131             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
132                 if (!camCtx) continue;
133 
134                 RkAiqAgicHandleInt* singleCam_algo_handle =
135                     algoHandle<RkAiqAgicHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_AGIC);
136                 if (singleCam_algo_handle) ret = singleCam_algo_handle->setAttribV2(attr);
137             }
138         }
139 #else
140         return XCAM_RETURN_ERROR_FAILED;
141 #endif
142     } else {
143         RkAiqAgicHandleInt* algo_handle =
144             algoHandle<RkAiqAgicHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_AGIC);
145 
146         if (algo_handle) {
147             return algo_handle->setAttribV2(attr);
148         }
149     }
150 
151     return ret;
152 }
153 
rk_aiq_user_api2_agic_v2_GetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rkaiq_gic_v2_api_attr_t * attr)154 XCamReturn rk_aiq_user_api2_agic_v2_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
155                                               rkaiq_gic_v2_api_attr_t* attr) {
156     RKAIQ_API_SMART_LOCK(sys_ctx);
157 
158     if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
159 #ifdef RKAIQ_ENABLE_CAMGROUP
160         RkAiqCamGroupAgicHandleInt* algo_handle =
161             camgroupAlgoHandle<RkAiqCamGroupAgicHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_AGIC);
162 
163         if (algo_handle) {
164             return algo_handle->getAttribV2(attr);
165         } else {
166             const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t*)sys_ctx;
167             for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
168                 if (!camCtx) continue;
169 
170                 RkAiqAgicHandleInt* singleCam_algo_handle =
171                     algoHandle<RkAiqAgicHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_AGIC);
172                 if (singleCam_algo_handle) return singleCam_algo_handle->getAttribV2(attr);
173             }
174         }
175 #else
176         return XCAM_RETURN_ERROR_FAILED;
177 #endif
178     } else {
179         RkAiqAgicHandleInt* algo_handle =
180             algoHandle<RkAiqAgicHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_AGIC);
181 
182         if (algo_handle) {
183             return algo_handle->getAttribV2(attr);
184         }
185     }
186 
187     return XCAM_RETURN_NO_ERROR;
188 }
189 #else
190 
rk_aiq_user_api2_agic_v2_SetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const rkaiq_gic_v2_api_attr_t * attr)191 XCamReturn rk_aiq_user_api2_agic_v2_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
192                                               const rkaiq_gic_v2_api_attr_t* attr) {
193     return XCAM_RETURN_ERROR_UNKNOWN;
194 }
195 
rk_aiq_user_api2_agic_v2_GetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rkaiq_gic_v2_api_attr_t * attr)196 XCamReturn rk_aiq_user_api2_agic_v2_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
197                                               rkaiq_gic_v2_api_attr_t* attr) {
198     return XCAM_RETURN_ERROR_UNKNOWN;
199 }
200 
201 #endif
202 
203 RKAIQ_END_DECLARE
204 
205