ss928_framework/ss928sdk/include/ot_common_isp.h

2984 lines
164 KiB
C
Raw Permalink Normal View History

2024-12-16 13:31:45 +08:00
/*
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
*/
#ifndef OT_COMMON_ISP_H
#define OT_COMMON_ISP_H
#include "ot_type.h"
#include "ot_errno.h"
#include "ot_common.h"
#include "ot_isp_debug.h"
#include "ot_common_video.h"
#include "ot_isp_define.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
/* MACRO DEFINITION */
#define ot_isp_res_width_max(dev) (isp_get_max_width(dev))
#define ot_isp_res_height_max(dev) (isp_get_max_height(dev))
#define OT_ISP_WIDTH_MIN 120
#define OT_ISP_HEIGHT_MIN 88
#define OT_ISP_ALIGN_WIDTH 4
#define OT_ISP_ALIGN_HEIGHT 4
#define OT_ISP_FRAME_RATE_MAX 65535.0
#define OT_ISP_BE_BUF_NUM_MIN 2
#define OT_ISP_VREG_MAX_NUM 16
#define OT_ISP_AE_ZONE_ROW 15
#define OT_ISP_AE_ZONE_COLUMN 17
#define OT_ISP_AE_PLANE_NUM 4
#define OT_ISP_MG_ZONE_ROW 15
#define OT_ISP_MG_ZONE_COLUMN 17
#define OT_ISP_AWB_ZONE_NUM (OT_ISP_AWB_ZONE_ORIG_ROW * OT_ISP_AWB_ZONE_ORIG_COLUMN)
#define OT_ISP_AWB_ZONE_STITCH_MAX (OT_ISP_AWB_ZONE_NUM * OT_ISP_MAX_STITCH_NUM)
#define OT_ISP_AF_ZONE_ROW 15
#define OT_ISP_AF_ZONE_COLUMN 17
#define OT_ISP_MAX_AWB_LIB_NUM (OT_ISP_AWB_LIB_NUM)
#define OT_ISP_MAX_AE_LIB_NUM (OT_ISP_AE_LIB_NUM)
#define OT_ISP_AE_MIN_WIDTH 256
#define OT_ISP_AE_MIN_HEIGHT 120
#define OT_ISP_AWB_MIN_WIDTH 60
#define OT_ISP_AWB_MIN_HEIGHT 14
#define OT_ISP_AF_MIN_WIDTH 256
#define OT_ISP_AF_MIN_HEIGHT 120
#define OT_ISP_AF_ALIGN_WIDTH 8
#define OT_ISP_AF_ALIGN_HEIGHT 2
#define OT_ISP_AF_PLGS_NUM 2
#define OT_ISP_GAMMA_NODE_NUM 1025
#define OT_ISP_PREGAMMA_NODE_NUM 257
#define OT_ISP_AGAMMA_NODE_NUM 257
#define OT_ISP_SCALE_MIN 204
#define OT_ISP_SCALE_MAX 5120
#define OT_ISP_AUTO_ISO_NUM 16
#define OT_ISP_SHARPEN_LUMA_NUM 32
#define OT_ISP_SHARPEN_GAIN_NUM 32
#define OT_ISP_MAX_SNS_REGS 32
#define OT_ISP_RLSC_POINTS 129
#define OT_ISP_MLSC_X_HALF_GRID_NUM ((OT_ISP_LSC_GRID_COL - 1) / 2)
#define OT_ISP_MLSC_Y_HALF_GRID_NUM ((OT_ISP_LSC_GRID_ROW - 1) / 2)
#define OT_ISP_MLSC_GAIN_LUT_NUM 2
#define OT_ISP_ACS_LIGHT_NUM 32
#define OT_ISP_ACS_CHN_NUM 2
#define OT_ISP_WDR_MAX_FRAME_NUM 4
#define OT_ISP_CSC_DC_NUM 3
#define OT_ISP_CSC_COEF_NUM 9
#define OT_ISP_BAYER_CALIBTAION_MAX_NUM 50
#define OT_ISP_AI_MAX_STEP_FNO_NUM 1024
#define OT_ISP_BAYERNR_LUT_LENGTH 33
#define OT_ISP_PRO_MAX_FRAME_NUM 8
#define OT_ISP_RGB_CHN_NUM 3
#define OT_ISP_DEMOSAIC_LUT_LENGTH 17
#define OT_ISP_BAYER_CHN_NUM 4
#define OT_ISP_CHN_R 0
#define OT_ISP_CHN_GR 1
#define OT_ISP_CHN_GB 2
#define OT_ISP_CHN_B 3
#define OT_ISP_DRC_FLTX_NODE_NUM 3
#define OT_ISP_DRC_MLUT_NODE_NUM 28
#define OT_ISP_DRC_LMIX_NODE_NUM 33
#define OT_ISP_DRC_EXP_COMP_SAMPLE_NUM 8
#define OT_ISP_DRC_SHP_LOG_CONFIG_NUM 16
#define OT_ISP_DRC_RG_BG_CTR_NODE_NUM 12
#define OT_ISP_DRC_RAW_WGT_NODE_NUM 16
#define OT_ISP_DEHAZE_LUT_SIZE 256
#define OT_ISP_WDR_RATIO_NUM 10
#define OT_ISP_LCAC_EXP_RATIO_NUM 16
#define OT_ISP_LCAC_DET_NUM 3
#define OT_ISP_ACAC_THR_NUM 2
#define OT_ISP_BSHP_LUMA_WGT_NUM 32
#define OT_ISP_BSHP_HALF_CURVE_NUM 32
#define OT_ISP_DO_NOT_NEED_SWITCH_IMAGEMODE (-2)
/* DEFAULT VALUE OF GLOBAL REGISTERS DEFINED HERE */
/* AE */
#define OT_ISP_TOP_RGGB_START_R_GR_GB_B 0
#define OT_ISP_TOP_RGGB_START_GR_R_B_GB 1
#define OT_ISP_TOP_RGGB_START_GB_B_R_GR 2
#define OT_ISP_TOP_RGGB_START_B_GB_GR_R 3
/* AWB */
#define OT_ISP_AWB_OFFSET_COMP_DEF 0
#define OT_ISP_CCM_COLORTONE_EN_DEFAULT 1
#define OT_ISP_CCM_COLORTONE_RGAIN_DEFAULT 256
#define OT_ISP_CCM_COLORTONE_BGAIN_DEFAULT 256
#define OT_ISP_CCM_COLORTONE_GGAIN_DEFAULT 256
#define OT_ISP_CCM_PROT_EN_DEFAULT 0
#define OT_ISP_CCM_RECOVER_EN_DEFAULT 1
#define OT_ISP_CCM_MATRIX_SIZE 9
#define OT_ISP_CCM_MATRIX_NUM 7
/* GENERAL STRUCTURES */
/*
* ISP Error Code
* 0x40 : ISP_NOT_INIT
* 0x41 : ISP_MEM_NOT_INIT
* 0x42 : ISP_ATTR_NOT_CFG
* 0x43 : ISP_SNS_UNREGISTER
* 0x44 : ISP_INVALID_ADDR
* 0x45 : ISP_NOMEM
* 0x46 : ISP_NO_INT
*/
typedef enum {
OT_ERR_ISP_NOT_INIT = 0x40, /* ISP not init */
OT_ERR_ISP_MEM_NOT_INIT = 0x41, /* ISP memory not init */
OT_ERR_ISP_ATTR_NOT_CFG = 0x42, /* ISP attribute not cfg */
OT_ERR_ISP_SNS_UNREGISTER = 0x43, /* ISP sensor unregister */
OT_ERR_ISP_INVALID_ADDR = 0x44, /* ISP invalid address */
OT_ERR_ISP_NOMEM = 0x45, /* ISP nomem */
OT_ERR_ISP_NO_INT = 0x46, /* ISP */
OT_ERR_ISP_ALG_NOT_INIT = 0x47, /* ISP alg not init */
} ot_isp_err_code;
#define OT_ERR_ISP_NULL_PTR OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_NULL_PTR)
#define OT_ERR_ISP_ILLEGAL_PARAM OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ILLEGAL_PARAM)
#define OT_ERR_ISP_NOT_SUPPORT OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_SUPPORT)
#define OT_ERR_ISP_NOT_INIT OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ISP_NOT_INIT)
#define OT_ERR_ISP_MEM_NOT_INIT OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ISP_MEM_NOT_INIT)
#define OT_ERR_ISP_ATTR_NOT_CFG OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ISP_ATTR_NOT_CFG)
#define OT_ERR_ISP_SNS_UNREGISTER OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ISP_SNS_UNREGISTER)
#define OT_ERR_ISP_INVALID_ADDR OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ISP_INVALID_ADDR)
#define OT_ERR_ISP_NOMEM OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ISP_NOMEM)
#define OT_ERR_ISP_NO_INT OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ISP_NO_INT)
#define OT_ERR_ISP_ALG_NOT_INIT OT_DEFINE_ERR(OT_ID_ISP, OT_ERR_LEVEL_ERROR, OT_ERR_ISP_ALG_NOT_INIT)
/* Defines the structure of ISP module parameters. */
typedef struct {
td_u32 interrupt_bottom_half; /* RW;Range:[0, 1]; Format:32.0; Indicate ISP interrupt bottom half,
No distinction vipipe */
td_u32 quick_start; /* RW;Range:[0, 1]; Format:32.0; Indicate ISP Quick Start No distinction vipipe.
Not Support */
td_bool long_frame_interrupt_en; /* when wdr mode enable/disable long frame pipe interrupt.Not Support */
} ot_isp_mod_param;
/* Defines the structure of ISP control parameters. */
typedef enum {
OT_ISP_UPDATE_OB_STATS_FE_FRAME_END = 0, /* delay 1 frame */
OT_ISP_UPDATE_OB_STATS_FE_FRAME_START = 1, /* delay 2 frame */
OT_ISP_UPDATE_OB_STATS_BUTT,
} ot_isp_ob_stats_update_pos;
typedef enum {
OT_ISP_ALG_RUN_NORM = 0,
OT_ISP_ALG_RUN_FE_ONLY = 1,
OT_ISP_ALG_RUN_BUTT,
} ot_isp_alg_run_select;
typedef enum {
OT_ISP_RUN_WAKEUP_FE_START = 0,
OT_ISP_RUN_WAKEUP_BE_END = 1,
OT_ISP_RUN_WAKEUP_BUTT,
} ot_isp_run_wakeup_select;
typedef struct {
td_u8 be_buf_num; /* RW;Range:SS928V100 = [2, 20]; offline be cfg buffer number(Only used for offline mode).
Not support changed after isp init */
td_u32 proc_param; /* RW;Format:32.0; Indicate the update frequency of ISP_PROC information,
No distinction vipipe */
td_u32 stat_interval; /* RW;Range:(0, 0xffffffff];Format:32.0;
Indicate the time interval of ISP statistic information */
td_u32 update_pos; /* RW;Range:[0, 1]; Format:32.0; Indicate the location of the configuration register of
ISP interrupt */
td_u32 interrupt_time_out; /* RW;Format:32.0; Indicate the time(unit:ms) of interrupt timeout */
td_u32 pwm_num; /* RW;Format:32.0; Indicate PWM number */
td_u32 port_interrupt_delay; /* RW;Format:32.0; Port intertupt delay value, unit:clk */
td_bool ldci_tpr_flt_en; /* RW;Range:[0, 1]; Indicate Enable LDCI temporal filter. Not support changed after
isp init */
ot_isp_ob_stats_update_pos ob_stats_update_pos; /* RW;Range:[0, 1]; Indicate the location of reading ob orea
statistics. Not support changed after isp init */
ot_isp_alg_run_select alg_run_select; /* RW;Range:[0, 1]; Indicate the algorithm of isp register and run.
Not support changed after isp init */
ot_isp_run_wakeup_select isp_run_wakeup_select; /* RW;Range:[0, 1]; Indicate the isp software is drived by which
interrupt, FE_START or BE_END */
} ot_isp_ctrl_param;
/*
* Defines the prior frame of ISP
* 0 = long frame
* 1 = short frame
*/
typedef enum {
OT_ISP_LONG_FRAME = 0,
OT_ISP_SHORT_FRAME = 1,
OT_ISP_PRIOR_FRAME_BUTT
} ot_isp_prior_frame;
/*
* Defines the ISP correction or detection status
* 0 = initial status, no calibration
* 1 = The static defect pixel calibration ends normally
* 2 = The static defect pixel calibration ends due to timeout.
*/
typedef enum {
OT_ISP_STATE_INIT = 0,
OT_ISP_STATE_SUCCESS = 1,
OT_ISP_STATE_TIMEOUT = 2,
OT_ISP_STATE_BUTT
} ot_isp_status;
typedef enum {
OT_ISP_PIPE_DIFF_CALIBRATION_MODE = 0,
OT_ISP_PIPE_DIFF_USER_MODE = 1,
OT_ISP_PIPE_DIFF_MODE_BUTT
} ot_isp_pipe_diff_mode;
typedef struct {
td_s32 offset[OT_ISP_BAYER_CHN_NUM]; /* RW;Range:[-0x3FFF, 0x3FFF];Format:15.0;
Black level differences between the offset value */
td_u32 gain[OT_ISP_BAYER_CHN_NUM]; /* RW;Range:[0x80, 0x400];Format:4.8; The gain difference ratio */
td_u16 color_matrix[OT_ISP_CCM_MATRIX_SIZE]; /* RW;Range:[0x0, 0xFFFF];Format:8.8;Color correction matrix
variance ratio */
} ot_isp_pipe_diff_param;
typedef struct {
ot_isp_pipe_diff_mode mode;
ot_isp_pipe_diff_param param;
} ot_isp_pipe_diff_attr;
/* Defines the format of the input Bayer image */
typedef enum {
OT_ISP_BAYER_RGGB = 0,
OT_ISP_BAYER_GRBG = 1,
OT_ISP_BAYER_GBRG = 2,
OT_ISP_BAYER_BGGR = 3,
OT_ISP_BAYER_BUTT
} ot_isp_bayer_format;
/* Defines the bitwidth of the input Bayer image, used for lsc online calibration */
typedef enum {
OT_ISP_BAYER_RAW_BIT_8BIT = 8,
OT_ISP_BAYER_RAW_BIT_10BIT = 10,
OT_ISP_BAYER_RAW_BIT_12BIT = 12,
OT_ISP_BAYER_RAW_BIT_14BIT = 14,
OT_ISP_BAYER_RAW_BIT_16BIT = 16,
OT_ISP_BAYER_RAW_BIT_BUTT
} ot_isp_bayer_raw_bit;
/* MIPI attribute, contains the mipi crop attribute */
typedef struct {
td_bool mipi_crop_en; /* RW;Range:[0, 0x1];Format:1.0; enable/disable mipi crop */
ot_rect mipi_crop_offset; /* RW; start position of the mipi crop window, image width and height */
}ot_mipi_crop_attr;
/* ISP public attribute, contains the public image attribute */
typedef struct {
ot_rect wnd_rect; /* RW; start position of the cropping window, image width, and image height */
ot_size sns_size; /* RW; width and height of the image output from the sensor */
td_float frame_rate; /* RW; Range: [0, 0xFFFF]; for frame rate */
ot_isp_bayer_format bayer_format; /* RW; Range:[0,3] ;Format:2.0;the format of the input bayer image */
ot_wdr_mode wdr_mode; /* RW; WDR mode select */
td_u8 sns_mode; /* RW; Range: [0, 0xFF]; Format: 8.0; for special sensor mode switches */
td_bool sensor_flip_en; /* RW;Range:[0, 0x1];Format:1.0; enable/disable sensor flip */
td_bool sensor_mirror_en; /* RW;Range:[0, 0x1];Format:1.0; enable/disable sensor mirror */
ot_mipi_crop_attr mipi_crop_attr; /* RW; mipi crop window attr, enable/disable mipi crop */
} ot_isp_pub_attr;
/* Slave mode sensor sync signal generate module */
typedef struct {
union {
struct {
td_u32 bit16_reserved : 16;
td_u32 bit_h_inv : 1;
td_u32 bit_v_inv : 1;
td_u32 bit12_reserved : 12;
td_u32 bit_h_enable : 1;
td_u32 bit_v_enable : 1;
} bits;
td_u32 bytes;
} cfg;
td_u32 vs_time;
td_u32 hs_time;
td_u32 vs_cyc;
td_u32 hs_cyc;
td_u32 hs_dly_cyc;
td_u32 slave_mode_time;
} ot_isp_slave_sns_sync;
/* Defines the ISP stitch attribute. */
/*
* Defines the ISP firmware status
* 0 = Running status
* 1 = Frozen status
*/
typedef enum {
OT_ISP_FMW_STATE_RUN = 0,
OT_ISP_FMW_STATE_FREEZE,
OT_ISP_FMW_STATE_BUTT
} ot_isp_fmw_state;
/* Defines the WDR mode of the ISP */
typedef struct {
ot_wdr_mode wdr_mode;
} ot_isp_wdr_mode;
typedef union {
td_u64 key;
struct {
td_u64 bit_bypass_isp_d_gain : 1; /* RW;[0] */
td_u64 bit_bypass_anti_false_color : 1; /* RW;[1] */
td_u64 bit_bypass_crosstalk_removal : 1; /* RW;[2] */
td_u64 bit_bypass_dpc : 1; /* RW;[3] */
td_u64 bit_bypass_nr : 1; /* RW;[4] */
td_u64 bit_bypass_dehaze : 1; /* RW;[5] */
td_u64 bit_bypass_wb_gain : 1; /* RW;[6] */
td_u64 bit_bypass_mesh_shading : 1; /* RW;[7] */
td_u64 bit_bypass_drc : 1; /* RW;[8] */
td_u64 bit_bypass_demosaic : 1; /* RW;[9] */
td_u64 bit_bypass_color_matrix : 1; /* RW;[10] */
td_u64 bit_bypass_gamma : 1; /* RW;[11] */
td_u64 bit_bypass_fswdr : 1; /* RW;[12] */
td_u64 bit_bypass_ca : 1; /* RW;[13] */
td_u64 bit_bypass_csc : 1; /* RW;[14] */
td_u64 bit_bypass_radial_crop : 1; /* RW;[15] */
td_u64 bit_bypass_sharpen : 1; /* RW;[16] */
td_u64 bit_bypass_local_cac : 1; /* RW;[17] */
td_u64 bit_bypass_acac : 1; /* RW;[18]; */
td_u64 bit2_chn_select : 2; /* RW;[19:20] */
td_u64 bit_bypass_ldci : 1; /* RW;[21] */
td_u64 bit_bypass_pregamma : 1; /* RW;[22] */
td_u64 bit_bypass_ae_stat_fe : 1; /* RW;[23] */
td_u64 bit_bypass_ae_stat_be : 1; /* RW;[24] */
td_u64 bit_bypass_mg_stat : 1; /* RW;[25] */
td_u64 bit_bypass_af_stat_fe : 1; /* RW;[26] */
td_u64 bit_bypass_af_stat_be : 1; /* RW;[27] */
td_u64 bit_bypass_awb_stat : 1; /* RW;[28] */
td_u64 bit_bypass_clut : 1; /* RW;[29] */
td_u64 bit_bypass_rgbir : 1; /* RW;[30] */
td_u64 bit_bypass_agamma : 1; /* RW;[31] */
td_u64 bit_bypass_adgamma : 1; /* RW;[32] */
td_u64 bit_bypass_crb : 1; /* RW [33] */
td_u64 bit_reserved30 : 30; /* H; [34:63] */
};
} ot_isp_module_ctrl;
/*
* Defines the RAW stream Position from the ISP
* 0 = the data is writing out after all isp module.
* 1 = the raw data is writing out after the WDR module.
*/
typedef enum {
OT_ISP_DUMP_FRAME_POS_NORMAL = 0,
OT_ISP_DUMP_FRAME_POS_AFTER_WDR = 1,
OT_ISP_DUMP_FRAME_POS_BUTT
} ot_isp_dump_frame_pos;
/*
* Defines the dump frame Position from the ISP.
*/
typedef struct {
ot_isp_dump_frame_pos frame_pos;
} ot_isp_be_frame_attr;
/*
* Defines the ISP WDR merge mode.
* 0 = WDR mode is used
* 1 = Fusion mode is used
*/
typedef enum {
OT_ISP_MERGE_WDR_MODE = 0,
OT_ISP_MERGE_FUSION_MODE = 1,
OT_ISP_MERGE_BUTT
} ot_isp_wdr_merge_mode;
typedef enum {
OT_ISP_BNR_EX = 0,
OT_ISP_BNR_NORM = 1,
} ot_isp_bnr_sfm0_mode;
typedef enum {
OT_ISP_WDR_WBGAIN_IN_DG1 = 0,
OT_ISP_WDR_WBGAIN_IN_WB = 1,
OT_ISP_WDR_WBGAIN_POS_BUTT
} ot_isp_wdr_wb_gain_pos;
typedef struct {
td_u8 md_thr_low_gain;
td_u8 md_thr_hig_gain;
} ot_isp_fswdr_manual_attr;
typedef struct {
td_u8 md_thr_low_gain[OT_ISP_WDR_RATIO_NUM][OT_ISP_AUTO_ISO_NUM];
td_u8 md_thr_hig_gain[OT_ISP_WDR_RATIO_NUM][OT_ISP_AUTO_ISO_NUM];
} ot_isp_fswdr_auto_attr;
typedef struct {
td_bool short_expo_chk; /* RW;Range:[0x0,0x1];Format:1.0; */
td_u16 short_check_threshold; /* RW;Range:[0x0,0xFFF];Format:12.0 */
td_bool md_ref_flicker;
td_u8 mdt_still_threshold; /* RW;Range:[0x0,0xFE];Format:8.0 */
td_u8 mdt_full_threshold; /* RW;Range:[0x0,0xFE];Format:8.0 */
td_u8 mdt_long_blend; /* RW;Range:[0x0,0xFE] */
ot_op_mode op_type;
ot_isp_fswdr_manual_attr manual_attr;
ot_isp_fswdr_auto_attr auto_attr;
} ot_isp_fswdr_mdt_attr;
typedef struct {
td_bool motion_comp; /* RW;Range:[0, 0x1];Format:1.0; enable/disable motion compensation */
td_bool forcelong_coarse; /* RW;Range:[0x0, 0x1];Format:1.0;
TD_TRUE: enable background information; TD_FALSE: background information */
td_u16 short_threshold; /* RW;Range:[0, 0xFFF];Format:12.0; data above this threshold will be taken from
short exposure only. */
td_u16 long_threshold; /* RW;Range:[0, 0xFFF];Format:12.0; limited range:[0x0, short_threshold],
data below this threshold will be taken from long exposure only. */
td_bool force_long; /* RW;Range:[0, 1];Format:1.0; enable/disable force long */
td_u16 force_long_low_threshold; /* RW;Range:[0, 0xFFF];Format:12.0; data above this threshold will force to choose
long frame only */
td_u16 force_long_hig_threshold; /* RW;Range:[0, 0xFFF];Format:12.0; data below this threshold will force to choose
long frame only */
ot_isp_fswdr_mdt_attr wdr_mdt;
td_u16 forcelong_coarse_low_threshold; /* RW;Range:[0x0, 0x3FFF];Format:14.0;
The low threshold of the background information */
td_u16 forcelong_coarse_high_threshold;/* RW;Range:[0x1, 0x3FFF];Format:14.0;
The high threshold of the background information */
} ot_isp_wdr_combine_attr;
typedef struct {
td_u16 fusion_threshold[OT_ISP_WDR_MAX_FRAME_NUM]; /* RW;Range:[0x0, 0x3FFF];Format:14.0;
the threshold of the 4 frame */
} ot_isp_fusion_attr;
typedef struct {
ot_isp_wdr_merge_mode wdr_merge_mode;
ot_isp_wdr_combine_attr wdr_combine;
ot_isp_fusion_attr fusion_attr;
} ot_isp_wdr_fs_attr;
typedef struct {
td_u8 asymmetry; /* RW; Range:[ 1, 30]; Parameter0 of DRC asymmetry tone mapping curve */
td_u8 second_pole; /* RW; Range:[150, 210]; Parameter1 of DRC asymmetry tone mapping curve */
td_u8 stretch; /* RW; Range:[ 30, 60]; Parameter2 of DRC asymmetry tone mapping curve */
td_u8 compress; /* RW; Range:[100, 200]; Parameter3 of DRC asymmetry tone mapping curve */
} ot_isp_drc_asymmetry_curve_attr;
typedef struct {
td_u16 strength; /* RW; Range:[0x0, 0x3FF]; DRC manual strength */
} ot_isp_drc_manual_attr;
typedef struct {
td_u16 strength; /* RW; Range:[0x0, 0x3FF]; Base strength for strength adaptation in auto mode.
The actual DRC strength is calculated automatically by firmware:
1) linear mode, auto strength = f1(strength, histogram)
2) sensor built-in WDR mode: auto strength = f2(strength, histogram)
3) FS WDR mode: auto strength = f3(strength, exp_ratio) */
td_u16 strength_max; /* RW; Range:[0x0, 0x3FF]; uppper limit of firmware calculated strength */
td_u16 strength_min; /* RW; Range:[0x0, 0x3FF]; lower limit of firmware calculated strength */
} ot_isp_drc_auto_attr;
/* DRC curve type: 0 = Asymmetry curve, 1 = User-defined curve */
typedef enum {
OT_ISP_DRC_CURVE_ASYMMETRY = 0x0,
OT_ISP_DRC_CURVE_USER,
OT_ISP_DRC_CURVE_BUTT
} ot_isp_drc_curve_select;
typedef struct {
td_bool enable;
ot_isp_drc_curve_select curve_select; /* RW; Range:[0x0, 0x1]; Tone mapping curve selection */
td_u8 purple_reduction_strength; /* RW; Range:[0x0, 0x80]; Purple detection and reduction strength */
td_u8 bright_gain_limit; /* RW; Range:[0x0, 0xF]; Bright area gain limit */
td_u8 bright_gain_limit_step; /* RW; Range:[0x0, 0xF]; Bright area gain high limit step */
td_u8 dark_gain_limit_luma; /* RW; Range:[0x0, 0x85]; Dark area luma gain limit */
td_u8 dark_gain_limit_chroma; /* RW; Range:[0x0, 0x85]; Dark area chroma gain limit */
td_u8 contrast_ctrl; /* RW; Range:[0x0, 0xF]; Format:4.0; Contrast control, smaller value yields better contrast */
td_u8 rim_reduction_strength; /* RW; Range:[0x0, 0x40]; Gradient reversal (rim) reduction strength */
td_u8 rim_reduction_threshold; /* RW; Range:[0x0, 0x80]; Gradient reversal (rim) reduction threshold */
td_u16 color_correction_lut[OT_ISP_DRC_CC_NODE_NUM]; /* RW; Range:[0x0, 0x400];
LUT of color correction coefficients */
td_u16 tone_mapping_value[OT_ISP_DRC_TM_NODE_NUM]; /* RW; Range:[0x0, 0xffff]; LUT of user-defined curve */
td_u8 spatial_filter_coef; /* RW; Range:[0x0, 0x5]; Spatial filter coefficients */
td_u8 range_filter_coef; /* RW; Range:[0x0, 0xA]; Range filter coefficients */
td_u8 detail_adjust_coef; /* RW; Range:[0x0, 0xF]; Detail adjust coefficient */
td_u8 local_mixing_bright[OT_ISP_DRC_LMIX_NODE_NUM]; /* RW; Range:[0x0, 0x80];
LUT of enhancement coefficients for positive details */
td_u8 local_mixing_dark[OT_ISP_DRC_LMIX_NODE_NUM]; /* RW; Range:[0x0, 0x80];
LUT of enhancement coefficients for negative details */
td_u8 filter_coef_x[OT_ISP_DRC_FLTX_NODE_NUM]; /* RW; Range:[0x0, 0xF]; X filter coefficients,
larger value yields stronger details */
td_u8 filter_low_threshold_x[OT_ISP_DRC_FLTX_NODE_NUM]; /* RW; Range:[0x0, 0xF]; X filter low thresholds,
larger value yields less noise */
td_u8 filter_high_threshold_x[OT_ISP_DRC_FLTX_NODE_NUM]; /* RW; Range:[0x0, 0xF]; X filter high thresholds,
larger value yields stronger details */
td_u8 detail_adjust_coef_x; /* RW; Range:[0x0, 0xF]; X filter detail adjust coefficient */
td_u8 local_mixing_bright_x[OT_ISP_DRC_LMIX_NODE_NUM]; /* RW; Range:[0x0, 0x80];
LUT of enhancement coefficients for positive details */
td_u8 local_mixing_dark_x[OT_ISP_DRC_LMIX_NODE_NUM]; /* RW; Range:[0x0, 0x80];
LUT of enhancement coefficients for positive details */
td_u8 blend_luma_max; /* RW; Range:[0x0, 0xFF]; Luma-based filter blending weight control */
td_u8 blend_luma_bright_min; /* RW; Range:[0x0, 0xFF]; Luma-based filter blending weight control */
td_u8 blend_luma_bright_threshold; /* RW; Range:[0x0, 0xFF]; Luma-based filter blending weight control */
td_u8 blend_luma_bright_slope; /* RW; Range:[0x0, 0xF]; Luma-based filter blending weight control */
td_u8 blend_luma_dark_min; /* RW; Range:[0x0, 0xFF]; Luma-based filter blending weight control */
td_u8 blend_luma_dark_threshold; /* RW; Range:[0x0, 0xFF]; Luma-based filter blending weight control */
td_u8 blend_luma_dark_slope; /* RW; Range:[0x0, 0xF]; Luma-based filter blending weight control */
td_u8 blend_detail_max; /* RW; Range:[0x0, 0xFF]; Detail-based filter blending weight control */
td_u8 blend_detail_bright_min; /* RW; Range:[0x0, 0xFF]; Detail-based filter blending weight control */
td_u8 blend_detail_bright_threshold; /* RW; Range:[0x0, 0xFF]; Detail-based filter blending weight control */
td_u8 blend_detail_bright_slope; /* RW; Range:[0x0, 0xF]; Detail-based filter blending weight control */
td_u8 blend_detail_dark_min; /* RW; Range:[0x0, 0xFF]; Detail-based filter blending weight control */
td_u8 blend_detail_dark_threshold; /* RW; Range:[0x0, 0xFF]; Detail-based filter blending weight control */
td_u8 blend_detail_dark_slope; /* RW; Range:[0x0, 0xF]; Detail-based filter blending weight control */
td_u8 detail_adjust_coef_blend; /* RW; Range:[0x0, 0xF]; Extra detail gain of X filter details */
td_u8 low_saturation_color_ctrl; /* RW; Range:[0x0, 0xF]; Low saturation color control */
td_u8 high_saturation_color_ctrl; /* RW; Range:[0x0, 0xF]; High saturation color control */
td_bool color_correction_ctrl; /* RW; Range:[0x0, 0x1]; Color correction mode control */
ot_op_mode op_type;
ot_isp_drc_manual_attr manual_attr;
ot_isp_drc_auto_attr auto_attr;
ot_isp_drc_asymmetry_curve_attr asymmetry_curve;
} ot_isp_drc_attr;
#define OT_ISP_EXPANDER_POINT_NUM_MAX (OT_ISP_EXPANDER_NODE_NUM - 1)
typedef struct {
td_bool en;
td_u8 bit_depth_in; /* RW;Range:[0xC,0x14];Format:5.0;The Bit depth of input.
bit_depth_in must be an even number */
td_u8 bit_depth_out; /* RW;Range:[0xC,0x14];Format:5.0;The Bit depth of output.
bit_depth_out must be an even number */
td_u16 knee_point_num; /* Range:[1, 256]; Format:9.0; the number of knee point */
ot_point knee_point_coord[OT_ISP_EXPANDER_POINT_NUM_MAX]; /* RW; Range: x:[0x0, 0x100],y:[0x0, 0x100000];
The coordinate of knee point.
The coordinate must be monotonically increasing */
} ot_isp_expander_attr;
typedef struct {
td_u8 wgt; /* RW;Range:SS928V100 = [0x0, 0xFF];
Format:1.7;Weight of Gaussian distribution */
td_u8 sigma; /* RW;Range: [0x1, 0xFF];Format:0.8;Sigma of Gaussian distribution */
td_u8 mean; /* RW;Range: [0x0, 0xFF];Format:0.8;Mean of Gaussian distribution */
} ot_isp_ldci_gauss_coef_attr;
typedef struct {
ot_isp_ldci_gauss_coef_attr he_pos_wgt;
ot_isp_ldci_gauss_coef_attr he_neg_wgt;
} ot_isp_ldci_he_wgt_attr;
typedef struct {
ot_isp_ldci_he_wgt_attr he_wgt;
td_u16 blc_ctrl; /* RW;Range: [0x0, 0x1FF];Format:9.0;Restrain dark region */
} ot_isp_ldci_manual_attr;
typedef struct {
ot_isp_ldci_he_wgt_attr he_wgt[OT_ISP_AUTO_ISO_NUM];
td_u16 blc_ctrl[OT_ISP_AUTO_ISO_NUM]; /* RW;Range: [0x0, 0x1FF];Format:9.0;auto mode,
Restrain dark region */
} ot_isp_ldci_auto_attr;
typedef struct {
td_bool en; /* RW;Range:[0x0,0x1];Format:1.0; */
td_u8 gauss_lpf_sigma; /* RW;Range: [0x1, 0xFF];Format:0.8;
Coefficient of Gaussian low-pass filter */
ot_op_mode op_type;
ot_isp_ldci_manual_attr manual_attr;
ot_isp_ldci_auto_attr auto_attr;
td_u16 tpr_incr_coef; /* RW;Range: [0x0, 0x100];Format:0.9;
Increase Coefficient of temporal filter */
td_u16 tpr_decr_coef; /* RW;Range: [0x0, 0x100];Format:0.9;
Decrease Coefficient of temporal filter */
} ot_isp_ldci_attr;
/*
defines CA type
0 = enable Ca module
1 = enable Cp module
*/
typedef enum {
OT_ISP_CA_ENABLE = 0x0,
OT_ISP_CP_ENABLE,
OT_ISP_CA_BUTT
} ot_isp_ca_type;
typedef struct {
td_u32 y_ratio_lut[OT_ISP_CA_YRATIO_LUT_LENGTH]; /* RW;Range:[0,2047];Format:1.11 */
td_s32 iso_ratio[OT_ISP_AUTO_ISO_NUM]; /* RW;Range:[0,2047];Format:1.10 */
} ot_isp_ca_lut;
typedef struct {
td_u8 cp_lut_y[OT_ISP_CA_YRATIO_LUT_LENGTH]; /* RW;Range:[0,255];Format:8.0; */
td_u8 cp_lut_u[OT_ISP_CA_YRATIO_LUT_LENGTH]; /* RW;Range:[0,255];Format:8.0; */
td_u8 cp_lut_v[OT_ISP_CA_YRATIO_LUT_LENGTH]; /* RW;Range:[0,255];Format:8.0; */
} ot_isp_cp_lut;
typedef struct {
td_bool en; /* RW;Range:[0x0,0x1];Format:1.0 */
ot_isp_ca_type ca_cp_en;
ot_isp_ca_lut ca;
ot_isp_cp_lut cp;
} ot_isp_ca_attr;
typedef struct {
td_u16 r_gain_limit; /* RW; Range: [0x1FF, 0x7FF]; Format:1.10; gain of R color channel 1024 to RgainLimit */
td_u16 b_gain_limit; /* RW; Range: [0x1FF, 0x7FF]; Format:1.10; gain of B color channel 1024 to BgainLimit */
} ot_isp_crb_manual_attr;
typedef struct {
td_u16 r_gain_limit[OT_ISP_WDR_RATIO_NUM]; /* RW; Range: [0x1FF, 0x7FF]; Format:1.10; R gain 1024 to gainLimit */
td_u16 b_gain_limit[OT_ISP_WDR_RATIO_NUM]; /* RW; Range: [0x1FF, 0x7FF]; Format:1.10; B gain 1024 to gainLimit */
} ot_isp_crb_auto_attr;
typedef struct {
td_bool en;
ot_op_mode op_type;
ot_isp_crb_auto_attr auto_attr;
ot_isp_crb_manual_attr manual_attr;
} ot_isp_crb_attr;
/* CSC */
typedef struct {
td_s16 csc_in_dc[OT_ISP_CSC_DC_NUM]; /* RW; Range:[-1024, 1023]; Format: 11.0;
Input dc component for csc matrix */
td_s16 csc_out_dc[OT_ISP_CSC_DC_NUM]; /* RW; Range:[-1024, 1023]; Format: 11.0;
Output dc component for csc matrix */
td_s16 csc_coef[OT_ISP_CSC_COEF_NUM]; /* RW; Range:[-4096, 4095]; Format: 5.10; 3x3 coefficients for csc matrix */
} ot_isp_csc_matrx;
typedef struct {
td_bool en; /* RW; Range:[0, 1];Format:1.0; Enable/Disable CSC Function */
ot_color_gamut color_gamut; /* RW; Range: [0, 3]; Color gamut type; Not Support COLOR_GAMUT_BT2020 */
td_u8 hue; /* RW; Range:[0, 100];Format:8.0; Csc Hue Value */
td_u8 luma; /* RW; Range:[0, 100];Format:8.0; Csc Luma Value */
td_u8 contr; /* RW; Range:[0, 100];Format:8.0; Csc Contrast Value */
td_u8 satu; /* RW; Range:[0, 100];Format:8.0; Csc Saturation Value */
td_bool limited_range_en; /* RW; Range: [0x0, 0x1];
Enable/Disable: Enable Limited range output mode(default full range output) */
td_bool ext_csc_en; /* RW; Range: [0x0, 0x1]; Enable/Disable: Enable extended luma range */
td_bool ct_mode_en; /* RW; Range: [0x0, 0x1]; Enable/Disable: Enable ct mode */
ot_isp_csc_matrx csc_magtrx; /* RW; Color Space Conversion matrix */
} ot_isp_csc_attr;
/* CLUT */
typedef struct {
td_bool en; /* RW; Range:[0, 1];Format:1.0; Enable/Disable CLUT Function */
td_u32 gain_r; /* RW; Range:[0, 4095];Format:12.0 */
td_u32 gain_g; /* RW; Range:[0, 4095];Format:12.0 */
td_u32 gain_b; /* RW; Range:[0, 4095];Format:12.0 */
} ot_isp_clut_attr;
/* CLUT LUT */
typedef struct {
td_u32 lut[OT_ISP_CLUT_LUT_LENGTH]; /* RW; Range: SS928V100 = [0, 1073741823] */
} ot_isp_clut_lut;
/*
* Defines the type of static defect pixel calibration
* 0 = bright defect pixel calibration
* 1 = dark defect pixel calibration
*/
typedef enum {
OT_ISP_STATIC_DP_BRIGHT = 0x0,
OT_ISP_STATIC_DP_DARK,
OT_ISP_STATIC_DP_BUTT
} ot_isp_static_dp_type;
typedef struct {
td_bool enable_detect; /* RW; Range: [0, 1];Format 1.0;Set 'TD_TRUE'to start static defect-pixel
calibration, and firmware will set 'TD_FALSE' when finished */
ot_isp_static_dp_type static_dp_type; /* RW; Range: [0, 1];Format 1.0;Select static bright/dark defect-pixel
calibration */
td_u8 start_thresh; /* RW; Range: [1, 255]; Format 8.0;Start threshold for static defect-pixel calibraiton */
td_u16 count_max; /* RW; Range:SS928V100 = [0, 6144];
Format 14.0; limited Range: [0, OT_ISP_STATIC_DP_COUNT_NORMAL*BlkNum],
Limit of max number of static defect-pixel calibraiton */
td_u16 count_min; /* RW; Range:SS928V100 = [0, 6144];Format 14.0; limited Range: [0, u16CountMax],
Limit of min number of static defect-pixel calibraiton */
td_u16 time_limit; /* RW; Range: [0x0, 1600];Format 11.0;Time limit for static defect-pixel calibraiton */
td_u32 table[OT_ISP_STATIC_DP_COUNT_MAX]; /* R; Range: [0, 0x1FFF1FFF];Format 29.0;
Static defect-pixel calibraiton table,
0~12 bits represents the X coordinate of the defect pixel,
16~28 bits represent the Y coordinate of the defect pixel */
td_u8 finish_thresh; /* R; Range: [0, 255];Format 8.0; Finish threshold for static defect-pixel calibraiton */
td_u16 count; /* R; Range:SS928V100 = [0, 6144];Format 14.0;
Finish number for static defect-pixel calibraiton */
ot_isp_status status; /* R; Range: [0, 2];Format 2.0;Status of static defect-pixel calibraiton */
} ot_isp_dp_static_calibrate;
typedef struct {
td_bool enable; /* RW; Range: [0, 1];Format 1.0;Enable/disable the static defect-pixel module */
td_u16 bright_count; /* RW; Range:SS928V100 = [0, 6144];Format 14.0;
limited Range: [0, OT_ISP_STATIC_DP_COUNT_NORMAL*BlkNum],
When used as input(W), indicate the number of static bright defect pixels;
As output(R),indicate the number of static bright and dark defect pixels */
td_u16 dark_count; /* RW; Range:SS928V100 = [0, 6144];Format 14.0;
limited Range: [0, OT_ISP_STATIC_DP_COUNT_NORMAL*BlkNum],
When used as input(W), indicate the number of static dark defect pixels;
As output(R), invalid value 0. */
td_u32 bright_table[OT_ISP_STATIC_DP_COUNT_MAX]; /* RW; Range: [0x0, 0x1FFF1FFF];Format 29.0;
0~12 bits represents the X coordinate of the defect pixel,
16~28 bits represent the Y coordinate of the defect pixel
Notice: When used as input(W), indicate static bright defect pixels
table; As output(R), indicate static bright and dark defect pixels
table. */
td_u32 dark_table[OT_ISP_STATIC_DP_COUNT_MAX]; /* RW; Range: [0x0, 0x1FFF1FFF];Format 29.0;
0~12 bits represents the X coordinate of the defect pixel,
16~28 bits represent the Y coordinate of the defect pixel
Notice: When used as input(W), indicate static dark defect pixels table;
As output(R), invalid value */
td_bool show; /* RW; Range: [0, 1];Format 1.0;RW;highlight static defect pixel */
} ot_isp_dp_static_attr;
typedef struct {
td_u16 strength; /* RW; Range: [0, 255];Format:8.0;Dynamic DPC strength. */
td_u16 blend_ratio; /* RW; Range: [0, 128];Format:9.0;Blending ratio required for DPC */
} ot_isp_dp_dynamic_manual_attr;
typedef struct {
td_u16 strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 255];Format:8.0;Dynamic DPC strength. */
td_u16 blend_ratio[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 128];Format:9.0;Blending ratio required for DPC */
} ot_isp_dp_dynamic_auto_attr;
typedef struct {
td_bool enable; /* RW; Range: [0, 1];Format 1.0;Enable/disable the dynamic defect-pixel module */
td_bool sup_twinkle_en; /* RW; Range: [0, 1];Format 1.0;Enable/disable the twinkle suppression module */
td_s8 soft_thr; /* RW; Range: [0, 127];Format s8.0;twinkle suppression threshold */
td_u8 soft_slope; /* RW; Range: [0, 255];Format 8.0;Correction controlling parameter of the pixels whose
deviation is smaller than s8SoftThr. */
ot_op_mode op_type; /* RW; Range: [0, 1];Format 1.0;Working mode of dynamic DPC */
ot_isp_dp_dynamic_manual_attr manual_attr;
ot_isp_dp_dynamic_auto_attr auto_attr;
td_u8 bright_strength; /* RW; Range: [0, 127];Format 8.0, local DPC strength for bright area */
td_u8 dark_strength; /* RW; Range: [0, 127];Format 8.0, local DPC strength for dark area */
} ot_isp_dp_dynamic_attr;
typedef struct {
td_bool en; /* RW; Range:[0, 1];Format:1.0; TD_TRUE: enable lsc; TD_FALSE: disable lsc */
td_u16 mesh_strength; /* RW; Range:SS928V100=[0, 65535];
The strength of the mesh shading correction */
td_u16 blend_ratio; /* RW; Range:[0, 256];Format:9.0; the blendratio of the two mesh gain lookup-table */
td_bool bnr_lsc_auto_en; /* RW; Range:[0, 1];Format:1.0; TD_TRUE: enable bnr_lsc auto mode;
TD_FALSE: disable bnr_lsc auto mode */
} ot_isp_shading_attr;
typedef struct {
td_u16 r_gain[OT_ISP_LSC_GRID_POINTS]; /* RW; Range:[0, 1023];Member used to store the calibration data of the
R channel required for LSC. */
td_u16 gr_gain[OT_ISP_LSC_GRID_POINTS]; /* RW; Range:[0, 1023];Member used to store the calibration data of the
Gr channel required for LSC. */
td_u16 gb_gain[OT_ISP_LSC_GRID_POINTS]; /* RW; Range:[0, 1023];Member used to store the calibration data of the
Gb channel required for LSC. */
td_u16 b_gain[OT_ISP_LSC_GRID_POINTS]; /* RW; Range:[0, 1023];Member used to store the calibration data of the
B channel required for LSC. */
} ot_isp_shading_gain_lut;
typedef struct {
td_u16 r_gain[OT_ISP_RLSC_POINTS]; /* RW; Range:[0, 65535];Member used to store the calibration data of the
R channel required for BNR_LSC. */
td_u16 gr_gain[OT_ISP_RLSC_POINTS]; /* RW; Range:[0, 65535];Member used to store the calibration data of the
Gr channel required for BNR_LSC. */
td_u16 gb_gain[OT_ISP_RLSC_POINTS]; /* RW; Range:[0, 65535];Member used to store the calibration data of the
Gb channel required for BNR_LSC. */
td_u16 b_gain[OT_ISP_RLSC_POINTS]; /* RW; Range:[0, 65535];Member used to store the calibration data of the
B channel required for BNR_LSC. */
} ot_isp_bnr_lsc_gain_lut;
typedef struct {
td_u8 mesh_scale; /* RW; Range:[0, 7];Format:3.0;Three bit value that selects the scale and precision for
the 10 bit gain coefficients stored in mesh tables */
td_u16 x_grid_width[OT_ISP_MLSC_X_HALF_GRID_NUM]; /* RW; Range:SS928V100=[4, 1988];
limited Range:[4, u32Width/4 - 60],
Member used to store the width data of each GRID partition */
td_u16 y_grid_width[OT_ISP_MLSC_Y_HALF_GRID_NUM]; /* RW; Range:SS928V100=[4, 1988];
limited Range:[4, u32Height/4 - 60];
Member used to store the height data of each GRID partition */
ot_isp_shading_gain_lut lsc_gain_lut[OT_ISP_MLSC_GAIN_LUT_NUM];
ot_isp_bnr_lsc_gain_lut bnr_lsc_gain_lut;
} ot_isp_shading_lut_attr;
typedef struct {
ot_isp_bayer_format bayer; /* RW; Range: [0, 3];Format ENUM;Shows bayer pattern */
ot_isp_bayer_raw_bit raw_bit; /* RW; Range: {8,10,12,14,16};Format ENUM;Shows input raw bitwidth */
td_u16 img_height; /* RW; Range: [0, 65535];Format 16.0;Input raw image height */
td_u16 img_width; /* RW; Range: [0, 65535];Format 16.0;Input raw image width */
td_u16 dst_img_height; /* RW; Range: [0, 65535];Format 16.0;limited Range:[0, u16ImgHeight], Image height that
crop from input raw image, set to ImgHeight if don't need to crop */
td_u16 dst_img_width; /* RW; Range: [0, 65535];Format 16.0;limited Range:[0, u16ImgWidth], Image width that
crop from input raw image, set to ImgWidth if don't need to crop */
td_u16 offset_x; /* RW; Range: [0, 65535];Format 16.0;limited Range:[0, u16ImgWidth - u16DstImgWidth],
Horizontal offset that crop from input raw image, set to 0 if don't need to crop */
td_u16 offset_y; /* RW; Range: [0, 65535];Format 16.0;limited Range:[0, u16ImgHeight - u16DstImgHeight],
Vertical offset that crop from input raw image, set to 0 if don't need to crop */
td_u32 mesh_scale; /* RW; Range: [0, 7];Format 3.0; Shows Mesh Scale value */
td_u16 blc_offset_r; /* RW; Range: [0, 4095];Format 12.0;BLC value for R channel */
td_u16 blc_offset_gr; /* RW; Range: [0, 4095];Format 12.0;BLC value for Gr channel */
td_u16 blc_offset_gb; /* RW; Range: [0, 4095];Format 12.0;BLC value for Gb channel */
td_u16 blc_offset_b; /* RW; Range: [0, 4095];Format 12.0;BLC value for B channel */
} ot_isp_mlsc_calibration_cfg;
typedef struct {
td_u8 mesh_scale; /* RW; Range:[0, 7];Format:3.0;Three bit value that selects the scale and precision for
the 10 bit gain coefficients stored in mesh tables */
td_u16 x_grid_width[OT_ISP_MLSC_X_HALF_GRID_NUM]; /* RW; Range:SS928V100=[4, 16323];
limited Range:[4, u16ImgWidth /4 - 60],
Member used to store the width data of each GRID partition */
td_u16 y_grid_width[OT_ISP_MLSC_Y_HALF_GRID_NUM]; /* RW; SS928V100=[4, 16323];
limited Range:[4, u16ImgHeight /4 - 60],
Member used to store the height data of each GRID partition */
ot_isp_shading_gain_lut lsc_gain_lut;
ot_isp_bnr_lsc_gain_lut bnr_lsc_gain_lut;
} ot_isp_mesh_shading_table;
typedef struct {
td_bool en; /* RW; Range:[0,1];Format:1.0;Acs Enable */
td_u16 y_strength; /* RW; Range:[0,256];Format:8.0;Acs correction strength for y shading */
td_u16 run_interval; /* RW; Range:[1,255];Format:16.0;Acs Run Interval */
td_bool lock_en; /* RW; Range:[0,1];Format:1.0;Lock Gain Lut Enable */
} ot_isp_acs_attr;
typedef struct {
td_u8 sfm_threshold[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0,255];Format:8.0; spatial filter merge thresh */
ot_isp_bnr_sfm0_mode sfm0_mode[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0,1];Format:1.0; sfm0 filter mode */
td_u16 sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 864];Format:10.0;
sfm0 filter mode */
td_u8 sfm0_ex_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 16];Format:5.0; sfm0 filter mode */
td_u8 sfm0_ex_detail_prot[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 31];Format:5.0; sfm0 detail protect rate under
ext mode */
td_u8 sfm0_norm_edge_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 31];Format:5.0; sfm0 edge smooth str under
normal mode */
td_u8 sfm1_detail_prot[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 31];Format:5.0; sfm0 edge smooth str under
normal mode */
td_u8 sfm1_coarse_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 63];Format:10.0; sfm1 filter coarstr strength */
td_u8 fine_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 128];Format:8.0; denoise rate */
td_u16 coring_wgt[OT_ISP_AUTO_ISO_NUM]; /* RW;Range:[0, 3200];Format:12.0;Strength of reserving the random noise */
td_u8 coring_mot_thresh[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0,255];Format:8.0; coring motion thresh */
} ot_isp_nr_snr_auto_attr;
typedef struct {
td_u8 sfm_threshold; /* RW; Range:[0, 255];Format:8.0; spatial filter merge thresh */
ot_isp_bnr_sfm0_mode sfm0_mode; /* RW; Range:[0, 1];Format:1.0; sfm0 filter mode */
td_u16 sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM]; /* RW; Range:[0,864];Format:10.0; sfm0 filter mode */
td_u8 sfm0_ex_strength; /* RW; Range:[0, 16];Format:5.0; sfm0 filter mode */
td_u8 sfm0_ex_detail_prot; /* RW; Range:[0, 31];Format:5.0; sfm0 detail protect rate under ext mode */
td_u8 sfm0_norm_edge_strength; /* RW; Range:[0, 31];Format:5.0; sfm0 edge smooth str under normal mode */
td_u8 sfm1_detail_prot; /* RW; Range:[0, 31];Format:5.0; sfm0 edge smooth str under normal mode */
td_u8 sfm1_coarse_strength; /* RW; Range:[0, 63];Format:10.0; sfm1 filter coarstr strength */
td_u8 fine_strength; /* RW; Range:[0, 128];Format:8.0; denoise rate */
td_u16 coring_wgt; /* RW;Range:[0, 3200];Format:12.0;Strength of reserving the random noise */
td_u8 coring_mot_thresh; /* RW; Range:[0, 255];Format:8.0; coring motion thresh */
} ot_isp_nr_snr_manual_attr;
typedef struct {
ot_isp_nr_snr_auto_attr snr_auto;
ot_isp_nr_snr_manual_attr snr_manual;
} ot_isp_nr_snr_attr;
typedef struct {
td_bool md_mode[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 1];Format:1.0; motion detection mode */
td_u8 md_anti_flicker_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 64];Format:7.0;
motion detection anti flicker strength */
td_u8 md_static_ratio[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 64];Format:7.0; motion detection static area ratio */
td_u8 md_static_fine_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 255];Format:8.0;
motion detection background tnr strength */
td_u8 tss[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 128];Format:8.0; snr ratio in background */
td_u8 tfr[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 255];Format:8.0; tnr strength based on texture strength */
td_u8 tfs[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 255];Format:8.0; tnr absolute strength */
td_bool user_define_md[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 1];Format:1.0; user define motion detection mode */
td_s16 user_define_slope[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[-32768, 32767];Format:8.8; user define motion
detection strength change with luma */
td_u16 user_define_dark_thresh[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 65535];Format:8.8; user define motion
detection strength in dark area */
td_u8 user_define_color_thresh[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 64];Format:7.0; user define motion
detection strength in color area */
td_u8 sfr_r[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 128];Format:8.0; sfr rate r */
td_u8 sfr_g[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 128];Format:8.0; sfr rate g */
td_u8 sfr_b[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0, 128];Format:8.0; sfr rate b */
} ot_isp_nr_tnr_auto_attr;
typedef struct {
td_bool md_mode; /* RW; Range:[0, 1];Format:1.0; motion detection mode */
td_u8 md_anti_flicker_strength; /* RW; Range:[0, 64];Format:7.0; motion detection anti flicker strength */
td_u8 md_static_ratio; /* RW; Range:[0, 64];Format:7.0; motion detection static area ratio */
td_u8 md_static_fine_strength; /* RW; Range:[0, 255];Format:8.0; motion detection background tnr strength */
td_u8 tss; /* RW; Range:[0, 128];Format:8.0; snr ratio in background */
td_u8 tfr; /* RW; Range:[0, 255];Format:8.0; tnr strength based on texture strength */
td_u8 tfs; /* RW; Range:[0, 255];Format:8.0; tnr absolute strength */
td_bool user_define_md; /* RW; Range:[0, 1];Format:1.0; user define motion detection mode */
td_s16 user_define_slope; /* RW; Range:[-32768, 32767];Format:8.8; user define motion detection strength
change with luma */
td_u16 user_define_dark_thresh; /* RW; Range:[0, 65535];Format:8.8; user define motion detection strength in
dark area */
td_u8 user_define_color_thresh; /* RW; Range:[0, 64];Format:7.0; user define motion detection strength in
color area */
td_u8 sfr_r; /* RW; Range:[0, 128];Format:8.0; sfr rate r */
td_u8 sfr_g; /* RW; Range:[0, 128];Format:8.0; sfr rate g */
td_u8 sfr_b; /* RW; Range:[0, 128];Format:8.0; sfr rate b */
} ot_isp_nr_tnr_manual_attr;
typedef struct {
ot_isp_nr_tnr_auto_attr tnr_auto;
ot_isp_nr_tnr_manual_attr tnr_manual;
} ot_isp_nr_tnr_attr;
typedef struct {
td_u8 snr_sfm0_wdr_strength[OT_ISP_WDR_MAX_FRAME_NUM]; /* RW; Range:[0, 64];Format:7.0; motion detection mode */
td_u8 snr_sfm0_fusion_strength[OT_ISP_WDR_MAX_FRAME_NUM]; /* RW; Range:[0, 64];Format:7.0; motion detection mode */
td_u8 snr_sfm1_wdr_strength; /* RW; Range:[0, 255];Format:8.0; motion detection mode */
td_u8 snr_sfm1_fusion_strength; /* RW; Range:[0, 255];Format:8.0; motion detection mode */
td_u8 md_wdr_strength[OT_ISP_WDR_MAX_FRAME_NUM]; /* RW; Range:[0, 64];Format:7.0; motion detection mode */
td_u8 md_fusion_strength[OT_ISP_WDR_MAX_FRAME_NUM]; /* RW; Range:[0, 64];Format:7.0; motion detection mode */
} ot_isp_nr_wdr_attr;
typedef struct {
td_bool en; /* RW; Range:[0, 1];Format:1.0; bayernr enable */
ot_op_mode op_type; /* RW; Range:[0, 1];Format:1.0; bayernr operation mode */
td_bool tnr_en; /* RW; Range:[0, 1];Format:1.0; bayernr tnr enable */
td_bool lsc_nr_en; /* RW; Range:[0, 1];Format:1.0; lsc nr enable */
td_u8 lsc_ratio1; /* RW; Range:[0, 15];Format:4.0; lsc nr ratio1 */
td_u8 lsc_ratio2; /* RW; Range:[0, 255];Format:8.0; lsc nr ratio2 */
td_u16 coring_ratio[OT_ISP_BAYERNR_LUT_LENGTH]; /* RW;Range:[0x0, 0x3ff];Format:10.0;
Strength of reserving the random noise according to luma */
ot_isp_nr_snr_attr snr_cfg;
ot_isp_nr_tnr_attr tnr_cfg;
ot_isp_nr_wdr_attr wdr_cfg;
} ot_isp_nr_attr;
typedef enum {
OT_ISP_IRBAYER_GRGBI = 0,
OT_ISP_IRBAYER_RGBGI = 1,
OT_ISP_IRBAYER_GBGRI = 2,
OT_ISP_IRBAYER_BGRGI = 3,
OT_ISP_IRBAYER_IGRGB = 4,
OT_ISP_IRBAYER_IRGBG = 5,
OT_ISP_IRBAYER_IBGRG = 6,
OT_ISP_IRBAYER_IGBGR = 7,
OT_ISP_IRBAYER_BUTT
} ot_isp_ir_bayer_format;
typedef enum {
OT_ISP_IR_CVTMAT_MODE_NORMAL = 0,
OT_ISP_IR_CVTMAT_MODE_MONO,
OT_ISP_IR_CVTMAT_MODE_USER,
OT_ISP_IR_CVTMAT_MODE_BUTT
} ot_isp_ir_cvtmat_mode;
typedef enum {
OT_ISP_RGBIR_MODE_RGBIR4X4 = 0,
OT_ISP_RGBIR_MODE_NORMAL,
OT_ISP_RGBIR_MODE_BUTT
} ot_isp_rgbir_mode;
typedef struct {
ot_isp_rgbir_mode mode; /* RW; Range:[0x0, 0x1]; 0: rgbir mode; 1: ir remove mode */
ot_isp_bayer_format out_pattern; /* RW;Range:[0x0, 0x3];Format:2.0; Bayer pattern of the output */
ot_isp_ir_bayer_format in_rgbir_pattern; /* RW;Range:[0x0, 0x7];Format:3.0; IR pattern of the input */
ot_isp_bayer_format in_bayer_pattern; /* RW;Range:[0x0, 0x3]; Format:2.0;
Bayer pattern of the input signal for ir remove mode */
td_bool is_ir_upscale; /* RW;Range:[0x0, 0x1]; Format:1.0;
is upscale for ir image input of IR remove mode */
} ot_isp_rgbir_cfg;
typedef struct {
td_bool rgbir_en; /* RW;Range:[0x0, 0x1];Format:1.0; Enable/Disable RGBIR module */
ot_isp_rgbir_cfg rgbir_cfg;
td_u32 ir_sum_info; /* R;Range:[0, 0xffffffff]; Format:32.0; ir_sum_info value, only read */
td_bool auto_gain_en; /* RW;Range:[0x0,0x1];Format:1.0; Enable/Disable auto gain */
td_u16 auto_gain; /* RW;Range:[0, 1023]; Format:10.0; auto gain value, 256 for 1x */
td_bool smooth_en; /* RW;Range:[0x0, 0x1];Format:1.0; Enable/Disable Smooth Function */
td_u16 exp_ctrl[OT_ISP_RGBIR_CTRL_NUM]; /* RW;Range:[0, 2047];Format:11.0; Over expose control */
td_u16 exp_gain[OT_ISP_RGBIR_CTRL_NUM]; /* RW;Range:[0, 511];Format:9.0; Over expose control */
td_bool ir_rm_en; /* RW;Range:[0x0,0x1]; Format:1.0; Enable/Disable ir remove Function before interplattion */
td_u16 ir_rm_ratio[OT_ISP_RGBIR_CROSSTALK_NUM]; /* RW;Range:[0, 1000]; Format:10.0; crosstalk, 1000 for 1x */
ot_isp_ir_cvtmat_mode ir_cvtmat_mode;
td_s16 cvt_matrix[OT_ISP_RGBIR_CVTMAT_NUM]; /* RW;Range:[-16384, 16383]; Format:s14.0;
RGBIR to Bayer image Convert matrix (need calibration) */
td_u16 wb_ctrl_strength[OT_ISP_RGBIR_CTRL_NUM]; /* RW;Range:[0,1024]; Format:11.0; wb control of R/B */
} ot_isp_rgbir_attr;
/*
Defines the type of the ISP gamma curve
0 = Default curve
1 = Default BT.709 curve (Gamma Curve)
2 = Default SMPTE.2084 curve (PQ Curve), Not Support
3 = User defined Gamma curve, LUT must be correct
*/
typedef enum {
OT_ISP_GAMMA_CURVE_DEFAULT = 0x0,
OT_ISP_GAMMA_CURVE_SRGB,
OT_ISP_GAMMA_CURVE_HDR, /* Not Support */
OT_ISP_GAMMA_CURVE_USER_DEFINE,
OT_ISP_GAMMA_CURVE_BUTT
} ot_isp_gamma_curve_type;
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0;Enable/Disable Gamma Function */
td_u16 table[OT_ISP_GAMMA_NODE_NUM]; /* RW; Range:[0, 4095]; Format:12.0;Gamma LUT nodes value */
ot_isp_gamma_curve_type curve_type; /* RW; Range:[0, 3]; Format:2.0;Gamma curve type */
} ot_isp_gamma_attr;
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0;Enable/Disable PreGamma Function */
td_u32 table[OT_ISP_PREGAMMA_NODE_NUM]; /* RW; Range:SS928V100 = [0, 0xFFFFF]; Format:20.0;
PreGamma LUT nodes value */
} ot_isp_pregamma_attr;
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0;Enable/Disable AGamma Function */
td_u32 scale; /* RW; Range:SS928V100 = [0xC8, 0x1400]; Format:3.10;
AGamma LUT strength */
} ot_isp_agamma_attr;
typedef struct {
td_u8 luma_wgt[OT_ISP_SHARPEN_LUMA_NUM]; /* RW; Range: SS928V100 =[0, 31];
Format:0.5;Adjust the sharpen strength according to luma.
Sharpen strength will be weaker when it decrease. */
td_u16 texture_strength[OT_ISP_SHARPEN_GAIN_NUM]; /* RW; Range: [0, 4095]; Format:7.5;Undirectional sharpen
strength for texture and detail enhancement */
td_u16 edge_strength[OT_ISP_SHARPEN_GAIN_NUM]; /* RW; Range: [0, 4095]; Format:7.5;
Directional sharpen strength for edge enhancement */
td_u16 texture_freq; /* RW; Range: [0, 4095];Format:6.6; Texture frequency adjustment.
Texture and detail will be finer when it increase */
td_u16 edge_freq; /* RW; Range: [0, 4095];Format:6.6; Edge frequency adjustment.
Edge will be narrower and thiner when it increase */
td_u8 over_shoot; /* RW; Range: [0, 127]; Format:7.0;u8OvershootAmt */
td_u8 under_shoot; /* RW; Range: [0, 127]; Format:7.0;u8UndershootAmt */
td_u16 motion_texture_strength[OT_ISP_SHARPEN_GAIN_NUM]; /* RW; Range: [0, 4095];Format:7.5 */
td_u16 motion_edge_strength[OT_ISP_SHARPEN_GAIN_NUM]; /* RW; Range: [0, 4095]; Format:7.5 */
td_u16 motion_texture_freq; /* RW; Range: [0, 4095]; Format:6.6 */
td_u16 motion_edge_freq; /* RW; Range: [0, 4095]; Format:6.6 */
td_u8 motion_over_shoot; /* RW; Range: [0, 127]; Format:7.0 */
td_u8 motion_under_shoot; /* RW; Range: [0, 127]; Format:7.0 */
td_u8 shoot_sup_strength; /* RW; Range: [0, 255]; Format:8.0;overshoot and undershoot suppression strength, the
amplitude and width of shoot will be decrease when shootSupSt increase */
td_u8 shoot_sup_adj; /* RW; Range: [0, 15]; Format:4.0;overshoot and undershoot suppression adjusting,
adjust the edge shoot suppression strength */
td_u8 detail_ctrl; /* RW; Range: [0, 255]; Format:8.0;Different sharpen strength for detail and edge.
When it is bigger than 128, detail sharpen strength will be stronger than edge */
td_u8 detail_ctrl_threshold; /* RW; Range: [0, 255]; Format:8.0; The threshold of DetailCtrl, it is used to
distinguish detail and edge. */
td_u8 edge_filt_strength; /* RW; Range: [0, 63]; Format:6.0;The strength of edge filtering. */
td_u8 edge_filt_max_cap; /* RW; Range: [0, 47]; Format:6.0;The max capacity of edge filtering. */
td_u8 r_gain; /* RW; Range: [0, 31]; Format:5.0;Sharpen Gain for Red Area */
td_u8 g_gain; /* RW; Range: [0, 255]; Format:8.0; Sharpen Gain for Green Area */
td_u8 b_gain; /* RW; Range: [0, 31]; Format:5.0;Sharpen Gain for Blue Area */
td_u8 skin_gain; /* RW; Range: [0, 31]; Format:5.0;Sharpen Gain for Skin Area */
td_u16 max_sharp_gain; /* RW; Range: [0, 0x7FF]; Format:8.3; Maximum sharpen gain */
} ot_isp_sharpen_manual_attr;
typedef struct {
td_u8 luma_wgt[OT_ISP_SHARPEN_LUMA_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; Range:SS928V100 =[0, 31]; Format:0.5;
Adjust the sharpen strength according to luma.
Sharpen strength will be weaker when it decrease */
td_u16 texture_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 4095]; Format:7.5;
Undirectional sharpen strength for texture
and detail enhancement */
td_u16 edge_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 4095]; Format:7.5;
Directional sharpen strength for edge enhancement */
td_u16 texture_freq[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 4095]; Format:6.6;Texture frequency adjustment.
Texture and detail will be finer when it increase */
td_u16 edge_freq[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 4095]; Format:6.6;Edge frequency adjustment.
Edge will be narrower and thiner when it increase */
td_u8 over_shoot[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 127]; Format:7.0 */
td_u8 under_shoot[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 127]; Format:7.0 */
td_u16 motion_texture_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 4095];
Format:7.5 */
td_u16 motion_edge_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 4095]; Format:7.5 */
td_u16 motion_texture_freq[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 4095]; Format:6.6 */
td_u16 motion_edge_freq[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 4095]; Format:6.6 */
td_u8 motion_over_shoot[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 127]; Format:7.0 */
td_u8 motion_under_shoot[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 127]; Format:7.0 */
td_u8 shoot_sup_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 255]; Format:8.0;overshoot and undershoot
suppression strength, the amplitude and width of shoot will be
decrease when shootSupSt increase */
td_u8 shoot_sup_adj[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 15]; Format:4.0;overshoot and undershoot
suppression adjusting, adjust the edge shoot suppression strength */
td_u8 detail_ctrl[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 255]; Format:8.0;Different sharpen strength for
detail and edge. When it is bigger than 128, detail sharpen
strength will be stronger than edge. */
td_u8 detail_ctrl_threshold[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 255]; Format:8.0; The threshold of DetailCtrl,
it is used to distinguish detail and edge. */
td_u8 edge_filt_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 63]; Format:6.0;
The strength of edge filtering. */
td_u8 edge_filt_max_cap[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 47]; Format:6.0;
The max capacity of edge filtering. */
td_u8 r_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 31]; Format:5.0; Sharpen Gain for Red Area */
td_u8 g_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 255]; Format:8.0; Sharpen Gain for Green Area */
td_u8 b_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 31]; Format:5.0; Sharpen Gain for Blue Area */
td_u8 skin_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 31]; Format:5.0;Sharpen Gain for Skin Area */
td_u16 max_sharp_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 0x7FF]; Format:8.3; Maximum sharpen gain */
} ot_isp_sharpen_auto_attr;
typedef enum {
OT_ISP_SHARPEN_NORMAL = 0,
OT_ISP_SHARPEN_DETAIL,
OT_ISP_SHARPEN_BUTT
} ot_isp_sharpen_detail_map;
typedef struct {
td_bool en; /* RW; Range:[0, 1]; Format:1.0;Enable/Disable sharpen module */
td_bool motion_en; /* RW; Range:[0, 1]; Format:1.0;Enable/Disable motion sharpen module */
td_u8 motion_threshold0; /* RW; Range: [0, 15]; Format:8.0 */
td_u8 motion_threshold1; /* RW; Range: [0, 15]; Format:8.0 */
td_u16 motion_gain0; /* RW; Range: [0, 256]; Format:16.0 */
td_u16 motion_gain1; /* RW; Range: [0, 256]; Format:16.0 */
td_u8 skin_umin; /* RW; Range: [0, 255]; Format:8.0; U min value of the range of skin area */
td_u8 skin_vmin; /* RW; Range: [0, 255]; Format:8.0; V min value of the range of skin area */
td_u8 skin_umax; /* RW; Range: [0, 255]; Format:8.0; U max value of the range of skin area */
td_u8 skin_vmax; /* RW; Range: [0, 255]; Format:8.0; V max value of the range of skin area */
ot_op_mode op_type;
ot_isp_sharpen_detail_map detail_map;
ot_isp_sharpen_manual_attr manual_attr;
ot_isp_sharpen_auto_attr auto_attr;
} ot_isp_sharpen_attr;
/* Crosstalk Removal */
typedef struct {
td_bool en; /* RW; Range: [0, 1];Format 1.0;Enable/disable the crosstalk removal module */
td_u8 slope; /* RW; Range: SS928V100 = [0, 12]; Crosstalk slope value. */
td_u8 sensi_slope; /* RW; Range: SS928V100 = [0, 12]; Crosstalk sensitivity. */
td_u16 sensi_threshold; /* RW; Range: SS928V100 = [0, 4095]; Crosstalk sensitivity threshold. */
td_u16 strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0,256];Crosstalk strength value. */
td_u16 threshold[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: SS928V100 = [0, 4095]; Crosstalk threshold. */
td_u16 np_offset[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: SS928V100 = [512, 4095];
Set Noise profile value. */
} ot_isp_cr_attr;
typedef struct {
td_u8 threshold; /* RW;Range:[0x0,0x20];Format:6.0;Threshold for antifalsecolor */
td_u8 strength; /* RW;Range:[0x0,0x1F];Format:5.0;Strength of antifalsecolor */
} ot_isp_anti_false_color_manual_attr;
typedef struct {
td_u8 threshold[OT_ISP_AUTO_ISO_NUM]; /* RW;Range:[0x0,0x20];Format:6.0;Threshold for antifalsecolor */
td_u8 strength[OT_ISP_AUTO_ISO_NUM]; /* RW;Range:[0x0,0x1F];Format:5.0;Strength of antifalsecolor */
} ot_isp_anti_false_color_auto_attr;
typedef struct {
td_bool en; /* RW;Range:[0x0,0x1];Format:1.0; AntiFalseColor Enable */
ot_op_mode op_type;
ot_isp_anti_false_color_manual_attr manual_attr;
ot_isp_anti_false_color_auto_attr auto_attr;
} ot_isp_anti_false_color_attr;
typedef struct {
td_u8 nddm_strength; /* RW; Range:[0x0, 0xFF]; Format:4.4; Non-direction strength */
td_u8 nddm_mf_detail_strength; /* RW; Range:SS928V100 = [0x0, 0x7f];
Format:3.4; Non-direction medium frequent detail enhance strength */
td_u8 nddm_hf_detail_strength; /* RW; Range:[0x0, 0x10]; Format:2.2;
Non-direction high frequent detail enhance strength */
td_u8 detail_smooth_range; /* RW; Range:SS928V100 = [0x1, 0x7];
Format:4.0; Detail smooth range */
td_u8 color_noise_f_threshold; /* RW;Range:[0x0,0xff]; Format:8.0; Threshold of color noise cancel */
td_u8 color_noise_f_strength; /* RW;Range:[0x0, 0x8]; Format:4.0; Strength of color noise cancel */
td_u8 color_noise_y_threshold; /* RW;Range:SS928V100 = [0x0, 0xF];
Format:8.0; Range of color denoise luma, related to luminance and saturation */
td_u8 color_noise_y_strength; /* RW;Range:SS928V100 = [0x0, 0x3F];
Format:8.0;Format:8.0; Strength of color denoise luma */
} ot_isp_demosaic_manual_attr;
typedef struct {
td_u8 nddm_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0x0, 0xFF]; Format:4.4; Non-direction strength */
td_u8 nddm_mf_detail_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:SS928V100 = [0x0, 0x7f];
Format:3.4; Non-direction medium frequent detail
enhance strength */
td_u8 nddm_hf_detail_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0x0, 0x10]; Format:2.2; Non-direction
high frequent detail enhance strength */
td_u8 detail_smooth_range[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:SS928V100 = [0x1, 0x7];
Format:4.0; Detail smooth range */
td_u8 color_noise_f_threshold[OT_ISP_AUTO_ISO_NUM]; /* RW;Range:[0x0, 0xff]; Format:8.0;
Threshold of color noise cancel */
td_u8 color_noise_f_strength[OT_ISP_AUTO_ISO_NUM]; /* RW;Range:[0x0, 0x8]; Format:4.0; Strength of color
noise cancel */
td_u8 color_noise_y_threshold[OT_ISP_AUTO_ISO_NUM]; /* RW;Range:SS928V100 = [0x0, 0xF]; Format:8.0;
Range of color denoise luma, related to luminance and saturation */
td_u8 color_noise_y_strength[OT_ISP_AUTO_ISO_NUM]; /* RW;Range:SS928V100 = [0x0, 0x3F]; Format:8.0;Format:8.0;
Strength of color denoise luma */
} ot_isp_demosaic_auto_attr;
typedef struct {
td_bool en; /* RW; Range:[0, 1]; Format:1.0;Enable/Disable demosaic module */
ot_op_mode op_type;
ot_isp_demosaic_manual_attr manual_attr;
ot_isp_demosaic_auto_attr auto_attr;
} ot_isp_demosaic_attr;
/* Defines the attributes of the ISP black level */
typedef enum {
OT_ISP_BLACK_LEVEL_MODE_AUTO = 0,
OT_ISP_BLACK_LEVEL_MODE_MANUAL = 1,
OT_ISP_BLACK_LEVEL_MODE_DYNAMIC = 2,
OT_ISP_BLACK_LEVEL_MODE_BUTT
} ot_isp_black_level_mode;
typedef struct {
td_u16 black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]; /* RW; Range: [0x0, 0x3FFF];Format:14.0;
sensor Black level values that correspond to the black levels of the
R,Gr, Gb, and B components respectively. */
} ot_isp_black_level_manual_attr;
typedef enum {
OT_ISP_DYNAMIC_PATTERN_RGB = 0,
OT_ISP_DYNAMIC_PATTERN_RGBIR,
OT_ISP_DYNAMIC_PATTERN_BUTT
} ot_isp_black_level_dynamic_pattern;
typedef struct {
ot_isp_black_level_dynamic_pattern pattern; /* RW; Range: [0, 1]; The pattern of raw. */
ot_rect ob_area; /* RW; xRange: [0, width of the ob_area]; yRange: [0, height of the ob_area];
obWidthRange: [0, width of the ob_area - x]; obHeightRange: [0, height of ob_area - y];
The size of OB area. */
td_u16 low_threshold; /* RW; Range: [0x0, 0xFFF]; Format:14.0;Lower limit of normal pixel value; */
td_u16 high_threshold; /* RW; Range: [0x0, 0x3FFF]; Format:14.0;Higher limit of normal pixel value; */
td_s16 offset[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [-0x3FFF, 0x3FFF]; Format:15.0;Offset limit of dynamic blc; */
td_u16 tolerance; /* RW; Range: [0x0, 0x3FFF]; Format:14.0;Tolerance limit of dynamic blc; */
td_u8 filter_strength; /* RW; Range: [0, 64];Format:6.0; ob black level minus light black level */
td_bool separate_en; /* RW; Range: [0, 1]; set rggb black level separately */
td_u16 calibration_black_level[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0x0, 0x3FFF]; Format:14.0;
dynamic blc of again; */
td_u16 filter_thr; /* RW; Range: [0, 0x3FFF]; Format:14.0; black level IIR filter threshold; */
} ot_isp_black_level_dynamic_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]; /* RW; Range: [0x0, 0x3FFF];Format:14.0;
user define Black level values that correspond to the black levels of
the R,Gr, Gb, and B components respectively. */
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_attr;
/*
Defines the FPN removal type
0 = Frame mode correction
1 = Line mode correction
*/
typedef enum {
OT_ISP_FPN_TYPE_FRAME = 0,
OT_ISP_FPN_TYPE_LINE = 1,
OT_ISP_FPN_TYPE_BUTT
} ot_isp_fpn_type;
/*
Defines the FPN frame output mode
0: the pixel value algin with the least significant bit (right-most bit)
1: the pixel value algin with the most significant bit (left-most bit)
*/
typedef enum {
OT_ISP_FPN_OUT_MODE_NORM = 0,
OT_ISP_FPN_OUT_MODE_HIGH,
OT_ISP_FPN_OUT_MODE_BUTT
} ot_isp_fpn_out_mode;
/* Defines the information about calibrated black frames */
typedef struct {
td_u32 iso; /* RW;Range:[0x64,0xFFFFFFFF];Format:32.0;FPN CALIBRATE ISO */
td_u32 offset[OT_ISP_STRIPING_MAX_NUM]; /* RW;Range:[0, 0x3FFF];Format:14.0;
FPN frame u32Offset (agv pixel value),
only higher 12bits valid */
td_u32 frm_size; /* RW;FPN frame size (exactly frm size or compress len) */
ot_video_frame_info fpn_frame; /* FPN frame info, 8bpp,10bpp,12bpp,16bpp. Compression or not */
} ot_isp_fpn_frame_info;
/* Defines the calibration attribute of the FPN removal module */
typedef struct {
td_u32 threshold; /* RW;Range:[1,0xFFF];Format:12.0;pix value > threshold means defective pixel */
td_u32 frame_num; /* RW;Range:[1, 16];Format:5.0;Number of frames to be calibrated.
The value range is {1, 2, 4, 8, 16},that is, the integer exponentiation of 2 */
ot_isp_fpn_type fpn_type; /* frame mode or line mode */
ot_isp_fpn_frame_info fpn_cali_frame;
ot_isp_fpn_out_mode fpn_mode; /* FPN frame output mode, for normal use, set to 0 */
} ot_isp_fpn_calibrate_attr;
/* Defines the manual correction attribute of the FPN removal module */
typedef struct {
td_u32 strength; /* RW;Range:[0,1023];Format:10.0;Manual correction strength */
} ot_isp_fpn_manual_attr;
/* Defines the automatic correction attribute of the FPN removal module */
typedef struct {
td_u32 strength; /* RW;Range:[0,1023];Format:10.0;Auto correction strength */
} ot_isp_fpn_auto_attr;
/* Defines the correction attribute of the FPN removal module */
typedef struct {
td_bool enable; /* RW;Range:[0,1];Format:1.0; */
ot_op_mode op_type; /* manual or auto mode */
ot_isp_fpn_type fpn_type;
ot_isp_fpn_frame_info fpn_frm_info;
ot_isp_fpn_manual_attr manual_attr;
ot_isp_fpn_auto_attr auto_attr;
} ot_isp_fpn_attr;
/* Defines the manual dehaze attribute */
typedef struct {
td_u8 strength; /* RW;Range:[0,0xFF];Format:8.0;Manual dehaze strength */
} ot_isp_dehaze_manual_attr;
/* Defines the automatic dehaze attribute */
typedef struct {
td_u8 strength; /* RW;Range:[0,0xFF];Format:8.0;Weighted coefficient for automatic dehaze strength. */
} ot_isp_dehaze_auto_attr;
/* Defines the ISP dehaze attribute */
typedef struct {
td_bool en; /* RW;Range:[0,1];Format:1.0; */
td_bool user_lut_en; /* RW;Range:[0,1];0:Auto Lut 1:User Lut */
td_u8 dehaze_lut[OT_ISP_DEHAZE_LUT_SIZE];
ot_op_mode op_type;
ot_isp_dehaze_manual_attr manual_attr;
ot_isp_dehaze_auto_attr auto_attr;
td_u16 tmprflt_incr_coef; /* RW, Range: [0x0, 0x80].filter increase coefficient. */
td_u16 tmprflt_decr_coef; /* RW, Range: [0x0, 0x80].filter decrease coefficient. */
} ot_isp_dehaze_attr;
/* Defines purple fringing correction manual attribute */
typedef struct {
td_u8 de_purple_cr_strength; /* RW;Range: [0,8];Format:4.0;Correction strength of the R channel */
td_u8 de_purple_cb_strength; /* RW;Range: [0,8];Format:4.0;Correction strength of the B channel */
} ot_isp_depurplestr_manual_attr;
/* Defines purple fringing correction automatic attribute */
typedef struct {
td_u8 de_purple_cr_strength[OT_ISP_LCAC_EXP_RATIO_NUM]; /* RW;Range: [0, 8];Format:4.0;
Correction strength of the R channel */
td_u8 de_purple_cb_strength[OT_ISP_LCAC_EXP_RATIO_NUM]; /* RW;Range: [0, 8];Format:4.0;
Correction strength of the B channel */
} ot_isp_depurplestr_auto_attr;
/* Purple fringing detection and correction attribute */
typedef struct {
td_bool en; /* RW; Range: [0, 1];Format:1.0; en */
td_u16 purple_detect_range; /* RW;Range: [0, 410];Format:9.0;Purple fringing detection scope */
td_u16 var_threshold; /* RW;Range: [0, 4095];Format:12.0;Edge detection threshold */
td_u16 r_detect_threshold[OT_ISP_LCAC_DET_NUM]; /* RW;Range: [0,4095];Format:12.0;Component R detection thd */
td_u16 g_detect_threshold[OT_ISP_LCAC_DET_NUM]; /* RW;Range: [0,4095];Format:12.0;Component G detection thd */
td_u16 b_detect_threshold[OT_ISP_LCAC_DET_NUM]; /* RW;Range: [0,4095];Format:12.0;Component B detection thd */
td_u16 l_detect_threshold[OT_ISP_LCAC_DET_NUM]; /* RW;Range: [0,4095];Format:12.0;Component Luma detection thd */
td_s16 cb_cr_ratio[OT_ISP_LCAC_DET_NUM]; /* RW;Range: [-2048,2047];Format:S12.0; Cb/Cr ratio threshold */
ot_op_mode op_type; /* RW;Range: [0, 1];Format:1.0;Purple fringing correction working mode */
ot_isp_depurplestr_manual_attr manual_attr;
ot_isp_depurplestr_auto_attr auto_attr;
} ot_isp_local_cac_attr;
/* defines purple fringing correction automatic attribute */
typedef struct {
td_u16 edge_threshold[OT_ISP_ACAC_THR_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; range: [0, 4095];
format:12.0; cac edge threshold */
td_u16 edge_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [0, 1023]; format:10.0; acac strength */
td_s16 purple_upper_limit[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [-511, 511]; format:10.0;
acac purple high limitation */
td_s16 purple_lower_limit[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [-511, 511]; format:10.0;
acac purple low limitation */
td_u16 purple_sat_threshold[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [0, 2047]; format:11.0; acac purple sat */
td_u16 purple_alpha[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [0, 63]; format:6.0; acac purple alpha */
td_u16 edge_alpha[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [0, 63]; format:6.0; acac edge alpha */
td_u16 fcc_y_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [0, 4095]; format:12.0; FCC on Y */
td_u16 fcc_rb_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [0, 511]; format:10.0; FCC on rb */
} isp_acac_auto_attr;
typedef struct {
td_u16 edge_threshold[OT_ISP_ACAC_THR_NUM]; /* RW; range: [0, 4095]; format:12.0; cac edge threshold */
td_u16 edge_gain; /* RW; range: [0, 1023]; format:10.0; acac edge gain */
td_s16 purple_upper_limit; /* RW; range: [-511, 511]; format:10.0; acac purple high limitation */
td_s16 purple_lower_limit; /* RW; range: [-511, 511]; format:10.0; acac purple low limitation */
td_u16 purple_sat_threshold; /* RW; range: [0, 2047]; format:11.0; acac purple sat */
td_u16 purple_alpha; /* RW; range: [0, 63]; format:6.0; acac purple alpha */
td_u16 edge_alpha; /* RW; range: [0, 63]; format:6.0; acac edge alpha */
td_u16 fcc_y_strength; /* RW; range: [0, 4095]; format:12.0; FCC on Y */
td_u16 fcc_rb_strength; /* RW; range: [0, 511]; format:10.0; FCC on rb */
} isp_acac_manual_attr;
typedef struct {
td_bool en; /* RW; range: [0, 1]; format:1.0; acac en */
td_u8 detect_mode; /* RW; range: [0, 1]; format:1.0; acac edge detect mode */
ot_op_mode op_type; /* RW; range: [0,1];format:1.0;purple fringing correction working mode */
isp_acac_auto_attr auto_attr;
isp_acac_manual_attr manual_attr;
} ot_isp_acac_attr;
typedef struct {
td_u8 luma_wgt[OT_ISP_BSHP_LUMA_WGT_NUM]; /* RW; range:[0, 31]; format:4.0; luma weight, parameter */
td_u16 edge_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM]; /* RW; range:[0, 1023]; edge_course_str, parameter */
td_u16 texture_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM]; /* RW; range:[0, 1023];texture_mf_strength parameter */
td_u16 edge_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM]; /* RW; range:[0, 1023] edge_hf_strength, parameter */
td_u16 texture_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM]; /* RW; range:[0, 1023] texture_hf_strength, parameter */
td_u8 edge_filt_strength; /* RW; range:[0, 127]; format:7.0;the strength of edge filtering */
td_u16 texture_max_gain; /* RW; range:[0, 1023]; format10.0; max value gain of detail sharpen */
td_u16 edge_max_gain; /* RW; range:[0, 1023]; format10.0; max value gain of edge sharpen */
td_u16 overshoot; /* RW; range:[0, 127]; format7.0; overshoot */
td_u16 undershoot; /* RW; range:[0, 127]; format7.0; undershoot */
td_u16 g_chn_gain; /* RW; range:[0, 127]; format:7.0; sharpen on G inter param */
} ot_isp_bayershp_manual_attr;
typedef struct {
td_u8 luma_wgt[OT_ISP_BSHP_LUMA_WGT_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 31];
format:4.0; luma weight, control parameter */
td_u16 edge_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 1023];
edge_course_str, control parameter */
td_u16 texture_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 1023];
texture_mf_strength , control parameter */
td_u16 edge_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 1023];
edge_hf_strength, control parameter */
td_u16 texture_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM][OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 1023];
texture_fine_str, control parameter */
td_u8 edge_filt_strength[OT_ISP_AUTO_ISO_NUM]; /* RW; range: [0, 127];format:7.0;the strength of edge filtering. */
td_u16 texture_max_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 1023];format10.0; max value gain of sharpen */
td_u16 edge_max_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 1023];format10.0; max value gain of sharpen */
td_u16 overshoot[OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 127];format10.0; overshoot */
td_u16 undershoot[OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 127];format10.0; undershoot */
td_u16 g_chn_gain[OT_ISP_AUTO_ISO_NUM]; /* RW; range:[0, 127];format:7.0; sharpen on G */
} ot_isp_bayershp_auto_attr;
typedef struct {
td_bool en; /* RW; range:[0, 1]; format:1.0;en/disable demosaic module */
ot_op_mode op_type;
ot_isp_bayershp_manual_attr manual_attr;
ot_isp_bayershp_auto_attr auto_attr;
} ot_isp_bayershp_attr;
/* Defines the Radial Crop attribute */
typedef struct {
td_bool en; /* RW;Range:[0, 1];Format:1.0; enable/disable ridial crop */
ot_point center_coord; /* RW;the coordinate of central pixel */
td_u32 radius; /* RW;Range:[0, 11586];Format:14.0; when the distance to central pixel is greater than
u32Radius, the pixel value becomes 0. */
} ot_isp_rc_attr;
typedef struct {
td_u16 texture_strength[OT_ISP_SHARPEN_GAIN_NUM]; /* RW; range: [0, 4095]; Format:7.5;Undirectional sharpen
strength for texture and detail enhancement */
td_u16 edge_strength[OT_ISP_SHARPEN_GAIN_NUM]; /* RW; range: [0, 4095]; Format:7.5;Directional sharpen strength
for edge enhancement */
td_u16 texture_freq; /* RW; range: [0, 4095];Format:6.6; Texture frequency adjustment.
Texture and detail will be finer when it increase */
td_u16 edge_freq; /* RW; range: [0, 4095];Format:6.6; Edge frequency adjustment.
Edge will be narrower and thiner when it increase */
td_u8 over_shoot; /* RW; range: [0, 127]; Format:7.0;u8OvershootAmt */
td_u8 under_shoot; /* RW; range: [0, 127]; Format:7.0;u8UndershootAmt */
td_u8 shoot_sup_strength; /* RW; range: [0, 255]; Format:8.0;overshoot and undershoot suppression strength,
the amplitude and width of shoot will be decrease when shootSupSt increase */
td_u8 nr_lsc_ratio; /* RW;Range:[0x0, 0xff];Format:8.0; Strength of reserving the random
noise according to luma */
td_u16 coarse_strength[OT_ISP_BAYER_CHN_NUM]; /* RW;Range:[0x0, 0x3ff];Format:10.0;
Coarse Strength of noise reduction */
td_u8 wdr_frame_strength[OT_ISP_WDR_MAX_FRAME_NUM]; /* RW;Range:[0x0, 0x50];Format:7.0;
Coarse strength of each frame in wdr mode */
td_u8 fine_strength; /* RW;Range:[0x0,0x80];Format:8.0;Strength of Luma noise reduction */
td_u16 coring_wgt; /* RW;Range:[0x0,0xC80];Format:12.0;Strength of reserving the random noise */
td_u16 dehaze_strength_actual; /* RW;Range:[0,0xFF];Format:8.0;actual dehaze strength */
td_u16 drc_strength_actual; /* RW;Range: SS928V100 = [0x0, 0x3FF];
Strength of dynamic range compression.
Higher values lead to higher differential gain between shadows and highlights. */
td_u32 wdr_exp_ratio_actual[OT_ISP_WDR_MAX_FRAME_NUM - 1]; /* RW; Range:[0x40, 0x4000]; Format:26.6;
0x40 means 1 times.
When enExpRatioType is OT_OP_MODE_AUTO, u32ExpRatio is invalid.
When enExpRatioType is OT_OP_MODE_MANUAL, u32ExpRatio is
quotient of long exposure time / short exposure time. */
td_bool wdr_switch_finish; /* RW; Range:[0, 1];Format:1.0;TD_TRUE: WDR switch is finished */
td_bool res_switch_finish; /* RW; Range:[0, 1];Format:1.0;TD_TRUE: Resolution switch is finished */
td_u16 black_level_actual[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]; /* RW; Range: [0x0, 0x3FFF];Format:14.0;
Actual Black level values that correspond to the black levels of
the R,Gr, Gb, and B components respectively. */
td_u16 sns_black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]; /* RW; Range: [0x0, 0x3FFF];Format:14.0;
sesnor Black level values that correspond to the black levels of
the R,Gr, Gb, and B components respectively. */
} ot_isp_inner_state_info;
/*
The position of AE histogram in ISP BE pipeline
0 = After DG;
1 = After static WB;
2 = After DRC;
*/
typedef enum {
OT_ISP_AE_AFTER_DG = 0,
OT_ISP_AE_AFTER_WB,
OT_ISP_AE_AFTER_DRC,
OT_ISP_AE_SWITCH_BUTT
} ot_isp_ae_switch;
/*
FourPlaneMode enable
0 : Disabled;
1 : Enabled
*/
typedef enum {
OT_ISP_AE_FOUR_PLANE_MODE_DISABLE = 0,
OT_ISP_AE_FOUR_PLANE_MODE_ENABLE,
OT_ISP_AE_FOUR_PLANE_MODE_BUTT
} ot_isp_ae_four_plane_mode;
typedef enum {
OT_ISP_AE_HIST_SKIP_EVERY_PIXEL = 0,
OT_ISP_AE_HIST_SKIP_EVERY_2ND_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_3RD_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_4TH_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_5TH_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_8TH_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_9TH_PIXEL,
OT_ISP_AE_HIST_SKIP_BUTT
} ot_isp_ae_hist_skip;
typedef enum {
OT_ISP_AE_HIST_START_FORM_FIRST_COLUMN = 0,
OT_ISP_AE_HIST_START_FORM_SECOND_COLUMN,
OT_ISP_AE_HIST_OFFSET_X_BUTT
} ot_isp_ae_hist_offset_x;
typedef enum {
OT_ISP_AE_HIST_START_FORM_FIRST_ROW = 0,
OT_ISP_AE_HIST_START_FORM_SECOND_ROW,
OT_ISP_AE_HIST_OFFSET_Y_BUTT
} ot_isp_ae_hist_offset_y;
/* Defines the mode configuration for the sampling points during global histogram statistics. */
typedef struct {
ot_isp_ae_hist_skip hist_skip_x; /* RW; Range:[0, 6]; Format:4.0;
Histogram decimation in horizontal direction: 0=every pixel;
1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel;
5=every 8th pixel ; 6+=every 9th pixel */
ot_isp_ae_hist_skip hist_skip_y; /* RW; Range:[0, 6]; Format:4.0;
Histogram decimation in vertical direction: 0=every pixel; 1=every 2nd pixel;
2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel;
6+=every 9th pixel */
ot_isp_ae_hist_offset_x hist_offset_x; /* RW; Range:[0, 1]; Format:1.0;
0= start from the first column; 1=start from second column */
ot_isp_ae_hist_offset_y hist_offset_y; /* RW; Range:[0, 1]; Format:1.0;
0= start from the first row; 1= start from second row */
} ot_isp_ae_hist_config;
typedef enum {
OT_ISP_AE_NORMAL = 0,
OT_ISP_AE_ROOT,
OT_ISP_AE_STAT_MODE_BUTT
} ot_isp_ae_stat_mode;
/* Crops the input image of the AE module */
typedef struct {
td_bool en; /* RW; Range: [0,1]; Format:1.0;AE crop enable. */
td_u16 x; /* RW; Range: SS928V100 = [0, 8192 - 256];
Format:13.0;AE image crop start x, limited range:[0, ImageWidth - 256] */
td_u16 y; /* RW; Range: SS928V100 = [0, 8192 - 120];
Format:13.0;AEimage crop start y, limited range:[0, ImageHeight - 120] */
td_u16 width; /* RW; Range: SS928V100 = [256, 8192];
Format:14.0;AE image crop width, limited range:[256, ImageWidth] */
td_u16 height; /* RW; Range: SS928V100 = [120, 8192];
Format:14.0;AE image crop height limited range:[120, ImageHeight] */
} ot_isp_ae_crop;
/* config of statistics structs */
#define OT_ISP_HIST_THRESH_NUM 4
typedef struct {
ot_isp_ae_switch ae_switch; /* RW; Range:[0, 2]; Format:2.0;
The position of AE histogram in ISP BE pipeline */
ot_isp_ae_hist_config hist_config;
ot_isp_ae_four_plane_mode four_plane_mode; /* RW; Range:[0, 1]; Format:2.0;Four Plane Mode Enable */
ot_isp_ae_stat_mode hist_mode; /* RW; Range:[0, 1]; Format:2.0;AE Hist Rooting Mode */
ot_isp_ae_stat_mode aver_mode; /* RW; Range:[0, 1]; Format:2.0;AE Aver Rooting Mode */
ot_isp_ae_stat_mode max_gain_mode; /* RW; Range:[0, 1]; Format:2.0;Max Gain Rooting Mode */
ot_isp_ae_crop crop; /* RW; AE input image crop for module */
ot_isp_ae_crop fe_crop; /* RW; AE input image crop for FE module */
td_u8 weight[OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN]; /* RW; Range:[0x0, 0xF]; Format:4.0; AE weighting table */
} ot_isp_ae_stats_cfg;
/* Smart Info */
#define OT_ISP_PEOPLE_CLASS_MAX 2
typedef struct {
td_bool enable;
td_bool available;
td_u8 luma;
} ot_isp_people_roi;
typedef enum {
OT_ISP_FACE_INDEX = 0,
OT_ISP_PEOPLE_INDEX = 1,
OT_ISP_PEOPLE_BUTT
} ot_isp_people_type;
#define OT_ISP_TUNNEL_CLASS_MAX 2
typedef struct {
td_bool enable;
td_bool available;
td_u32 tunnel_area_ratio;
td_u32 tunnel_exp_perf;
} ot_isp_tunnel_roi;
typedef enum {
OT_ISP_TUNNEL_IN_INDEX = 0,
OT_ISP_TUNNEL_OUT_INDEX = 1,
OT_ISP_TUNNEL_BUTT
} ot_isp_tunnel_type;
#define OT_ISP_FACE_NUM 5
typedef struct {
td_bool enable;
td_bool available;
td_u64 frame_pts;
ot_rect face_rect[OT_ISP_FACE_NUM];
} ot_isp_face_roi;
typedef struct {
ot_isp_people_roi people_roi[OT_ISP_PEOPLE_CLASS_MAX];
ot_isp_tunnel_roi tunnel_roi[OT_ISP_TUNNEL_CLASS_MAX];
ot_isp_face_roi face_roi;
} ot_isp_smart_info;
/* fines whether the peak value of the zoned IIR statistics is calculated. */
typedef enum {
OT_ISP_AF_STA_NORM = 0, /* use every value of the block statistic */
OT_ISP_AF_STA_PEAK, /* use the maximum value in one line of the block statistic */
OT_ISP_AF_STA_BUTT
} ot_isp_af_peak_mode;
/* Defines whether the zoned statistics are squared in square mode. */
typedef enum {
OT_ISP_AF_STA_SUM_NORM = 0, /* statistic value accumulate */
OT_ISP_AF_STA_SUM_SQUARE, /* statistic value square then accumulate */
OT_ISP_AF_STA_SUM_BUTT
} ot_isp_af_square_mode;
/* Crops the input image of the AF module. */
typedef struct {
td_bool en; /* RW; Range: [0,1]; Format:1.0; AF crop enable */
td_u16 x; /* RW; Range: SS928V100 = [0, 7936];
Format:13.0;AF image crop start x, limited range:[0, ImageWidth-256] */
td_u16 y; /* RW; Range: SS928V100 = [0, 8072];
Format:13.0;AF image crop start y, limited range:[0, ImageHeight-120] */
td_u16 width; /* RW; Range: SS928V100 = [256, 8192];
Format:14.0;AF image crop width, limited range:[256, ImageWidth] */
td_u16 height; /* RW; Range: SS928V100 = [120, 8192];
Format:14.0;AF image crop height, limited range:[120, ImageHeight] */
} ot_isp_af_crop;
/* Defines the position of AF module statistics. */
typedef enum {
OT_ISP_AF_STATS_AFTER_DGAIN = 0, /* The AF module is placed in the raw field for statistics,AF after DGain */
OT_ISP_AF_STATS_AFTER_DRC, /* The AF module is placed in the raw field for statistics,AF after DRC */
OT_ISP_AF_STATS_AFTER_CSC, /* The AF module is placed in the YUV field for statistics,AF after CSC */
OT_ISP_AF_STATS_BUTT
} ot_isp_af_stats_pos;
/* Configures the Bayer field of the AF module. */
typedef struct {
td_u8 gamma_gain_limit; /* RW; Range: [0x0, 0x5]; Format:3.0 */
td_u8 gamma_value; /* RW; Range: SS928V100 = [0x0, 0x6]; */
ot_isp_bayer_format bayer_format; /* RW; Range: [0x0, 0x3]; Format:2.0;raw domain pattern */
} ot_isp_af_raw_cfg;
/* Configures the pre-filter of the AF module. */
typedef struct {
td_bool en; /* RW; Range: [0,1]; Format:1.0; pre filter enable . */
td_u16 strength; /* RW; Range: [0x0, 0xFFFF]; Format:16.0;pre filter strength */
} ot_isp_af_pre_filter_cfg;
/* Defines AF statistics configuration parameters. */
typedef struct {
td_bool af_en; /* RW; Range: [0,1]; AF enable. */
td_u16 zone_col; /* RW; Range: [1, 17]; AF statistic window horizontal block. */
td_u16 zone_row; /* RW; Range: [1, 15]; AF statistic window vertical block. */
ot_isp_af_peak_mode peak_mode; /* RW; Range: [0,1]; AF peak value statistic mode. */
ot_isp_af_square_mode square_mode; /* RW; Range: [0,1]; AF statistic square accumulate. */
ot_isp_af_crop crop; /* RW; AF input image crop */
ot_isp_af_crop fe_crop; /* RW; AF input image crop for FE module */
ot_isp_af_stats_pos stats_pos; /* RW; Range: [0,2]; AF statistic position, it can be set to yuv or raw */
ot_isp_af_raw_cfg raw_cfg; /* RW; When AF locate at RAW domain, these para should be cfg. */
ot_isp_af_pre_filter_cfg pre_flt_cfg; /* RW; pre filter cfg */
td_u16 high_luma_threshold; /* RW; Range: [0,0xFF]; high luma threshold. */
} ot_isp_af_cfg;
/* Configures the AF level depend gain module. */
typedef struct {
td_bool en; /* RW; Range: [0, 1]; FILTER level depend gain enable. */
td_u16 threshold_low; /* RW; range: [0x0, 0xFF]; FILTER level depend th low */
td_u16 gain_low; /* RW; range: [0x0, 0xFF]; FILTER level depend gain low */
td_u16 slope_low; /* RW; range: [0x0, 0xF]; FILTER level depend slope low */
td_u16 threshold_high; /* RW; range: [0x0, 0xFF]; FILTER level depend th high */
td_u16 gain_high; /* RW; range: [0x0, 0xFF]; FILTER level depend gain high */
td_u16 slope_high; /* RW; range: [0x0, 0xF]; FILTER level depend slope high */
} ot_isp_af_level_depend;
/* Configures the AF coring module. */
typedef struct {
td_u16 threshold; /* RW; Range: [0x0, 0x7FF];FILTER coring threshold. */
td_u16 slope; /* RW; Range: [0x0, 0xF]; FILTER Coring Slope */
td_u16 limit; /* RW; Range: [0x0, 0x7FF];FILTER coring limit */
} ot_isp_af_coring;
#define OT_ISP_IIR_EN_NUM 3
#define OT_ISP_IIR_GAIN_NUM 7
#define OT_ISP_IIR_SHIFT_NUM 4
/* Defines the IIR parameter configuration of horizontal filters for AF statistics. */
typedef struct {
td_bool narrow_band_en; /* RW; Range: [0, 1]; IIR narrow band enable. */
td_bool iir_en[OT_ISP_IIR_EN_NUM]; /* RW; Range: [0, 1]; IIR enable. */
td_u8 iir_shift; /* RW; Range: [0, 63]; IIR Shift */
td_s16 iir_gain[OT_ISP_IIR_GAIN_NUM]; /* RW; Range: [-511, 511]. IIR gain,gain0 range:[0,255]. */
td_u16 iir_shift_lut[OT_ISP_IIR_SHIFT_NUM]; /* RW; Range: [0x0, 0x7]; IIR shift. */
ot_isp_af_level_depend level_depend; /* RW; filter level depend. */
ot_isp_af_coring coring; /* RW; filter coring. */
} ot_isp_af_h_param;
#define OT_ISP_FIR_GAIN_NUM 5
typedef struct {
td_s16 fir_gain[OT_ISP_FIR_GAIN_NUM]; /* RW; Range: [-31, 31]; FIR gain. */
ot_isp_af_level_depend level_depend; /* RW; filter level depend. */
ot_isp_af_coring coring; /* RW; filter coring. */
} ot_isp_af_v_param;
#define OT_ISP_ACC_SHIFT_H_NUM 2
#define OT_ISP_ACC_SHIFT_V_NUM 2
typedef struct {
td_u16 acc_shift_y; /* RW; Range: [0x0, 0xF]; luminance Y statistic shift. */
td_u16 acc_shift_h[OT_ISP_ACC_SHIFT_H_NUM]; /* RW; Range: [0x0, 0xF]; IIR statistic shift. */
td_u16 acc_shift_v[OT_ISP_ACC_SHIFT_V_NUM]; /* RW; Range: [0x0, 0xF]; FIR statistic shift. */
td_u16 hl_cnt_shift; /* RW; Range: [0x0, 0xF]; High luminance counter shift */
} ot_isp_af_fv_param;
typedef struct {
ot_isp_af_cfg config;
ot_isp_af_h_param h_param_iir0;
ot_isp_af_h_param h_param_iir1;
ot_isp_af_v_param v_param_fir0;
ot_isp_af_v_param v_param_fir1;
ot_isp_af_fv_param fv_param;
} ot_isp_focus_stats_cfg;
/*
the main purpose of stat key was to access individual statistic info separately...
...for achieving performance optimization of CPU, because of we acquire stat...
... in ISP_DRV ISR for our firmware reference and USER can also use alternative MPI...
... to do this job, so bit1AeStat1~bit1AfStat for MPI behavior control, and bit16IsrAccess...
... for ISR access control, they were independent. but they have the same bit order, for example...
... bit1AeStat1 for MPI AeStat1 access key, and bit16 of u32Key for ISR AeStat1 access key
*/
typedef union {
td_u64 key;
struct {
td_u64 bit1_fe_ae_global_stat : 1; /* [0] */
td_u64 bit1_fe_ae_local_stat : 1; /* [1] */
td_u64 bit1_fe_ae_stitch_global_stat : 1; /* [2] */
td_u64 bit1_fe_ae_stitch_local_stat : 1; /* [3] */
td_u64 bit1_be_ae_global_stat : 1; /* [4] */
td_u64 bit1_be_ae_local_stat : 1; /* [5] */
td_u64 bit1_be_ae_stitch_global_stat : 1; /* [6] */
td_u64 bit1_be_ae_stitch_local_stat : 1; /* [7] */
td_u64 bit1_awb_stat1 : 1; /* [8] */
td_u64 bit1_awb_stat2 : 1; /* [9] */
td_u64 bit2_reserved0 : 2; /* [10:11] */
td_u64 bit1_fe_af_stat : 1; /* [12] */
td_u64 bit1_be_af_stat : 1; /* [13] */
td_u64 bit2_reserved1 : 2; /* [14:15] */
td_u64 bit1_dehaze : 1; /* [16] */
td_u64 bit1_mg_stat : 1; /* [17] */
td_u64 bit1_extend_stats : 1; /* [18] */
td_u64 bit13_reserved : 13; /* [19:31] */
td_u64 bit32_isr_access : 32; /* [32:63] */
};
} ot_isp_stats_ctrl;
/* statistics structs */
#define OT_ISP_HIST_NUM 1024
typedef struct {
td_u16 grid_y_pos[OT_ISP_AE_ZONE_ROW + 1]; /* R */
td_u16 grid_x_pos[OT_ISP_AE_ZONE_COLUMN + 1]; /* R */
td_u8 status; /* R;0:not update, 1: update,others:reserved */
} ot_isp_ae_grid_info;
typedef struct {
td_u16 grid_y_pos[OT_ISP_MG_ZONE_ROW + 1]; /* R */
td_u16 grid_x_pos[OT_ISP_MG_ZONE_COLUMN + 1]; /* R */
td_u8 status; /* R;0:not update, 1: update,others:reserved */
} ot_isp_mg_grid_info;
typedef struct {
td_u16 grid_y_pos[OT_ISP_AWB_ZONE_ORIG_ROW + 1]; /* R */
td_u16 grid_x_pos[OT_ISP_AWB_ZONE_ORIG_COLUMN + 1]; /* R */
td_u8 status; /* R;0:not update, 1: update,others:reserved */
} ot_isp_awb_grid_info;
typedef struct {
td_u16 grid_y_pos[OT_ISP_AF_ZONE_ROW + 1]; /* R */
td_u16 grid_x_pos[OT_ISP_AF_ZONE_COLUMN + 1]; /* R */
td_u8 status; /* R;0:not update, 1: update,others:reserved */
} ot_isp_focus_grid_info;
typedef struct {
td_u32 fe_hist1024_value[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_HIST_NUM]; /* R; Range: [0x0, 0xFFFFFFFF]; Format:32.0;
Global 1024 bins histogram of FE */
td_u16 fe_global_avg[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]; /* R; Range: [0x0, 0xFFFF]; Format:16.0;
Global average value of FE */
td_u16 fe_zone_avg[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM]; /* R;
Range: [0x0, 0xFFFF]; Format:16.0; Zone average value of FE */
td_u32 be_estimate_hist1024_value[OT_ISP_HIST_NUM]; /* R; Range: [0x0, 0xFFFFFFFF]; Format:32.0;
Estimated Global 1024 bins histogram of BE */
td_u32 be_hist1024_value[OT_ISP_HIST_NUM]; /* R; Range: [0x0, 0xFFFFFFFF]; Format:32.0;
Global 1024 bins histogram of BE */
td_u16 be_global_avg[OT_ISP_BAYER_CHN_NUM]; /* R; Range: [0x0, 0xFFFF]; Format:16.0;
Global average value of BE */
td_u16 be_zone_avg[OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM]; /* R; Range: [0x0, 0xFFFF];
Format:16.0; Zone average value of BE */
ot_isp_ae_grid_info fe_grid_info;
ot_isp_ae_grid_info be_grid_info;
td_u64 pts;
} ot_isp_ae_stats;
typedef struct {
td_u32 fe_hist1024_value[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_HIST_NUM]; /* R; Range: [0x0, 0xFFFFFFFF]; Format:32.0;
Global 1024 bins histogram of FE */
td_u16 fe_global_avg[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]; /* R; Range: [0x0, 0xFFFF]; Format:16.0;
Global average value of FE. */
td_u16 fe_zone_avg[OT_ISP_MAX_STITCH_NUM][OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN]\
[OT_ISP_BAYER_CHN_NUM]; /* R; Range: [0x0, 0xFFFF]; Format:16.0; Zone average value of FE. */
td_u32 be_hist1024_value[OT_ISP_HIST_NUM]; /* R; Range: [0x0, 0xFFFFFFFF]; Format:32.0;
Global 1024 bins histogram of BE. */
td_u16 be_global_avg[OT_ISP_BAYER_CHN_NUM]; /* R; Range: [0x0, 0xFFFF]; Format:16.0; Global average value of BE */
td_u16 be_zone_avg[OT_ISP_MAX_STITCH_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM]; /* R;
Range: [0x0, 0xFFFF]; Format:16.0; Zone average value of BE */
td_u64 pts;
} ot_isp_ae_stitch_stats;
typedef struct {
td_u16 zone_avg[OT_ISP_MG_ZONE_ROW][OT_ISP_MG_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM]; /* R; Range: [0x0, 0xFF];
Format:8.0; Zone average value */
ot_isp_mg_grid_info grid_info;
} ot_isp_mg_stats;
typedef enum {
OT_ISP_AWB_AFTER_DG = 0,
OT_ISP_AWB_AFTER_EXPANDER, /* Not Support */
OT_ISP_AWB_AFTER_DRC,
OT_ISP_AWB_SWITCH_BUTT
} ot_isp_awb_switch;
typedef enum {
OT_ISP_AWB_GAIN_IN_ISP = 0,
OT_ISP_AWB_GAIN_IN_SENSOR,
OT_ISP_AWB_GAIN_IN_BUTT
} ot_isp_awb_gain_switch;
/* Crops the input image of the AWB module */
typedef struct {
td_bool en; /* RW; Range: [0,1]; Format:1.0;AWB crop enable */
td_u16 x; /* RW; Range: SS928V100 = [0, 8192 - 60];
Format:13.0;AWB image crop start x, limited range:[0, ImageWidth - u16ZoneCol * 60] */
td_u16 y; /* RW; Range: SS928V100 = [0, 8192 - 14];
Format:13.0;AWB image crop start y,limited range:[0, ImageHeight - u16ZoneRow * 14] */
td_u16 width; /* RW; Range: SS928V100 = [60, 8192]; Format:14.0;
AWB image crop width, limited range:[u16ZoneCol * 60, ImageWidth] */
td_u16 height; /* RW; Range: SS928V100 = [14, 8192]; Format:14.0;
AWB image crop height, limited range:[u16ZoneRow * 14, ImageHeight] */
} ot_isp_awb_crop;
/* Defines the AWB statistics configuration */
typedef struct {
ot_isp_awb_switch awb_switch; /* RW; Range: [0x0, 0x2]; Position of AWB statistics in pipeline */
td_u16 zone_row; /* RW; Range: [0x1, 0x20]; Vertical Blocks,
limited range:[1, min(32, ImageHeight /OT_ISP_AWB_MIN_HEIGHT)] */
td_u16 zone_col; /* RW; Range: [0x1, 0x20]; Horizontal Blocks,
limited range:[BlkNum, min(32, Width /OT_ISP_AWB_MIN_WIDTH)] */
td_u16 white_level; /* RW; Range: [0x0, 0xFFFF];Upper limit of valid data for white region,
for Bayer statistics, [0x0, 0x3FF] for RGB statistics */
td_u16 black_level; /* RW; Range: [0x0, 0xFFFF];limited range: [0x0, u16WhiteLevel],
Lower limit of valid data for white region .
for Bayer statistics, bitwidth is 12, for RGB statistics, bitwidth is 10 */
td_u16 cb_max; /* RW; Range: [0x0, 0xFFF];Maximum value of B/G for white region */
td_u16 cb_min; /* RW; Range: [0x0, 0xFFF];
limited range: [0x0, u16CbMax]Minimum value of B/G for white region */
td_u16 cr_max; /* RW; Range: [0x0, 0xFFF];Maximum value of R/G for white region */
td_u16 cr_min; /* RW; Range: [0x0, 0xFFF];
limited range: [0x0, u16CrMax],Minimum value of R/G for white region */
ot_isp_awb_crop crop;
} ot_isp_wb_stats_cfg;
typedef struct {
td_u16 zone_row; /* R; Range: [0x0, 0x20];
effective horizontal block number for AWB statistic stitch window */
td_u16 zone_col; /* R; Range: [0x0, 0x80];
effective vetical block number for AWB statistic stitch window */
td_u16 zone_avg_r[OT_ISP_AWB_ZONE_STITCH_MAX]; /* R; Range: [0x0, 0xFFFF];Zone Average R for Stitich mode */
td_u16 zone_avg_g[OT_ISP_AWB_ZONE_STITCH_MAX]; /* R; Range: [0x0, 0xFFFF];Zone Average G for Stitich mode */
td_u16 zone_avg_b[OT_ISP_AWB_ZONE_STITCH_MAX]; /* R; Range: [0x0, 0xFFFF];Zone Average B for Stitich mode */
td_u16 zone_count_all[OT_ISP_AWB_ZONE_STITCH_MAX]; /* R; Range: [0x0, 0xFFFF];
normalized number of Gray points for Stitich mode */
td_u64 pts;
} ot_isp_wb_stitch_stats;
typedef struct {
td_u16 global_r; /* R; Range: [0x0, 0xFFFF];Global WB output Average R */
td_u16 global_g; /* R; Range: [0x0, 0xFFFF];Global WB output Average G */
td_u16 global_b; /* R; Range: [0x0, 0xFFFF];Global WB output Average B */
td_u16 count_all; /* R; Range: [0x0, 0xFFFF];normalized number of Gray points */
td_u16 zone_avg_r[OT_ISP_AWB_ZONE_NUM]; /* R; Range: [0x0, 0xFFFF];Zone Average R */
td_u16 zone_avg_g[OT_ISP_AWB_ZONE_NUM]; /* R; Range: [0x0, 0xFFFF];Zone Average G */
td_u16 zone_avg_b[OT_ISP_AWB_ZONE_NUM]; /* R; Range: [0x0, 0xFFFF];Zone Average B */
td_u16 zone_count_all[OT_ISP_AWB_ZONE_NUM]; /* R; Range: [0x0, 0xFFFF];normalized number of Gray points */
ot_isp_awb_grid_info grid_info;
td_u64 pts;
} ot_isp_wb_stats;
typedef struct {
td_u16 v1; /* R; Range: [0x0, 0xFFFF];vertical fir block1 Statistics */
td_u16 h1; /* R; Range: [0x0, 0xFFFF];horizontal iir block1 Statistics */
td_u16 v2; /* R; Range: [0x0, 0xFFFF];vertical fir block2 Statistics */
td_u16 h2; /* R; Range: [0x0, 0xFFFF];horizontal iir block2 Statistics */
td_u16 y; /* R; Range: [0x0, 0xFFFF];Y Statistics */
td_u16 hl_cnt; /* R; Range: [0x0, 0xFFFF];HlCnt Statistics */
} ot_isp_focus_zone;
typedef struct {
ot_isp_focus_zone zone_metrics[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_AF_ZONE_ROW][OT_ISP_AF_ZONE_COLUMN]; /* R;
The zoned measure of contrast */
} ot_isp_fe_focus_stats;
typedef struct {
ot_isp_focus_zone zone_metrics[OT_ISP_AF_ZONE_ROW][OT_ISP_AF_ZONE_COLUMN]; /* R; The zoned measure of contrast */
} ot_isp_be_focus_stats;
typedef struct {
ot_isp_fe_focus_stats fe_af_stat;
ot_isp_be_focus_stats be_af_stat;
ot_isp_focus_grid_info fe_af_grid_info;
ot_isp_focus_grid_info be_af_grid_info;
td_u64 pts;
} ot_isp_af_stats;
typedef struct {
ot_isp_stats_ctrl key;
ot_isp_ae_stats_cfg ae_cfg;
ot_isp_wb_stats_cfg wb_cfg;
ot_isp_focus_stats_cfg focus_cfg;
} ot_isp_stats_cfg;
/* ISP debug information */
typedef struct {
td_bool debug_en; /* RW; 1:enable debug, 0:disable debug */
td_u64 phys_addr; /* RW; physics address of debug info */
td_u32 depth; /* RW; depth of debug info */
} ot_isp_debug_info;
typedef struct {
td_u32 reserved; /* H;need to add member */
} ot_isp_debug_attr;
typedef struct {
td_u32 frame_num_begain;
td_u16 black_level_actual[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]; /* R; BLC actual value */
td_u16 black_level_original[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]; /* R; BLC logic value */
td_u32 frame_num_end;
} ot_isp_debug_status;
/*
0 = Communication between the sensor and the ISP over the I2C interface
1 = Communication between the sensor and the ISP over the SSP interface
*/
typedef enum {
OT_ISP_SNS_I2C_TYPE = 0,
OT_ISP_SNS_SSP_TYPE,
OT_ISP_SNS_TYPE_BUTT,
} ot_isp_sns_type;
/* sensor communication bus */
typedef union {
td_s8 i2c_dev;
struct {
td_s8 bit4_ssp_dev : 4;
td_s8 bit4_ssp_cs : 4;
} ssp_dev;
} ot_isp_sns_commbus;
typedef struct {
td_bool update; /* RW; Range: [0x0, 0x1]; Format:1.0;
TD_TRUE: The sensor registers are written,
TD_FALSE: The sensor registers are not written */
td_u8 delay_frame_num; /* RW; Number of delayed frames for the sensor register */
td_u8 interrupt_pos; /* RW;Position where the configuration of the sensor register takes effect */
/* 0x0,very short frame start interrupt, 0x1:very short frame end interrupt,
0x10,short frame start interrupt, 0x11:short frame end interrupt,
0x20,middle frame start interrupt, 0x21:middle frame end interrupt,
0x30,long frame start interrupt, 0x31:long frame end interrupt */
td_u8 dev_addr; /* RW;Sensor device address */
td_u32 reg_addr; /* RW;Sensor register address */
td_u32 addr_byte_num; /* RW;Bit width of the sensor register address */
td_u32 data; /* RW;Sensor register data */
td_u32 data_byte_num; /* RW;Bit width of sensor register data */
} ot_isp_i2c_data;
typedef struct {
td_bool update; /* RW; Range: [0x0, 0x1]; Format:1.0;
TD_TRUE: The sensor registers are written,
TD_FALSE: The sensor registers are not written */
td_u8 delay_frame_num; /* RW; Number of delayed frames for the sensor register */
td_u8 interrupt_pos; /* RW;Position where the configuration of the sensor register takes effect
0x0,very short frame start interrupt, 0x1:very short frame end interrupt
0x10,short frame start interrupt, 0x11:short frame end interrupt
0x20,middle frame start interrupt, 0x21:middle frame end interrupt
0x30,long frame start interrupt, 0x31:long frame end interrupt */
td_u32 dev_addr; /* RW;Sensor device address */
td_u32 dev_addr_byte_num; /* RW;Bit width of the sensor device address */
td_u32 reg_addr; /* RW;Sensor register address */
td_u32 reg_addr_byte_num; /* RW;Bit width of the sensor register address */
td_u32 data; /* RW;Sensor register data */
td_u32 data_byte_num; /* RW;Bit width of sensor register data */
} ot_isp_ssp_data;
typedef struct {
ot_isp_sns_type sns_type; /* RW; Range:[0, 1]; Format: 1.0;
OT_ISP_SNS_I2C_TYPE: I2C interface type between the sensor and ISP,
OT_ISP_SNS_SSP_TYPE: SPI interface type between the sensor and ISP */
td_u32 reg_num; /* RW;Number of registers required when exposure results are written to the sensor.
The member value cannot be dynamically changed */
td_u8 cfg2_valid_delay_max; /* RW;Maximum number of delayed frames from the time when all sensor registers are
configured to the time when configurations take effect, which is used to ensure
the synchronization between sensor registers and ISP registers */
struct {
td_u32 exp_distance[OT_ISP_WDR_MAX_FRAME_NUM - 1]; /* RW; wdr sensor exposure distance. */
td_u8 delay_frame_num;
} distance_attr;
ot_isp_sns_commbus com_bus;
union {
ot_isp_i2c_data i2c_data[OT_ISP_MAX_SNS_REGS]; /* AUTO: ot_isp_sns_type:OT_ISP_SNS_I2C_TYPE */
ot_isp_ssp_data ssp_data[OT_ISP_MAX_SNS_REGS]; /* AUTO: ot_isp_sns_type:OT_ISP_SNS_SSP_TYPE */
};
struct {
td_bool update;
td_u8 delay_frame_num;
td_u32 slave_vs_time; /* RW;time of vsync. Unit: inck clock cycle */
td_u32 slave_bind_dev;
} slv_sync;
td_bool config;
} ot_isp_sns_regs_info;
typedef enum {
OT_ISP_VD_FE_START = 0,
OT_ISP_VD_FE_END,
OT_ISP_VD_BE_END,
OT_ISP_VD_BUTT
} ot_isp_vd_type;
/* Defines the attributes of the virtual addresses for the registers of ISP submodules */
typedef struct {
td_void *isp_ext_reg_addr; /* R;Start virtual address for the ISP external virtual registers */
td_u32 isp_ext_reg_size; /* R;Size of the ISP external virtual registers */
td_void *ae_ext_reg_addr; /* R;Start virtual address for the AE library module */
td_u32 ae_ext_reg_size; /* R;Size of the AE library module */
td_void *awb_ext_reg_addr; /* R;Start virtual address for the AWB library module */
td_u32 awb_ext_reg_size; /* R;Size of the AWB library module */
} ot_isp_reg_attr;
/* AI structs */
/*
Defines the ISP iris type
0 = DC iris
1 = P iris
*/
typedef enum {
OT_ISP_IRIS_DC_TYPE = 0,
OT_ISP_IRIS_P_TYPE,
OT_ISP_IRIS_TYPE_BUTT,
} ot_isp_iris_type;
/* Defines the F value of the ISP iris */
typedef enum {
OT_ISP_IRIS_F_NO_32_0 = 0,
OT_ISP_IRIS_F_NO_22_0,
OT_ISP_IRIS_F_NO_16_0,
OT_ISP_IRIS_F_NO_11_0,
OT_ISP_IRIS_F_NO_8_0,
OT_ISP_IRIS_F_NO_5_6,
OT_ISP_IRIS_F_NO_4_0,
OT_ISP_IRIS_F_NO_2_8,
OT_ISP_IRIS_F_NO_2_0,
OT_ISP_IRIS_F_NO_1_4,
OT_ISP_IRIS_F_NO_1_0,
OT_ISP_IRIS_F_NO_BUTT,
} ot_isp_iris_f_no;
typedef struct {
td_s32 kp; /* RW; Range:[0, 100000]; Format:32.0; the proportional gain of PID algorithm,
default value is 7000 */
td_s32 ki; /* RW; Range:[0, 1000]; Format:32.0; the integral gain of PID algorithm,
default value is 100 */
td_s32 kd; /* RW; Range:[0, 100000]; Format:32.0; the derivative gain of PID algorithm,
default value is 3000 */
td_u32 min_pwm_duty; /* RW; Range:[0, 1000]; Format:32.0; which is the min pwm duty for dciris control */
td_u32 max_pwm_duty; /* RW; Range:[0, 1000]; Format:32.0; which is the max pwm duty for dciris control */
td_u32 open_pwm_duty; /* RW; Range:[0, 1000]; Format:32.0; which is the open pwm duty for dciris control */
} ot_isp_dciris_attr;
typedef struct {
td_bool step_fno_table_change; /* W; Range:[0, 1]; Format:1.0; Step-F number mapping table change or not */
td_bool zero_is_max; /* RW; Range:[0, 1]; Format:1.0; Step 0 corresponds to max aperture or not,
it's related to the specific iris */
td_u16 total_step; /* RW; Range:[1, 1024]; Format:16.0; Total steps of Piris's aperture,
it's related to the specific iris */
td_u16 step_count; /* RW; Range:[1, 1024]; Format:16.0; Used steps of Piris's aperture.
when Piris's aperture is too small, the F number precision is not enough,
so not all the steps can be used. It's related to the specific iris */
td_u16 step_fno_table[OT_ISP_AI_MAX_STEP_FNO_NUM]; /* RW; Range:[1, 1024]; Format:16.0; Step-F number mapping table.
F1.0 is expressed as 1024, F32 is expressed as 1,
it's related to the specific iris */
ot_isp_iris_f_no max_iris_fno_target; /* 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_target; /* RW; Range:[0, 10]; Format:4.0;
Min F number of Piris's aperture, it's related to the specific iris */
td_bool fno_ex_valid; /* RW; Range:[0, 1]; Format:1.0; use equivalent gain to present FNO or not */
td_u32 max_iris_fno_target_linear; /* RW; Range:[1, 1024]; Format:16.0;
Max equivalent gain of F number of Piris's aperture,
only used when bFNOExValid is true, it's related to the specific iris */
td_u32 min_iris_fno_target_linear; /* RW; Range:[1, 1024]; Format:16.0;
Min equivalent gain of F number of Piris's aperture,
only used when bFNOExValid is true, it's related to the specific iris */
} ot_isp_piris_attr;
/* Defines the MI attribute */
typedef struct {
td_u32 hold_value; /* RW; Range:[0, 1000]; Format:32.0; iris hold value for DC-iris */
ot_isp_iris_f_no iris_fno; /* RW; Range:[0, 10]; Format:4.0; the F number of P-iris */
} ot_isp_mi_attr;
/*
Defines the ISP iris status
0 = In this mode can set the MI holdvalue
1 = Open Iris to the max
2 = Close Iris to the min
*/
typedef enum {
OT_ISP_IRIS_KEEP = 0,
OT_ISP_IRIS_OPEN = 1,
OT_ISP_IRIS_CLOSE = 2,
OT_ISP_IRIS_BUTT
} ot_isp_iris_status;
/* Defines the iris attribute */
typedef struct {
td_bool enable; /* RW;iris enable/disable */
ot_op_mode op_type; /* auto iris or manual iris */
ot_isp_iris_type iris_type; /* DC-iris or P-iris */
ot_isp_iris_status iris_status; /* RW; status of Iris */
ot_isp_mi_attr mi_attr;
} ot_isp_iris_attr;
/* AE structs */
/*
Defines the AE mode
0 = Automatic frame rate reduction mode (slow shutter mode)
1 = Constant frame rate mode
*/
typedef enum {
OT_ISP_AE_MODE_SLOW_SHUTTER = 0,
OT_ISP_AE_MODE_FIX_FRAME_RATE = 1,
OT_ISP_AE_MODE_BUTT
} ot_isp_ae_mode;
/*
Defines the AE exposure policy mode
0 = Highlight first exposure mode
1 = Lowlight first exposure mode
*/
typedef enum {
OT_ISP_AE_EXP_HIGHLIGHT_PRIOR = 0,
OT_ISP_AE_EXP_LOWLIGHT_PRIOR = 1,
OT_ISP_AE_STRATEGY_MODE_BUTT
} ot_isp_ae_strategy;
/* Defines the maximum exposure time or gain and minimum exposure time or gain */
typedef struct {
td_u32 max; /* RW;Range:[0,0xFFFFFFFF];Format:32.0;Maximum value */
td_u32 min; /* RW;Range:[0,0xFFFFFFFF];Format:32.0;limited Range:[0,u32Max],Minimum value */
} ot_isp_ae_range;
/* Defines the ISP exposure delay attribute */
typedef struct {
td_u16 black_delay_frame; /* RW; Range:[0, 65535]; Format:16.0; AE black delay frame count */
td_u16 white_delay_frame; /* RW; Range:[0, 65535]; Format:16.0; AE white delay frame count */
} ot_isp_ae_delay;
/*
Defines the anti-flicker mode.
0 = The epxosure time is fixed to be the multiplies of 1/(2*frequency) sec,
it may lead to over exposure in the high-luminance environments.
1 = The anti flicker may be closed to avoid over exposure in the high-luminance environments.
*/
typedef enum {
OT_ISP_ANTIFLICKER_NORMAL_MODE = 0x0,
OT_ISP_ANTIFLICKER_AUTO_MODE = 0x1,
OT_ISP_ANTIFLICKER_MODE_BUTT
} ot_isp_antiflicker_mode;
/* Defines the anti-flicker attribute */
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0; */
td_u8 frequency; /* RW; Range:[0, 255]; Format:8.0;
usually this value is 50 or 60 which is the frequency of the AC power supply */
ot_isp_antiflicker_mode mode;
} ot_isp_antiflicker;
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0; */
td_u8 luma_diff; /* RW; Range:[0, 100]; Format:8.0; if subflicker mode enable, current luma is less than AE
compensation plus LumaDiff, AE will keep min antiflicker shutter time
(for example: 1/100s or 1/120s) to avoid flicker. while current luma is larger than AE
compensation plus the LumaDiff, AE will reduce shutter time to avoid over-exposure and
introduce flicker in the pircture */
} ot_isp_subflicker;
typedef struct {
/* base parameter */
ot_isp_ae_range exp_time_range; /* RW; Range:[0x0, 0xFFFFFFFF]; Format:32.0; sensor exposure time (unit: us),
it's related to the specific sensor */
ot_isp_ae_range a_gain_range; /* RW; Range:[0x400, 0xFFFFFFFF]; Format:22.10;
sensor analog gain (unit: times, 10bit precision), it's related to the
specific sensor */
ot_isp_ae_range d_gain_range; /* RW; Range:[0x400, 0xFFFFFFFF]; Format:22.10;
sensor digital gain (unit: times, 10bit precision), it's related to the
specific sensor */
ot_isp_ae_range ispd_gain_range; /* RW; Range:[0x400, 0x40000]; Format:22.10;
ISP digital gain (unit: times, 10bit precision), it's related to the
ISP digital gain range */
ot_isp_ae_range sys_gain_range; /* RW; Range:[0x400, 0xFFFFFFFF]; Format:22.10;
system gain (unit: times, 10bit precision), it's related to the specific sensor
and ISP Dgain range */
td_u32 gain_threshold; /* RW; Range:[0x400, 0xFFFFFFFF]; Format:22.10;
Gain threshold for slow shutter mode (unit: times, 10bit precision) */
td_u8 speed; /* RW; Range:[0x0, 0xFF]; Format:8.0;
AE adjust step for dark scene to bright scene switch */
td_u16 black_speed_bias; /* RW; Range:[0x0, 0xFFFF]; Format:16.0;
AE adjust step bias for bright scene to dark scene switch */
td_u8 tolerance; /* RW; Range:[0x0, 0xFF]; Format:8.0; AE adjust tolerance */
td_u8 compensation; /* RW; Range:[0x0, 0xFF]; Format:8.0; AE compensation */
td_u16 ev_bias; /* RW; Range:[0x0, 0xFFFF]; Format:16.0; AE EV bias */
ot_isp_ae_strategy ae_strategy_mode; /* RW; Range:[0, 1]; Format:1.0; Support Highlight prior or Lowlight prior */
td_u16 hist_ratio_slope; /* RW; Range:[0x0, 0xFFFF]; Format:16.0; AE hist ratio slope */
td_u8 max_hist_offset; /* RW; Range:[0x0, 0xFF]; Format:8.0; Max hist offset */
ot_isp_ae_mode ae_mode; /* RW; Range:[0, 1]; Format:1.0; AE mode(slow shutter/fix framerate)(onvif) */
ot_isp_antiflicker antiflicker;
ot_isp_subflicker subflicker;
ot_isp_ae_delay ae_delay_attr;
td_bool manual_exp_value; /* RW; Range:[0, 1]; Format:1.0; manual exposure value or not */
td_u32 exp_value; /* RW; Range:(0x0, 0xFFFFFFFF]; Format:32.0; manual exposure value */
ot_isp_fswdr_mode fswdr_mode; /* RW; Range:[0, 2]; Format:2.0; FSWDR running mode */
td_bool wdr_quick; /* RW; Range:[0, 1]; Format:1.0; WDR use delay strategy or not;
If is true, WDR AE adjust will be faster */
td_u16 iso_cal_coef; /* RW; Range:[0x0, 0xFFFF]; Format:8.8;
The coefficient between Standard ISO and origin ISO (unit: times, 8bit precision) */
} ot_isp_ae_attr;
typedef struct {
ot_op_mode exp_time_op_type;
ot_op_mode a_gain_op_type;
ot_op_mode d_gain_op_type;
ot_op_mode ispd_gain_op_type;
td_u32 exp_time; /* RW; Range:[0x0, 0xFFFFFFFF]; Format:32.0;
sensor exposure time (unit: us), it's related to the specific sensor */
td_u32 a_gain; /* RW; Range:[0x400, 0xFFFFFFFF]; Format:22.10;
sensor analog gain (unit: times, 10bit precision), it's related to the specific sensor */
td_u32 d_gain; /* RW; Range:[0x400, 0xFFFFFFFF]; Format:22.10;
sensor digital gain (unit: times, 10bit precision), it's related to the specific sensor */
td_u32 isp_d_gain; /* RW; Range:[0x400, 0x40000]; Format:22.10;
ISP digital gain(unit: times, 10bit precision), it's related to the ISP digital gain range */
} ot_isp_me_attr;
typedef struct {
td_bool bypass; /* RW; Range:[0, 1]; Format:1.0; */
ot_op_mode op_type;
td_u8 ae_run_interval; /* RW; Range:[0x1, 0xFF]; Format:8.0; set the AE run interval */
td_bool hist_stat_adjust; /* RW; Range:[0, 1]; Format:1.0;
TD_TRUE: 256 bin histogram statistic config will adjust when large red or blue
area detected.
TD_FALSE: 256 bin histogram statistic config will not change */
td_bool ae_route_ex_valid; /* RW; Range:[0, 1]; Format:1.0; use extend AE route or not */
ot_isp_me_attr manual_attr;
ot_isp_ae_attr auto_attr;
ot_isp_prior_frame prior_frame; /* RW; Range:[0, 2); Format:1.0; AE prior frame */
td_bool ae_gain_sep_cfg; /* RW; Range:[0, 1]; Format:1.0; long and short frame gain separately configure or not */
td_bool advance_ae; /* RW; Range:[0, 1]; Format:1.0; open advance AE or not */
} ot_isp_exposure_attr;
#define OT_ISP_AE_ROUTE_MAX_NODES 16
typedef struct {
td_u32 int_time; /* RW; Range:(0x0, 0xFFFFFFFF]; Format:32.0;
sensor exposure time (unit: us), it's related to the specific sensor */
td_u32 sys_gain; /* RW; Range:[0x400, 0xFFFFFFFF]; Format:22.10;
system gain (unit: times, 10bit precision), it's related to the specific sensor and
ISP Dgain range */
ot_isp_iris_f_no iris_fno; /* RW; Range:[0, 10]; Format:4.0;
the F number of the iris's aperture, only support for Piris */
td_u32 iris_fno_lin; /* RW; Range:[0x1, 0x400]; Format:32.0;
the equivalent gain of F number of the iris's aperture, only support for Piris */
} ot_isp_ae_route_node;
typedef struct {
td_u32 total_num; /* RW; Range:[0, 0x10]; Format:8.0; total node number of AE route */
ot_isp_ae_route_node route_node[OT_ISP_AE_ROUTE_MAX_NODES];
} ot_isp_ae_route;
#define OT_ISP_AE_ROUTE_EX_MAX_NODES 16
typedef struct {
td_u32 int_time; /* RW; Range:(0x0, 0xFFFFFFFF]; Format:32.0;
sensor exposure time (unit: us), it's related to the specific sensor */
td_u32 a_gain; /* RW; Range:[0x400, 0x3FFFFF]; Format:22.10;
sensor analog gain (unit: times, 10bit precision), it's related to the specific sensor */
td_u32 d_gain; /* RW; Range:[0x400, 0x3FFFFF]; Format:22.10;
sensor digital gain (unit: times, 10bit precision), it's related to the specific sensor */
td_u32 isp_d_gain; /* RW; Range:[0x400, 0x40000]; Format:22.10;
ISP digital gain (unit: times, 10bit precision) */
ot_isp_iris_f_no iris_fno; /* RW; Range:[0, 10]; Format:4.0;
the F number of the iris's aperture, only support for Piris */
td_u32 iris_fno_lin; /* RW; Range:[0x1, 0x400]; Format:32.0;
the equivalent gain of F number of the iris's aperture, only support for Piris */
} ot_isp_ae_route_ex_node;
typedef struct {
td_u32 total_num; /* RW; Range:[0, 0x10]; Format:8.0; total node number of extend AE route */
ot_isp_ae_route_ex_node route_ex_node[OT_ISP_AE_ROUTE_EX_MAX_NODES];
} ot_isp_ae_route_ex;
typedef struct {
td_u32 exp_time; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; */
td_u32 short_exp_time; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; */
td_u32 median_exp_time; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; */
td_u32 long_exp_time; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; */
td_u32 a_gain; /* R; Range:[0x400, 0xFFFFFFFF]; Format:22.10; */
td_u32 d_gain; /* R; Range:[0x400, 0xFFFFFFFF]; Format:22.10; */
td_u32 a_gain_sf; /* R; Range:[0x400, 0xFFFFFFFF]; Format:22.10; */
td_u32 d_gain_sf; /* R; Range:[0x400, 0xFFFFFFFF]; Format:22.10; */
td_u32 isp_d_gain; /* R; Range:[0x400, 0xFFFFFFFF]; Format:22.10; */
td_u32 exposure; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; */
td_bool exposure_is_max; /* R; Range:[0, 1]; Format:1.0; */
td_s16 hist_error; /* R; Range:[-32768, 32767]; Format:16.0; */
td_u32 ae_hist1024_value[OT_ISP_HIST_NUM]; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0;
1024 bins histogram for channel 1 */
td_u8 ave_lum; /* R; Range:[0x0, 0xFF]; Format:8.0; */
td_u32 lines_per500ms; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; exposure lines per 500ms */
td_u32 piris_fno; /* R; Range:[0x0, 0x400]; Format:32.0; */
td_u32 fps; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; actual fps */
td_u32 iso; /* R; Range:[0x64, 0xFFFFFFFF]; Format:32.0; */
td_u32 isosf; /* R; Range:[0x64, 0xFFFFFFFF]; Format:32.0; */
td_u32 iso_calibrate; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; */
td_u32 ref_exp_ratio; /* R; Range:[0x40, 0x4000]; Format:26.6; */
td_u16 wdr_exp_coef; /* R; Range:[0x0, 0x400]; Format:6.10; 0x400 means 1 times */
td_u32 first_stable_time; /* R; Range:[0x0, 0xFFFFFFFF]; Format:32.0; AE first stable time for quick start */
td_u32 quick_star_iso; /* R; Range:[0x64, 0xFFFFFFFF]; Format:32.0; */
ot_isp_ae_route ae_route; /* R; Actual AE route */
ot_isp_ae_route_ex ae_route_ex; /* R; Actual AE route_ex */
ot_isp_ae_route ae_route_sf; /* R; Actual AE route_sf */
ot_isp_ae_route_ex ae_route_sf_ex; /* R; Actual AE route_sf_ex */
} ot_isp_exp_info;
typedef struct {
td_u32 reg_addr;
td_u32 reg_value;
} ot_isp_exp_param_reg;
typedef struct {
td_u32 tar_fps;
td_u32 tar_isp_dgain; /* 10 bit */
ot_isp_exp_param_reg time_reg[10]; /* default 10 */
ot_isp_exp_param_reg again_reg[10]; /* default 10 */
ot_isp_exp_param_reg dgain_reg[10]; /* default 10 */
} ot_isp_exp_conv_param;
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0; */
td_u8 face_tolerance; /* RW; Range:[0, 0xFF]; Format:8.0 */
td_u8 face_comp; /* RW; Range:[0, 0xFF]; Format:8.0 */
td_u8 stat_delay_num; /* RW; Range:[0, 10]; Format:4.0 */
td_u8 speed; /* RW; Range:[0, 0x64]; Format:7.0 */
td_u16 face_delay_num; /* RW; Range:[0, 0x400]; Format:10.0 */
} ot_isp_fast_face_ae_attr;
#define OT_ISP_EXP_RATIO_NUM 3
typedef struct {
ot_op_mode exp_ratio_type; /* RW; Range:[0, 1]; Format:1.0;
OT_OP_MODE_AUTO: The ExpRatio used in ISP is generated by firmware;
OT_OP_MODE_MANUAL: The ExpRatio used in ISP is set by u32ExpRatio */
td_u32 exp_ratio[OT_ISP_EXP_RATIO_NUM]; /* RW; Range:[0x40, 0x4000]; Format:26.6; 0x40 means 1 times.
When enExpRatioType is OT_OP_MODE_AUTO, u32ExpRatio is invalid.
When enExpRatioType is OT_OP_MODE_MANUAL, u32ExpRatio is quotient of
long exposure time / short exposure time. */
td_u32 exp_ratio_max; /* RW; Range:[0x40, 0x4000]; Format:26.6; 0x40 means 1 times.
When enExpRatioType is OT_OP_MODE_AUTO, u32ExpRatioMax is max(upper limit) of
ExpRatio generated by firmware.
When enExpRatioType is OT_OP_MODE_MANUAL, u32ExpRatioMax is invalid. */
td_u32 exp_ratio_min; /* RW; Range:[0x40, 0x4000]; Format:26.6; limited Range:[0x40, u32ExpRatioMax],
0x40 means 1 times.
When enExpRatioType is OT_OP_MODE_AUTO, u32ExpRatioMin is min(lower limit) of
ExpRatio generated by firmware.
When enExpRatioType is OT_OP_MODE_MANUAL, u32ExpRatioMin is invalid. */
td_u16 tolerance; /* RW; Range:[0x0, 0xFF]; Format:8.0;et the dynamic range tolerance.
Format: unsigned 6.2-bit fixed-point. 0x4 means 1dB. */
td_u16 speed; /* RW; Range:[0x0, 0xFF]; Format:8.0; exposure ratio adjust speed */
td_u16 ratio_bias; /* RW; Range:[0x0, 0xFFFF]; Format:16.0; exposure ratio bias */
td_u16 high_light_target; /* RW; Range:[0x0, 0x400]; Format:10.0; the high light target. */
td_u16 exp_coef_min; /* RW; Range:[0x0, 0x400]; Format:6.10; 0x400 means 1 times; min exposure coefficient */
} ot_isp_wdr_exposure_attr;
typedef struct {
ot_op_mode exp_hdr_lv_type; /* RW; Range:[0, 1]; Format:1.0;
OT_OP_MODE_AUTO: The ExpHDRLv used in ISP is generated by firmware;
OT_OP_MODE_MANUAL: The ExpHDRLv used in ISP is set by u32ExpHDRLv */
td_u32 exp_hdr_lv; /* RW; Range:[0x40, 0x400]; Format:26.6; 0x40 means 1 times.
When enExpHDRLvType is OT_OP_MODE_AUTO, u32ExpHDRLv is invalid.
When enExpHDRLvType is OT_OP_MODE_MANUAL, u32ExpHDRLv is the quotient of
exposure / linear exposure. */
td_u32 exp_hdr_lv_max; /* RW; Range:[0x40, 0x400]; Format:26.6; 0x40 means 1 times.
When enExpHDRLvType is OT_OP_MODE_AUTO, u32ExpHDRLvMax is max(upper limit) of
ExpHDRLv generated by firmware.
When enExpHDRLvType is OT_OP_MODE_MANUAL, u32ExpHDRLvMax is invalid. */
td_u32 exp_hdr_lv_min; /* RW; Range:[0x40, 0x400]; Format:26.6; limited range:[0x40, u32ExpHDRLvMax],
0x40 means 1 times.
When enExpHDRLvType is OT_OP_MODE_AUTO, u32ExpHDRLvMin is min(lower limit) of
ExpHDRLv generated by firmware.
When enExpHDRLvType is OT_OP_MODE_MANUAL, u32ExpHDRLvMin is invalid. */
td_u32 exp_hdr_lv_weight; /* RW; Range:[0x0, 0x400]; Format:16.0; exposure HDR level weight. */
} ot_isp_hdr_exposure_attr;
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0; smart ae enable or not */
td_bool ir_mode; /* RW; Range:[0, 1]; Format:1.0; smart ae IR mode or not */
ot_op_mode smart_exp_type; /* RW; Range:[0, 1]; Format:1.0;
OT_OP_MODE_AUTO: The ExpCoef used in ISP is generated by firmware;
OT_OP_MODE_MANUAL: The ExpCoef used in ISP is set by u32ExpCoef */
td_u16 exp_coef; /* RW; Range:[0x0, 0xFFFF]; Format:6.10; 0x400 means 1 times.
When enExpHDRLvType is OT_OP_MODE_AUTO, u32ExpCoef is invalid.
When enExpHDRLvType is OT_OP_MODE_MANUAL, u32ExpCoef is the quotient of exposure. */
td_u8 luma_target; /* RW; Range:[0x0, 0xFF]; Format:8.0; luma target of smart ae. */
td_u16 exp_coef_max; /* RW; Range:[0x0, 0xFFFF]; Format:6.10; 0x400 means 1 times.
When enExpHDRLvType is OT_OP_MODE_AUTO, u32ExpCoefvMax is max(upper limit) of ExpCoef
generated by firmware.
When enExpHDRLvType is OT_OP_MODE_MANUAL, u32ExpCoefMax is invalid. */
td_u16 exp_coef_min; /* RW; Range:[0x0, 0xFFFF]; Format:6.10; 0x400 means 1 times.
When enExpHDRLvType is OT_OP_MODE_AUTO, u32ExpCoefMax is min(lower limit) of ExpCoef
generated by firmware.
When enExpHDRLvType is OT_OP_MODE_MANUAL, u32ExpCoefMin is invalid. */
td_u8 smart_interval; /* RW; Range:[0x1, 0xFF]; Format:8.0; smart ae run interval */
td_u8 smart_speed; /* RW; Range:[0x0, 0xFF]; Format:8.0; smart ae adjust step */
td_u16 smart_delay_num; /* RW; Range:[0x0, 0x400]; Format:16.0; smart ae adjust delay frame num */
} ot_isp_smart_exposure_attr;
/* AWB structs */
/*
* Defines the AWB online calibration type
* u16AvgRgain: the avg value of Rgain after online calibration
* u16AvgBgain: the avg value of Bgain after online calibration
*/
typedef struct {
td_u16 avg_r_gain;
td_u16 avg_b_gain;
} ot_isp_awb_calibration_gain;
/*
Defines the AWB algorithm type
0 = Improved gray world algorithm.
1 = AWB algorithm that classifies the statistics and re-filters the white blocks
2 = AWB algorithm that opt outdoor performance for dv
*/
typedef enum {
OT_ISP_AWB_ALG_LOWCOST = 0,
OT_ISP_AWB_ALG_ADVANCE = 1,
OT_ISP_AWB_ALG_NATURA = 2,
OT_ISP_AWB_ALG_BUTT
} ot_isp_awb_alg_type;
/*
Defines the AWB policy in the multi-illuminant scenario
0 = Automatic saturation adjustment in the multi-illuminant scenario
1 = Automatic ccm adjustment in the multi-illuminant scenario
*/
typedef enum {
OT_ISP_AWB_MULTI_LS_SAT = 0,
OT_ISP_AWB_MULTI_LS_CCM = 1,
OT_ISP_AWB_MULTI_LS_BUTT
} ot_isp_awb_multi_ls_type;
typedef enum {
OT_ISP_AWB_INDOOR_MODE = 0,
OT_ISP_AWB_OUTDOOR_MODE = 1,
OT_ISP_AWB_INDOOR_OUTDOOR_BUTT
} ot_isp_awb_indoor_outdoor_status;
/* Defines the AWB gain range */
typedef struct {
td_bool enable;
ot_op_mode op_type;
td_u16 high_rg_limit; /* RW; Range:[0x0, 0xFFF]; Format:4.8;
in Manual Mode, user define the Max Rgain of High Color Temperature */
td_u16 high_bg_limit; /* RW; Range:[0x0, 0xFFF]; Format:4.8;
in Manual Mode, user define the Min Bgain of High Color Temperature */
td_u16 low_rg_limit; /* RW; Range:[0x0, 0xFFF]; Format:4.8; limited range:[0x0, u16HighRgLimit),
in Manual Mode, user define the Min Rgain of Low Color Temperature */
td_u16 low_bg_limit; /* RW; Range:[0, 0xFFF]; Format:4.8; limited Range:(u16HighBgLimit, 0xFFF],
in Manual Mode, user define the Max Bgain of Low Color Temperature */
} ot_isp_awb_ct_limit_attr;
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0; Outdoor/Indoor scenario determination enable */
ot_op_mode op_type;
ot_isp_awb_indoor_outdoor_status outdoor_status; /* RW;User should config indoor or outdoor status in Manual Mode */
td_u32 out_thresh; /* RW;Format:32.0;shutter time(in us) to judge indoor or outdoor */
td_u16 low_start; /* RW;Format:16.0;5000K is recommend */
td_u16 low_stop; /* RW;Format:16.0;limited range:(0, u16LowStart),
4500K is recommend, should be smaller than u8LowStart */
td_u16 high_start; /* RW;Format:16.0;limited range:(u16LowStart, 0xFFFF],
6500K is recommend, should be larger than u8LowStart */
td_u16 high_stop; /* RW;Format:16.0;limited range:(u16HighStart, 0xFFFF],
8000K is recommend, should be larger than u8HighStart */
td_bool green_enhance_en; /* RW; Range:[0, 1]; Format:1.0;If this is enabled, Green channel will be enhanced
based on the ratio of green plant */
td_u8 out_shift_limit; /* RW; Range:[0, 0xFF]; Format:8.0;Max white point zone distance to Planckian Curve */
} ot_isp_awb_in_out_attr;
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0;
If enabled, statistic parameter cr, cb will change according to iso */
td_u16 cr_max[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0x0, 0xFFF]; au16CrMax[i] >= au16CrMin[i] */
td_u16 cr_min[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0x0, 0xFFF] */
td_u16 cb_max[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0x0, 0xFFF]; au16CbMax[i] >= au16CbMin[i] */
td_u16 cb_min[OT_ISP_AUTO_ISO_NUM]; /* RW; Range:[0x0, 0xFFF] */
} ot_isp_awb_cbcr_track_attr;
#define OT_ISP_AWB_LUM_HIST_NUM 6
/* Defines the parameters of the luminance histogram statistics for white balance */
typedef struct {
td_bool enable; /* RW; Range:[0, 1]; Format:1.0;
If enabled, zone weight to awb is combined with zone luma */
ot_op_mode op_type; /* In auto mode, the weight distribution follows Gaussian distribution */
td_u8 hist_thresh[OT_ISP_AWB_LUM_HIST_NUM]; /* RW; Range:[0x0, 0xFF]; Format:8.0;
In manual mode, user define luma thresh, thresh[0] is 0,
thresh[5] is 0xFF, thresh[i] greater or equal to thresh[i-1] */
td_u16 hist_wt[OT_ISP_AWB_LUM_HIST_NUM]; /* RW; Range:[0x0, 0xFFFF]; Format:16.0;
user can define luma weight in both manual and auto mode. */
} ot_isp_awb_lum_histgram_attr;
/* Defines the information about a separate illuminant */
typedef struct {
td_u16 white_r_gain; /* RW;Range:[0x0, 0xFFF]; Format:4.8; G/R of White points at this light source */
td_u16 white_b_gain; /* RW;Range:[0x0, 0xFFF]; Format:4.8; G/B of White points at this light source */
td_u16 exp_quant; /* RW;shutter time * again * dgain >> 4, Not support Now */
td_u8 light_status; /* RW;Range:[0,2]; Format:2.0; idle 1:add light source 2:delete sensitive color */
td_u8 radius; /* RW;Range:[0x0, 0xFF]; Format:8.0; Radius of light source, */
} ot_isp_awb_extra_light_source_info;
#define OT_ISP_AWB_LS_NUM 4
#define OT_ISP_AWB_MULTI_CT_NUM 8
/* extended AWB attributes */
typedef struct {
td_u8 tolerance; /* RW; Range:[0x0, 0xFF]; Format:8.0; AWB adjust tolerance */
td_u8 zone_radius; /* RW; Range:[0x0, 0xFF]; Format:8.0; radius of AWB blocks */
td_u16 curve_l_limit; /* RW; Range:[0x0, 0x100]; Format:9.0; Left limit of AWB Curve,
recommend for indoor 0xE0, outdoor 0xE0 */
td_u16 curve_r_limit; /* RW; Range:[0x100, 0xFFF]; Format:12.0; Right Limit of AWB Curve,
recommend for indoor 0x130, outdoor 0x120 */
td_bool extra_light_en; /* RW; Range:[0, 1]; Format:1.0; Enable special light source function */
ot_isp_awb_extra_light_source_info light_info[OT_ISP_AWB_LS_NUM];
ot_isp_awb_in_out_attr in_or_out;
td_bool multi_light_source_en; /* RW; Range:[0, 1]; Format:1.0; If enabled, awb will do special process
in multi light source environment */
ot_isp_awb_multi_ls_type multi_ls_type; /* Saturation or CCM Tuning */
td_u16 multi_ls_scaler; /* RW; Range:[0x0, 0x100]; Format:12.0;
In saturation type, it means the max saturation it can achieve,
in ccm type, it means the strength of multi process. */
td_u16 multi_ct_bin[OT_ISP_AWB_MULTI_CT_NUM]; /* RW; Range:[0, 0XFFFF]; Format:16.0;
AWB Support divide the color temperature range by 8 bins */
td_u16 multi_ct_wt[OT_ISP_AWB_MULTI_CT_NUM]; /* RW; Range:[0x0, 0x400];Weight for different color temperature,
same value of 8 means CT weight doesn't work, */
td_bool fine_tun_en; /* RW; Range:[0x0, 0x1]; Format:1.0;If enabled, skin color scene will be optimized */
td_u8 fine_tun_strength; /* RW; Range:[0x0, 0xFF]; Format:8.0;
larger value means better performance of skin color scene,
but will increase error probability in low color temperature scene */
} ot_isp_awb_attr_ex;
#define OT_ISP_AWB_CURVE_PARA_NUM 6
typedef struct {
td_bool enable; /* RW; Range:[0x0, 0x1]; Format:1.0;If AWB is disabled, static wb gain will be used,
otherwise auto wb gain will be used */
td_u16 ref_color_temp; /* RW; Range:[0x0, 0xFFFF]; Format:16.0; Calibration Information */
td_u16 static_wb[OT_ISP_BAYER_CHN_NUM]; /* RW; Range:[0x0, 0xFFF]; Format:12.0;Calibration Information */
td_s32 curve_para[OT_ISP_AWB_CURVE_PARA_NUM]; /* RW; Format:32.0;Calibration Information,
limited Range:as32CurvePara[3] != 0, as32CurvePara[4]==128 */
ot_isp_awb_alg_type alg_type;
td_u8 rg_strength; /* RW; Range: [0x0, 0xFF]; Format:8.0; AWB Strength of R Channel */
td_u8 bg_strength; /* RW; Range: [0x0, 0xFF]; Format:8.0; AWB Strength of B Channel */
td_u16 speed; /* RW; Range: [0x0, 0xFFF]; Format:12.0; Convergence speed of AWB */
td_u16 zone_sel; /* RW; Range: [0, 255]; Format:8.0; A value of 0 or 0xFF means global AWB,
A value between 0 and 0xFF means zoned AWB */
td_u16 high_color_temp; /* RW; Range: [0, 65535]; Format:16.0; AWB max temperature, Recommended: [8500, 10000] */
td_u16 low_color_temp; /* RW; Range: [0, 65535]; Format:16.0; Limited Range:[0, u16HighColorTemp),
AWB min temperature, Recommended: [2000, 2500] */
ot_isp_awb_ct_limit_attr ct_limit;
td_bool shift_limit_en; /* RW; Range: [0, 1]; Format:1.0; If enabled, when the statistic information is out of
range, it should be project back */
td_u8 shift_limit; /* RW; Range: [0x0, 0xFF]; Format:8.0; planckian curve range, Recommended: [0x30, 0x50] */
td_bool gain_norm_en; /* RW; Range: [0, 1]; Format:1.0; if enabled, the min of RGB gain is fixed. */
td_bool natural_cast_en; /* RW, Range: [0, 1]; Format:1.0; if enabled, the color performance will be natural in
lowlight and low color temperature */
ot_isp_awb_cbcr_track_attr cb_cr_track;
ot_isp_awb_lum_histgram_attr luma_hist;
td_bool awb_zone_wt_en; /* RW, Range: [0, 1]; Format:1.0; if enabled, user can set weight for each zones */
td_u8 zone_wt[OT_ISP_AWB_ZONE_NUM]; /* RW; Range: [0, 255]; Format:8.0;Zone Wt Table */
} ot_isp_awb_attr;
typedef struct {
td_u16 r_gain; /* RW; Range: [0x0, 0xFFF]; Format:4.8; Multiplier for R color channel */
td_u16 gr_gain; /* RW; Range: [0x0, 0xFFF]; Format:4.8; Multiplier for Gr color channel */
td_u16 gb_gain; /* RW; Range: [0x0, 0xFFF]; Format:4.8; Multiplier for Gb color channel */
td_u16 b_gain; /* RW; Range: [0x0, 0xFFF]; Format:4.8; Multiplier for B color channel */
} ot_isp_mwb_attr;
typedef enum {
OT_ISP_ALG_AWB_GW = 0,
OT_ISP_ALG_AWB_SPEC = 1,
OT_ISP_ALG_BUTT
} ot_isp_awb_alg;
typedef struct {
td_bool bypass; /* RW; Range: [0, 1]; Format:1.0; If enabled, awb will be bypassed */
td_u8 awb_run_interval; /* RW; Range: [0x1, 0xFF]; Format:8.0; set the AWB run interval */
ot_op_mode op_type;
ot_isp_mwb_attr manual_attr;
ot_isp_awb_attr auto_attr;
ot_isp_awb_alg alg_type;
} ot_isp_wb_attr;
typedef struct {
td_bool sat_en; /* RW; Range: [0, 1]; Format:1.0;
If bSatEn=1, the active CCM = SatMatrix * ManualMatrix,
else the active CCM = ManualMatrix */
td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE]; /* RW; Range: [0x0, 0xFFFF]; Format:8.8; Manul CCM matrix, */
} ot_isp_color_matrix_manual;
typedef struct {
td_u16 color_temp; /* RW; Range: [500, 30000]; 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_color_matrix_param;
typedef struct {
td_bool iso_act_en; /* RW; Range: [0, 1]; Format:1.0; if enabled, CCM will bypass in low light */
td_bool temp_act_en; /* RW; Range: [0, 1]; Format:1.0; if enabled, CCM will bypass when color temperature is
larger than 8000K or less than 2500K */
td_u16 ccm_tab_num; /* RW; Range: [0x3, 0x7]; Format:16.0; The number of CCM matrixes */
ot_isp_color_matrix_param ccm_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_color_matrix_auto;
typedef struct {
ot_op_mode op_type;
ot_isp_color_matrix_manual manual_attr;
ot_isp_color_matrix_auto auto_attr;
} ot_isp_color_matrix_attr;
typedef struct {
td_u8 saturation; /* RW; Range: [0, 0xFF]; Format:8.0; set the manual saturation of CCM */
} ot_isp_saturation_manual;
typedef struct {
td_u8 sat[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 0xFF]; should be decreased with increasing ISO */
} ot_isp_saturation_auto;
typedef struct {
ot_op_mode op_type;
ot_isp_saturation_manual manual_attr;
ot_isp_saturation_auto auto_attr;
} ot_isp_saturation_attr;
typedef struct {
td_u16 red_cast_gain; /* RW; Range: [0x100, 0x180]; Format:4.8; R channel gain after CCM */
td_u16 green_cast_gain; /* RW; Range: [0x100, 0x180]; Format:4.8; G channel gain after CCM */
td_u16 blue_cast_gain; /* RW; Range: [0x100, 0x180]; Format:4.8; B channel gain after CCM */
} ot_isp_color_tone_attr;
typedef struct {
td_u16 r_gain; /* R; Range: [0x0, 0xFFF]; Format:8.8;AWB result of R color channel */
td_u16 gr_gain; /* R; Range: [0x0, 0xFFF]; Format:8.8; AWB result of Gr color channel */
td_u16 gb_gain; /* R; Range: [0x0, 0xFFF]; Format:8.8; AWB result of Gb color channel */
td_u16 b_gain; /* R; Range: [0x0, 0xFFF]; Format:8.8; AWB result of B color channel */
td_u16 saturation; /* R; Range: [0x0, 0xFF];Format:8.0;Current saturation */
td_u16 color_temp; /* R; Range: [0x0, 0xFFFF];Format:16.0;Detect color temperature, maybe out of color
cemeprature range */
td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE]; /* R; Range: [0x0, 0xFFFF];Format:16.0;Current color correction matrix */
td_u16 ls0_ct; /* R; Range: [0x0, 0xFFFF];Format:16.0;color tempearture of primary light source */
td_u16 ls1_ct; /* R; Range: [0x0, 0xFFFF];Format:16.0;color tempearture of secondary light source */
td_u16 ls0_area; /* R; Range: [0x0, 0xFF];Format:8.0;area of primary light source */
td_u16 ls1_area; /* R; Range: [0x0, 0xFF];Format:8.0;area of secondary light source */
td_u8 multi_degree; /* R; Range: [0x0, 0xFF];0 means uniform light source, larger value means multi
light source */
td_u16 active_shift; /* R; Range;[0x0,0xFF] */
td_u32 first_stable_time; /* R, Range: [0x0, 0xFFFFFFFF];Format:32.0;AWB first stable frame number */
ot_isp_awb_indoor_outdoor_status in_out_status; /* R; indoor or outdoor status */
td_s16 bv; /* R; Range;[-32768, 32767]; Bv value */
} ot_isp_wb_info;
typedef struct {
td_bool is_ir_mode;
td_u32 ae_comp;
td_u32 exp_time;
td_float int_time_accu;
td_u32 a_gain;
td_float again_accu;
td_u32 d_gain;
td_float dgain_accu;
td_u32 ispd_gain;
td_u32 exposure;
td_u32 init_iso;
td_u32 lines_per500ms;
td_u32 piris_fno;
td_u16 wb_r_gain;
td_u16 wb_g_gain;
td_u16 wb_b_gain;
td_u16 sample_r_gain;
td_u16 sample_b_gain;
td_u16 init_ccm[OT_ISP_CCM_MATRIX_SIZE];
td_bool ae_route_ex_valid;
td_bool quick_start_en;
ot_isp_ae_route ae_route;
ot_isp_ae_route_ex ae_route_ex;
ot_isp_ae_route ae_route_sf;
ot_isp_ae_route_ex ae_route_sf_ex;
} ot_isp_init_attr;
typedef struct {
td_s32 distance_max; /* RW;the focus range */
td_s32 distance_min;
td_u8 wgt[OT_ISP_AF_ZONE_ROW][OT_ISP_AF_ZONE_COLUMN]; /* RW;weighting table */
} ot_isp_af_attr;
typedef struct {
td_s32 default_speed; /* RW;1,default speed(unit:m/s).(onvif) */
} ot_isp_mf_attr;
typedef struct {
ot_op_mode op_type;
ot_isp_mf_attr manual_attr;
ot_isp_af_attr auto_attr;
} ot_isp_focus_attr;
/*
DNG cfalayout type
1 = Rectangular (or square) layout
2 = Staggered layout A: even columns are offset down by 1/2 row
3 = Staggered layout B: even columns are offset up by 1/2 row
4 = Staggered layout C: even rows are offset right by 1/2 column
5 = Staggered layout D: even rows are offset left by 1/2 column
6 = Staggered layout E: even rows are offset up by 1/2 row, even columns are offset left by 1/2 column
7 = Staggered layout F: even rows are offset up by 1/2 row, even columns are offset right by 1/2 column
8 = Staggered layout G: even rows are offset down by 1/2 row, even columns are offset left by 1/2 column
9 = Staggered layout H: even rows are offset down by 1/2 row, even columns are offset right by 1/2 column
*/
typedef enum {
OT_ISP_CFALAYOUT_TYPE_RECTANGULAR = 1,
OT_ISP_CFALAYOUT_TYPE_A, /* a,b,c... not support */
OT_ISP_CFALAYOUT_TYPE_B,
OT_ISP_CFALAYOUT_TYPE_C,
OT_ISP_CFALAYOUT_TYPE_D,
OT_ISP_CFALAYOUT_TYPE_E,
OT_ISP_CFALAYOUT_TYPE_F,
OT_ISP_CFALAYOUT_TYPE_G,
OT_ISP_CFALAYOUT_TYPE_H,
OT_ISP_CFALAYOUT_TYPE_BUTT
} ot_isp_dng_cfa_layout_type;
typedef struct {
td_s32 numerator; /* represents the numerator of a fraction, */
td_s32 denominator; /* the denominator. */
} ot_isp_dng_srational;
typedef struct {
td_u16 repeat_row;
td_u16 repeat_col;
} ot_isp_dng_black_level_repeat_dim;
typedef struct {
ot_isp_dng_srational default_scale_hor;
ot_isp_dng_srational default_scale_ver;
} ot_isp_dng_default_scale;
typedef struct {
td_u16 repeat_pattern_dim_row;
td_u16 repeat_pattern_dim_col;
} ot_isp_dng_repeat_pattern_dim;
/* Defines the structure of dng raw format. */
typedef struct {
td_u8 bits_per_sample; /* RO;Format:8.0; Indicate the bit numbers of raw data */
td_u8 cfa_plane_color[OT_CFACOLORPLANE]; /* RO;Format:8.0; Indicate the planer numbers of raw data;
0:red 1:green 2: blue */
ot_isp_dng_cfa_layout_type cfa_layout; /* RO;Range:[1,9]; Describes the spatial layout of the CFA */
ot_isp_dng_black_level_repeat_dim black_level_repeat_dim; /* Specifies repeat pattern size for the BlackLevel */
td_u32 white_level; /* RO;Format:32.0; Indicate the WhiteLevel of the raw data */
ot_isp_dng_default_scale default_scale; /* Specifies the default scale factors for each direction to convert
the image to square pixels */
ot_isp_dng_repeat_pattern_dim cfa_repeat_pattern_dim; /* Specifies the pixel number of repeat color planer in
each direction */
td_u8 cfa_pattern[OT_ISP_BAYER_CHN_NUM]; /* RO;Format:8.0; Indicate the bayer start order;
0:red 1:green 2: blue */
} ot_isp_dng_raw_format;
/* Defines the structure of dng image static information. read only */
typedef struct {
ot_isp_dng_raw_format dng_raw_format;
ot_isp_dng_srational color_matrix1[OT_ISP_CCM_MATRIX_SIZE]; /* defines a transformation matrix that converts XYZ
values to reference camera native color space values,
under the first calibration illuminant. */
ot_isp_dng_srational color_matrix2[OT_ISP_CCM_MATRIX_SIZE]; /* defines a transformation matrix that converts XYZ
values to reference camera native color space values,
under the second calibration illuminant. */
ot_isp_dng_srational camera_calibration1[OT_ISP_CCM_MATRIX_SIZE]; /* defines a calibration matrix that transforms
reference camera native space values to
individual camera native space values under
the first calibration illuminant */
ot_isp_dng_srational camera_calibration2[OT_ISP_CCM_MATRIX_SIZE]; /* defines a calibration matrix that transforms
reference camera native space values to
individual camera native space values under
the second calibration illuminant */
ot_isp_dng_srational forwad_matrix1[OT_ISP_CCM_MATRIX_SIZE]; /* defines a matrix that maps white balanced camera
colors to XYZ D50 colors */
ot_isp_dng_srational forwad_matrix2[OT_ISP_CCM_MATRIX_SIZE]; /* defines a matrix that maps white balanced camera
colors to XYZ D50 colors */
td_u8 calibration_illuminant1; /* RO;Format:8.0;Light source, actually this means white balance setting.
'0' means unknown, '1' daylight, '2' fluorescent, '3' tungsten, '10' flash,
'17' standard light A, '18' standard light B, '19' standard light C,
'20' D55, '21' D65, '22' D75, '255' other */
td_u8 calibration_illuminant2; /* RO;Format:8.0;Light source, actually this means white balance setting.
'0' means unknown, '1' daylight, '2' fluorescent, '3' tungsten, '10' flash,
'17' standard light A, '18' standard light B, '19' standard light C,
'20' D55, '21' D65, '22' D75, '255' other */
} ot_isp_dng_image_static_info;
/* Defines the structure of DNG WB gain used for calculate DNG colormatrix. */
typedef struct {
td_u16 r_gain; /* RW;Range: [0x0, 0xFFF]; Multiplier for R color channel */
td_u16 g_gain; /* RW;Range: [0x0, 0xFFF]; Multiplier for G color channel */
td_u16 b_gain; /* RW;Range: [0x0, 0xFFF]; Multiplier for B color channel */
} ot_isp_dng_wb_gain;
/* Defines the structure of DNG color parameters. */
typedef struct {
ot_isp_dng_wb_gain wb_gain1; /* the calibration White balance gain of colorcheker in low colortemper light source */
ot_isp_dng_wb_gain wb_gain2; /* the calibration White balance gain of colorcheker in high colortemper
light source */
} ot_isp_dng_color_param;
typedef enum {
OT_ISP_IR_STATUS_NORMAL = 0,
OT_ISP_IR_STATUS_IR = 1,
OT_ISP_IR_BUTT
} ot_isp_ir_status;
typedef enum {
OT_ISP_IR_SWITCH_NONE = 0,
OT_ISP_IR_SWITCH_TO_NORMAL = 1,
OT_ISP_IR_SWITCH_TO_IR = 2,
OT_ISP_IR_SWITCH_BUTT
} ot_isp_ir_switch_status;
typedef struct {
td_bool en; /* RW, TD_TRUE: enable IR_auto function; TD_TRUE: disable IR_auto function. */
td_u32 normal_to_ir_iso_threshold; /* RW, Range: [0, 0xFFFFFFFF].
ISO threshold of switching from normal to IR mode. */
td_u32 ir_to_normal_iso_threshold; /* RW, Range: [0, 0xFFFFFFFF].
ISO threshold of switching from IR to normal mode. */
td_u32 rg_max; /* RW, Range: [0x0, 0xFFF]. Maximum value of R/G in IR scene, 4.8-bit fix-point. */
td_u32 rg_min; /* RW, Range: [0x0, u32RGMax]. Minimum value of R/G in IR scene, 4.8-bit fix-point. */
td_u32 bg_max; /* RW, Range: [0x0, 0xFFF]. Maximum value of B/G in IR scene, 4.8-bit fix-point. */
td_u32 bg_min; /* RW, Range: [0x0, u32BGMax]. Minimum value of B/G in IR scene, 4.8-bit fix-point. */
ot_isp_ir_status ir_status; /* RW. Current IR status. */
ot_isp_ir_switch_status ir_switch; /* RO, IR switch status. */
} ot_isp_ir_auto_attr;
typedef enum {
OT_ISP_FLICKER_TYPE_NONE = 0,
OT_ISP_FLICKER_TYPE_UNKNOW,
OT_ISP_FLICKER_TYPE_50HZ,
OT_ISP_FLICKER_TYPE_60HZ,
OT_ISP_FLICKER_TYPE_BUTT,
} ot_isp_calc_flicker_type;
typedef struct {
td_u32 lines_per_second; /* The total line number of 1 second */
} ot_isp_calc_flicker_input;
typedef struct {
ot_isp_calc_flicker_type flicker_type; /* The calculate result of flicker type */
} ot_isp_calc_flicker_output;
#define OT_BAYER_CALIBRATION_PARA_NUM_NEW 16
typedef struct {
td_double calibration_coef[OT_BAYER_CALIBRATION_PARA_NUM_NEW];
} ot_isp_noise_calibration;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif /* OT_COMM_ISP_H */