ss928_framework/ss928sdk/include/ot_common_sns.h

199 lines
6.8 KiB
C
Raw Normal View History

2024-12-16 13:31:45 +08:00
/*
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
*/
#ifndef OT_COMMON_SNS_H
#define OT_COMMON_SNS_H
#include "ot_type.h"
#include "ot_common.h"
#include "ot_common_isp.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
typedef struct {
td_bool update;
td_u16 black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]; /* 14bits */
} ot_isp_black_level_auto_attr;
typedef struct {
ot_size ob_sensor_size;
} ot_isp_sensor_total_size_attr;
typedef struct {
td_bool user_black_level_en;
td_u16 user_black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
ot_isp_black_level_mode black_level_mode;
ot_isp_black_level_manual_attr manual_attr;
ot_isp_black_level_dynamic_attr dynamic_attr;
ot_isp_black_level_auto_attr auto_attr;
ot_isp_sensor_total_size_attr sensor_with_ob_attr;
} ot_isp_cmos_black_level;
typedef struct {
ot_sensor_id sensor_id;
} ot_isp_sns_attr_info;
#define BAYER_CALIBRATION_PARA_NUM 3
typedef struct {
td_u32 max_width;
td_u32 max_height;
} ot_isp_cmos_sensor_max_resolution;
typedef struct {
ot_isp_shading_attr lsc_attr;
ot_isp_shading_lut_attr lsc_lut;
} ot_isp_cmos_lsc;
typedef struct {
ot_isp_clut_attr clut_attr;
ot_isp_clut_lut clut_lut;
} ot_isp_cmos_clut;
typedef struct {
td_u32 sensor_id;
td_u8 sensor_mode;
td_bool valid_dng_raw_format;
ot_isp_dng_raw_format dng_raw_format;
} ot_isp_cmos_sensor_mode;
typedef struct {
ot_isp_dng_wb_gain wb_gain1; /* the calibration White balance gain of colorcheker in A Light */
ot_isp_dng_wb_gain wb_gain2; /* the calibration White balance gain of colorcheker in D50 Light */
} ot_isp_cmos_dng_color_param;
typedef struct {
td_u32 exp_ratio[OT_ISP_EXP_RATIO_NUM];
} ot_isp_cmos_wdr_switch_attr;
typedef struct {
td_u16 g_param_high_ct[OT_ISP_LSC_GRID_POINTS];
td_u16 g_param_low_ct[OT_ISP_LSC_GRID_POINTS];
} ot_isp_acs_y_shading_lut;
typedef struct {
td_float avg_rg_map[OT_ISP_LSC_GRID_POINTS];
td_float avg_bg_map[OT_ISP_LSC_GRID_POINTS];
td_float prof_rg_map[OT_ISP_LSC_GRID_POINTS];
td_float prof_bg_map[OT_ISP_LSC_GRID_POINTS];
} ot_isp_acs_color_shading_lut;
typedef struct {
td_s16 light_index[OT_ISP_ACS_LIGHT_NUM * OT_ISP_ACS_CHN_NUM];
td_float model_ar_min;
td_float model_ar_step;
td_float model_ab_min;
td_float model_ab_step;
td_s16 light_type_g_high;
td_s16 light_type_g_low;
} ot_isp_acs_calib_param;
typedef struct {
ot_isp_acs_attr acs_attr;
ot_isp_acs_calib_param acs_calib_param;
ot_isp_acs_y_shading_lut acs_y_shading_lut;
ot_isp_acs_color_shading_lut acs_color_shading_lut;
} ot_isp_cmos_acs;
typedef union {
td_u64 key;
struct {
td_u64 bit1_drc : 1; /* [0] */
td_u64 bit1_demosaic : 1; /* [1] */
td_u64 bit1_pregamma : 1; /* [2] */
td_u64 bit1_gamma : 1; /* [3] */
td_u64 bit1_sharpen : 1; /* [4] */
td_u64 bit1_ldci : 1; /* [5] */
td_u64 bit1_dpc : 1; /* [6] */
td_u64 bit1_lsc : 1; /* [7] */
td_u64 bit1_ge : 1; /* [8] */
td_u64 bit1_anti_false_color : 1; /* [9] */
td_u64 bit1_bayer_nr : 1; /* [10] */
td_u64 bit1_ca : 1; /* [11] */
td_u64 bit1_expander : 1; /* [12] */
td_u64 bit1_clut : 1; /* [13] */
td_u64 bit1_wdr : 1; /* [14] */
td_u64 bit1_dehaze : 1; /* [15] */
td_u64 bit1_lcac : 1; /* [16] */
td_u64 bit1_acs : 1; /* [17] */
td_u64 bit1_rgbir : 1; /* [18] */
td_u64 bit1_bshp : 1; /* [19] */
td_u64 bit1_acac : 1; /* [20] */
td_u64 bit1_crb : 1; /* [21] */
td_u64 bit42_reserved : 42; /* [22:63] */
};
} ot_isp_cmos_alg_key;
typedef struct {
ot_isp_cmos_alg_key key;
const ot_isp_drc_attr *drc;
const ot_isp_demosaic_attr *demosaic;
const ot_isp_pregamma_attr *pregamma;
const ot_isp_gamma_attr *gamma;
const ot_isp_sharpen_attr *sharpen;
const ot_isp_ldci_attr *ldci;
const ot_isp_dp_dynamic_auto_attr *dpc;
const ot_isp_cmos_lsc *lsc;
const ot_isp_cr_attr *ge;
const ot_isp_anti_false_color_attr *anti_false_color;
const ot_isp_nr_attr *bayer_nr;
const ot_isp_ca_attr *ca;
const ot_isp_expander_attr *expander;
const ot_isp_cmos_clut *clut;
const ot_isp_wdr_fs_attr *wdr;
const ot_isp_dehaze_attr *dehaze;
const ot_isp_local_cac_attr *lcac;
const ot_isp_acac_attr *acac;
const ot_isp_bayershp_attr *bshp;
const ot_isp_cmos_acs *acs;
const ot_isp_rgbir_attr *rgbir;
const ot_isp_crb_attr *crb;
ot_isp_noise_calibration noise_calibration;
ot_isp_cmos_sensor_max_resolution sensor_max_resolution;
ot_isp_cmos_sensor_mode sensor_mode;
ot_isp_cmos_dng_color_param dng_color_param;
ot_isp_cmos_wdr_switch_attr wdr_switch_attr;
} ot_isp_cmos_default;
typedef struct {
td_u16 width;
td_u16 height;
td_float fps;
td_u8 sns_mode;
} ot_isp_cmos_sensor_image_mode;
typedef struct {
td_void (*pfn_cmos_sensor_init)(ot_vi_pipe vi_pipe);
td_void (*pfn_cmos_sensor_exit)(ot_vi_pipe vi_pipe);
td_void (*pfn_cmos_sensor_global_init)(ot_vi_pipe vi_pipe);
td_s32 (*pfn_cmos_set_image_mode)(ot_vi_pipe vi_pipe, const ot_isp_cmos_sensor_image_mode *sensor_image_mode);
td_s32 (*pfn_cmos_set_wdr_mode)(ot_vi_pipe vi_pipe, td_u8 mode);
/* the algs get data which is associated with sensor, except 3a */
td_s32 (*pfn_cmos_get_isp_default)(ot_vi_pipe vi_pipe, ot_isp_cmos_default *def);
td_s32 (*pfn_cmos_get_isp_black_level)(ot_vi_pipe vi_pipe, ot_isp_cmos_black_level *black_level);
td_s32 (*pfn_cmos_get_blc_clamp_info)(ot_vi_pipe vi_pipe, td_bool *clamp_en);
td_s32 (*pfn_cmos_get_sns_reg_info)(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *sns_regs_info);
/* the function of sensor set pixel detect */
td_void (*pfn_cmos_set_pixel_detect)(ot_vi_pipe vi_pipe, td_bool enable);
td_s32 (*pfn_cmos_get_awb_gains)(ot_vi_pipe vi_pipe, td_u32 *sensor_awb_gain);
} ot_isp_sensor_exp_func;
typedef struct {
ot_isp_sensor_exp_func sns_exp;
} ot_isp_sensor_register;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif /* OT_COMM_SNS_H */