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

151 lines
3.8 KiB
C
Executable File

/*
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
*/
#ifndef OT_COMMON_AWB_H
#define OT_COMMON_AWB_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_AWB_LIB_NAME "ot_awb_lib"
typedef struct {
td_u16 white_level;
td_u16 black_level;
td_u16 cr_max;
td_u16 cr_min;
td_u16 cb_max;
td_u16 cb_min;
td_u16 cr_high;
td_u16 cr_low;
td_u16 cb_high;
td_u16 cb_low;
td_u16 raw_white_level;
td_u16 raw_black_level;
td_u16 raw_cr_max;
td_u16 raw_cr_min;
td_u16 raw_cb_max;
td_u16 raw_cb_min;
td_u16 raw_cr_high;
td_u16 raw_cr_low;
td_u16 raw_cb_high;
td_u16 raw_cb_low;
td_u16 wdr_mode;
td_u16 enable;
td_u16 manual_enable;
td_u16 zone;
td_u16 high_temp;
td_u16 low_temp;
td_u16 ref_temp;
td_u16 rgain_base;
td_u16 ggain_base;
td_u16 bgain_base;
td_s32 p1;
td_s32 p2;
td_s32 q;
td_s32 a;
td_s32 c;
td_u16 man_sat_enable;
td_u16 sat_target;
} ot_isp_awb_dbg_attr;
typedef struct {
td_u16 sum;
td_u16 rg;
td_u16 bg;
td_u16 count_all;
td_u16 count_min;
td_u16 count_max;
td_u16 raw_r_avg;
td_u16 raw_g_avg;
td_u16 raw_b_avg;
td_u16 tk;
td_u16 weight;
td_s16 shift;
} ot_isp_awb_zone_dbg;
typedef struct {
td_u32 frm_num_bgn;
td_u32 global_sum;
td_u16 global_rg_sta;
td_u16 global_bg_sta;
td_u16 global_count_all;
td_u16 global_count_min;
td_u16 global_count_max;
td_u16 global_r_avg;
td_u16 global_g_avg;
td_u16 global_b_avg;
td_u16 tk;
td_u16 r_gain;
td_u16 g_gain;
td_u16 b_gain;
td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE];
td_u32 hist_info[256]; /* 256 is size of hist info */
ot_isp_awb_zone_dbg zone_debug[OT_ISP_AWB_ZONE_NUM];
td_u32 frm_num_end;
} ot_isp_awb_dbg_status;
/* sensor's interface to awb */
typedef struct {
td_u16 color_temp; /* RW; range:[2000,10000]; format:16.0; the current color temperature */
td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE]; /* RW; range: [0x0, 0xFFFF]; format:8.8;
CCM matrixes for different color temperature */
} ot_isp_awb_ccm_tab;
typedef struct {
td_u16 ccm_tab_num; /* RW; range: [0x3, 0x7]; format:16.0; the number of CCM matrixes */
ot_isp_awb_ccm_tab ccm_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_awb_ccm;
typedef struct {
td_bool valid;
td_u8 saturation[OT_ISP_AUTO_ISO_NUM]; /* RW;adjust saturation, different iso with different saturation */
} ot_isp_awb_agc_table;
typedef struct {
td_u16 wb_ref_temp; /* RW;reference color temperature for WB */
td_u16 gain_offset[OT_ISP_BAYER_CHN_NUM]; /* RW; gain offset for white balance */
td_s32 wb_para[OT_ISP_AWB_CURVE_PARA_NUM]; /* RW; parameter for wb curve,p1,p2,q1,a1,b1,c1 */
td_u16 golden_rgain; /* rgain for the golden sample */
td_u16 golden_bgain; /* bgain for the golden sample */
td_u16 sample_rgain; /* rgain for the current sample */
td_u16 sample_bgain; /* bgain for the current sample */
ot_isp_awb_agc_table agc_tbl;
ot_isp_awb_ccm ccm;
td_u16 init_rgain; /* init WB gain */
td_u16 init_ggain;
td_u16 init_bgain;
td_u8 awb_run_interval; /* RW;AWB run interval */
td_u16 init_ccm[OT_ISP_CCM_MATRIX_SIZE];
} ot_isp_awb_sensor_default;
typedef struct {
td_s32 (*pfn_cmos_get_awb_default)(ot_vi_pipe vi_pipe, ot_isp_awb_sensor_default *awb_sns_dft);
} ot_isp_awb_sensor_exp_func;
typedef struct {
ot_isp_awb_sensor_exp_func sns_exp;
} ot_isp_awb_sensor_register;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* end of #ifdef __cplusplus */
#endif