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