1 /*
2 * Copyright (c) 2019 Rockchip Corporation
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 */
17
18 #include "rk_aiq_user_api2_sysctl.h"
19 #include "rk_aiq_user_api_sysctl.h"
20 #include "rk_aiq_api_private.h"
21 #include "RkAiqManager.h"
22 #include "socket_server.h"
23 #include "RkAiqCalibDbV2.h"
24 #include "scene/scene_manager.h"
25 #include "uAPI/rk_aiq_user_api_sysctl.cpp"
26
27 XCamReturn
rk_aiq_uapi2_sysctl_preInit(const char * sns_ent_name,rk_aiq_working_mode_t mode,const char * force_iq_file)28 rk_aiq_uapi2_sysctl_preInit(const char* sns_ent_name,
29 rk_aiq_working_mode_t mode,
30 const char* force_iq_file)
31 {
32 return rk_aiq_uapi_sysctl_preInit(sns_ent_name, mode, force_iq_file);
33 }
34
35 XCamReturn
rk_aiq_uapi2_sysctl_regHwEvtCb(const char * sns_ent_name,rk_aiq_hwevt_cb hwevt_cb,void * cb_ctx)36 rk_aiq_uapi2_sysctl_regHwEvtCb(const char* sns_ent_name,
37 rk_aiq_hwevt_cb hwevt_cb,
38 void* cb_ctx)
39 {
40 g_rk_aiq_sys_preinit_cfg_map[sns_ent_name].hwevt_cb = hwevt_cb;
41 g_rk_aiq_sys_preinit_cfg_map[sns_ent_name].hwevt_cb_ctx = cb_ctx;
42
43 return XCAM_RETURN_NO_ERROR;
44 }
45
46 XCamReturn
rk_aiq_uapi2_sysctl_preInit_scene(const char * sns_ent_name,const char * main_scene,const char * sub_scene)47 rk_aiq_uapi2_sysctl_preInit_scene(const char* sns_ent_name, const char *main_scene,
48 const char *sub_scene)
49 {
50 return rk_aiq_uapi_sysctl_preInit_scene(sns_ent_name, main_scene, sub_scene);
51 }
52
53 XCamReturn
rk_aiq_uapi2_sysctl_preInit_tb_info(const char * sns_ent_name,const rk_aiq_tb_info_t * info)54 rk_aiq_uapi2_sysctl_preInit_tb_info(const char* sns_ent_name,
55 const rk_aiq_tb_info_t* info)
56 {
57 return rk_aiq_uapi_sysctl_preInit_tb_info(sns_ent_name, info);
58 }
59
60 XCamReturn
rk_aiq_uapi2_sysctl_preInit_iq_addr(const char * sns_ent_name,void * addr,size_t len)61 rk_aiq_uapi2_sysctl_preInit_iq_addr(const char* sns_ent_name, void *addr, size_t len)
62 {
63 g_rk_aiq_sys_preinit_cfg_map[sns_ent_name].iq_buffer.addr = addr;
64 g_rk_aiq_sys_preinit_cfg_map[sns_ent_name].iq_buffer.len = len;
65
66 return XCAM_RETURN_NO_ERROR;
67 }
68
69 XCamReturn
rk_aiq_uapi2_sysctl_preInit_calibproj(const char * sns_ent_name,void * addr)70 rk_aiq_uapi2_sysctl_preInit_calibproj(const char* sns_ent_name, void *addr)
71 {
72 g_rk_aiq_sys_preinit_cfg_map[sns_ent_name].calib_proj = addr;
73
74 return XCAM_RETURN_NO_ERROR;
75 }
76
rk_aiq_uapi2_sysctl_preInit_devBufCnt(const char * sns_ent_name,const char * dev_ent,int buf_cnt)77 XCamReturn rk_aiq_uapi2_sysctl_preInit_devBufCnt(const char* sns_ent_name, const char* dev_ent,
78 int buf_cnt) {
79
80 return rk_aiq_uapi_sysctl_preInit_devBufCnt(sns_ent_name, dev_ent, buf_cnt);
81 }
82
83 rk_aiq_sys_ctx_t*
rk_aiq_uapi2_sysctl_init(const char * sns_ent_name,const char * config_file_dir,rk_aiq_error_cb err_cb,rk_aiq_metas_cb metas_cb)84 rk_aiq_uapi2_sysctl_init(const char* sns_ent_name,
85 const char* config_file_dir,
86 rk_aiq_error_cb err_cb,
87 rk_aiq_metas_cb metas_cb)
88 {
89 return rk_aiq_uapi_sysctl_init(sns_ent_name, config_file_dir, err_cb, metas_cb);
90 }
91
rk_aiq_uapi2_sysctl_deinit(rk_aiq_sys_ctx_t * ctx)92 void rk_aiq_uapi2_sysctl_deinit(rk_aiq_sys_ctx_t* ctx)
93 {
94 rk_aiq_uapi_sysctl_deinit(ctx);
95 }
96
97 XCamReturn
rk_aiq_uapi2_sysctl_prepare(const rk_aiq_sys_ctx_t * ctx,uint32_t width,uint32_t height,rk_aiq_working_mode_t mode)98 rk_aiq_uapi2_sysctl_prepare(const rk_aiq_sys_ctx_t* ctx,
99 uint32_t width, uint32_t height,
100 rk_aiq_working_mode_t mode)
101 {
102 return rk_aiq_uapi_sysctl_prepare(ctx, width, height, mode);
103 }
104
105 XCamReturn
rk_aiq_uapi2_sysctl_start(const rk_aiq_sys_ctx_t * ctx)106 rk_aiq_uapi2_sysctl_start(const rk_aiq_sys_ctx_t* ctx)
107 {
108 return rk_aiq_uapi_sysctl_start(ctx);
109 }
110
111 XCamReturn
rk_aiq_uapi2_sysctl_stop(const rk_aiq_sys_ctx_t * ctx,bool keep_ext_hw_st)112 rk_aiq_uapi2_sysctl_stop(const rk_aiq_sys_ctx_t* ctx, bool keep_ext_hw_st)
113 {
114 return rk_aiq_uapi_sysctl_stop(ctx, keep_ext_hw_st);
115 }
116
rk_aiq_uapi2_get_version_info(rk_aiq_ver_info_t * vers)117 void rk_aiq_uapi2_get_version_info(rk_aiq_ver_info_t* vers)
118 {
119 rk_aiq_uapi_get_version_info(vers);
120 }
121
122 XCamReturn
rk_aiq_uapi2_sysctl_updateIq(rk_aiq_sys_ctx_t * sys_ctx,char * iqfile)123 rk_aiq_uapi2_sysctl_updateIq(rk_aiq_sys_ctx_t* sys_ctx, char* iqfile)
124 {
125 return rk_aiq_uapi_sysctl_updateIq(sys_ctx, iqfile);
126 }
127
128 int32_t
rk_aiq_uapi2_sysctl_getModuleCtl(const rk_aiq_sys_ctx_t * ctx,rk_aiq_module_id_t mId,bool * mod_en)129 rk_aiq_uapi2_sysctl_getModuleCtl(const rk_aiq_sys_ctx_t* ctx,
130 rk_aiq_module_id_t mId, bool *mod_en)
131 {
132 return rk_aiq_uapi_sysctl_getModuleCtl(ctx, mId, mod_en);
133 }
134
135 XCamReturn
rk_aiq_uapi2_sysctl_setModuleCtl(const rk_aiq_sys_ctx_t * ctx,rk_aiq_module_id_t mId,bool mod_en)136 rk_aiq_uapi2_sysctl_setModuleCtl(const rk_aiq_sys_ctx_t* ctx, rk_aiq_module_id_t mId, bool mod_en)
137 {
138 return rk_aiq_uapi_sysctl_setModuleCtl(ctx, mId, mod_en);
139 }
140
141 XCamReturn
rk_aiq_uapi2_sysctl_enableAxlib(const rk_aiq_sys_ctx_t * ctx,const int algo_type,const int lib_id,bool enable)142 rk_aiq_uapi2_sysctl_enableAxlib(const rk_aiq_sys_ctx_t* ctx,
143 const int algo_type,
144 const int lib_id,
145 bool enable)
146 {
147 return rk_aiq_uapi_sysctl_enableAxlib(ctx, algo_type, lib_id, enable);
148 }
149
150 bool
rk_aiq_uapi2_sysctl_getAxlibStatus(const rk_aiq_sys_ctx_t * ctx,const int algo_type,const int lib_id)151 rk_aiq_uapi2_sysctl_getAxlibStatus(const rk_aiq_sys_ctx_t* ctx,
152 const int algo_type,
153 const int lib_id)
154 {
155 return rk_aiq_uapi_sysctl_getAxlibStatus(ctx, algo_type, lib_id);
156 }
157
158 const RkAiqAlgoContext*
rk_aiq_uapi2_sysctl_getEnabledAxlibCtx(const rk_aiq_sys_ctx_t * ctx,const int algo_type)159 rk_aiq_uapi2_sysctl_getEnabledAxlibCtx(const rk_aiq_sys_ctx_t* ctx, const int algo_type)
160 {
161 return rk_aiq_uapi_sysctl_getEnabledAxlibCtx(ctx, algo_type);
162 }
163
164 XCamReturn
rk_aiq_uapi2_sysctl_getStaticMetas(const char * sns_ent_name,rk_aiq_static_info_t * static_info)165 rk_aiq_uapi2_sysctl_getStaticMetas(const char* sns_ent_name, rk_aiq_static_info_t* static_info)
166 {
167 return rk_aiq_uapi_sysctl_getStaticMetas(sns_ent_name, static_info);
168 }
169
170
171 XCamReturn
rk_aiq_uapi2_sysctl_enumStaticMetasByPhyId(int index,rk_aiq_static_info_t * static_info)172 rk_aiq_uapi2_sysctl_enumStaticMetasByPhyId(int index, rk_aiq_static_info_t* static_info)
173 {
174 return rk_aiq_uapi_sysctl_enumStaticMetasByPhyId(index, static_info);
175 }
176
177 XCamReturn
rk_aiq_uapi2_sysctl_enumStaticMetas(int index,rk_aiq_static_info_t * static_info)178 rk_aiq_uapi2_sysctl_enumStaticMetas(int index, rk_aiq_static_info_t* static_info)
179 {
180 return rk_aiq_uapi_sysctl_enumStaticMetas(index, static_info);
181 }
182
183 const char*
rk_aiq_uapi2_sysctl_getBindedSnsEntNmByVd(const char * vd)184 rk_aiq_uapi2_sysctl_getBindedSnsEntNmByVd(const char* vd)
185 {
186 return rk_aiq_uapi_sysctl_getBindedSnsEntNmByVd(vd);
187 }
188
189 XCamReturn
rk_aiq_uapi2_sysctl_getCrop(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_rect_t * rect)190 rk_aiq_uapi2_sysctl_getCrop(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_rect_t *rect)
191 {
192 return rk_aiq_uapi_sysctl_getCrop(sys_ctx, rect);
193 }
194
195 #if 0
196 XCamReturn
197 rk_aiq_uapi2_sysctl_setCrop(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_rect_t rect)
198 {
199 return rk_aiq_uapi_sysctl_setCrop(sys_ctx, rect);
200 }
201 #endif
202
203 XCamReturn
rk_aiq_uapi2_sysctl_setCpsLtCfg(const rk_aiq_sys_ctx_t * ctx,rk_aiq_cpsl_cfg_t * cfg)204 rk_aiq_uapi2_sysctl_setCpsLtCfg(const rk_aiq_sys_ctx_t* ctx, rk_aiq_cpsl_cfg_t* cfg)
205 {
206 return rk_aiq_uapi_sysctl_setCpsLtCfg(ctx, cfg);
207 }
208
209 XCamReturn
rk_aiq_uapi2_sysctl_getCpsLtInfo(const rk_aiq_sys_ctx_t * ctx,rk_aiq_cpsl_info_t * info)210 rk_aiq_uapi2_sysctl_getCpsLtInfo(const rk_aiq_sys_ctx_t* ctx, rk_aiq_cpsl_info_t* info)
211 {
212 return rk_aiq_uapi_sysctl_getCpsLtInfo(ctx, info);
213 }
214
215 XCamReturn
rk_aiq_uapi2_sysctl_queryCpsLtCap(const rk_aiq_sys_ctx_t * ctx,rk_aiq_cpsl_cap_t * cap)216 rk_aiq_uapi2_sysctl_queryCpsLtCap(const rk_aiq_sys_ctx_t* ctx, rk_aiq_cpsl_cap_t* cap)
217 {
218 return rk_aiq_uapi_sysctl_queryCpsLtCap(ctx, cap);
219 }
220
221 XCamReturn
rk_aiq_uapi2_sysctl_setSharpFbcRotation(const rk_aiq_sys_ctx_t * ctx,rk_aiq_rotation_t rot)222 rk_aiq_uapi2_sysctl_setSharpFbcRotation(const rk_aiq_sys_ctx_t* ctx, rk_aiq_rotation_t rot)
223 {
224 return rk_aiq_uapi_sysctl_setSharpFbcRotation(ctx, rot);
225 }
226
227 void
rk_aiq_uapi2_sysctl_setMulCamConc(const rk_aiq_sys_ctx_t * ctx,bool cc)228 rk_aiq_uapi2_sysctl_setMulCamConc(const rk_aiq_sys_ctx_t* ctx, bool cc)
229 {
230 rk_aiq_uapi_sysctl_setMulCamConc(ctx, cc);
231 }
232
233 XCamReturn
rk_aiq_uapi2_sysctl_regMemsSensorIntf(const rk_aiq_sys_ctx_t * sys_ctx,const rk_aiq_mems_sensor_intf_t * intf)234 rk_aiq_uapi2_sysctl_regMemsSensorIntf(const rk_aiq_sys_ctx_t* sys_ctx,
235 const rk_aiq_mems_sensor_intf_t* intf)
236 {
237 return rk_aiq_uapi_sysctl_regMemsSensorIntf(sys_ctx, intf);
238 }
239
240 int
rk_aiq_uapi2_sysctl_switch_scene(const rk_aiq_sys_ctx_t * sys_ctx,const char * main_scene,const char * sub_scene)241 rk_aiq_uapi2_sysctl_switch_scene(const rk_aiq_sys_ctx_t* sys_ctx,
242 const char* main_scene, const char* sub_scene)
243 {
244 return rk_aiq_uapi_sysctl_switch_scene(sys_ctx, main_scene, sub_scene);
245 }
246
247 XCamReturn
rk_aiq_uapi2_sysctl_tuning(const rk_aiq_sys_ctx_t * sys_ctx,char * param)248 rk_aiq_uapi2_sysctl_tuning(const rk_aiq_sys_ctx_t* sys_ctx, char* param)
249 {
250 return rk_aiq_uapi_sysctl_tuning(sys_ctx, param);
251 }
252
rk_aiq_uapi2_sysctl_readiq(const rk_aiq_sys_ctx_t * sys_ctx,char * param)253 char* rk_aiq_uapi2_sysctl_readiq(const rk_aiq_sys_ctx_t* sys_ctx, char* param)
254 {
255 return rk_aiq_uapi_sysctl_readiq(sys_ctx, param);
256 }
257
258 XCamReturn
rk_aiq_uapi2_sysctl_prepareRkRaw(const rk_aiq_sys_ctx_t * ctx,rk_aiq_raw_prop_t prop)259 rk_aiq_uapi2_sysctl_prepareRkRaw(const rk_aiq_sys_ctx_t* ctx, rk_aiq_raw_prop_t prop)
260 {
261 return rk_aiq_uapi_sysctl_prepareRkRaw(ctx, prop);
262 }
263
264 XCamReturn
rk_aiq_uapi2_sysctl_enqueueRkRawBuf(const rk_aiq_sys_ctx_t * ctx,void * rawdata,bool sync)265 rk_aiq_uapi2_sysctl_enqueueRkRawBuf(const rk_aiq_sys_ctx_t* ctx, void *rawdata, bool sync)
266 {
267 return rk_aiq_uapi_sysctl_enqueueRkRawBuf(ctx, rawdata, sync);
268 }
269
270 XCamReturn
rk_aiq_uapi2_sysctl_enqueueRkRawFile(const rk_aiq_sys_ctx_t * ctx,const char * path)271 rk_aiq_uapi2_sysctl_enqueueRkRawFile(const rk_aiq_sys_ctx_t* ctx, const char *path)
272 {
273 return rk_aiq_uapi_sysctl_enqueueRkRawFile(ctx, path);
274 }
275
276 XCamReturn
rk_aiq_uapi2_sysctl_registRkRawCb(const rk_aiq_sys_ctx_t * ctx,void (* callback)(void *))277 rk_aiq_uapi2_sysctl_registRkRawCb(const rk_aiq_sys_ctx_t* ctx, void (*callback)(void*))
278 {
279 return rk_aiq_uapi_sysctl_registRkRawCb(ctx, callback);
280 }
281
282 XCamReturn
rk_aiq_uapi2_sysctl_getCamInfos(const rk_aiq_sys_ctx_t * sys_ctx,rk_aiq_ctx_camInfo_t * camInfo)283 rk_aiq_uapi2_sysctl_getCamInfos(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_ctx_camInfo_t* camInfo)
284 {
285 ENTER_XCORE_FUNCTION();
286 XCAM_ASSERT(sys_ctx != nullptr);
287 RKAIQ_API_SMART_LOCK(sys_ctx);
288
289 XCamReturn ret = XCAM_RETURN_NO_ERROR;
290
291 if (!camInfo) {
292 LOGE("null params !");
293 return XCAM_RETURN_ERROR_PARAM;
294 }
295
296 camInfo->sns_ent_nm = sys_ctx->_sensor_entity_name;
297 camInfo->sns_camPhyId = sys_ctx->_camPhyId;
298
299 EXIT_XCORE_FUNCTION();
300
301 return ret;
302 }
303
304 XCamReturn
rk_aiq_uapi2_sysctl_get3AStats(const rk_aiq_sys_ctx_t * ctx,rk_aiq_isp_stats_t * stats)305 rk_aiq_uapi2_sysctl_get3AStats(const rk_aiq_sys_ctx_t* ctx,
306 rk_aiq_isp_stats_t *stats)
307 {
308 return rk_aiq_uapi_sysctl_get3AStats(ctx, stats);
309 }
310
311 XCamReturn
rk_aiq_uapi2_sysctl_get3AStatsBlk(const rk_aiq_sys_ctx_t * ctx,rk_aiq_isp_stats_t ** stats,int timeout_ms)312 rk_aiq_uapi2_sysctl_get3AStatsBlk(const rk_aiq_sys_ctx_t* ctx,
313 rk_aiq_isp_stats_t **stats, int timeout_ms)
314 {
315 return rk_aiq_uapi_sysctl_get3AStatsBlk(ctx, stats, timeout_ms);
316 }
317
318 void
rk_aiq_uapi2_sysctl_release3AStatsRef(const rk_aiq_sys_ctx_t * ctx,rk_aiq_isp_stats_t * stats)319 rk_aiq_uapi2_sysctl_release3AStatsRef(const rk_aiq_sys_ctx_t* ctx,
320 rk_aiq_isp_stats_t *stats)
321 {
322 return rk_aiq_uapi_sysctl_release3AStatsRef(ctx, stats);
323 }
324
325 XCamReturn
rk_aiq_uapi2_sysctl_getWorkingMode(const rk_aiq_sys_ctx_t * ctx,rk_aiq_working_mode_t * mode)326 rk_aiq_uapi2_sysctl_getWorkingMode(const rk_aiq_sys_ctx_t* ctx, rk_aiq_working_mode_t *mode)
327 {
328 ENTER_XCORE_FUNCTION();
329 if (!mode || !ctx)
330 return XCAM_RETURN_ERROR_PARAM;
331
332 RKAIQ_API_SMART_LOCK(ctx);
333 *mode = ctx->_rkAiqManager->getWorkingMode();
334 if (*mode < 0)
335 return XCAM_RETURN_ERROR_OUTOFRANGE;
336 EXIT_XCORE_FUNCTION();
337
338 return XCAM_RETURN_NO_ERROR;
339 }
340
rk_aiq_uapi2_sysctl_tuning_enable(rk_aiq_sys_ctx_t * sys_ctx,bool enable)341 int rk_aiq_uapi2_sysctl_tuning_enable(rk_aiq_sys_ctx_t* sys_ctx, bool enable)
342 {
343 return rk_aiq_uapi_sysctl_tuning_enable(sys_ctx, enable);
344 }
345
346 XCamReturn
rk_aiq_uapi2_sysctl_resetCam(const rk_aiq_sys_ctx_t * sys_ctx,int camId)347 rk_aiq_uapi2_sysctl_resetCam(const rk_aiq_sys_ctx_t* sys_ctx, int camId)
348 {
349 RKAIQ_API_SMART_LOCK(sys_ctx);
350 XCamReturn ret = XCAM_RETURN_NO_ERROR;
351
352 if (!sys_ctx) {
353 LOGE("%s: sys_ctx is invalied\n", __func__);
354 return XCAM_RETURN_ERROR_PARAM;
355 }
356
357 if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
358 LOGE("%s: not support for camgroup\n", __func__);
359 return XCAM_RETURN_ERROR_FAILED;
360 }
361
362 ret = sys_ctx->_camHw->reset_hardware();
363 if (ret) {
364 LOGE("failed to reset hardware\n");
365 }
366
367 return ret;
368 }
369
rk_aiq_uapi2_sysctl_rawReproc_genIspParams(rk_aiq_sys_ctx_t * sys_ctx,uint32_t sequence,rk_aiq_frame_info_t * next_frm_info,int mode)370 void rk_aiq_uapi2_sysctl_rawReproc_genIspParams (rk_aiq_sys_ctx_t* sys_ctx,
371 uint32_t sequence,
372 rk_aiq_frame_info_t *next_frm_info,
373 int mode)
374 {
375 sys_ctx->_camHw->rawReproc_genIspParams(sequence, next_frm_info, mode);
376 }
377
378 const char*
rk_aiq_uapi2_sysctl_rawReproc_preInit(const char * isp_driver,const char * offline_sns_name,rk_aiq_frame_info_t two_frm_exp_info[2])379 rk_aiq_uapi2_sysctl_rawReproc_preInit(const char* isp_driver,
380 const char* offline_sns_name,
381 rk_aiq_frame_info_t two_frm_exp_info[2])
382 {
383 if (!g_rk_aiq_init_lib) {
384 rk_aiq_init_lib();
385 g_rk_aiq_init_lib = true;
386 }
387 const char* sns_name = NULL;
388 sns_name = CamHwIsp20::rawReproc_preInit(isp_driver, offline_sns_name);
389 if (sns_name) {
390 rk_aiq_frame_info_t exp_finfo = two_frm_exp_info[0];
391 LOGD("exp_finfo %d, %d, %f, %f\n",
392 exp_finfo.normal_gain_reg,
393 exp_finfo.normal_exp_reg,
394 exp_finfo.normal_exp,
395 exp_finfo.normal_gain);
396 std::string sns_ent_name = std::string(sns_name);
397 rk_aiq_sys_preinit_cfg_t cfg;
398 memcpy(cfg.frame_exp_info, two_frm_exp_info, sizeof(cfg.frame_exp_info));
399 g_rk_aiq_offline_raw_exp_map[sns_name] = cfg;
400 }
401
402 return sns_name;
403 }
404
rk_aiq_uapi2_sysctl_setIspParamsDelayCnts(const rk_aiq_sys_ctx_t * sys_ctx,int8_t delay_cnts)405 void rk_aiq_uapi2_sysctl_setIspParamsDelayCnts(const rk_aiq_sys_ctx_t* sys_ctx, int8_t delay_cnts) {
406 #ifdef RKAIQ_ENABLE_CAMGROUP
407 // TODO
408 #endif
409 sys_ctx->_analyzer->setDelayCnts(delay_cnts);
410 }
411
rk_aiq_uapi2_sysctl_setUserSensorFormat(rk_aiq_sys_ctx_t * sys_ctx,uint16_t width,uint16_t height,uint16_t code)412 void rk_aiq_uapi2_sysctl_setUserSensorFormat(rk_aiq_sys_ctx_t* sys_ctx, uint16_t width, uint16_t height,
413 uint16_t code)
414 {
415 sys_ctx->_camHw->setUserSensorFormat(width, height, code);
416 }