/* * 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. * */ #ifndef _RK_AIQ_USER_API_CUSTOM_AE_H_ #define _RK_AIQ_USER_API_CUSTOM_AE_H_ #include "rk_aiq_types.h" /* common structs */ #include "rk_aiq_user_api2_sysctl.h" /* rk_aiq_sys_ctx_t */ #include "ae/rk_aiq_types_ae_hw.h" /* include ae structs*/ RKAIQ_BEGIN_DECLARE #ifndef RK_AIQ_MAX_HDR_FRAME #define RK_AIQ_MAX_HDR_FRAME 3 #endif /* all ae stats */ typedef struct rk_aiq_customAe_stats_s { //hw stats Aec_Stat_Res_t rawae_stat[RK_AIQ_MAX_HDR_FRAME]; // before awb gain Aec_Stat_Res_t extra; // after awb gain, lsc, TMO //exposure RkAiqExpParamComb_t linear_exp; RkAiqExpParamComb_t hdr_exp[RK_AIQ_MAX_HDR_FRAME]; struct rk_aiq_customAe_stats_s* next; // for surround view(multiple cams) } rk_aiq_customAe_stats_t; typedef struct rk_aiq_i2c_data_s { bool bValid; unsigned int nNumRegs; unsigned int* pRegAddr; unsigned int* pAddrByteNum; unsigned int* pRegValue; unsigned int* pValueByteNum; unsigned int* pDelayFrames; } rk_aiq_i2c_data_t; /* ae results */ typedef struct rk_aiq_customeAe_results_singel_s { //exposure result (including:reg value & real value) RkAiqExpParamComb_t linear_exp; RkAiqExpParamComb_t hdr_exp[RK_AIQ_MAX_HDR_FRAME]; rk_aiq_i2c_data_t exp_i2c_params; //hw result struct window meas_win; unsigned char meas_weight[15 * 15]; struct rk_aiq_customeAe_results_singel_s* next; // for surround view(multiple cams) } rk_aiq_customeAe_results_single_t; typedef struct rk_aiq_customeAe_results_s { //exposure result (including:reg value & real value) RkAiqExpParamComb_t linear_exp; RkAiqExpParamComb_t hdr_exp[RK_AIQ_MAX_HDR_FRAME]; rk_aiq_i2c_data_t exp_i2c_params; //hw result struct window meas_win; unsigned char meas_weight[15 * 15]; RkAiqIrisParamComb_t Iris; uint32_t frame_length_lines; bool is_longfrm_mode; struct rk_aiq_customeAe_results_singel_s* next; // for surround view(multiple cams) } rk_aiq_customeAe_results_t; typedef struct rk_aiq_customeAe_cbs_s { /* ctx is the rk_aiq_sys_ctx_t/rk_aiq_camgroup_ctx_t * which is corresponded to * camera/camgroup, could be mapped to camera id. */ int32_t (*pfn_ae_init)(void* ctx); int32_t (*pfn_ae_run)(void* ctx, const rk_aiq_customAe_stats_t* pstAeInfo, rk_aiq_customeAe_results_t* pstAeResult); /* not used now */ int32_t (*pfn_ae_ctrl)(void* ctx, uint32_t u32Cmd, void *pValue); int32_t (*pfn_ae_exit)(void* ctx); } rk_aiq_customeAe_cbs_t; /*! * \brief register custom Ae algo * * \param[in] ctx context * \param[in] cbs custom Ae callbacks * \note should be called after rk_aiq_uapi_sysctl_init */ XCamReturn rk_aiq_uapi2_customAE_register(const rk_aiq_sys_ctx_t* ctx, rk_aiq_customeAe_cbs_t* cbs); /*! * \brief enable/disable custom Ae algo * * \param[in] ctx context * \param[in] enable enable/diable custom Ae * \note should be called after rk_aiq_uapi_customAE_register. If custom Ae was enabled, * Rk ae will be stopped, vice versa. */ XCamReturn rk_aiq_uapi2_customAE_enable(const rk_aiq_sys_ctx_t* ctx, bool enable); /*! * \brief unregister custom Ae algo * * \param[in] ctx context * \note should be called after rk_aiq_uapi_customAE_register. */ XCamReturn rk_aiq_uapi2_customAE_unRegister(const rk_aiq_sys_ctx_t* ctx); RKAIQ_END_DECLARE #endif