ss928_framework/ss928sdk/include/ot_common_ae.h
2024-12-16 13:31:45 +08:00

244 lines
6.9 KiB
C
Executable File

/*
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
*/
#ifndef OT_COMMON_AE_H
#define OT_COMMON_AE_H
#include "ot_type.h"
#include "ot_debug.h"
#include "ot_common_isp.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
#define OT_AE_LIB_NAME "ot_ae_lib"
/* ae ctrl cmd */
typedef enum {
OT_ISP_AE_DEBUG_ATTR_SET,
OT_ISP_AE_DEBUG_ATTR_GET,
OT_ISP_AE_CTRL_BUTT,
} ot_isp_ae_ctrl_cmd;
typedef struct {
td_u32 max_int_time;
td_u32 min_int_time;
td_u32 max_a_gain;
td_u32 min_a_gain;
td_u32 max_d_gain;
td_u32 min_d_gain;
td_u32 max_isp_d_gain;
td_u32 min_isp_d_gain;
td_u32 max_sys_gain;
td_u32 min_sys_gain;
td_u32 compensation;
td_u32 ev_bias;
td_bool manual_exposure_en;
td_bool manual_time_en;
td_bool manual_again_en;
td_bool manual_dgain_en;
td_bool manual_isp_dgain_en;
td_u32 manual_exposure_lines;
td_u32 manual_again;
td_u32 manual_dgain;
td_u32 manual_isp_dgain;
td_u32 ae_weights[(OT_ISP_AE_ZONE_ROW) * (OT_ISP_AE_ZONE_COLUMN)];
} ot_isp_ae_dbg_attr;
typedef struct {
td_u32 frm_num_bgn;
td_u32 full_lines;
td_u32 int_time;
td_u32 short_int_time;
td_u32 med_int_time;
td_u32 long_int_time;
td_u32 again;
td_u32 dgain;
td_u32 isp_dgain;
td_u32 iris_fno_lin;
td_u64 exposure;
td_u32 increment;
td_s32 hist_error;
td_s32 hist_ori_average;
td_s32 luma_offset;
td_u32 iso;
td_u32 exp_ratio;
td_u32 over_exp_ratio;
td_u32 over_exp_ratio_filter;
} ot_isp_ae_dbg_status;
/* sensor's interface to ae
* eg: 0.35db, enAccuType=OT_ISP_AE_ACCURACY_DB, f32Accuracy=0.35
* and the multiply of 0.35db is power(10, (0.35/20))
* eg: 1/16, 2/16, 3/16 multiplies, enAccuType=OT_ISP_AE_ACCURACY_LINEAR, f32Accuracy=0.0625
* eg: 1,2,4,8,16 multiplies, enAccuType=OT_ISP_AE_ACCURACY_DB, f32Accuracy=6
*/
typedef enum {
OT_ISP_AE_ACCURACY_DB = 0,
OT_ISP_AE_ACCURACY_LINEAR,
OT_ISP_AE_ACCURACY_TABLE,
OT_ISP_AE_ACCURACY_BUTT,
} ot_isp_ae_accuracy_type;
typedef struct {
ot_isp_ae_accuracy_type accu_type;
float accuracy;
float offset;
} ot_isp_ae_accuracy;
typedef struct {
td_bool quick_start_enable;
td_u8 black_frame_num;
td_bool ir_mode_en;
td_u32 init_exposure_ir;
td_u32 iso_thr_ir;
td_u16 ir_cut_delay_time;
} ot_isp_quick_start_param;
typedef struct {
td_u8 ae_compensation;
td_u32 lines_per500ms;
td_u32 flicker_freq;
td_float fps;
td_u32 hmax_times; /* unit is ns */
td_u32 init_exposure;
td_u32 init_int_time;
td_u32 init_again;
td_u32 init_dgain;
td_u32 init_isp_dgain;
td_u32 init_ae_speed;
td_u32 init_ae_tolerance;
td_u32 full_lines_std;
td_u32 full_lines_max;
td_u32 full_lines;
td_u32 binning_full_lines;
td_u32 max_int_time; /* RW;unit is line */
td_u32 min_int_time;
td_u32 max_int_time_target;
td_u32 min_int_time_target;
ot_isp_ae_accuracy int_time_accu;
td_u32 max_again;
td_u32 min_again;
td_u32 max_again_target;
td_u32 min_again_target;
ot_isp_ae_accuracy again_accu;
td_u32 max_dgain;
td_u32 min_dgain;
td_u32 max_dgain_target;
td_u32 min_dgain_target;
ot_isp_ae_accuracy dgain_accu;
td_u32 max_isp_dgain_target;
td_u32 min_isp_dgain_target;
td_u32 isp_dgain_shift;
td_u32 max_int_time_step;
td_bool max_time_step_enable;
td_u32 max_inc_time_step[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 max_dec_time_step[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 lf_max_short_time;
td_u32 lf_min_exposure;
ot_isp_ae_route ae_route_attr;
td_bool ae_route_ex_valid;
ot_isp_ae_route_ex ae_route_attr_ex;
ot_isp_ae_route ae_route_sf_attr;
ot_isp_ae_route_ex ae_route_sf_attr_ex;
td_u16 man_ratio_enable;
td_u32 arr_ratio[OT_ISP_EXP_RATIO_NUM];
ot_isp_iris_type iris_type;
ot_isp_piris_attr piris_attr;
ot_isp_iris_f_no max_iris_fno; /* RW; Range:[0, 10]; Format:4.0;
Max F number of Piris's aperture, it's related to the specific iris */
ot_isp_iris_f_no min_iris_fno; /* RW; Range:[0, 10]; Format:4.0;
Min F number of Piris's aperture, it's related to the specific iris */
ot_isp_ae_strategy ae_exp_mode;
td_u16 iso_cal_coef;
td_u8 ae_run_interval;
td_u32 exp_ratio_max;
td_u32 exp_ratio_min;
td_bool diff_gain_support;
ot_isp_quick_start_param quick_start;
ot_isp_prior_frame prior_frame;
td_bool ae_gain_sep_cfg;
td_bool lhcg_support;
td_u32 sns_lhcg_exp_ratio;
} ot_isp_ae_sensor_default;
typedef struct {
ot_isp_fswdr_mode fswdr_mode;
} ot_isp_ae_fswdr_attr;
typedef struct {
td_u32 reg_addr;
td_u32 reg_value;
} ot_isp_ae_param_reg;
typedef struct {
td_u32 tar_fps;
td_u32 exp_time;
td_u32 exp_again;
td_u32 exp_dgain;
td_u32 exp_isp_dgain;
ot_isp_ae_param_reg time_reg[10]; /* 10 */
ot_isp_ae_param_reg again_reg[10]; /* 10 */
ot_isp_ae_param_reg dgain_reg[10]; /* 10 */
} ot_isp_ae_convert_param;
typedef struct {
td_u32 int_time_min[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 int_time_max[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 pre_int_time[OT_ISP_WDR_MAX_FRAME_NUM];
} ot_isp_ae_int_time_range;
typedef struct {
td_s32 (*pfn_cmos_get_ae_default)(ot_vi_pipe vi_pipe, ot_isp_ae_sensor_default *ae_sns_dft);
/* the function of sensor set fps */
td_void (*pfn_cmos_fps_set)(ot_vi_pipe vi_pipe, td_float f32_fps, ot_isp_ae_sensor_default *ae_sns_dft);
td_void (*pfn_cmos_slow_framerate_set)(ot_vi_pipe vi_pipe, td_u32 full_lines, ot_isp_ae_sensor_default *ae_sns_dft);
/* while isp notify ae to update sensor regs, ae call these funcs. */
td_void (*pfn_cmos_inttime_update)(ot_vi_pipe vi_pipe, td_u32 int_time);
td_void (*pfn_cmos_gains_update)(ot_vi_pipe vi_pipe, td_u32 again, td_u32 dgain);
td_void (*pfn_cmos_again_calc_table)(ot_vi_pipe vi_pipe, td_u32 *again_lin, td_u32 *again_db);
td_void (*pfn_cmos_dgain_calc_table)(ot_vi_pipe vi_pipe, td_u32 *dgain_lin, td_u32 *dgain_db);
td_void (*pfn_cmos_get_inttime_max)(ot_vi_pipe vi_pipe, td_u16 man_ratio_enable, td_u32 *ratio,
ot_isp_ae_int_time_range *int_time, td_u32 *lf_max_int_time);
/* long frame mode set */
td_void (*pfn_cmos_ae_fswdr_attr_set)(ot_vi_pipe vi_pipe, ot_isp_ae_fswdr_attr *ae_fswdr_attr);
td_void (*pfn_cmos_ae_quick_start_status_set)(ot_vi_pipe vi_pipe, td_bool quick_start_status);
td_void (*pfn_cmos_exp_param_convert)(ot_vi_pipe vi_pipe, ot_isp_ae_convert_param *exp_param);
} ot_isp_ae_sensor_exp_func;
typedef struct {
ot_isp_ae_sensor_exp_func sns_exp;
} ot_isp_ae_sensor_register;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif