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