/*
|
* Copyright (c) 2021 Rockchip Corporation
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*
|
*/
|
|
#include "uAPI2/rk_aiq_user_api2_wrapper.h"
|
#include "RkAiqCalibDbV2.h"
|
#include "RkAiqUapitypes.h"
|
#include "cJSON.h"
|
#include "cJSON_Utils.h"
|
#include "j2s.h"
|
#include "rk_aiq_user_api_sysctl.h"
|
#include "stdlib.h"
|
#include "string.h"
|
#include "uAPI/include/rk_aiq_user_api_sysctl.h"
|
#include "uAPI2/rk_aiq_user_api2_ae.h"
|
#include "uAPI2/rk_aiq_user_api2_acsm.h"
|
#include "uAPI2/rk_aiq_user_api2_imgproc.h"
|
#include "uAPI2/rk_aiq_user_api2_sysctl.h"
|
#include "rk_aiq_api_private.h"
|
|
static camgroup_uapi_t last_camindex;
|
|
int rk_aiq_uapi_sysctl_swWorkingModeDyn2(const rk_aiq_sys_ctx_t *ctx,
|
work_mode_t *mode) {
|
return rk_aiq_uapi_sysctl_swWorkingModeDyn(ctx, mode->mode);
|
}
|
|
int rk_aiq_uapi_sysctl_getWorkingModeDyn(const rk_aiq_sys_ctx_t *ctx,
|
work_mode_t *mode) {
|
return rk_aiq_uapi2_sysctl_getWorkingMode(ctx, &mode->mode);
|
}
|
|
int rk_aiq_uapi2_setWBMode2(rk_aiq_sys_ctx_t *ctx, uapi_wb_mode_t *mode) {
|
return rk_aiq_uapi2_setWBMode(ctx, mode->mode);
|
}
|
|
int rk_aiq_uapi2_getWBMode2(rk_aiq_sys_ctx_t *ctx, uapi_wb_mode_t *mode) {
|
return rk_aiq_uapi2_getWBMode(ctx, &mode->mode);
|
}
|
|
int rk_aiq_user_api2_amerge_GetCtldata(const rk_aiq_sys_ctx_t *sys_ctx,
|
uapiMergeCurrCtlData_t *ctldata) {
|
amerge_attrib_t setdata;
|
|
memset(&setdata, 0, sizeof(amerge_attrib_t));
|
|
rk_aiq_user_api2_amerge_GetAttrib(sys_ctx, &setdata);
|
|
if (CHECK_ISP_HW_V21())
|
memcpy(ctldata, &setdata.attrV21.CtlInfo, sizeof(uapiMergeCurrCtlData_t));
|
else if (CHECK_ISP_HW_V30())
|
memcpy(ctldata, &setdata.attrV30.CtlInfo, sizeof(uapiMergeCurrCtlData_t));
|
|
return 0;
|
}
|
|
int rk_aiq_user_api2_set_scene(const rk_aiq_sys_ctx_t *sys_ctx,
|
aiq_scene_t *scene) {
|
return rk_aiq_uapi_sysctl_switch_scene(sys_ctx, scene->main_scene,
|
scene->sub_scene);
|
}
|
|
int rk_aiq_user_api2_get_scene(const rk_aiq_sys_ctx_t *sys_ctx,
|
aiq_scene_t *scene) {
|
(void)sys_ctx;
|
scene->main_scene = strdup("normal");
|
scene->sub_scene = strdup("day");
|
|
return 0;
|
}
|
|
int rk_aiq_uapi_get_ae_hwstats(const rk_aiq_sys_ctx_t *sys_ctx,
|
uapi_ae_hwstats_t *ae_hwstats) {
|
rk_aiq_isp_stats_t isp_stats;
|
|
if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
|
LOGE("Can't read 3A stats for group ctx!");
|
return XCAM_RETURN_ERROR_PARAM;
|
}
|
|
rk_aiq_uapi_sysctl_get3AStats(sys_ctx, &isp_stats);
|
|
memcpy(ae_hwstats, &isp_stats.aec_stats.ae_data, sizeof(uapi_ae_hwstats_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
int rk_aiq_uapi_get_awb_stat(const rk_aiq_sys_ctx_t *sys_ctx,
|
rk_tool_awb_stat_res2_v30_t *awb_stat) {
|
rk_aiq_isp_stats_t isp_stats;
|
|
if (sys_ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
|
LOGE("Can't read 3A stats for group ctx!");
|
return XCAM_RETURN_ERROR_PARAM;
|
}
|
|
rk_aiq_uapi_sysctl_get3AStats(sys_ctx, &isp_stats);
|
|
memcpy(awb_stat, &isp_stats.awb_stats_v3x,
|
sizeof(rk_tool_awb_stat_res2_v30_t));
|
|
return 0;
|
}
|
|
XCamReturn rk_aiq_get_adpcc_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
Adpcc_Manual_Attr_t *manual) {
|
rk_aiq_dpcc_attrib_V20_t adpcc_attr;
|
|
memset(&adpcc_attr, 0, sizeof(rk_aiq_dpcc_attrib_V20_t));
|
rk_aiq_user_api2_adpcc_GetAttrib(sys_ctx, &adpcc_attr);
|
memcpy(manual, &adpcc_attr.stManual, sizeof(Adpcc_Manual_Attr_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_adpcc_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
Adpcc_Manual_Attr_t *manual) {
|
rk_aiq_dpcc_attrib_V20_t adpcc_attr;
|
|
memset(&adpcc_attr, 0, sizeof(rk_aiq_dpcc_attrib_V20_t));
|
rk_aiq_user_api2_adpcc_GetAttrib(sys_ctx, &adpcc_attr);
|
memcpy(&adpcc_attr.stManual, manual, sizeof(Adpcc_Manual_Attr_t));
|
rk_aiq_user_api2_adpcc_SetAttrib(sys_ctx, &adpcc_attr);
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_user_api2_adrc_queryinfo(const rk_aiq_sys_ctx_t *sys_ctx,
|
DrcInfo_t *drc_info) {
|
drc_attrib_t drc_attr;
|
|
memset(&drc_attr, 0, sizeof(drc_attrib_t));
|
rk_aiq_user_api2_adrc_GetAttrib(sys_ctx, &drc_attr);
|
memcpy(&drc_info, &drc_attr.Info, sizeof(DrcInfo_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_adrc_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
mdrcAttr_V30_t *manual) {
|
drc_attrib_t drc_attr;
|
|
memset(&drc_attr, 0, sizeof(drc_attrib_t));
|
rk_aiq_user_api2_adrc_GetAttrib(sys_ctx, &drc_attr);
|
memcpy(&drc_attr.stManualV30, manual, sizeof(mdrcAttr_V30_t));
|
rk_aiq_user_api2_adrc_SetAttrib(sys_ctx, drc_attr);
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_get_adrc_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
mdrcAttr_V30_t *manual) {
|
drc_attrib_t drc_attr;
|
|
memset(&drc_attr, 0, sizeof(drc_attrib_t));
|
rk_aiq_user_api2_adrc_GetAttrib(sys_ctx, &drc_attr);
|
memcpy(manual, &drc_attr.stManualV30, sizeof(mdrcAttr_V30_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_amerge_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
mMergeAttrV30_t *manual) {
|
amerge_attrib_t setdata;
|
|
memset(&setdata, 0, sizeof(amerge_attrib_t));
|
rk_aiq_user_api2_amerge_GetAttrib(sys_ctx, &setdata);
|
memcpy(&setdata.attrV30.stManual, manual, sizeof(mMergeAttrV30_t));
|
|
return rk_aiq_user_api2_amerge_SetAttrib(sys_ctx, setdata);
|
}
|
|
XCamReturn rk_aiq_get_amerge_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
mMergeAttrV30_t *manual) {
|
amerge_attrib_t setdata;
|
|
memset(&setdata, 0, sizeof(amerge_attrib_t));
|
rk_aiq_user_api2_amerge_GetAttrib(sys_ctx, &setdata);
|
memcpy(manual, &setdata.attrV30.stManual, sizeof(mMergeAttrV30_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_agamma_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
Agamma_api_manualV30_t *manual) {
|
rk_aiq_gamma_attrib_V2_t agamma_attr;
|
|
memset(&agamma_attr, 0, sizeof(rk_aiq_gamma_attrib_V2_t));
|
rk_aiq_user_api2_agamma_GetAttrib(sys_ctx, &agamma_attr);
|
memcpy(&agamma_attr.atrrV30.stManual, manual, sizeof(Agamma_api_manualV30_t));
|
|
return rk_aiq_user_api2_agamma_SetAttrib(sys_ctx, agamma_attr);
|
}
|
|
XCamReturn rk_aiq_get_agamma_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
Agamma_api_manualV30_t *manual) {
|
rk_aiq_gamma_attrib_V2_t agamma_attr;
|
|
memset(&agamma_attr, 0, sizeof(rk_aiq_gamma_attrib_V2_t));
|
rk_aiq_user_api2_agamma_GetAttrib(sys_ctx, &agamma_attr);
|
memcpy(manual, &agamma_attr.atrrV30.stManual, sizeof(Agamma_api_manualV30_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_asharp_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_SHARP_Params_V4_Select_t *manual) {
|
rk_aiq_sharp_attrib_v4_t sharp_attr;
|
|
memset(&sharp_attr, 0, sizeof(rk_aiq_sharp_attrib_v4_t));
|
rk_aiq_user_api2_asharpV4_GetAttrib(sys_ctx, &sharp_attr);
|
memcpy(&sharp_attr.stManual.stSelect, manual, sizeof(RK_SHARP_Params_V4_Select_t));
|
|
return rk_aiq_user_api2_asharpV4_SetAttrib(sys_ctx, &sharp_attr);
|
}
|
|
XCamReturn rk_aiq_get_asharp_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_SHARP_Params_V4_Select_t *manual) {
|
rk_aiq_sharp_attrib_v4_t sharp_attr;
|
|
memset(&sharp_attr, 0, sizeof(rk_aiq_sharp_attrib_v4_t));
|
rk_aiq_user_api2_asharpV4_GetAttrib(sys_ctx, &sharp_attr);
|
memcpy(manual, &sharp_attr.stManual.stSelect, sizeof(RK_SHARP_Params_V4_Select_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn
|
rk_aiq_set_abayer2dnr_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_Bayer2dnr_Params_V2_Select_t *manual) {
|
rk_aiq_bayer2dnr_attrib_v2_t abayer2dnr_attr;
|
|
memset(&abayer2dnr_attr, 0, sizeof(rk_aiq_bayer2dnr_attrib_v2_t));
|
rk_aiq_user_api2_abayer2dnrV2_GetAttrib(sys_ctx, &abayer2dnr_attr);
|
memcpy(&abayer2dnr_attr.stManual.st2DSelect, manual,
|
sizeof(RK_Bayer2dnr_Params_V2_Select_t));
|
|
return rk_aiq_user_api2_abayer2dnrV2_SetAttrib(sys_ctx, &abayer2dnr_attr);
|
}
|
|
XCamReturn
|
rk_aiq_get_abayer2dnr_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_Bayer2dnr_Params_V2_Select_t *manual) {
|
rk_aiq_bayer2dnr_attrib_v2_t abayer2dnr_attr;
|
|
memset(&abayer2dnr_attr, 0, sizeof(rk_aiq_bayer2dnr_attrib_v2_t));
|
rk_aiq_user_api2_abayer2dnrV2_GetAttrib(sys_ctx, &abayer2dnr_attr);
|
memcpy(manual, &abayer2dnr_attr.stManual.st2DSelect,
|
sizeof(RK_Bayer2dnr_Params_V2_Select_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn
|
rk_aiq_set_abayertnr_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_Bayertnr_Params_V2_Select_t *manual) {
|
rk_aiq_bayertnr_attrib_v2_t abayertnr_attr;
|
|
memset(&abayertnr_attr, 0, sizeof(rk_aiq_bayertnr_attrib_v2_t));
|
rk_aiq_user_api2_abayertnrV2_GetAttrib(sys_ctx, &abayertnr_attr);
|
memcpy(&abayertnr_attr.stManual.st3DSelect, manual,
|
sizeof(RK_Bayertnr_Params_V2_Select_t));
|
|
return rk_aiq_user_api2_abayertnrV2_SetAttrib(sys_ctx, &abayertnr_attr);
|
}
|
|
XCamReturn
|
rk_aiq_get_abayertnr_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_Bayertnr_Params_V2_Select_t *manual) {
|
rk_aiq_bayertnr_attrib_v2_t abayertnr_attr;
|
|
memset(&abayertnr_attr, 0, sizeof(rk_aiq_bayertnr_attrib_v2_t));
|
rk_aiq_user_api2_abayertnrV2_GetAttrib(sys_ctx, &abayertnr_attr);
|
memcpy(manual, &abayertnr_attr.stManual.st3DSelect,
|
sizeof(RK_Bayertnr_Params_V2_Select_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_aynr_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_YNR_Params_V3_Select_t *manual) {
|
rk_aiq_ynr_attrib_v3_t aynr_attr;
|
|
memset(&aynr_attr, 0, sizeof(rk_aiq_ynr_attrib_v3_t));
|
rk_aiq_user_api2_aynrV3_GetAttrib(sys_ctx, &aynr_attr);
|
memcpy(&aynr_attr.stManual.stSelect, manual, sizeof(RK_YNR_Params_V3_Select_t));
|
|
return rk_aiq_user_api2_aynrV3_SetAttrib(sys_ctx, &aynr_attr);
|
}
|
|
XCamReturn rk_aiq_get_aynr_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_YNR_Params_V3_Select_t *manual) {
|
rk_aiq_ynr_attrib_v3_t aynr_attr;
|
|
memset(&aynr_attr, 0, sizeof(rk_aiq_ynr_attrib_v3_t));
|
rk_aiq_user_api2_aynrV3_GetAttrib(sys_ctx, &aynr_attr);
|
memcpy(manual, &aynr_attr.stManual.stSelect, sizeof(RK_YNR_Params_V3_Select_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_acnr_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_CNR_Params_V2_Select_t *manual) {
|
rk_aiq_cnr_attrib_v2_t acnr_attr;
|
|
memset(&acnr_attr, 0, sizeof(rk_aiq_cnr_attrib_v2_t));
|
rk_aiq_user_api2_acnrV2_GetAttrib(sys_ctx, &acnr_attr);
|
memcpy(&acnr_attr.stManual.stSelect, manual, sizeof(RK_CNR_Params_V2_Select_t));
|
|
return rk_aiq_user_api2_acnrV2_SetAttrib(sys_ctx, &acnr_attr);
|
}
|
|
XCamReturn rk_aiq_get_acnr_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_CNR_Params_V2_Select_t *manual) {
|
rk_aiq_cnr_attrib_v2_t acnr_attr;
|
|
memset(&acnr_attr, 0, sizeof(rk_aiq_cnr_attrib_v2_t));
|
rk_aiq_user_api2_acnrV2_GetAttrib(sys_ctx, &acnr_attr);
|
memcpy(manual, &acnr_attr.stManual.stSelect, sizeof(RK_CNR_Params_V2_Select_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_again_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_GAIN_Select_V2_t *manual) {
|
rk_aiq_gain_attrib_v2_t again_attr;
|
|
memset(&again_attr, 0, sizeof(rk_aiq_gain_attrib_v2_t));
|
rk_aiq_user_api2_againV2_GetAttrib(sys_ctx, &again_attr);
|
memcpy(&again_attr.stManual.stSelect, manual, sizeof(RK_GAIN_Select_V2_t));
|
|
return rk_aiq_user_api2_againV2_SetAttrib(sys_ctx, &again_attr);
|
}
|
|
XCamReturn rk_aiq_get_again_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
RK_GAIN_Select_V2_t *manual) {
|
rk_aiq_gain_attrib_v2_t again_attr;
|
|
memset(&again_attr, 0, sizeof(rk_aiq_gain_attrib_v2_t));
|
rk_aiq_user_api2_againV2_GetAttrib(sys_ctx, &again_attr);
|
memcpy(manual, &again_attr.stManual.stSelect, sizeof(RK_GAIN_Select_V2_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_ablc0_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
AblcSelect_t *manual) {
|
rk_aiq_blc_attrib_t ablc_attr;
|
|
memset(&ablc_attr, 0, sizeof(rk_aiq_blc_attrib_t));
|
rk_aiq_user_api2_ablc_GetAttrib(sys_ctx, &ablc_attr);
|
memcpy(&ablc_attr.stBlc0Manual, manual, sizeof(AblcSelect_t));
|
|
return rk_aiq_user_api2_ablc_SetAttrib(sys_ctx, &ablc_attr);
|
}
|
|
XCamReturn rk_aiq_get_ablc0_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
AblcSelect_t *manual) {
|
rk_aiq_blc_attrib_t ablc_attr;
|
|
memset(&ablc_attr, 0, sizeof(rk_aiq_blc_attrib_t));
|
rk_aiq_user_api2_ablc_GetAttrib(sys_ctx, &ablc_attr);
|
memcpy(manual, &ablc_attr.stBlc0Manual, sizeof(AblcSelect_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_ablc1_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
AblcSelect_t *manual) {
|
rk_aiq_blc_attrib_t ablc_attr;
|
|
memset(&ablc_attr, 0, sizeof(rk_aiq_blc_attrib_t));
|
rk_aiq_user_api2_ablc_GetAttrib(sys_ctx, &ablc_attr);
|
memcpy(&ablc_attr.stBlc0Manual, manual, sizeof(AblcSelect_t));
|
|
return rk_aiq_user_api2_ablc_SetAttrib(sys_ctx, &ablc_attr);
|
}
|
|
XCamReturn rk_aiq_get_ablc1_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
AblcSelect_t *manual) {
|
rk_aiq_blc_attrib_t ablc_attr;
|
|
memset(&ablc_attr, 0, sizeof(rk_aiq_blc_attrib_t));
|
rk_aiq_user_api2_ablc_GetAttrib(sys_ctx, &ablc_attr);
|
memcpy(manual, &ablc_attr.stBlc0Manual, sizeof(AblcSelect_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_accm_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
rk_aiq_ccm_mccm_attrib_t *manual) {
|
rk_aiq_ccm_attrib_t accm_attr;
|
|
memset(&accm_attr, 0, sizeof(rk_aiq_ccm_attrib_t));
|
rk_aiq_user_api2_accm_GetAttrib(sys_ctx, &accm_attr);
|
memcpy(&accm_attr.stManual, manual, sizeof(rk_aiq_ccm_mccm_attrib_t));
|
|
return rk_aiq_user_api2_accm_SetAttrib(sys_ctx, accm_attr);
|
}
|
|
XCamReturn rk_aiq_get_accm_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
rk_aiq_ccm_mccm_attrib_t *manual) {
|
rk_aiq_ccm_attrib_t accm_attr;
|
|
memset(&accm_attr, 0, sizeof(rk_aiq_ccm_attrib_t));
|
rk_aiq_user_api2_accm_GetAttrib(sys_ctx, &accm_attr);
|
memcpy(manual, &accm_attr.stManual, sizeof(rk_aiq_ccm_mccm_attrib_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_a3dlut_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
rk_aiq_lut3d_mlut3d_attrib_t *manual) {
|
rk_aiq_lut3d_attrib_t a3dlut_attr;
|
|
memset(&a3dlut_attr, 0, sizeof(rk_aiq_lut3d_attrib_t));
|
rk_aiq_user_api2_a3dlut_GetAttrib(sys_ctx, &a3dlut_attr);
|
memcpy(&a3dlut_attr.stManual, manual, sizeof(rk_aiq_lut3d_mlut3d_attrib_t));
|
|
return rk_aiq_user_api2_a3dlut_SetAttrib(sys_ctx, a3dlut_attr);
|
}
|
|
XCamReturn rk_aiq_get_a3dlut_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
rk_aiq_lut3d_mlut3d_attrib_t *manual) {
|
rk_aiq_lut3d_attrib_t a3dlut_attr;
|
|
memset(&a3dlut_attr, 0, sizeof(rk_aiq_lut3d_attrib_t));
|
rk_aiq_user_api2_a3dlut_GetAttrib(sys_ctx, &a3dlut_attr);
|
memcpy(manual, &a3dlut_attr.stManual, sizeof(rk_aiq_lut3d_mlut3d_attrib_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_acsm_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
Csm_Param_t *manual) {
|
rk_aiq_uapi_acsm_attrib_t acsm_attr;
|
|
memset(&acsm_attr, 0, sizeof(rk_aiq_uapi_acsm_attrib_t));
|
rk_aiq_user_api2_acsm_GetAttrib(sys_ctx, &acsm_attr);
|
memcpy(&acsm_attr.param, manual, sizeof(Csm_Param_t));
|
|
return rk_aiq_user_api2_acsm_SetAttrib(sys_ctx, acsm_attr);
|
}
|
|
XCamReturn rk_aiq_get_acsm_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
Csm_Param_t *manual) {
|
rk_aiq_uapi_acsm_attrib_t acsm_attr;
|
|
memset(&acsm_attr, 0, sizeof(rk_aiq_uapi_acsm_attrib_t));
|
rk_aiq_user_api2_acsm_GetAttrib(sys_ctx, &acsm_attr);
|
memcpy(manual, &acsm_attr.param, sizeof(Csm_Param_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_adehaze_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
mDehazeAttr_t *manual) {
|
adehaze_sw_V2_t adehaze_attr;
|
|
memset(&adehaze_attr, 0, sizeof(adehaze_sw_V2_t));
|
rk_aiq_user_api2_adehaze_getSwAttrib(sys_ctx, &adehaze_attr);
|
memcpy(&adehaze_attr.stManual, manual, sizeof(mDehazeAttr_t));
|
|
return rk_aiq_user_api2_adehaze_setSwAttrib(sys_ctx, adehaze_attr);
|
}
|
|
XCamReturn rk_aiq_get_adehaze_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
mDehazeAttr_t *manual) {
|
adehaze_sw_V2_t adehaze_attr;
|
|
memset(&adehaze_attr, 0, sizeof(adehaze_sw_V2_t));
|
rk_aiq_user_api2_adehaze_getSwAttrib(sys_ctx, &adehaze_attr);
|
memcpy(manual, &adehaze_attr.stManual, sizeof(mDehazeAttr_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_adebayer_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
adebayer_attrib_t *adebayer_attr) {
|
adebayer_attrib_t attr;
|
|
memset(&attr, 0, sizeof(attr));
|
rk_aiq_user_api2_adebayer_GetAttrib(sys_ctx, &attr);
|
memcpy(&attr, adebayer_attr, sizeof(attr));
|
|
return rk_aiq_user_api2_adebayer_SetAttrib(sys_ctx, attr);
|
}
|
|
XCamReturn rk_aiq_get_adebayer_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
adebayer_attrib_t *adebayer_attr) {
|
adebayer_attrib_t attr;
|
|
memset(&attr, 0, sizeof(attr));
|
rk_aiq_user_api2_adebayer_GetAttrib(sys_ctx, &attr);
|
memcpy(adebayer_attr, &attr, sizeof(attr));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_alsc_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
rk_aiq_lsc_table_t *manual) {
|
rk_aiq_lsc_attrib_t alsc_attr;
|
|
memset(&alsc_attr, 0, sizeof(rk_aiq_lsc_attrib_t));
|
rk_aiq_user_api2_alsc_GetAttrib(sys_ctx, &alsc_attr);
|
memcpy(&alsc_attr.stManual, manual, sizeof(rk_aiq_lsc_table_t));
|
|
return rk_aiq_user_api2_alsc_SetAttrib(sys_ctx, alsc_attr);
|
}
|
|
XCamReturn rk_aiq_get_alsc_manual_attr(const rk_aiq_sys_ctx_t *sys_ctx,
|
rk_aiq_lsc_table_t *manual) {
|
rk_aiq_lsc_attrib_t alsc_attr;
|
|
memset(&alsc_attr, 0, sizeof(rk_aiq_lsc_attrib_t));
|
rk_aiq_user_api2_alsc_GetAttrib(sys_ctx, &alsc_attr);
|
memcpy(manual, &alsc_attr.stManual, sizeof(rk_aiq_lsc_table_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_set_current_camindex(const rk_aiq_sys_ctx_t *sys_ctx,
|
camgroup_uapi_t *arg) {
|
(void)(sys_ctx);
|
last_camindex = *arg;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn rk_aiq_get_current_camindex(const rk_aiq_sys_ctx_t *sys_ctx,
|
camgroup_uapi_t *arg) {
|
(void)(sys_ctx);
|
|
*arg = last_camindex;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
rk_aiq_sys_ctx_t* rk_aiq_get_last_sysctx(rk_aiq_sys_ctx_t *sys_ctx) {
|
camgroup_uapi_t last_arg;
|
rk_aiq_camgroup_ctx_t* grp_ctx = NULL;
|
|
// Single camera instance
|
grp_ctx = get_binded_group_ctx(sys_ctx);
|
if (!grp_ctx) {
|
return sys_ctx->next_ctx ? sys_ctx->next_ctx : sys_ctx;
|
}
|
|
// Group camera instance
|
// Check if an special index of camera required
|
memset(&last_arg, 0, sizeof(camgroup_uapi_t));
|
rk_aiq_get_current_camindex(sys_ctx, &last_arg);
|
if (last_arg.current_index == 0) {
|
return (rk_aiq_sys_ctx_t*)grp_ctx;
|
}
|
|
for (auto cam_ctx : grp_ctx->cam_ctxs_array) {
|
if (!cam_ctx || cam_ctx->_camPhyId != (last_arg.current_index - 1))
|
continue;
|
return cam_ctx;
|
}
|
|
return NULL;
|
}
|