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