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_acsm.h"
17
18 #include "algo_handlers/RkAiqAcsmHandle.h"
19
20 RKAIQ_BEGIN_DECLARE
21
22 #ifdef RK_SIMULATOR_HW
23 #define CHECK_USER_API_ENABLE
24 #endif
25 #if RKAIQ_HAVE_CSM_V1
rk_aiq_user_api2_acsm_SetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,const rk_aiq_uapi_acsm_attrib_t * attr)26 XCamReturn rk_aiq_user_api2_acsm_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
27 const rk_aiq_uapi_acsm_attrib_t* attr)
28 {
29 XCamReturn ret = XCAM_RETURN_NO_ERROR;
30 CHECK_USER_API_ENABLE2(sys_ctx);
31 CHECK_USER_API_ENABLE(RK_AIQ_ALGO_TYPE_ACSM);
32 RKAIQ_API_SMART_LOCK(sys_ctx);
33
34 if (!attr->param.full_range) {
35 LOGE_ACSM("Limit range is not supported!\n");
36 return XCAM_RETURN_ERROR_PARAM;
37 }
38
39 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
40 #ifdef RKAIQ_ENABLE_CAMGROUP
41
42 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
43 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
44 if (!camCtx)
45 continue;
46
47 RkAiqAcsmHandleInt* singleCam_algo_handle =
48 algoHandle<RkAiqAcsmHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ACSM);
49 if (singleCam_algo_handle)
50 ret = singleCam_algo_handle->setAttrib(attr);
51 }
52 #else
53 return XCAM_RETURN_ERROR_FAILED;
54 #endif
55 } else {
56 RkAiqAcsmHandleInt* algo_handle =
57 algoHandle<RkAiqAcsmHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACSM);
58 if (algo_handle)
59 ret = algo_handle->setAttrib(attr);
60 }
61
62 return (ret);
63 }
64
rk_aiq_user_api2_acsm_GetAttrib(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_uapi_acsm_attrib_t * attr)65 XCamReturn rk_aiq_user_api2_acsm_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
66 rk_aiq_uapi_acsm_attrib_t* attr)
67 {
68 RKAIQ_API_SMART_LOCK(sys_ctx);
69 XCamReturn ret = XCAM_RETURN_NO_ERROR;
70
71 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
72 #ifdef RKAIQ_ENABLE_CAMGROUP
73 const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)sys_ctx;
74 for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
75 if (!camCtx)
76 continue;
77 RkAiqAcsmHandleInt* singleCam_algo_handle =
78 algoHandle<RkAiqAcsmHandleInt>(camCtx, RK_AIQ_ALGO_TYPE_ACSM);
79 if (singleCam_algo_handle)
80 ret = singleCam_algo_handle->getAttrib(attr);
81 }
82 #else
83 return XCAM_RETURN_ERROR_FAILED;
84 #endif
85 } else {
86 RkAiqAcsmHandleInt* algo_handle =
87 algoHandle<RkAiqAcsmHandleInt>(sys_ctx, RK_AIQ_ALGO_TYPE_ACSM);
88 if (algo_handle) {
89 return algo_handle->getAttrib(attr);
90 }
91 }
92
93 return (ret);
94 }
95 #else
96 XCamReturn rk_aiq_user_api2_acsm_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
97 const rk_aiq_uapi_acsm_attrib_t* attr)
98 {
99 return XCAM_RETURN_ERROR_UNKNOWN;
100 }
101
102 XCamReturn rk_aiq_user_api2_acsm_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx,
103 rk_aiq_uapi_acsm_attrib_t* attr)
104 {
105 return XCAM_RETURN_ERROR_UNKNOWN;
106 }
107 #endif
108 RKAIQ_END_DECLARE
109
110
111
112