Files

4816 lines
191 KiB
C
Executable File

/*
* Copyright (c); XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_ISP_H__
#define __XMEDIA_ISP_H__
#include "xmedia_video_common.h"
#include "xmedia_intf_common.h"
#include "defines.h"
#ifdef __cplusplus
extern "C" {
#endif
#define XMEDIA_ISP_ISO_MAX_COUNT 16
#define XMEDIA_ISP_EXP_RATIO_MAX_COUNT 9
#define XMEDIA_ISP_PIPE_MAX_NUM VI_MAX_PIPE_NUM
#define XMEDIA_ISP_WDR_CHN_MAX_NUM VI_MAX_WDR_NUM
#define XMEDIA_ISP_WDR_EXP_RATIO_MAX_NUM (XMEDIA_ISP_WDR_CHN_MAX_NUM - 1)
#define XMEDIA_ISP_AI_MODEL_PER_ISO ISP_ISO_MODEL_MAX_NUM
#define XMEDIA_ISP_AI_MODEL_MAX_NUM (XMEDIA_ISP_ISO_MAX_COUNT * XMEDIA_ISP_AI_MODEL_PER_ISO)
#define XMEDIA_ISP_AINR_MODEL_MAX_NUM XMEDIA_ISP_AI_MODEL_MAX_NUM
#define XMEDIA_ISP_WDR_MAX_EXP_RATIO ISP_WDR_MAX_EXP_RATIO
#define XMEDIA_ISP_TRIG_DEV_MAX_NUM ISP_TRIG_DEV_MAX_NUM
#define XMEDIA_ISP_BAYER_PATTERN_NUM 4
#define XMEDIA_ISP_AE_HIST_NUM 1024
#define XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM 16
#define XMEDIA_ISP_AE_ZONE_COL_MAX_NUM 24
#define XMEDIA_ISP_AWB_ZONE_ROW_MAX_NUM 32
#define XMEDIA_ISP_AWB_ZONE_COL_MAX_NUM 32
#define XMEDIA_ISP_AWB_ZONE_BIN 1
#define XMEDIA_ISP_AWB_ZONE_NUM \
(XMEDIA_ISP_AWB_ZONE_ROW_MAX_NUM * XMEDIA_ISP_AWB_ZONE_COL_MAX_NUM * XMEDIA_ISP_AWB_ZONE_BIN)
#define XMEDIA_ISP_AF_ZONE_ROW_MAX_NUM 15
#define XMEDIA_ISP_AF_ZONE_COL_MAX_NUM 18
#define XMEDIA_ISP_PD_MAX_WIDTH 128
#define XMEDIA_ISP_PD_MAX_HEIGHT 128
#define XMEDIA_ISP_BAYERNR_LUT_LENGTH 33
#define XMEDIA_ISP_EXP_RATIO_STRENGTH_NUM 16
#define XMEDIA_ISP_LCAC_DET_NUM 3
#define XMEDIA_ISP_PREGAMMA_NODE_NUM 257
#define XMEDIA_ISP_BAYER_CALIBTAION_MAX_NUM 50
#define XMEDIA_ISP_EXP_RATIO_NUM 3
#define XMEDIA_ISP_SLAVE_PIPE_MAX_NUM 3
#define XMEDIA_ISP_EXP_MAX_COUNT 16
typedef struct {
xmedia_u16 x;
xmedia_u16 y;
} xmedia_isp_point;
typedef enum {
XMEDIA_ISP_AAA_CMD_WDR_MODE_SET = 8000,
XMEDIA_ISP_AAA_CMD_PROC_WRITE,
XMEDIA_ISP_AAA_CMD_AE_FPS_BASE_SET,
XMEDIA_ISP_AAA_CMD_AE_BLC_SET,
XMEDIA_ISP_AAA_CMD_AE_RC_SET,
XMEDIA_ISP_AAA_CMD_AE_BAYER_FORMAT_SET,
XMEDIA_ISP_AAA_CMD_AE_INIT_INFO_GET,
XMEDIA_ISP_AAA_CMD_AWB_ISO_SET, // set iso, change saturation when iso change
XMEDIA_ISP_AAA_CMD_AWB_BLC_SET,
XMEDIA_ISP_AAA_CMD_CHANGE_IMAGE_MODE_SET,
XMEDIA_ISP_AAA_CMD_UPDATE_INFO_GET,
XMEDIA_ISP_AAA_CMD_FRAMEINFO_GET,
XMEDIA_ISP_AAA_CMD_ATTACHINFO_GET,
XMEDIA_ISP_AAA_CMD_COLORGAMUTINFO_GET,
XMEDIA_ISP_AAA_CMD_AWB_INTTIME_SET,
XMEDIA_ISP_AAA_CMD_BAS_MODE_SET,
XMEDIA_ISP_AAA_CMD_PROTRIGGER_SET,
XMEDIA_ISP_AAA_CMD_AWB_PIRIS_SET,
XMEDIA_ISP_AAA_CMD_AWB_SNAP_MODE_SET,
XMEDIA_ISP_AAA_CMD_AWB_ZONE_ROW_SET,
XMEDIA_ISP_AAA_CMD_AWB_ZONE_COL_SET,
XMEDIA_ISP_AAA_CMD_AWB_ZONE_BIN_SET,
XMEDIA_ISP_AAA_CMD_AWB_GAIN_GET,
XMEDIA_ISP_AAA_CMD_AWB_RESULT_GET,
XMEDIA_ISP_AAA_CMD_CTRL_CMD_MAX,
} xmedia_isp_aaa_cmd;
typedef enum {
XMEDIA_ISP_MODULE_ID_MIN = 0x00584D00,
XMEDIA_ISP_MODULE_ID_ISP = XMEDIA_ISP_MODULE_ID_MIN, // 0x00584D00
XMEDIA_ISP_MODULE_ID_AWB, // 0x00584D01
XMEDIA_ISP_MODULE_ID_AE, // 0x00584D02
XMEDIA_ISP_MODULE_ID_AF, // 0x00584D03
XMEDIA_ISP_MODULE_ID_ISP_EX,
XMEDIA_ISP_MODULE_ID_MAX
} xmedia_isp_module_id;
#define XMEDIA_ISP_MODULE_MAX_NUM (XMEDIA_ISP_MODULE_ID_MAX - XMEDIA_ISP_MODULE_ID_MIN)
#define XMEDIA_ISP_VREG_NAME_MAX_SIZE 16
typedef struct {
// 模块id,以区分ISP/AE/AWB/AF
xmedia_u32 module;
// 算法vreg版本,当算法参数有变动时必须改变版本;
// 参数变动指:增删参数、移动参数位置、修改参数类型等任何会改变vreg参数排布的变动
xmedia_u32 version;
// vreg长度,单位:字节
xmedia_u32 length;
// 模块名字,比如:‘ISP’‘AE’‘AWB’‘AF’
xmedia_char name[XMEDIA_ISP_VREG_NAME_MAX_SIZE];
// 导出时是vreg首地址,导入时是buffer地址
xmedia_void *addr;
} xmedia_isp_module_info;
typedef enum {
XMEDIA_ISP_BAYER_RAWBIT_8BIT = 8,
XMEDIA_ISP_BAYER_RAWBIT_10BIT = 10,
XMEDIA_ISP_BAYER_RAWBIT_12BIT = 12,
XMEDIA_ISP_BAYER_RAWBIT_14BIT = 14,
XMEDIA_ISP_BAYER_RAWBIT_16BIT = 16,
XMEDIA_ISP_BAYER_RAWBIT_MAX
} xmedia_isp_bayer_rawbit;
typedef enum {
XMEDIA_ISP_WDR_MODE_NORMAL = 0,
XMEDIA_ISP_WDR_MODE_LONG_FRAME,
XMEDIA_ISP_WDR_MODE_AUTO_LONG_FRAME,
XMEDIA_ISP_WDR_MODE_MAX
} xmedia_isp_wdr_mode;
typedef struct {
xmedia_video_wdr_mode mode;
xmedia_video_wdr_format fmt;
} xmedia_isp_wdr_info;
typedef enum {
XMEDIA_ISP_WORK_MODE_MASTER = 0,
XMEDIA_ISP_WORK_MODE_SLAVE,
XMEDIA_ISP_WORK_MODE_MAX
} xmedia_isp_work_mode;
#define XMEDIA_ISP_FOLLOW_AAC (1 << 0)
#define XMEDIA_ISP_FOLLOW_AE (1 << 1)
#define XMEDIA_ISP_FOLLOW_AF (1 << 2)
#define XMEDIA_ISP_FOLLOW_AWB (1 << 3)
#define XMEDIA_ISP_FOLLOW_BLC (1 << 4)
#define XMEDIA_ISP_FOLLOW_BNR (1 << 5)
#define XMEDIA_ISP_FOLLOW_CCM (1 << 6)
#define XMEDIA_ISP_FOLLOW_CDS (1 << 7)
#define XMEDIA_ISP_FOLLOW_CLUT (1 << 8)
#define XMEDIA_ISP_FOLLOW_COMPRESS (1 << 9)
#define XMEDIA_ISP_FOLLOW_CROSSTALK (1 << 10)
#define XMEDIA_ISP_FOLLOW_CSC (1 << 11)
#define XMEDIA_ISP_FOLLOW_CUS (1 << 12)
#define XMEDIA_ISP_FOLLOW_DEHAZE (1 << 13)
#define XMEDIA_ISP_FOLLOW_DGN (1 << 14)
#define XMEDIA_ISP_FOLLOW_DMS (1 << 15)
#define XMEDIA_ISP_FOLLOW_DPC (1 << 16)
#define XMEDIA_ISP_FOLLOW_DRC (1 << 17)
#define XMEDIA_ISP_FOLLOW_EXPANDER (1 << 18)
#define XMEDIA_ISP_FOLLOW_FPN (1 << 19)
#define XMEDIA_ISP_FOLLOW_GAMMA (1 << 20)
#define XMEDIA_ISP_FOLLOW_GCAC (1 << 21)
#define XMEDIA_ISP_FOLLOW_HLC (1 << 22)
#define XMEDIA_ISP_FOLLOW_LCE (1 << 23)
#define XMEDIA_ISP_FOLLOW_MLSC (1 << 24)
#define XMEDIA_ISP_FOLLOW_RC (1 << 25)
#define XMEDIA_ISP_FOLLOW_RGBIR (1 << 26)
#define XMEDIA_ISP_FOLLOW_RLSC (1 << 27)
#define XMEDIA_ISP_FOLLOW_SHARPEN (1 << 28)
#define XMEDIA_ISP_FOLLOW_WDR (1 << 29)
#define XMEDIA_ISP_FOLLOW_CA (1 << 30)
#define XMEDIA_ISP_FOLLOW_SENSOR (1 << 31)
#define XMEDIA_ISP_FOLLOW_ALL 0xFFFFFFFF
typedef struct {
xmedia_isp_work_mode work_mode;
union {
struct {
xmedia_u32 slave_num;
xmedia_u32 slave_pipe[XMEDIA_ISP_SLAVE_PIPE_MAX_NUM];
xmedia_bool blend_stat_enable;
xmedia_bool blend_luma_enable;
} master_mode;
struct {
xmedia_u32 master_pipe; // pipe id depends on master pipe
xmedia_u64 follow_info; // parameters depends on master pipe 1bit represent 1 alg
} slave_mode;
};
} xmedia_isp_mode_config;
typedef struct {
xmedia_video_size size;
xmedia_float fps;
xmedia_video_wdr_mode wdr_mode;
xmedia_video_pixel_format pixel_fmt;
xmedia_video_bayer_format bayer_fmt;
xmedia_isp_mode_config mode_config;
} xmedia_isp_config;
typedef struct {
xmedia_video_size size;
xmedia_float fps;
xmedia_video_wdr_mode wdr_mode;
xmedia_video_bayer_format bayer_fmt;
} xmedia_isp_attr;
typedef struct {
xmedia_u32 proc_interval; // RW;format:32.0; indicate the update frequency of isp proc information
xmedia_u32 stat_interval; // Rw;range:(0,0xffffffff];format:32.0; indicate the time interval of isp stat info
xmedia_u32 int_timeout; // RW;Format:32.0; Indicate the time(unit:ms) of interrupt timeout
} xmedia_isp_ctrl_param;
typedef struct {
xmedia_bool enable;
xmedia_bool available;
xmedia_u8 luma;
} xmedia_isp_smart_roi;
#define XMEDIA_ISP_SMART_CLASS_MAX 2
typedef struct {
xmedia_isp_smart_roi roi[XMEDIA_ISP_SMART_CLASS_MAX];
} xmedia_isp_smart_info;
#define XMEDIA_ISP_BNR_POINT_MAX_COUNT 61
#define XMEDIA_ISP_BNR_CALIB_POINT_MAX_COUNT 5
#define XMEDIA_ISP_BNR_RESI_NOISE_MAX_COUNT 49
#define XMEDIA_ISP_BNR_SQRT_LUT_MAX_COUNT 1025
#define XMEDIA_ISP_BNR_COLOR_NUM_MAX_COUNT 3
#define XMEDIA_ISP_BNR_THD_MAX_COUNT 4
typedef enum {
XMEDIA_ISP_BNR_CENTER_MODE_MIN_VAL = 0,
XMEDIA_ISP_BNR_CENTER_MODE_SMALL_WIN,
XMEDIA_ISP_BNR_CENTER_MODE_BIG_WIN,
XMEDIA_ISP_BNR_CENTER_MODE_MAX_VAL,
XMEDIA_ISP_BNR_CENTER_MODE_MAX
} xmedia_isp_bnr_center_mode;
typedef enum {
XMEDIA_ISP_BNR_CORING_POS_PRE = 0,
XMEDIA_ISP_BNR_CORING_POS_POST,
XMEDIA_ISP_BNR_CORING_POS_MAX
} xmedia_isp_bnr_coring_pos;
typedef enum {
XMEDIA_ISP_BNR_AINR_POS_OFF = 0, // ainr_pre_enable=0 & tnr_ainr_mode=0
XMEDIA_ISP_BNR_AINR_POS_PRE, // ainr_pre_enable=1 & tnr_ainr_mode=0
XMEDIA_ISP_BNR_AINR_POS_POST, // ainr_pre_enable=0 & tnr_ainr_mode=1
XMEDIA_ISP_BNR_AINR_POS_MAX
} xmedia_isp_bnr_ainr_pos;
typedef enum {
XMEDIA_ISP_BNR_TNR_DP_MODE_ZERO = 0,
XMEDIA_ISP_BNR_TNR_DP_MODE_ONE,
XMEDIA_ISP_BNR_TNR_DP_MODE_MAX
} xmedia_isp_bnr_tnr_dp_mode;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 snr_coarse_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u8 snr_coring_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 snr_luma_nr_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_BNR_POINT_MAX_COUNT];
xmedia_isp_bnr_center_mode snr_center_luma_mode[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_isp_bnr_center_mode snr_center_tnr_luma_mode[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u16 snr_wdr_comp_scl[XMEDIA_ISP_ISO_MAX_COUNT];
// Bayer3D param
xmedia_u16 tnr_noise_min[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_bayer_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_md_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_md_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_wgt_min[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_min_ratio[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u16 tnr_mot_bld_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_bld_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_edge_md_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_edge_md_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_flat_md_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_edge_md_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 tnr_md_mode[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_luma_md_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_luma_md_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_dark_md_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_bright_md_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_scl[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_BNR_COLOR_NUM_MAX_COUNT];
xmedia_u16 tnr_var_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_noise_luma_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_noise_luma_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_noise_dark_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_noise_bright_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_dpc_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_convg_thd[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_BNR_THD_MAX_COUNT];
xmedia_u16 tnr_mot_noise_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_mot_noise_scl_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_bool tnr_dpc_en[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_isp_bnr_tnr_dp_mode tnr_dp_mode[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_dp_thd_rb[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_dp_thd_g[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_dp_luma_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_dp_luma_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_dp_thd_low_dark_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_dp_thd_high_dark_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 tnr_luma_ratio[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_BNR_POINT_MAX_COUNT];
xmedia_u16 tnr_wdr_comp_scl[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
} xmedia_isp_bnr_auto_attr;
typedef struct {
xmedia_u16 snr_coarse_str[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u8 snr_coring_wgt;
xmedia_u16 snr_luma_nr_str[XMEDIA_ISP_BNR_POINT_MAX_COUNT];
xmedia_isp_bnr_center_mode snr_center_luma_mode;
xmedia_isp_bnr_center_mode snr_center_tnr_luma_mode;
xmedia_u16 snr_wdr_comp_scl;
// Bayer3D param
xmedia_u16 tnr_noise_min;
xmedia_u16 tnr_bayer_str;
xmedia_u16 tnr_md_thd_low;
xmedia_u16 tnr_md_thd_high;
xmedia_u16 tnr_wgt_min;
xmedia_u16 tnr_min_ratio; // 7605V2
xmedia_u16 tnr_mot_bld_thd_low;
xmedia_u16 tnr_mot_bld_thd_high;
xmedia_u16 tnr_edge_md_thd_low;
xmedia_u16 tnr_edge_md_thd_high;
xmedia_u16 tnr_flat_md_scl;
xmedia_u16 tnr_edge_md_scl;
xmedia_u8 tnr_md_mode;
xmedia_u16 tnr_luma_md_thd_low;
xmedia_u16 tnr_luma_md_thd_high;
xmedia_u16 tnr_dark_md_scl;
xmedia_u16 tnr_bright_md_scl;
xmedia_u16 tnr_mot_scl[XMEDIA_ISP_BNR_COLOR_NUM_MAX_COUNT];
xmedia_u16 tnr_var_scl;
xmedia_u16 tnr_mot_noise_luma_thd_low;
xmedia_u16 tnr_mot_noise_luma_thd_high;
xmedia_u16 tnr_mot_noise_dark_scl;
xmedia_u16 tnr_mot_noise_bright_scl;
xmedia_u16 tnr_mot_dpc_str;
xmedia_u16 tnr_mot_convg_thd[XMEDIA_ISP_BNR_THD_MAX_COUNT];
xmedia_u16 tnr_mot_noise_scl;
xmedia_u16 tnr_mot_noise_scl_high;
xmedia_bool tnr_dpc_en;
xmedia_isp_bnr_tnr_dp_mode tnr_dp_mode;
xmedia_u16 tnr_dp_thd_rb;
xmedia_u16 tnr_dp_thd_g;
xmedia_u16 tnr_dp_luma_thd_low;
xmedia_u16 tnr_dp_luma_thd_high;
xmedia_u16 tnr_dp_thd_low_dark_scl;
xmedia_u16 tnr_dp_thd_high_dark_scl;
xmedia_u16 tnr_luma_ratio[XMEDIA_ISP_BNR_POINT_MAX_COUNT];
xmedia_u16 tnr_wdr_comp_scl;
} xmedia_isp_bnr_manual_attr;
typedef struct {
xmedia_u8 wdr_frame_str[XMEDIA_ISP_WDR_CHN_MAX_NUM];
} xmedia_isp_bnr_wdr_attr;
typedef struct {
xmedia_bool enable;
xmedia_isp_bnr_ainr_pos ainr_pos_switch;
xmedia_isp_bnr_coring_pos coring_pos_switch;
xmedia_bool noise_reserve_enable;
xmedia_u16 noise_reserve_lut[XMEDIA_ISP_BNR_POINT_MAX_COUNT];
xmedia_u32 noise_profile_thd;
xmedia_double noise_profile_coef0[XMEDIA_ISP_BNR_CALIB_POINT_MAX_COUNT]; // low_iso_noise_coef
xmedia_double noise_profile_coef1[XMEDIA_ISP_BNR_CALIB_POINT_MAX_COUNT]; // high_iso_noise_coef
xmedia_bool snr_wdr_comp_en;
xmedia_bool tnr_enable;
xmedia_bool tnr_luma_comp_enable;
xmedia_bool tnr_wdr_comp_enable; // 7605V2
xmedia_video_operation_mode op_type;
xmedia_isp_bnr_auto_attr auto_attr;
xmedia_isp_bnr_manual_attr manual_attr;
xmedia_isp_bnr_wdr_attr wdr;
} xmedia_isp_bnr_attr;
typedef struct {
xmedia_bool enable;
xmedia_u16 luma_thr;
xmedia_u16 luma_target;
} xmedia_isp_hlc_attr;
typedef enum {
XMEDIA_ISP_GAMMA_CURVE_TYPE_DEFAULT = 0,
XMEDIA_ISP_GAMMA_CURVE_TYPE_SRGB,
XMEDIA_ISP_GAMMA_CURVE_TYPE_HDR,
XMEDIA_ISP_GAMMA_CURVE_TYPE_USER_DEFINE,
XMEDIA_ISP_GAMMA_CURVE_TYPE_MAX
} xmedia_isp_gamma_curve_type;
#define XMEDIA_ISP_GAMMA_NODE_NUM 1025
typedef struct {
xmedia_u16 table[XMEDIA_ISP_GAMMA_NODE_NUM];
} xmedia_isp_gamma_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 table[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_GAMMA_NODE_NUM];
} xmedia_isp_gamma_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_isp_gamma_curve_type curve_type;
xmedia_video_operation_mode op_type;
xmedia_isp_gamma_manual_attr manual_attr;
xmedia_isp_gamma_auto_attr auto_attr;
} xmedia_isp_gamma_attr;
#define XMEDIA_ISP_DRC_TM_VALUE_NUM 1024
#define XMEDIA_ISP_DRC_TM_POS_NUM 3
typedef struct {
xmedia_u8 asymmetry;
xmedia_u8 second_pole;
xmedia_u8 stretch;
xmedia_u8 compress;
} xmedia_isp_asymmetry_curve_attr;
typedef struct {
xmedia_u16 range_fil_coef;
xmedia_u16 spatial_fil_coef;
xmedia_u8 dering_thd;
xmedia_u8 dering_coarse_str;
xmedia_u16 dering_fine_str;
xmedia_u8 mixing_bright_min;
xmedia_u8 mixing_bright_max;
xmedia_u16 mixing_bright_thd_low;
xmedia_u16 mixing_bright_thd_high;
xmedia_u8 mixing_dark_min;
xmedia_u8 mixing_dark_max;
xmedia_u16 mixing_dark_thd_low;
xmedia_u16 mixing_dark_thd_high;
xmedia_u8 ltmc_str;
xmedia_u16 drc_str;
xmedia_isp_asymmetry_curve_attr asymmetry_curve;
xmedia_isp_asymmetry_curve_attr asymmetry_max_curve;
xmedia_u16 tm_value_user[XMEDIA_ISP_DRC_TM_VALUE_NUM];
xmedia_u8 tm_value_max_user[XMEDIA_ISP_DRC_TM_VALUE_NUM];
} xmedia_isp_drc_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 range_fil_coef[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 spatial_fil_coef[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 dering_thd[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 dering_coarse_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 dering_fine_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 mixing_bright_min[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 mixing_bright_max[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 mixing_bright_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 mixing_bright_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 mixing_dark_min[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 mixing_dark_max[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 mixing_dark_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 mixing_dark_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 ltmc_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 drc_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 ratio_num;
xmedia_u16 ratio_level[XMEDIA_ISP_EXP_RATIO_MAX_COUNT];
xmedia_isp_asymmetry_curve_attr asymmetry_curve[XMEDIA_ISP_EXP_RATIO_MAX_COUNT];
xmedia_isp_asymmetry_curve_attr asymmetry_max_curve[XMEDIA_ISP_EXP_RATIO_MAX_COUNT];
xmedia_u16 tm_value_user[XMEDIA_ISP_EXP_RATIO_MAX_COUNT][XMEDIA_ISP_DRC_TM_VALUE_NUM];
xmedia_u8 tm_value_max_user[XMEDIA_ISP_EXP_RATIO_MAX_COUNT][XMEDIA_ISP_DRC_TM_VALUE_NUM];
} xmedia_isp_drc_auto_attr;
typedef enum {
XMEDIA_ISP_DRC_TM_TYPE_ASYMMETRY = 0,
XMEDIA_ISP_DRC_TM_TYPE_USER_DEFINE,
XMEDIA_ISP_DRC_TM_TYPE_MAX
} xmedia_isp_drc_tm_type;
typedef struct {
xmedia_bool drc_en;
xmedia_bool ltmc_en;
xmedia_bool dering_en;
xmedia_bool detail_enhance_en;
xmedia_isp_drc_tm_type tm_type;
xmedia_video_operation_mode op_type;
xmedia_isp_drc_manual_attr manual_attr;
xmedia_isp_drc_auto_attr auto_attr;
} xmedia_isp_drc_attr;
#define XMEDIA_ISP_EXPANDER_POINT_NUM 257
#define XMEDIA_ISP_EXPANDER_KNEE_POINT_NUM (XMEDIA_ISP_EXPANDER_POINT_NUM - 1)
typedef struct {
xmedia_bool enable;
xmedia_u8 bit_depth_in;
xmedia_u8 bit_depth_out;
xmedia_u16 knee_point_num;
xmedia_video_point knee_point_coord[XMEDIA_ISP_EXPANDER_KNEE_POINT_NUM];
} xmedia_isp_expander_attr;
#define XMEDIA_ISP_CT_MAX_COUNT 16
typedef struct {
xmedia_bool enable;
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 mesh_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 ct_num;
xmedia_u16 ct_level[XMEDIA_ISP_CT_MAX_COUNT];
xmedia_u16 blend_ratio[XMEDIA_ISP_CT_MAX_COUNT];
} xmedia_isp_mesh_shading_attr;
#define XMEDIA_ISP_LSC_GRID_POINTS (33 * 33)
typedef struct {
xmedia_u16 rgain[XMEDIA_ISP_LSC_GRID_POINTS];
xmedia_u16 grgain[XMEDIA_ISP_LSC_GRID_POINTS];
xmedia_u16 gbgain[XMEDIA_ISP_LSC_GRID_POINTS];
xmedia_u16 bgain[XMEDIA_ISP_LSC_GRID_POINTS];
} xmedia_isp_shading_gain_lut;
#define XMEDIA_ISP_LSC_GRID_COL 33
#define XMEDIA_ISP_LSC_GRID_ROW 33
#define XMEDIA_ISP_LSC_GAIN_LUT_NUM 2
typedef struct {
xmedia_u8 mesh_scale;
xmedia_u16 xgrid_width[(XMEDIA_ISP_LSC_GRID_COL - 1) / 2];
xmedia_u16 ygrid_width[(XMEDIA_ISP_LSC_GRID_ROW - 1) / 2];
xmedia_isp_shading_gain_lut lsc_gain_lut[XMEDIA_ISP_LSC_GAIN_LUT_NUM];
} xmedia_isp_mesh_shading_lut_attr;
typedef enum {
XMEDIA_ISP_STATIC_DPC_TYPE_BRIGHT = 0,
XMEDIA_ISP_STATIC_DPC_TYPE_DARK,
XMEDIA_ISP_STATIC_DPC_TYPE_MAX
} xmedia_isp_static_dpc_type;
typedef enum {
XMEDIA_ISP_DPC_STATUS_INIT = 0,
XMEDIA_ISP_DPC_STATUS_PROCESS,
XMEDIA_ISP_DPC_STATUS_SUCCESS,
XMEDIA_ISP_DPC_STATUS_TIMEOUT,
XMEDIA_ISP_DPC_STATUS_MAX
} xmedia_isp_dpc_status;
#define XMEDIA_ISP_STATIC_DPC_COUNT_MAX 4096
typedef struct {
xmedia_bool enable_detect;
xmedia_isp_static_dpc_type static_dpc_type;
xmedia_u8 start_thd;
xmedia_u16 count_max;
xmedia_u16 count_min;
xmedia_u16 time_limit;
xmedia_u32 table[XMEDIA_ISP_STATIC_DPC_COUNT_MAX];
xmedia_u8 finish_thd;
xmedia_u16 count;
xmedia_isp_dpc_status status;
} xmedia_isp_dpc_static_calibrate;
typedef struct {
xmedia_bool enable;
xmedia_bool pd_enable; // correct pd pixel enable
xmedia_u16 bright_count;
xmedia_u16 dark_count;
xmedia_u32 bright_table[XMEDIA_ISP_STATIC_DPC_COUNT_MAX];
xmedia_u32 dark_table[XMEDIA_ISP_STATIC_DPC_COUNT_MAX];
xmedia_bool show;
} xmedia_isp_dpc_static_attr;
typedef struct {
xmedia_u16 str;
xmedia_u16 thd;
xmedia_u16 slope;
xmedia_u16 bright_thd;
xmedia_u8 bright_bias;
xmedia_u16 dark_thd;
xmedia_u8 dark_bias;
} xmedia_isp_dpc_dynamic_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 thd[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 slope[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 bright_thd[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 bright_bias[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 dark_thd[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 dark_bias[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_dpc_dynamic_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_bool sup_twinkle_en;
xmedia_s8 soft_thd;
xmedia_u8 soft_slope;
xmedia_video_operation_mode op_type;
xmedia_isp_dpc_dynamic_manual_attr manual_attr;
xmedia_isp_dpc_dynamic_auto_attr auto_attr;
} xmedia_isp_dpc_dynamic_attr;
#define XMEDIA_ISP_PD_BLOCK_MAX_NUM 128
typedef struct {
xmedia_u16 pd_start_row;
xmedia_u16 pd_start_col;
xmedia_u16 pd_zone_height;
xmedia_u16 pd_zone_width;
xmedia_u16 pd_block_width;
xmedia_u16 pd_block_height;
xmedia_u16 pd_block_pixel_num;
xmedia_u8 pd_block_row[XMEDIA_ISP_PD_BLOCK_MAX_NUM];
xmedia_u8 pd_block_col[XMEDIA_ISP_PD_BLOCK_MAX_NUM];
} xmedia_isp_pd_struct_info;
typedef struct {
xmedia_u8 slope;
xmedia_u16 threshold;
xmedia_u16 np_offset;
} xmedia_isp_cr_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 slope[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 threshold[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 np_offset[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_cr_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_video_operation_mode op_type;
xmedia_isp_cr_manual_attr manual_attr;
xmedia_isp_cr_auto_attr auto_attr;
} xmedia_isp_cr_attr;
#define XMEDIA_ISP_DEHAZE_LUT_NUM 256
#define XMEDIA_ISP_DEHAZE_MAP_LENGTH 17
#define XMEDIA_ISP_DAIN_MAP_NUM 384
typedef struct {
xmedia_u8 strength;
xmedia_u16 bmap_curve[XMEDIA_ISP_DEHAZE_MAP_LENGTH];
xmedia_u16 dmap_curve[XMEDIA_ISP_DEHAZE_MAP_LENGTH];
} xmedia_isp_dehaze_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 strength[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 bmap_curve[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_DEHAZE_MAP_LENGTH];
xmedia_u16 dmap_curve[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_DEHAZE_MAP_LENGTH];
} xmedia_isp_dehaze_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_bool userlut_enable;
xmedia_u8 dehaze_lut[XMEDIA_ISP_DEHAZE_LUT_NUM];
xmedia_video_operation_mode op_type;
xmedia_isp_dehaze_manual_attr manual_attr;
xmedia_isp_dehaze_auto_attr auto_attr;
xmedia_u16 temporal_incr_coef;
xmedia_u16 temporal_decr_coef;
} xmedia_isp_dehaze_attr;
typedef struct {
xmedia_u8 mf_de_str;
xmedia_u8 mf_de_osh_str;
xmedia_u8 mf_de_ush_str;
xmedia_u8 hf_de_str;
xmedia_u8 hf_smooth_range;
xmedia_u16 detail_smooth_str;
xmedia_u8 detail_mf_de_bias;
xmedia_u8 detail_hf_de_bias;
} xmedia_isp_demosaic_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 mf_de_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 mf_de_osh_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 mf_de_ush_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 hf_de_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 hf_smooth_range[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 detail_smooth_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 detail_mf_de_bias[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 detail_hf_de_bias[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_demosaic_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_video_operation_mode op_type;
xmedia_isp_demosaic_auto_attr auto_attr;
xmedia_isp_demosaic_manual_attr manual_attr;
} xmedia_isp_demosaic_attr;
typedef struct {
xmedia_u16 black_level[XMEDIA_ISP_BAYER_PATTERN_NUM];
} xmedia_isp_blc_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 black_level[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_BAYER_PATTERN_NUM];
} xmedia_isp_blc_auto_attr;
typedef struct {
xmedia_video_operation_mode op_type;
xmedia_isp_blc_manual_attr manual_attr;
xmedia_isp_blc_auto_attr auto_attr;
} xmedia_isp_blc_attr;
typedef struct {
xmedia_u32 frame_num;
xmedia_u32 offset;
xmedia_video_frame_info fpn_frame;
} xmedia_isp_fpn_calibrate_attr;
typedef struct {
xmedia_bool enable;
xmedia_video_frame_info fpn_frm_info;
} xmedia_isp_fpn_attr;
typedef struct {
xmedia_bool enable;
xmedia_u16 ver_coord;
xmedia_u16 hor_coord;
xmedia_s16 param_red_a;
xmedia_s16 param_red_b;
xmedia_s16 param_red_c;
xmedia_s16 param_blue_a;
xmedia_s16 param_blue_b;
xmedia_s16 param_blue_c;
xmedia_u8 ver_norm_shift;
xmedia_u8 ver_norm_factor;
xmedia_u8 hor_norm_shift;
xmedia_u8 hor_norm_factor;
xmedia_u16 cor_var_thd;
} xmedia_isp_gcac_attr;
typedef struct {
xmedia_s16 purple_upper_limit;
xmedia_s16 purple_lower_limit;
xmedia_u8 edge_thd;
xmedia_u8 de_purple_cr_str;
xmedia_u8 de_purple_cb_str;
xmedia_u8 luma_thd_high;
xmedia_u8 luma_thd_low;
xmedia_u8 luma_str_high;
xmedia_u8 luma_str_low;
} xmedia_isp_lcac_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_s16 purple_upper_limit[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_s16 purple_lower_limit[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 edge_thd[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 de_purple_cr_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 de_purple_cb_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 luma_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 luma_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 luma_str_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 luma_str_low[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_lcac_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_video_operation_mode op_type;
xmedia_isp_lcac_auto_attr auto_attr;
xmedia_isp_lcac_manual_attr manual_attr;
} xmedia_isp_lcac_attr;
typedef struct {
xmedia_u8 edge_thd; // 去伪彩阈值
xmedia_u8 edge_gain; // 去伪彩边缘增益
xmedia_u8 fcr_str; // 去伪彩强度
xmedia_u8 sat_low; // 去伪彩饱和度低阈值
xmedia_u8 sat_high; // 去伪彩饱和度高阈值
} xmedia_isp_anti_false_color_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 edge_thd[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 edge_gain[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 fcr_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 sat_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 sat_high[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_anti_false_color_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_video_operation_mode op_type;
xmedia_isp_anti_false_color_auto_attr auto_attr;
xmedia_isp_anti_false_color_manual_attr manual_attr;
} xmedia_isp_anti_false_color_attr;
typedef struct {
xmedia_u8 md_thd_slope_gain;
xmedia_u16 md_thd_hig_gain;
} xmedia_isp_wdr_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 md_thd_slope_gain[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 md_thd_hig_gain[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_wdr_auto_attr;
typedef enum {
XMEDIA_ISP_MOT_MERGE_MODE_SHORT = 0,
XMEDIA_ISP_MOT_MERGE_MODE_LONG,
XMEDIA_ISP_MOT_MERGE_MODE_MAX
} xmedia_isp_wdr_mot_merge_mode;
typedef struct {
xmedia_isp_wdr_mot_merge_mode mot_merge_mode;
xmedia_bool mot_merge_short_ref_en;
xmedia_bool short_expo_chk;
xmedia_u16 short_check_thd;
xmedia_bool md_ref_flicker;
xmedia_u8 md_slope;
xmedia_u8 md_full_thd;
xmedia_u8 md_long_blend;
xmedia_video_operation_mode op_type;
xmedia_isp_wdr_manual_attr manual_attr;
xmedia_isp_wdr_auto_attr auto_attr;
xmedia_bool short_to_long_en;
xmedia_u16 short_to_long_short_thd;
xmedia_u16 short_to_long_short_slope;
xmedia_u16 short_to_long_long_thd;
xmedia_u8 short_to_long_rb_shift_mode;
xmedia_s16 short_to_long_red_shift;
xmedia_s16 short_to_long_blue_shift;
xmedia_u16 short_to_long_wb_gain_r;
xmedia_u16 short_to_long_wb_gain_b;
xmedia_u16 short_to_long_wb_gain_thd;
} xmedia_isp_wdr_mdt_attr;
typedef struct {
xmedia_bool dgn_ref_bypass;
xmedia_bool motion_comp;
xmedia_u16 short_thd;
xmedia_u16 long_thd;
xmedia_u8 force_long;
xmedia_bool ce_force_long_en;
xmedia_u16 ce_force_long_slope;
xmedia_u16 ce_force_long_hig_thd;
xmedia_isp_wdr_mdt_attr wdr_mdt;
} xmedia_isp_wdr_combine_attr;
typedef enum {
XMEDIA_ISP_WDR_WBGAIN_POSITION_IN_DG1 = 0,
XMEDIA_ISP_WDR_WBGAIN_POSITION_IN_WB,
XMEDIA_ISP_WDR_WBGAIN_POSITION_MAX
} xmedia_isp_wdr_wbgain_position;
typedef struct {
xmedia_bool enable;
xmedia_isp_wdr_wbgain_position wdr_wbgain_position;
xmedia_isp_wdr_combine_attr wdr_combine;
} xmedia_isp_wdr_attr;
#define XMEDIA_ISP_LCE_CONTRAST_SLOPE_NUM 2
#define XMEDIA_ISP_LCE_FLAT_FILTER_SIZE 9
#define XMEDIA_ISP_LCE_MAX_CURVE_POINT_NUM 33
#define XMEDIA_ISP_LCE_CONTRAST_BWLE_NUM 2
typedef struct {
xmedia_u8 contrast_str;
xmedia_s8 contrast_blc_slope[XMEDIA_ISP_LCE_CONTRAST_SLOPE_NUM];
xmedia_s8 contrast_wht_slope[XMEDIA_ISP_LCE_CONTRAST_SLOPE_NUM];
xmedia_u8 blending_fmax;
xmedia_u16 blending_sigma_div;
xmedia_u8 blending_mean;
xmedia_u8 blending_blc_str;
xmedia_u8 blending_blc_value;
xmedia_u8 blending_wht_str;
xmedia_u8 blending_wht_value;
xmedia_u16 black_luma_expand[XMEDIA_ISP_LCE_CONTRAST_BWLE_NUM];
xmedia_u16 white_luma_expand[XMEDIA_ISP_LCE_CONTRAST_BWLE_NUM];
xmedia_u16 flat_denoise_thd;
xmedia_u16 flat_denoise_str;
xmedia_u8 flat_filter_str[XMEDIA_ISP_LCE_FLAT_FILTER_SIZE];
xmedia_u8 halo_str;
xmedia_u8 temporal_incr_coef;
xmedia_u8 temporal_decr_coef;
} xmedia_isp_lce_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 contrast_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_s8 contrast_blc_slope[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_LCE_CONTRAST_SLOPE_NUM];
xmedia_s8 contrast_wht_slope[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_LCE_CONTRAST_SLOPE_NUM];
xmedia_u8 blending_fmax[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blending_sigma_div[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blending_mean[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blending_blc_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blending_blc_value[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blending_wht_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blending_wht_value[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 black_luma_expand[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_LCE_CONTRAST_BWLE_NUM];
xmedia_u16 white_luma_expand[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_LCE_CONTRAST_BWLE_NUM];
xmedia_u16 flat_denoise_thd[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 flat_denoise_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 flat_filter_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_LCE_FLAT_FILTER_SIZE];
xmedia_u8 halo_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 temporal_incr_coef[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 temporal_decr_coef[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_lce_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_video_operation_mode op_type;
xmedia_bool input_di_mode_en;
xmedia_bool output_di_mode_en;
xmedia_isp_lce_manual_attr manual_attr;
xmedia_isp_lce_auto_attr auto_attr;
} xmedia_isp_lce_attr;
typedef struct {
xmedia_u16 blending_weight_curve[XMEDIA_ISP_LCE_MAX_CURVE_POINT_NUM];
} xmedia_isp_lce_info;
#define XMEDIA_ISP_CA_HSL_HUE_NUM 24
#define XMEDIA_ISP_CA_HSL_LIGHT_NUM 33
#define XMEDIA_ISP_CA_YUV_SAT_NUM 33
typedef struct {
xmedia_u8 sat_str;
xmedia_u16 sat_by_y[XMEDIA_ISP_CA_YUV_SAT_NUM];
xmedia_u16 sat_by_c[XMEDIA_ISP_CA_YUV_SAT_NUM];
} xmedia_isp_ca_yuv_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 sat_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 sat_by_y[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_CA_YUV_SAT_NUM];
xmedia_u16 sat_by_c[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_CA_YUV_SAT_NUM];
} xmedia_isp_ca_yuv_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_video_operation_mode op_type;
xmedia_isp_ca_yuv_manual_attr manual_attr;
xmedia_isp_ca_yuv_auto_attr auto_attr;
} xmedia_isp_ca_attr;
typedef struct {
xmedia_s32 x;
xmedia_s32 y;
} xmedia_isp_rc_point;
typedef struct {
xmedia_bool enable;
xmedia_isp_rc_point center_coor;
xmedia_u32 radius;
} xmedia_isp_rc_attr;
typedef enum {
XMEDIA_ISP_CSC_COLOR_GAMUT_BT601 = 0,
XMEDIA_ISP_CSC_COLOR_GAMUT_BT709,
XMEDIA_ISP_CSC_COLOR_GAMUT_BT2020,
XMEDIA_ISP_CSC_COLOR_GAMUT_USER,
XMEDIA_ISP_CSC_COLOR_GAMUT_MAX
} xmedia_isp_csc_color_gamut;
#define XMEDIA_ISP_CSC_INPUT_DC_NUM 3
#define XMEDIA_ISP_CSC_OUTPUT_DC_NUM 3
#define XMEDIA_ISP_CSC_MATRIX_SIZE 9
typedef struct {
xmedia_s16 csc_idc[XMEDIA_ISP_CSC_INPUT_DC_NUM];
xmedia_s16 csc_odc[XMEDIA_ISP_CSC_OUTPUT_DC_NUM];
xmedia_s16 csc_coef[XMEDIA_ISP_CSC_MATRIX_SIZE];
} xmedia_isp_csc_matrix;
typedef struct {
xmedia_bool enable;
xmedia_isp_csc_color_gamut color_gamut;
xmedia_u8 hue;
xmedia_u8 luma;
xmedia_u8 contrast;
xmedia_u8 saturation;
xmedia_bool limited_range_en;
xmedia_bool ext_csc_en;
xmedia_bool ct_mode_en;
xmedia_isp_csc_matrix csc_matrix;
} xmedia_isp_csc_attr;
typedef struct {
xmedia_bool enable;
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 hue[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 luma[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 contrast[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 saturation[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_csc_ex_attr;
#define XMEDIA_ISP_CLUT_LUT_LENGTH (4913 * 3)
#define XMEDIA_ISP_CLUT_CT_MAX_COUNT 3
typedef struct {
xmedia_u16 lut[XMEDIA_ISP_CLUT_LUT_LENGTH];
} xmedia_isp_clut_manual_attr;
typedef struct {
xmedia_u8 ct_num;
xmedia_u16 ct_level[XMEDIA_ISP_CLUT_CT_MAX_COUNT];
xmedia_u16 lut[XMEDIA_ISP_CLUT_CT_MAX_COUNT][XMEDIA_ISP_CLUT_LUT_LENGTH];
} xmedia_isp_clut_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_video_operation_mode op_type;
xmedia_isp_clut_manual_attr manual_attr;
xmedia_isp_clut_auto_attr auto_attr;
} xmedia_isp_clut_attr;
typedef struct {
xmedia_bool enable;
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 radial_str[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_radial_shading_attr;
#define XMEDIA_ISP_RLSC_POINTS 129
typedef struct {
xmedia_u16 wb_rgain;
xmedia_u16 wb_grgain;
xmedia_u16 wb_gbgain;
xmedia_u16 wb_bgain;
xmedia_u16 r_gain[XMEDIA_ISP_RLSC_POINTS];
xmedia_u16 gr_gain[XMEDIA_ISP_RLSC_POINTS];
xmedia_u16 gb_gain[XMEDIA_ISP_RLSC_POINTS];
xmedia_u16 b_gain[XMEDIA_ISP_RLSC_POINTS];
} xmedia_isp_radial_shading_gain_lut;
#define XMEDIA_ISP_RLSC_GAIN_LUT_NUM 3
typedef struct {
xmedia_video_operation_mode light_mode;
xmedia_u16 blend_ratio;
xmedia_u8 light_type1;
xmedia_u8 light_type2;
xmedia_u8 radial_scale;
xmedia_u16 center_r_x;
xmedia_u16 center_r_y;
xmedia_u16 center_gr_x;
xmedia_u16 center_gr_y;
xmedia_u16 center_gb_x;
xmedia_u16 center_gb_y;
xmedia_u16 center_b_x;
xmedia_u16 center_b_y;
xmedia_u16 off_center_r;
xmedia_u16 off_center_gr;
xmedia_u16 off_center_gb;
xmedia_u16 off_center_b;
xmedia_isp_radial_shading_gain_lut r_lsc_gain_lut[XMEDIA_ISP_RLSC_GAIN_LUT_NUM];
} xmedia_isp_radial_shading_lut_attr;
typedef enum {
XMEDIA_ISP_IRBAYER_FORMAT_GRGBI = 0,
XMEDIA_ISP_IRBAYER_FORMAT_RGBGI,
XMEDIA_ISP_IRBAYER_FORMAT_GBGRI,
XMEDIA_ISP_IRBAYER_FORMAT_BGRGI,
XMEDIA_ISP_IRBAYER_FORMAT_IGRGB,
XMEDIA_ISP_IRBAYER_FORMAT_IRGBG,
XMEDIA_ISP_IRBAYER_FORMAT_IBGRG,
XMEDIA_ISP_IRBAYER_FORMAT_IGBGR,
XMEDIA_ISP_IRBAYER_FORMAT_MAX
} xmedia_isp_irbayer_format;
typedef enum {
XMEDIA_ISP_IR_CVTMAT_MODE_NORMAL = 0,
XMEDIA_ISP_IR_CVTMAT_MODE_MONO,
XMEDIA_ISP_IR_CVTMAT_MODE_USER,
XMEDIA_ISP_IR_CVTMAT_MODE_MAX
} xmedia_isp_ir_cvtmat_mode;
#define XMEDIA_ISP_EXP_CTRL_NUM 2
#define XMEDIA_ISP_CVTMAT_NUM 12
typedef struct {
xmedia_bool enable;
xmedia_isp_irbayer_format in_pattern;
xmedia_video_bayer_format out_pattern;
xmedia_u16 exp_ctrl[XMEDIA_ISP_EXP_CTRL_NUM];
xmedia_u16 gain[XMEDIA_ISP_EXP_CTRL_NUM];
xmedia_isp_ir_cvtmat_mode ir_cvt_mat_mode;
xmedia_s16 cvt_matrix[XMEDIA_ISP_CVTMAT_NUM];
} xmedia_isp_rgbir_attr;
typedef enum {
XMEDIA_ISP_AE_SWITCH_AFTER_DGN2 = 0,
XMEDIA_ISP_AE_SWITCH_AFTER_DGN3,
XMEDIA_ISP_AE_SWITCH_AFTER_DRC,
XMEDIA_ISP_AE_SWITCH_AFTER_MAX,
} xmedia_isp_ae_switch;
typedef enum {
XMEDIA_ISP_AE_STAT_MODE_NORMAL = 0,
XMEDIA_ISP_AE_STAT_MODE_ROOT,
XMEDIA_ISP_AE_STAT_MODE_MAX,
} xmedia_isp_ae_stat_mode;
typedef enum {
XMEDIA_ISP_AE_HIST_OFFSET_ONE = 0, // 从第一行/列开始统计
XMEDIA_ISP_AE_HIST_OFFSET_TWO, // 从第二行/列开始统计
XMEDIA_ISP_AE_HIST_OFFSET_MAX,
} xmedia_isp_ae_hist_offset;
typedef enum {
XMEDIA_ISP_AE_HIST_SKIP_EVERY_PIXEL = 0,
XMEDIA_ISP_AE_HIST_SKIP_EVERY_2ND_PIXEL,
XMEDIA_ISP_AE_HIST_SKIP_EVERY_3RD_PIXEL,
XMEDIA_ISP_AE_HIST_SKIP_EVERY_4TH_PIXEL,
XMEDIA_ISP_AE_HIST_SKIP_EVERY_5TH_PIXEL,
XMEDIA_ISP_AE_HIST_SKIP_EVERY_8TH_PIXEL,
XMEDIA_ISP_AE_HIST_SKIP_EVERY_9TH_PIXEL,
XMEDIA_ISP_AE_HIST_SKIP_MAX,
} xmedia_isp_ae_hist_skip;
typedef struct {
xmedia_isp_ae_hist_skip hist_skip_x;
xmedia_isp_ae_hist_skip hist_skip_y;
xmedia_isp_ae_hist_offset hist_offset_x;
xmedia_isp_ae_hist_offset hist_offset_y;
} xmedia_isp_ae_hist_config;
typedef enum {
XMEDIA_ISP_AE_SINGLE_COLOR_BIN_R = 0,
XMEDIA_ISP_AE_SINGLE_COLOR_BIN_GR,
XMEDIA_ISP_AE_SINGLE_COLOR_BIN_B,
XMEDIA_ISP_AE_SINGLE_COLOR_BIN_GB,
XMEDIA_ISP_AE_SINGLE_COLOR_BIN_MAX,
} xmedia_isp_ae_single_color_bin;
typedef enum {
XMEDIA_ISP_AE_HIST_FOUR_MODE_EVERY_COLOR = 0,
XMEDIA_ISP_AE_HIST_FOUR_MODE_SINGLE_COLOR,
XMEDIA_ISP_AE_HIST_FOUR_MODE_FOUR_PLANE,
XMEDIA_ISP_AE_HIST_FOUR_MODE_MAX,
} xmedia_isp_ae_hist_four_mode;
typedef enum {
XMEDIA_ISP_AE_HIST_MODE_NO_WEIGHT = 1,
XMEDIA_ISP_AE_HIST_MODE_WEIGHT,
XMEDIA_ISP_AE_HIST_MODE_MAX,
} xmedia_isp_ae_hist_mode;
typedef struct {
xmedia_bool enable;
xmedia_u16 x;
xmedia_u16 y;
xmedia_u16 w;
xmedia_u16 h;
} xmedia_isp_ae_crop;
typedef struct {
xmedia_bool global_avg_en;
xmedia_bool zone_avg_en;
xmedia_bool hist_en;
xmedia_isp_ae_switch pos_switch;
xmedia_isp_ae_hist_mode hist_mode;
xmedia_isp_ae_hist_four_mode hist_four_mode;
xmedia_isp_ae_hist_config hist_config;
xmedia_isp_ae_single_color_bin single_color_bin;
xmedia_isp_ae_stat_mode hist_root_mode;
xmedia_isp_ae_stat_mode aver_root_mode;
xmedia_isp_ae_crop crop;
xmedia_u16 h_zone_num;
xmedia_u16 v_zone_num;
xmedia_u8 weight[XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AE_ZONE_COL_MAX_NUM];
} xmedia_isp_ae_stat_cfg;
typedef struct {
xmedia_isp_ae_stat_cfg fe_cfg;
xmedia_isp_ae_stat_cfg be_cfg;
} xmedia_isp_ae_statistics_cfg;
typedef enum {
XMEDIA_ISP_AWB_SWITCH_AFTER_EXPANDER = 0,
XMEDIA_ISP_AWB_SWITCH_AFTER_DG2,
XMEDIA_ISP_AWB_SWITCH_AFTER_DRC,
XMEDIA_ISP_AWB_SWITCH_AFTER_MAX,
} xmedia_isp_awb_switch;
typedef struct {
xmedia_bool enable;
xmedia_u16 x;
xmedia_u16 y;
xmedia_u16 w;
xmedia_u16 h;
} xmedia_isp_awb_crop;
#define XMEDIA_ISP_AWB_PSEUDO_WEIGHT_NUM 4
typedef struct {
xmedia_bool global_avg_en;
xmedia_bool zone_avg_en;
xmedia_isp_awb_switch pos_switch;
xmedia_u16 h_zone_num;
xmedia_u16 v_zone_num;
xmedia_u16 white_level;
xmedia_u16 black_level;
xmedia_u16 cb_max;
xmedia_u16 cb_min;
xmedia_u16 cr_max;
xmedia_u16 cr_min;
xmedia_isp_awb_crop crop;
xmedia_u8 pseudo_wgt[XMEDIA_ISP_AWB_PSEUDO_WEIGHT_NUM];
} xmedia_isp_awb_statistics_cfg;
typedef enum {
XMEDIA_ISP_AF_AFTER_DGN2 = 0,
XMEDIA_ISP_AF_AFTER_DRC,
XMEDIA_ISP_AF_AFTER_CSC,
XMEDIA_ISP_AF_AFTER_MAX,
} xmedia_isp_af_switch;
typedef struct {
xmedia_bool enable;
xmedia_u16 x;
xmedia_u16 y;
xmedia_u16 w;
xmedia_u16 h;
} xmedia_isp_af_crop;
#define XMEDIA_ISP_AF_TONE_CURVE_NUM 32
typedef struct {
xmedia_u16 tone_curve[XMEDIA_ISP_AF_TONE_CURVE_NUM];
} xmedia_isp_af_raw_cfg;
typedef enum {
XMEDIA_ISP_AF_FILTER_MODE_NORM = 0,
XMEDIA_ISP_AF_FILTER_MODE_PEAK,
XMEDIA_ISP_AF_FILTER_MODE_MAX,
} xmedia_isp_af_filter_mode;
#define XMEDIA_ISP_AF_GAIN_CURVE_NUM 16
typedef struct {
xmedia_u8 gain_curve[XMEDIA_ISP_AF_GAIN_CURVE_NUM];
} xmedia_isp_af_ld;
typedef struct {
xmedia_s16 coring_en;
xmedia_s16 coring_th;
xmedia_s16 coring_slp;
xmedia_s16 coring_lmt;
} xmedia_isp_af_coring;
#define XMEDIA_ISP_AF_IIR_EN_NUM 3
#define XMEDIA_ISP_AF_IIR_GAIN_NUM 4
#define XMEDIA_ISP_AF_IIR_FORWARD_COEF_NUM 9
#define XMEDIA_ISP_AF_IIR_BACKWARD_COEF_NUM 6
typedef struct {
xmedia_bool iir_en[XMEDIA_ISP_AF_IIR_EN_NUM];
xmedia_s16 bias_offset;
xmedia_u16 min_thd;
xmedia_s16 iir_gain[XMEDIA_ISP_AF_IIR_GAIN_NUM];
xmedia_s16 forward_coeff[XMEDIA_ISP_AF_IIR_FORWARD_COEF_NUM];
xmedia_s16 backward_coeff[XMEDIA_ISP_AF_IIR_BACKWARD_COEF_NUM];
xmedia_isp_af_filter_mode filter_mode;
xmedia_isp_af_coring coring;
xmedia_isp_af_ld ld;
} xmedia_isp_af_h_param;
#define XMEDIA_ISP_AF_FILTER_WEIGHT_NUM 2
typedef struct {
xmedia_bool pdaf_stat_en;
xmedia_bool cdaf_stat_en;
xmedia_isp_af_switch pos_switch;
xmedia_u16 h_zone_num;
xmedia_u16 v_zone_num;
xmedia_u16 h_size;
xmedia_u16 v_size;
xmedia_u16 hlt_thd;
xmedia_u8 h_iir_wgt[XMEDIA_ISP_AF_FILTER_WEIGHT_NUM];
xmedia_u8 v_fir_wgt[XMEDIA_ISP_AF_FILTER_WEIGHT_NUM];
xmedia_s16 pre_filter_en;
xmedia_isp_af_crop crop;
xmedia_isp_af_raw_cfg raw_cfg;
} xmedia_isp_af_cfg;
#define XMEDIA_ISP_AF_FIR_GAIN_NUM 3
typedef struct {
xmedia_u16 min_thd;
xmedia_s8 fir_gain[XMEDIA_ISP_AF_FIR_GAIN_NUM];
xmedia_isp_af_coring coring;
xmedia_isp_af_ld ld;
} xmedia_isp_af_v_param;
typedef struct {
xmedia_u16 shift_y;
xmedia_u16 shift_fv1;
xmedia_u16 shift_fv2;
xmedia_u16 shift_hlt_cnt;
} xmedia_isp_fv_param;
typedef struct {
xmedia_isp_af_cfg config;
xmedia_isp_af_h_param h_filter0;
xmedia_isp_af_h_param h_filter1;
xmedia_isp_af_v_param v_filter0;
xmedia_isp_af_v_param v_filter1;
xmedia_isp_fv_param fv_param;
} xmedia_isp_af_statistics_cfg;
typedef struct {
xmedia_isp_ae_statistics_cfg ae_cfg;
xmedia_isp_awb_statistics_cfg awb_cfg;
xmedia_isp_af_statistics_cfg af_cfg;
} xmedia_isp_statistics_cfg;
typedef struct {
xmedia_u16 grid_y_pos[XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM + 1]; // AE 统计信息 Y 方向坐标值
xmedia_u16 grid_x_pos[XMEDIA_ISP_AE_ZONE_COL_MAX_NUM + 1]; // AE 统计信息 X 方向坐标值
xmedia_u8 status; // AE 统计信息坐标更新状态
} xmedia_isp_ae_grid_info;
typedef struct {
xmedia_u32 fe_zone_avg[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AE_ZONE_COL_MAX_NUM]
[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u32 fe_global_avg[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u32 fe_hist_value[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AE_HIST_NUM];
xmedia_u32 be_zone_avg[XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AE_ZONE_COL_MAX_NUM]
[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u32 be_global_avg[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u32 be_hist_value[XMEDIA_ISP_AE_HIST_NUM];
xmedia_u32 fe_hist_weight_pixel_num[XMEDIA_ISP_WDR_CHN_MAX_NUM];
xmedia_u32 be_hist_weight_pixel_num;
xmedia_isp_ae_grid_info fe_grid_info;
xmedia_isp_ae_grid_info be_grid_info;
} xmedia_isp_ae_statistics;
#define XMEDIA_ISP_BLEND_MAX_NUM 4
typedef struct {
// 按pipe号升序存储zone_avg
xmedia_u32 fe_zone_avg[XMEDIA_ISP_BLEND_MAX_NUM][XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM]
[XMEDIA_ISP_AE_ZONE_COL_MAX_NUM][XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u32 fe_global_avg[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u32 fe_hist_value[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AE_HIST_NUM];
// 按pipe号升序存储zone_avg
xmedia_u32 be_zone_avg[XMEDIA_ISP_BLEND_MAX_NUM][XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AE_ZONE_COL_MAX_NUM]
[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u32 be_global_avg[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u32 be_hist_value[XMEDIA_ISP_AE_HIST_NUM];
xmedia_u32 fe_hist_weight_pixel_num[XMEDIA_ISP_WDR_CHN_MAX_NUM];
xmedia_u32 be_hist_weight_pixel_num;
} xmedia_isp_ae_blend_statistics;
typedef struct {
xmedia_u16 grid_y_pos[XMEDIA_ISP_AWB_ZONE_ROW_MAX_NUM + 1];
xmedia_u16 grid_x_pos[XMEDIA_ISP_AWB_ZONE_COL_MAX_NUM + 1];
xmedia_u8 status;
} xmedia_isp_awb_grid_info;
typedef struct {
xmedia_u32 global_r;
xmedia_u32 global_g;
xmedia_u32 global_b;
xmedia_u32 global_valid_count; // 全局有效像素个数
xmedia_u32 zone_avg_r[XMEDIA_ISP_AWB_ZONE_NUM];
xmedia_u32 zone_avg_g[XMEDIA_ISP_AWB_ZONE_NUM];
xmedia_u32 zone_avg_b[XMEDIA_ISP_AWB_ZONE_NUM];
xmedia_u32 zone_valid_count[XMEDIA_ISP_AWB_ZONE_NUM]; // 分块有效像素个数
xmedia_isp_awb_grid_info grid_info;
} xmedia_isp_awb_statistics;
#define XMEDIA_ISP_AWB_ZONE_BLEND_MAX (XMEDIA_ISP_AWB_ZONE_NUM * XMEDIA_ISP_BLEND_MAX_NUM)
typedef struct {
xmedia_u32 zone_row[XMEDIA_ISP_BLEND_MAX_NUM];
xmedia_u32 zone_col[XMEDIA_ISP_BLEND_MAX_NUM];
xmedia_u32 zone_avg_r[XMEDIA_ISP_BLEND_MAX_NUM][XMEDIA_ISP_AWB_ZONE_NUM];
xmedia_u32 zone_avg_g[XMEDIA_ISP_BLEND_MAX_NUM][XMEDIA_ISP_AWB_ZONE_NUM];
xmedia_u32 zone_avg_b[XMEDIA_ISP_BLEND_MAX_NUM][XMEDIA_ISP_AWB_ZONE_NUM];
xmedia_u32 zone_valid_count[XMEDIA_ISP_BLEND_MAX_NUM][XMEDIA_ISP_AWB_ZONE_NUM]; // 分块有效像素个数
} xmedia_isp_awb_blend_statistics;
typedef struct {
xmedia_u32 fv1_value;
xmedia_u32 fv2_value;
xmedia_u32 pseduoy_value;
xmedia_u32 hlt_cnt;
} xmedia_isp_af_zone;
typedef struct {
xmedia_u16 grid_y_pos[XMEDIA_ISP_AF_ZONE_ROW_MAX_NUM + 1];
xmedia_u16 grid_x_pos[XMEDIA_ISP_AF_ZONE_COL_MAX_NUM + 1];
xmedia_u8 status;
} xmedia_isp_af_grid_info;
typedef struct {
xmedia_isp_af_zone zone_metrics[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AF_ZONE_ROW_MAX_NUM]
[XMEDIA_ISP_AF_ZONE_COL_MAX_NUM];
xmedia_isp_af_grid_info grid_info;
} xmedia_isp_fe_af_statistics;
typedef struct {
xmedia_isp_af_zone zone_metrics[XMEDIA_ISP_AF_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AF_ZONE_COL_MAX_NUM];
xmedia_isp_af_grid_info grid_info;
} xmedia_isp_be_af_statistics;
typedef struct {
xmedia_isp_fe_af_statistics fe_stat;
xmedia_isp_be_af_statistics be_stat;
} xmedia_isp_af_statistics;
typedef enum {
XMEDIA_ISP_AE_ACCURACY_TYPE_DB = 0,
XMEDIA_ISP_AE_ACCURACY_TYPE_LINEAR,
XMEDIA_ISP_AE_ACCURACY_TYPE_TABLE,
XMEDIA_ISP_AE_ACCURACY_TYPE_MAX,
} xmedia_isp_ae_accuracy_type;
typedef struct {
xmedia_isp_ae_accuracy_type accu_type;
xmedia_float accuracy;
xmedia_float offset;
} xmedia_isp_ae_accuracy;
typedef enum {
XMEDIA_ISP_IRIS_F_NO_32_0 = 0,
XMEDIA_ISP_IRIS_F_NO_22_0,
XMEDIA_ISP_IRIS_F_NO_16_0,
XMEDIA_ISP_IRIS_F_NO_11_0,
XMEDIA_ISP_IRIS_F_NO_8_0,
XMEDIA_ISP_IRIS_F_NO_5_6,
XMEDIA_ISP_IRIS_F_NO_4_0,
XMEDIA_ISP_IRIS_F_NO_2_8,
XMEDIA_ISP_IRIS_F_NO_2_0,
XMEDIA_ISP_IRIS_F_NO_1_4,
XMEDIA_ISP_IRIS_F_NO_1_0,
XMEDIA_ISP_IRIS_F_NO_MAX
} xmedia_isp_iris_f_no;
typedef struct {
xmedia_u32 int_time;
xmedia_u32 sys_gain;
xmedia_isp_iris_f_no iris_f_no;
xmedia_u32 iris_f_no_lin;
} xmedia_isp_ae_route_node;
#define XMEDIA_ISP_AE_ROUTE_MAX_NODES 16
typedef struct {
xmedia_u32 total_num;
xmedia_isp_ae_route_node route_node[XMEDIA_ISP_AE_ROUTE_MAX_NODES];
} xmedia_isp_ae_route;
typedef struct {
xmedia_u32 int_time;
xmedia_u32 again;
xmedia_u32 dgain;
xmedia_u32 ispgain;
xmedia_isp_iris_f_no iris_f_no;
xmedia_u32 iris_f_no_lin;
} xmedia_isp_ae_ext_route_node;
#define XMEDIA_ISP_AE_EXT_ROUTE_MAX_NODES 16
typedef struct {
xmedia_u32 total_num;
xmedia_isp_ae_ext_route_node route_ex_node[XMEDIA_ISP_AE_EXT_ROUTE_MAX_NODES];
} xmedia_isp_ae_ext_route;
typedef enum {
XMEDIA_ISP_IRIS_TYPE_DC = 0,
XMEDIA_ISP_IRIS_TYPE_P,
XMEDIA_ISP_IRIS_TYPE_MAX
} xmedia_isp_iris_type; // TODO: 该数据结构不该定义在此处,应该定义在iris的头文件里
#define XMEDIA_ISP_PIRIS_AI_MAX_STEP_FNO_NUM 1024
typedef struct {
xmedia_bool step_f_no_table_change;
xmedia_bool zero_is_max;
xmedia_u16 total_step;
xmedia_u16 step_count;
xmedia_u16 step_fno_table[XMEDIA_ISP_PIRIS_AI_MAX_STEP_FNO_NUM];
xmedia_isp_iris_f_no max_iris_f_no_target;
xmedia_isp_iris_f_no min_iris_f_no_target;
xmedia_bool f_no_ex_valid;
xmedia_u32 max_iris_fno_target;
xmedia_u32 min_iris_fno_target;
} xmedia_isp_piris_attr; // TODO: 该数据结构不该定义在此处,应该定义在iris的头文件里
typedef enum {
XMEDIA_ISP_AE_STRATEGY_EXP_HIGHLIGHT_PRIOR = 0,
XMEDIA_ISP_AE_STRATEGY_EXP_LOWLIGHT_PRIOR = 1,
XMEDIA_ISP_AE_STRATEGY_MAX
} xmedia_isp_ae_strategy;
#define XMEDIA_ISP_AE_EXP_RATIO_NUM 3
typedef struct {
xmedia_u8 ae_compensation;
xmedia_u32 lines_per_500ms;
xmedia_u32 flicker_freq;
xmedia_float fps;
xmedia_u32 hmax_times;
xmedia_u32 init_exposure; // gain * 0x40 * exp_time (unit: line)
xmedia_u32 init_ae_speed;
xmedia_u32 init_ae_tolerance;
xmedia_u32 full_lines_std;
xmedia_u32 full_lines_max;
xmedia_u32 full_lines;
xmedia_u32 max_int_time;
xmedia_u32 min_int_time;
xmedia_u32 max_int_time_target;
xmedia_u32 min_int_time_target;
xmedia_isp_ae_accuracy int_time_accu;
xmedia_u32 max_again;
xmedia_u32 min_again;
xmedia_u32 max_again_target;
xmedia_u32 min_again_target;
xmedia_isp_ae_accuracy again_accu;
xmedia_u32 max_dgain;
xmedia_u32 min_dgain;
xmedia_u32 max_dgain_target;
xmedia_u32 min_dgain_target;
xmedia_isp_ae_accuracy dgain_accu;
xmedia_u32 ispdgain_sep_thd;
xmedia_u32 max_ispdgain_target;
xmedia_u32 min_ispdgain_target;
xmedia_u32 ispdgain_shift;
xmedia_u32 max_int_time_step;
xmedia_u32 lf_max_short_time;
xmedia_u32 lf_min_exposure;
xmedia_isp_ae_route ae_route_attr;
xmedia_bool ae_route_ex_valid;
xmedia_isp_ae_ext_route ae_ext_route_attr;
xmedia_isp_ae_route ae_route_sf_attr;
xmedia_isp_ae_ext_route ae_ext_route_sf_attr;
xmedia_u16 man_ratio_enable;
xmedia_u32 ratio[XMEDIA_ISP_AE_EXP_RATIO_NUM];
xmedia_isp_iris_type iris_type;
xmedia_isp_piris_attr piris_attr;
xmedia_isp_iris_f_no max_iris_f_no;
xmedia_isp_iris_f_no min_iris_f_no;
xmedia_isp_ae_strategy ae_exp_mode;
xmedia_u16 iso_cal_coef;
xmedia_u8 ae_run_interval;
xmedia_u32 exp_ratio_max;
xmedia_u32 exp_ratio_min;
xmedia_bool diff_gain_support;
} xmedia_isp_ae_sensor_default;
typedef struct {
xmedia_bool blend_en;
xmedia_u32 blend_num;
} xmedia_isp_3a_blend_config;
typedef struct {
xmedia_s32 sensor_id;
xmedia_u8 wdr_mode;
xmedia_u8 hdr_mode;
xmedia_u16 balck_level[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_float fps;
xmedia_video_bayer_format bayer_format;
xmedia_isp_3a_blend_config blend_config;
xmedia_s32 reserve;
} xmedia_isp_ae_param;
typedef struct {
xmedia_bool change;
xmedia_bool thresh_update;
xmedia_u16 zone_max_thresh;
xmedia_u16 zone_min_thresh;
xmedia_bool hist_adjust_update;
xmedia_isp_ae_switch pos_switch;
xmedia_isp_ae_hist_mode hist_mode;
xmedia_isp_ae_hist_four_mode hist_four_mode;
xmedia_isp_ae_single_color_bin single_color_bin;
xmedia_bool mode_update;
xmedia_isp_ae_stat_mode hist_root_mode;
xmedia_isp_ae_stat_mode aver_root_mode;
xmedia_bool weight_table_update;
xmedia_u8 weight_table[XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AE_ZONE_COL_MAX_NUM];
} xmedia_isp_ae_stat_attr;
typedef struct {
xmedia_u32 int_time[XMEDIA_ISP_WDR_CHN_MAX_NUM];
xmedia_u32 isp_dgain;
xmedia_u32 again;
xmedia_u32 dgain;
xmedia_u32 iso;
xmedia_u32 isp_dgain_short_frame;
xmedia_u32 again_short_frame;
xmedia_u32 dgain_short_frame;
xmedia_u32 iso_short_frame;
xmedia_u32 isp_dgain_sep_thd;
xmedia_u8 ae_run_interval;
xmedia_bool piris_valid;
xmedia_s32 piris_pos;
xmedia_u32 piris_gain;
xmedia_isp_wdr_mode wdr_mode;
xmedia_u32 max_sensor_again;
xmedia_u32 wdr_gain[XMEDIA_ISP_WDR_CHN_MAX_NUM];
xmedia_u32 hmax_times;
xmedia_u32 vmax;
xmedia_isp_ae_stat_attr stat_attr;
// xmedia_isp_dcf_info dcf_update_info; // xmedia_isp_dcf_info未定义,解决编译问题,先注释掉
} xmedia_isp_ae_result;
typedef struct {
xmedia_u32 histogram_mem_array[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AE_HIST_NUM];
} xmedia_isp_fe_hist;
typedef struct {
xmedia_u32 histogram_mem_array[XMEDIA_ISP_AE_HIST_NUM];
} xmedia_isp_be_hist;
typedef struct {
xmedia_u32 fe_pixel_weight[XMEDIA_ISP_WDR_CHN_MAX_NUM];
xmedia_isp_fe_hist *fe_histogram_mem_array;
} xmedia_isp_fe_ae_stat_hist;
typedef struct {
xmedia_u32 global_avg[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_BAYER_PATTERN_NUM];
} xmedia_isp_fe_ae_stat_global_avg;
typedef struct {
xmedia_u32 zone_avg[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AE_ZONE_COL_MAX_NUM]
[XMEDIA_ISP_BAYER_PATTERN_NUM];
} xmedia_isp_fe_ae_stat_zone_avg;
typedef struct {
xmedia_u32 zone_avg[XMEDIA_ISP_BLEND_MAX_NUM][XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM]
[XMEDIA_ISP_AE_ZONE_COL_MAX_NUM][XMEDIA_ISP_BAYER_PATTERN_NUM];
} xmedia_isp_fe_ae_blend_stat;
typedef struct {
xmedia_u32 be_pixel_weight;
xmedia_isp_be_hist *be_histogram_mem_array;
} xmedia_isp_be_ae_stat_hist;
typedef struct {
xmedia_u32 global_avg[XMEDIA_ISP_BAYER_PATTERN_NUM];
} xmedia_isp_be_ae_stat_global_avg;
typedef struct {
xmedia_u32 zone_avg[XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AE_ZONE_COL_MAX_NUM][XMEDIA_ISP_BAYER_PATTERN_NUM];
} xmedia_isp_be_ae_stat_zone_avg;
typedef struct {
xmedia_u32 zone_avg[XMEDIA_ISP_BLEND_MAX_NUM][XMEDIA_ISP_AE_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AE_ZONE_COL_MAX_NUM]
[XMEDIA_ISP_BAYER_PATTERN_NUM];
} xmedia_isp_be_ae_blend_stat;
typedef struct {
xmedia_u64 frame_cnt;
xmedia_isp_smart_info smart_info;
xmedia_u16 fe_ae_row_num;
xmedia_u16 fe_ae_col_num;
xmedia_isp_fe_ae_stat_hist fe_ae_stat_hist;
xmedia_isp_fe_ae_stat_global_avg *fe_ae_stat_global_avg;
xmedia_isp_fe_ae_stat_zone_avg *fe_ae_stat_zone_avg;
xmedia_isp_fe_ae_blend_stat *fe_ae_blend_stat;
xmedia_u16 be_ae_row_num;
xmedia_u16 be_ae_col_num;
xmedia_isp_be_ae_stat_hist be_ae_stat_hist;
xmedia_isp_be_ae_stat_global_avg *be_ae_stat_global_avg;
xmedia_isp_be_ae_stat_zone_avg *be_ae_stat_zone_avg;
xmedia_isp_be_ae_blend_stat *be_ae_blend_stat;
} xmedia_isp_ae_info;
#define XMEDIA_ISP_ALG_NAME_MAX_SIZE 20
typedef struct {
xmedia_char alg_name[XMEDIA_ISP_ALG_NAME_MAX_SIZE];
xmedia_u32 alg_id; // 数据流pipe使用的ae库ch id.
xmedia_s32 (*pfn_ae_init)(xmedia_u32 channel, const xmedia_isp_ae_param *ae_param);
xmedia_s32 (*pfn_ae_run)(xmedia_u32 channel, const xmedia_isp_ae_info *ae_info, xmedia_isp_ae_result *ae_result);
xmedia_s32 (*pfn_ae_ctrl)(xmedia_u32 channel, xmedia_u32 cmd, xmedia_void *value);
xmedia_s32 (*pfn_ae_exit)(xmedia_u32 channel);
} xmedia_isp_ae_register_info;
#define XMEDIA_ISP_AUTO_ISO_STRENGTH_NUM 16
typedef struct {
xmedia_bool valid;
xmedia_u8 saturation[XMEDIA_ISP_AUTO_ISO_STRENGTH_NUM];
} xmedia_isp_awb_agc_table;
#define XMEDIA_ISP_CCM_MATRIX_SIZE 9
typedef struct {
// RW; Range:[2000,10000]; Format:16.0; the current color temperature
xmedia_u16 ct;
// RW; Range: [0x0, 0xFFFF]; Format:8.8; CCM matrixes for different color temperature
xmedia_u16 ccm[XMEDIA_ISP_CCM_MATRIX_SIZE];
} xmedia_isp_awb_ccm_table;
#define XMEDIA_ISP_CCM_TAB_MAX_NUM 7
typedef struct {
xmedia_u16 ccm_tab_num;
xmedia_isp_awb_ccm_table ccm_tab[XMEDIA_ISP_CCM_TAB_MAX_NUM];
} xmedia_isp_awb_ccm;
#define XMEDIA_ISP_AWB_CURVE_PARA_NUM 6
typedef struct {
xmedia_u16 wb_ref_temp;
xmedia_u16 gain_offset[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_s32 wb_para[XMEDIA_ISP_AWB_CURVE_PARA_NUM];
xmedia_u16 golden_rgain;
xmedia_u16 golden_bgain;
xmedia_u16 sample_rgain;
xmedia_u16 sample_bgain;
xmedia_isp_awb_agc_table agc_tbl;
xmedia_isp_awb_ccm ccm;
xmedia_u16 init_rgain;
xmedia_u16 init_ggain;
xmedia_u16 init_bgain;
xmedia_u8 awb_runinterval;
xmedia_u16 init_ccm[XMEDIA_ISP_CCM_MATRIX_SIZE];
xmedia_video_operation_mode wb_op_type;
xmedia_video_operation_mode ccm_op_type;
xmedia_video_operation_mode sat_op_type;
} xmedia_isp_awb_sensor_default;
typedef struct {
xmedia_s32 sensor_id;
xmedia_u8 wdr_mode;
xmedia_u8 awb_zone_row;
xmedia_u8 awb_zone_col;
xmedia_u8 awb_zone_bin;
xmedia_u16 awb_width;
xmedia_u16 awb_height;
xmedia_u32 init_iso;
xmedia_isp_3a_blend_config blend_config;
} xmedia_isp_awb_param;
typedef struct {
xmedia_u32 global_r;
xmedia_u32 global_g;
xmedia_u32 global_b;
xmedia_u32 global_valid_count; // 全局有效像素个数
} xmedia_isp_awb_stat_global;
typedef struct {
xmedia_u32 zone_avg_r[XMEDIA_ISP_AWB_ZONE_NUM];
} xmedia_isp_awb_stat_local_avg_r;
typedef struct {
xmedia_u32 zone_avg_g[XMEDIA_ISP_AWB_ZONE_NUM];
} xmedia_isp_awb_stat_local_avg_g;
typedef struct {
xmedia_u32 zone_avg_b[XMEDIA_ISP_AWB_ZONE_NUM];
} xmedia_isp_awb_stat_local_avg_b;
typedef struct {
xmedia_u32 zone_valid_count[XMEDIA_ISP_AWB_ZONE_NUM]; // 分块有效像素个数
} xmedia_isp_awb_stat_local_valid_count;
typedef xmedia_isp_awb_blend_statistics xmedia_isp_awb_blend_stat;
typedef struct {
xmedia_u32 frame_cnt;
xmedia_isp_awb_stat_global awb_stat_global;
xmedia_isp_awb_stat_local_avg_r *awb_stat_local_avg_r;
xmedia_isp_awb_stat_local_avg_g *awb_stat_local_avg_g;
xmedia_isp_awb_stat_local_avg_b *awb_stat_local_avg_b;
xmedia_isp_awb_stat_local_valid_count *stat_local_valid_count;
xmedia_isp_awb_blend_stat *awb_blend_stat_local;
xmedia_u8 awb_gain_switch;
xmedia_u8 awb_stat_switch;
xmedia_u32 wdr_wb_gain[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_u16 awb_zone_row;
xmedia_u16 awb_zone_col;
xmedia_u16 awb_width;
xmedia_u16 awb_height;
} xmedia_isp_awb_info;
typedef struct {
xmedia_bool change;
xmedia_bool black_white_update;
xmedia_u16 metering_white_level_awb;
xmedia_u16 metering_black_level_awb;
xmedia_bool cbcr_update;
xmedia_u16 metering_crref_max_awb;
xmedia_u16 metering_cbref_max_awb;
xmedia_u16 metering_crref_min_awb;
xmedia_u16 metering_cbref_min_awb;
xmedia_bool pos_update;
xmedia_isp_awb_switch pos_switch;
} xmedia_isp_awb_raw_stat_attr;
#define XMEDIA_ISP_COLOR_SECTOR_NUM 6
typedef struct {
xmedia_u32 white_balance_gain[XMEDIA_ISP_BAYER_PATTERN_NUM];
xmedia_s16 color_matrix[XMEDIA_ISP_CCM_MATRIX_SIZE];
xmedia_u32 ct;
xmedia_u8 saturation;
xmedia_bool ccm_en;
xmedia_bool ccm_hue_en;
xmedia_s16 ccm_hue[XMEDIA_ISP_COLOR_SECTOR_NUM];
xmedia_s16 sector_matrix[XMEDIA_ISP_COLOR_SECTOR_NUM][XMEDIA_ISP_CCM_MATRIX_SIZE];
xmedia_isp_awb_raw_stat_attr raw_stat_attr;
} xmedia_isp_awb_result;
typedef struct {
xmedia_char alg_name[XMEDIA_ISP_ALG_NAME_MAX_SIZE];
xmedia_u32 alg_id; // 数据流pipe使用的awb库ch id.
xmedia_s32 (*pfn_awb_init)(xmedia_u32 channel, const xmedia_isp_awb_param *awb_param);
xmedia_s32 (*pfn_awb_run)(xmedia_u32 channel, const xmedia_isp_awb_info *awb_info,
xmedia_isp_awb_result *awb_result);
xmedia_s32 (*pfn_awb_ctrl)(xmedia_u32 channel, xmedia_u32 cmd, xmedia_void *value);
xmedia_s32 (*pfn_awb_exit)(xmedia_u32 channel);
} xmedia_isp_awb_register_info;
typedef struct {
xmedia_bool pdaf_en;
xmedia_bool cdaf_en;
xmedia_video_size image_size;
} xmedia_isp_af_param;
typedef struct {
xmedia_isp_af_zone zone_matrix[XMEDIA_ISP_WDR_CHN_MAX_NUM][XMEDIA_ISP_AF_ZONE_ROW_MAX_NUM]
[XMEDIA_ISP_AF_ZONE_COL_MAX_NUM];
} xmedia_isp_fe_af_zone_matrix;
typedef struct {
xmedia_isp_af_zone zone_matrix[XMEDIA_ISP_AF_ZONE_ROW_MAX_NUM][XMEDIA_ISP_AF_ZONE_COL_MAX_NUM];
} xmedia_isp_be_af_zone_matrix;
typedef struct {
xmedia_u64 stat_frame_cnt;
xmedia_u32 width;
xmedia_u32 height;
xmedia_u32 bit_width;
xmedia_void *pd_stat;
} xmedia_isp_af_pdaf_statistics;
typedef struct {
xmedia_u64 frame_cnt;
xmedia_video_rect roi;
xmedia_isp_af_pdaf_statistics pdaf_stat;
const xmedia_isp_fe_af_zone_matrix *fe_zone_matrix;
const xmedia_isp_be_af_zone_matrix *be_zone_matrix;
} xmedia_isp_af_info;
typedef struct {
xmedia_bool pdaf_en;
xmedia_bool cdaf_en;
xmedia_bool roi_update;
xmedia_video_rect roi;
} xmedia_isp_af_result;
typedef struct {
xmedia_char alg_name[XMEDIA_ISP_ALG_NAME_MAX_SIZE];
xmedia_u32 alg_id; // 数据流pipe使用的af库ch id.
xmedia_s32 (*pfn_af_init)(xmedia_u32 channel, const xmedia_isp_af_param *af_param, xmedia_isp_af_result *af_result);
xmedia_s32 (*pfn_af_run)(xmedia_u32 channel, const xmedia_isp_af_info *af_info, xmedia_isp_af_result *af_result);
xmedia_s32 (*pfn_af_ctrl)(xmedia_u32 channel, xmedia_u32 cmd, xmedia_void *value);
xmedia_s32 (*pfn_af_exit)(xmedia_u32 channel);
} xmedia_isp_af_register_info;
// slave mode sensor sync signal generate module
typedef struct {
xmedia_u16 trig_dev; // 触发信号设备配置通道
xmedia_u16 trig_mode; // 工作模式, 0: 同步模式; 1: 相位模式
xmedia_u8 hs_enable; // XHS 输出使能
xmedia_u8 vs_enable; // XVS 输出使能
xmedia_u8 hs_invert; // XHS 极性配置 1: 低电平有效; 0: 高电平有效
xmedia_u8 vs_invert; // XVS 极性配置 1: 低电平有效; 0: 高电平有效
xmedia_u32 hs_time; // XHS 信号周期, 单位:us
xmedia_u32 vs_time; // XVS 信号周期, 单位:us
xmedia_u32 hs_active; // XHS 有效电平宽度, 单位:us
xmedia_u32 vs_active; // XVS 有效电平宽度, 单位:us
xmedia_u32 hs_delay; // XHS 相对 XVS 信号的延迟时间, 单位:us
xmedia_u32 ph_offset; // 相位偏移
xmedia_u32 delay_frame_num; // 触发信号延迟生效帧数
} xmedia_sensor_trig_attr;
typedef enum {
XMEDIA_ISP_FMW_STATE_RUN = 0,
XMEDIA_ISP_FMW_STATE_FREEZE,
XMEDIA_ISP_FMW_STATE_BUTT
} xmedia_isp_fmw_state;
typedef struct {
// RW;Range:[-4095,4095];Format:12.0; Black level differences between the offset value
xmedia_s32 blc_offset[XMEDIA_ISP_BAYER_PATTERN_NUM];
// RW;Range:[1,16]
xmedia_u16 ct_num;
// RW;Range:[0,65535]
xmedia_u16 ct_level[XMEDIA_ISP_CT_MAX_COUNT];
// RW;Range:[-1048575,1048575];Format:8.12; The gain difference slope
xmedia_s32 wb_slope[XMEDIA_ISP_CT_MAX_COUNT][XMEDIA_ISP_BAYER_PATTERN_NUM];
// RW;Range:[-1048575,1048575];Format:8.12; The gain difference offset
xmedia_s32 wb_offset[XMEDIA_ISP_CT_MAX_COUNT][XMEDIA_ISP_BAYER_PATTERN_NUM];
// RW;Range:[0x0,0xFFFF];Format:8.8; Color correction matrix variance ratio
xmedia_u16 ccm[XMEDIA_ISP_CT_MAX_COUNT][XMEDIA_ISP_CCM_MATRIX_SIZE];
// RW;Range:[-128,128];Format:8.0; luma differences
xmedia_s16 luma_differ;
} xmedia_isp_diff_attr;
typedef enum {
XMEDIA_ISP_WAIT_TYPE_FE_START = 0,
XMEDIA_ISP_WAIT_TYPE_FE_END,
XMEDIA_ISP_WAIT_TYPE_BE_END,
XMEDIA_ISP_WAIT_TYPE_MAX
} xmedia_isp_wait_type;
// ISP debug information
typedef struct {
xmedia_bool debug_en; // rw; 1:enable debug, 0:disable debug
xmedia_u64 phyaddr; // rw; phy address of debug info
xmedia_u32 depth; // rw; depth of debug info - the frame number
} xmedia_isp_debug_info;
/*
* Defines the ISP WDR operating mode, Only used in LINE_WDR mode
* 0: Normal WDR mode
* 1: Long frame mode, only effective in LINE_WDR
* when running in Long frame mode, module only output the long frame data
*/
typedef enum {
XMEDIA_ISP_AE_WDR_MODE_NORMAL = 0,
XMEDIA_ISP_AE_WDR_MODE_LONG_FRAME,
XMEDIA_ISP_AE_WDR_MODE_MAX
} xmedia_isp_ae_wdr_mode;
typedef enum {
XMEDIA_ISP_DEBUG_MODE_NONE = 0,
XMEDIA_ISP_DEBUG_MODE_DEMOSAIC_DIR,
XMEDIA_ISP_DEBUG_MODE_DRC_DETAIL,
XMEDIA_ISP_DEBUG_MODE_WDR_LONG_WEIGHT,
XMEDIA_ISP_DEBUG_MODE_WDR_LONG,
XMEDIA_ISP_DEBUG_MODE_WDR_SHORT,
XMEDIA_ISP_DEBUG_MODE_STNR_MV,
XMEDIA_ISP_DEBUG_MODE_SHARPEN_TEXTURE,
XMEDIA_ISP_DEBUG_MODE_SHARPEN_EDGE,
XMEDIA_ISP_DEBUG_MODE_SHARPEN_EDGE_WEIGHT,
XMEDIA_ISP_DEBUG_MODE_SHARPEN_DIR_EDGE,
XMEDIA_ISP_DEBUG_MODE_SHARPEN_DIR_MASK,
XMEDIA_ISP_DEBUG_MODE_SHARPEN_REGION_DIVISION,
XMEDIA_ISP_DEBUG_MODE_MAX,
} xmedia_isp_debug_mode;
// nr/sharpen算法参数
#define XMEDIA_ISP_SHARPEN_LUMA_NUM 33
#define XMEDIA_ISP_SHARPEN_GAIN_NUM 16
#define XMEDIA_ISP_SHARPEN_DERING_NUM 17
#define XMEDIA_ISP_SHARPEN_LUMA_GAIN_NUM 2
#define XMEDIA_ISP_SHARPEN_SKIN_NUM 2
#define XMEDIA_ISP_SHARPEN_RGB_NUM 3
#define XMEDIA_ISP_SHARPEN_VAR_THD_NUM 4
#define XMEDIA_ISP_SHARPEN_DIR_THD_NUM 4
#define XMEDIA_ISP_SHARPEN_VAR_STR_NUM 3
#define XMEDIA_ISP_SHARPEN_DIR_STR_NUM 3
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 edge_luma_wgt[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_LUMA_NUM]; // 低亮至高亮时的边缘衰减系数
xmedia_u8 tex_luma_wgt[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_LUMA_NUM]; // 低亮至高亮时的纹理衰减系数
xmedia_u8 edge_freq[XMEDIA_ISP_ISO_MAX_COUNT]; // 边缘频段控制
xmedia_u8 tex_freq[XMEDIA_ISP_ISO_MAX_COUNT]; // 纹理频段控制
xmedia_u16 edge_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 边缘整体锐化强度
xmedia_u16 tex_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 纹理整体锐化强度
xmedia_s8 pos_edge_lut[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_GAIN_NUM]; // 白色强边锐化强度
xmedia_s8 neg_edge_lut[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_GAIN_NUM]; // 黑色强边锐化强度
xmedia_s8 pos_tex_lut[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_GAIN_NUM]; // 白色纹理锐化强度
xmedia_s8 neg_tex_lut[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_GAIN_NUM]; // 黑色纹理锐化强度
xmedia_u8 edge_dering_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_DERING_NUM]; // 边缘Dering强度
xmedia_u8 tex_dering_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_DERING_NUM]; // 纹理Dering强度
xmedia_u8 dir_dering_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_DERING_NUM]; // 带方向边缘Dering强度
xmedia_u8 max_sharp_gain[XMEDIA_ISP_ISO_MAX_COUNT]; // 锐化的阶段范围
xmedia_u8 edge_coring[XMEDIA_ISP_ISO_MAX_COUNT]; // 边缘coring控制
xmedia_u8 rgain[XMEDIA_ISP_ISO_MAX_COUNT]; // 深红色区域的锐化增益控制
xmedia_u8 ggain[XMEDIA_ISP_ISO_MAX_COUNT]; // 绿色区域的锐化增益控制
xmedia_u8 bgain[XMEDIA_ISP_ISO_MAX_COUNT]; // 深蓝色区域的锐化增益控制
xmedia_u8 skin_gain[XMEDIA_ISP_ISO_MAX_COUNT]; // 肤色区域的锐化增益控制
xmedia_u8 global_overshoot_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 全局白边抑制强度
xmedia_u8 global_undershoot_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 全局黑边抑制强度
xmedia_u8 global_overshoot_thd[XMEDIA_ISP_ISO_MAX_COUNT]; // 全局白边阈值
xmedia_u8 global_undershoot_thd[XMEDIA_ISP_ISO_MAX_COUNT]; // 全局黑边阈值
xmedia_u16 region_division_sensitivity[XMEDIA_ISP_ISO_MAX_COUNT]; // 区域划分灵敏度,值小对弱纹理的划分精度高
xmedia_u16 region_division_thd[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_VAR_THD_NUM]; // 区域划分阈值 平坦、弱纹理、强纹理、强边缘
xmedia_u8 region_division_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_VAR_STR_NUM]; // 不同区域的锐化强度
xmedia_u8 dir_sensitivity[XMEDIA_ISP_ISO_MAX_COUNT]; // 方向划分灵敏度,值大划分精度高
xmedia_u8 dir_edge_freq[XMEDIA_ISP_ISO_MAX_COUNT]; // 带方向边缘频段控制
xmedia_u8 dir_edge_thd[XMEDIA_ISP_ISO_MAX_COUNT]
[XMEDIA_ISP_SHARPEN_DIR_THD_NUM]; // 带方向边缘划分阈值:无方向及纹理区、弱方向、强方向
xmedia_u8 dir_edge_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_SHARPEN_DIR_STR_NUM]; // 带方向边缘的叠加锐化强度
xmedia_u8 fusion_edge_max_edge[XMEDIA_ISP_ISO_MAX_COUNT]; // 融合模式下边缘区边缘层细节最大融合权重
xmedia_u8 fusion_edge_max_flat[XMEDIA_ISP_ISO_MAX_COUNT]; // 融合模式下平坦区边缘层细节最大融合权重
xmedia_u8 fusion_edge_thd[XMEDIA_ISP_ISO_MAX_COUNT]; // 融合模式下边缘区阈值
xmedia_u8 fusion_flat_thd[XMEDIA_ISP_ISO_MAX_COUNT]; // 融合模式下平坦区阈值
} xmedia_isp_sharpen_auto_attr;
typedef struct {
xmedia_u8 edge_luma_wgt[XMEDIA_ISP_SHARPEN_LUMA_NUM]; // 低亮至高亮时的边缘衰减系数
xmedia_u8 tex_luma_wgt[XMEDIA_ISP_SHARPEN_LUMA_NUM]; // 低亮至高亮时的纹理衰减系数
xmedia_u8 edge_freq; // 边缘频段控制
xmedia_u8 tex_freq; // 纹理频段控制
xmedia_u16 edge_str; // 边缘整体锐化强度
xmedia_u16 tex_str; // 纹理整体锐化强度
xmedia_s8 pos_edge_lut[XMEDIA_ISP_SHARPEN_GAIN_NUM]; // 白色强边锐化强度
xmedia_s8 neg_edge_lut[XMEDIA_ISP_SHARPEN_GAIN_NUM]; // 黑色强边锐化强度
xmedia_s8 pos_tex_lut[XMEDIA_ISP_SHARPEN_GAIN_NUM]; // 白色纹理锐化强度
xmedia_s8 neg_tex_lut[XMEDIA_ISP_SHARPEN_GAIN_NUM]; // 黑色纹理锐化强度
xmedia_u8 edge_dering_str[XMEDIA_ISP_SHARPEN_DERING_NUM]; // 边缘Dering强度
xmedia_u8 tex_dering_str[XMEDIA_ISP_SHARPEN_DERING_NUM]; // 纹理Dering强度
xmedia_u8 dir_dering_str[XMEDIA_ISP_SHARPEN_DERING_NUM]; // 带方向边缘Dering强度
xmedia_u8 max_sharp_gain; // 锐化的阶段范围
xmedia_u8 edge_coring; // 边缘coring控制
xmedia_u8 rgain; // 深红色区域的锐化增益控制
xmedia_u8 ggain; // 绿色区域的锐化增益控制
xmedia_u8 bgain; // 深蓝色区域的锐化增益控制
xmedia_u8 skin_gain; // 肤色区域的锐化增益控制
xmedia_u8 global_overshoot_str; // 全局白边抑制强度
xmedia_u8 global_undershoot_str; // 全局黑边抑制强度
xmedia_u8 global_overshoot_thd; // 全局白边阈值
xmedia_u8 global_undershoot_thd; // 全局黑边阈值
xmedia_u16 region_division_sensitivity; // 区域划分灵敏度,值大划分精度高
xmedia_u16 region_division_thd[XMEDIA_ISP_SHARPEN_VAR_THD_NUM]; // 区域划分阈值 平坦、弱纹理、强纹理、强边缘
xmedia_u8 region_division_str[XMEDIA_ISP_SHARPEN_VAR_STR_NUM]; // 不同区域的锐化强度
xmedia_u8 dir_edge_mode; // 方向模式:2、4、8方向
xmedia_u8 dir_sensitivity; // 方向划分灵敏度,值大划分精度高
xmedia_u8 dir_edge_freq; // 带方向边缘频段控制
xmedia_u8 dir_edge_thd[XMEDIA_ISP_SHARPEN_DIR_THD_NUM]; // 带方向边缘划分阈值:无方向及纹理区、弱方向、强方向
xmedia_u8 dir_edge_str[XMEDIA_ISP_SHARPEN_DIR_STR_NUM]; // 带方向边缘的叠加锐化强度
xmedia_u8 fusion_edge_max_edge; // 融合模式下边缘区边缘层细节最大融合权重
xmedia_u8 fusion_edge_max_flat; // 融合模式下平坦区边缘层细节最大融合权重
xmedia_u8 fusion_edge_thd; // 融合模式下边缘区阈值
xmedia_u8 fusion_flat_thd; // 融合模式下平坦区阈值
} xmedia_isp_sharpen_manual_attr;
typedef enum {
XMEDIA_ISP_SHARPEN_YSH_COMBINE_MODE_FUSION = 0,
XMEDIA_ISP_SHARPEN_YSH_COMBINE_MODE_FUSION_WITH_WEIGHT,
XMEDIA_ISP_SHARPEN_YSH_COMBINE_MODE_MAX
} xmedia_isp_sharpen_ysh_combine_mode;
typedef struct {
xmedia_bool enable; // sharpen增强功能使能
xmedia_isp_sharpen_ysh_combine_mode detail_combine_mode;
xmedia_s8 skin_ub[XMEDIA_ISP_SHARPEN_SKIN_NUM]; // 肤色区域的u/v上界
xmedia_s8 skin_lb[XMEDIA_ISP_SHARPEN_SKIN_NUM]; // 肤色区域的u/v下界
xmedia_u8 skin_delta[XMEDIA_ISP_SHARPEN_SKIN_NUM]; // 肤色区域的u/v扩张范围
xmedia_u8 rgb_delta[XMEDIA_ISP_SHARPEN_RGB_NUM]; // RGB的U/V扩张范围
xmedia_video_operation_mode op_type; // sharpen工作类型
xmedia_isp_sharpen_manual_attr manual_attr; // sharpen手动参数结构
xmedia_isp_sharpen_auto_attr auto_attr; // sharpen自动参数结构
} xmedia_isp_sharpen_attr;
// STNR (3DNR)
#define XMEDIA_ISP_3DNR_THD_MAX_COUNT 4
#define XMEDIA_ISP_3DNR_STR_MAX_COUNT 3
typedef struct {
xmedia_u8 edge_sens; // 边缘区敏感指数
xmedia_u8 corner_sens; // 角点区敏感指数
xmedia_u8 struct_sens; // 结构性敏感指数
xmedia_u8 graininess_sens; // 颗粒性敏感指数
xmedia_u8 v_denoise_str; // 控制去噪强度
xmedia_u8 s_denoise_str; // 控制去噪强度
xmedia_u16 min_denoise_str; // 去噪强度下限
xmedia_u8 sigma; // 第一种滤波参数sigma
xmedia_u8 s_luma_thd_low; // 7605V2
xmedia_u8 s_luma_thd_high; // 7605V2
xmedia_u8 s_luma_str_low; // 7605V2
xmedia_u8 s_luma_str_high; // 7605V2
xmedia_u8 s_mot_thd_low; // 7605V2
xmedia_u8 s_mot_thd_high; // 7605V2
xmedia_u8 s_mot_str_low; // 7605V2
xmedia_u8 s_mot_str_high; // 7605V2
xmedia_u8 v_luma_thd_low;
xmedia_u8 v_luma_thd_high;
xmedia_u8 v_luma_str_low;
xmedia_u8 v_luma_str_high;
xmedia_u8 v_mot_thd_low;
xmedia_u8 v_mot_thd_high;
xmedia_u8 v_mot_str_low;
xmedia_u8 v_mot_str_high;
xmedia_u8 text_thd[XMEDIA_ISP_3DNR_THD_MAX_COUNT];
xmedia_u8 text_str[XMEDIA_ISP_3DNR_STR_MAX_COUNT];
xmedia_u8 luma_varscale_thd_low;
xmedia_u8 luma_varscale_thd_high;
xmedia_u16 luma_varscale_str_low;
xmedia_u16 luma_varscale_str_high;
xmedia_u16 var_scale;
xmedia_u8 blend_var_thd_low;
xmedia_u8 blend_var_thd_high;
xmedia_u16 blend_var_low_wgt;
xmedia_u16 blend_var_high_wgt;
xmedia_u8 blend_luma_thd_low;
xmedia_u8 blend_luma_thd_high;
xmedia_u16 blend_luma_low_wgt;
xmedia_u16 blend_luma_high_wgt;
xmedia_u8 blend_mot_thd_low;
xmedia_u8 blend_mot_thd_high;
xmedia_u16 blend_mot_low_wgt;
xmedia_u16 blend_mot_high_wgt;
xmedia_u16 nr_addback_str;
xmedia_u8 blend_nr_center_var_thd_low; // 根据纹理融合第一种滤波结果和中心值
xmedia_u8 blend_nr_center_var_thd_high;
xmedia_u16 blend_nr_center_var_low_wgt;
xmedia_u16 blend_nr_center_var_high_wgt;
xmedia_u8 addback_text_thd[XMEDIA_ISP_3DNR_THD_MAX_COUNT]; // 根据纹理阈值噪声回叠
xmedia_u16 addback_text_str[XMEDIA_ISP_3DNR_STR_MAX_COUNT];
xmedia_u8 addback_luma_thd[XMEDIA_ISP_3DNR_THD_MAX_COUNT]; // 根据亮度阈值噪声回叠
xmedia_u16 addback_luma_str[XMEDIA_ISP_3DNR_STR_MAX_COUNT];
xmedia_u8 addback_text_luma_blend_mot_thd_low; // 根据运动阈值融合前面根据亮度和纹理回叠的结果
xmedia_u16 addback_text_luma_blend_mot_thd_high;
xmedia_u8 addback_mot_thd[XMEDIA_ISP_3DNR_THD_MAX_COUNT]; // 根据运动阈值噪声回叠
xmedia_u16 addback_mot_weak_str;
xmedia_u16 addback_mot_strong_str;
} xmedia_isp_stnr_ynr_param_manual;
typedef struct {
xmedia_u32 iso_num; // 自动参数配置的参考数组
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT]; // 参考的ISO数组
xmedia_u8 edge_sens[XMEDIA_ISP_ISO_MAX_COUNT]; // 边缘区敏感指数
xmedia_u8 corner_sens[XMEDIA_ISP_ISO_MAX_COUNT]; // 角点区敏感指数
xmedia_u8 struct_sens[XMEDIA_ISP_ISO_MAX_COUNT]; // 结构性敏感指数
xmedia_u8 graininess_sens[XMEDIA_ISP_ISO_MAX_COUNT]; // 颗粒性敏感指数
xmedia_u8 v_denoise_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 控制去噪强度
xmedia_u8 s_denoise_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 控制去噪强度
xmedia_u16 min_denoise_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 去噪强度下限
xmedia_u8 sigma[XMEDIA_ISP_ISO_MAX_COUNT]; // 第一种滤波参数sigma
xmedia_u8 s_luma_thd_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u8 s_luma_thd_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u8 s_luma_str_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u8 s_luma_str_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u8 s_mot_thd_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u8 s_mot_thd_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u8 s_mot_str_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u8 s_mot_str_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 7605V2
xmedia_u8 v_luma_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 v_luma_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 v_luma_str_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 v_luma_str_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 v_mot_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 v_mot_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 v_mot_str_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 v_mot_str_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 text_thd[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_THD_MAX_COUNT];
xmedia_u8 text_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_STR_MAX_COUNT];
xmedia_u8 luma_varscale_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 luma_varscale_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 luma_varscale_str_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 luma_varscale_str_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 var_scale[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blend_var_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blend_var_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blend_var_low_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blend_var_high_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blend_luma_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blend_luma_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blend_luma_low_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blend_luma_high_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blend_mot_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blend_mot_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blend_mot_low_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blend_mot_high_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 nr_addback_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blend_nr_center_var_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 blend_nr_center_var_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blend_nr_center_var_low_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 blend_nr_center_var_high_wgt[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 addback_text_thd[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_THD_MAX_COUNT];
xmedia_u16 addback_text_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_STR_MAX_COUNT];
xmedia_u8 addback_luma_thd[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_THD_MAX_COUNT];
xmedia_u16 addback_luma_str[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_STR_MAX_COUNT];
xmedia_u8 addback_text_luma_blend_mot_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 addback_text_luma_blend_mot_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 addback_mot_thd[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_THD_MAX_COUNT];
xmedia_u16 addback_mot_weak_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 addback_mot_strong_str[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_stnr_ynr_param_auto;
typedef struct {
xmedia_u8 chroma_sens;
xmedia_u8 ghost_coring_uv;
xmedia_u8 ghost_coring;
xmedia_u8 md_win_size;
xmedia_u8 bgm_str;
xmedia_u8 str;
xmedia_u8 uv_str;
xmedia_u16 md_thd_low;
xmedia_u16 md_thd_high;
xmedia_u8 luma_md_thd[XMEDIA_ISP_3DNR_THD_MAX_COUNT];
xmedia_u16 luma_md_scl[XMEDIA_ISP_3DNR_STR_MAX_COUNT];
xmedia_u8 sat_md_thd_low;
xmedia_u8 sat_md_thd_high;
xmedia_u16 satl_md_scl;
xmedia_u16 sath_md_scl;
xmedia_u8 border_thd;
xmedia_u16 border_md_scl;
} xmedia_isp_stnr_tnr_param_manual;
typedef struct {
xmedia_u32 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 chroma_sens[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 ghost_coring_uv[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 ghost_coring[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 md_win_size[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 bgm_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 uv_str[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 md_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 md_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 luma_md_thd[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_THD_MAX_COUNT];
xmedia_u16 luma_md_scl[XMEDIA_ISP_ISO_MAX_COUNT][XMEDIA_ISP_3DNR_STR_MAX_COUNT];
xmedia_u8 sat_md_thd_low[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 sat_md_thd_high[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 satl_md_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 sath_md_scl[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u8 border_thd[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 border_md_scl[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_stnr_tnr_param_auto;
typedef struct {
xmedia_u8 struct_sens; // 滤波结构性敏感指数
xmedia_u8 edge_det_thd; // 边缘检测阈值
xmedia_u8 edge_det_robust; // 边缘检测抗噪阈值
xmedia_u8 de_dark_color_str; // 去暗部色噪强度
xmedia_u8 de_bg_color_spot_str; // 去背景色斑强度
xmedia_u8 coarse_denoise_str; // 粗调控制全局色域去噪强度
xmedia_u8 fine_denoise_str; // 细调控制全局色域去噪强度
xmedia_u8 mot_str; // 运动区域降色噪强度
xmedia_u8 mot_denoise_thd_high; // 运动区域降色噪高阈值
xmedia_u8 mot_denoise_thd_low; // 运动区域降色噪低阈值
xmedia_u8 mot_denoise_str_high; // 运动区域降色噪强度
xmedia_u8 mot_denoise_str_low; // 静止区域降色噪强度
xmedia_u8 mot_uvnr_str; // 运动区域降色噪强度
xmedia_u16 mot_bld_str; // 运动区域使用小图的最高权重 0~256
xmedia_u8 mot_bld_thd_low; // 运动区域融合小图的低阈值 only for 7206V1
xmedia_u8 mot_bld_thd_high; // 运动区域融合小图的高阈值 only for 7206V1
xmedia_u8 de_purple_edge_thd; // 去紫边阈值
xmedia_u8 de_purple_edge_str; // 去紫边强度
xmedia_u8 purple_range; // 紫色范围
xmedia_u8 spec_color_degree; // 特定色角度
xmedia_u8 spec_color_str; // 去特定色强度
xmedia_u8 luma_thd_high; // 亮度控制降色噪高阈值
xmedia_u8 luma_thd_low; // 亮度控制降色噪低阈值
xmedia_u8 luma_str_high; // 亮区控制降色噪强度
xmedia_u8 luma_str_low; // 暗区降色噪强度
} xmedia_isp_stnr_cnr_param_manual;
typedef struct {
xmedia_u32 iso_num; // 自动参数配置的参考数组
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT]; // 参考的ISO数组
xmedia_u8 struct_sens[XMEDIA_ISP_ISO_MAX_COUNT]; // 滤波结构性敏感指数
xmedia_u8 edge_det_thd[XMEDIA_ISP_ISO_MAX_COUNT]; // 边缘检测阈值
xmedia_u8 edge_det_robust[XMEDIA_ISP_ISO_MAX_COUNT]; // 边缘检测抗噪阈值
xmedia_u8 de_dark_color_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 去暗部色噪强度
xmedia_u8 de_bg_color_spot_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 去背景色斑强度 only for 7605V2
xmedia_u8 coarse_denoise_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 粗调控制全局色域去噪强度
xmedia_u8 fine_denoise_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 细调控制全局色域去噪强度
xmedia_u8 mot_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 运动区域降色噪强度 only for 7605V2
xmedia_u8 mot_denoise_thd_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 运动区域降色噪高阈值
xmedia_u8 mot_denoise_thd_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 运动区域降色噪低阈值
xmedia_u8 mot_denoise_str_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 运动区域降色噪强度
xmedia_u8 mot_denoise_str_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 静止区域降色噪强度
xmedia_u8 mot_uvnr_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 运动区域小图滤波强度
xmedia_u16 mot_bld_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 运动区域使用小图的最高权重
xmedia_u8 mot_bld_thd_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 运动区域融合小图的低阈值 only for 7206V1
xmedia_u8 mot_bld_thd_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 运动区域融合小图的高阈值 only for 7206V1
xmedia_u8 de_purple_edge_thd[XMEDIA_ISP_ISO_MAX_COUNT]; // 去紫边阈值
xmedia_u8 de_purple_edge_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 去紫边强度
xmedia_u8 purple_range[XMEDIA_ISP_ISO_MAX_COUNT]; // 紫色范围
xmedia_u8 spec_color_degree[XMEDIA_ISP_ISO_MAX_COUNT]; // 特定色角度
xmedia_u8 spec_color_str[XMEDIA_ISP_ISO_MAX_COUNT]; // 去特定色强度
xmedia_u8 luma_thd_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 亮度控制降色噪高阈值
xmedia_u8 luma_thd_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 亮度控制降色噪低阈值
xmedia_u8 luma_str_high[XMEDIA_ISP_ISO_MAX_COUNT]; // 亮区控制降色噪强度
xmedia_u8 luma_str_low[XMEDIA_ISP_ISO_MAX_COUNT]; // 暗区降色噪强度
} xmedia_isp_stnr_cnr_param_auto;
typedef enum {
XMEDIA_ISP_STNR_YNR_DENOISE_STR_DEFAULT = 0, // 去噪基础强度默认不参考运动区
XMEDIA_ISP_STNR_YNR_DENOISE_STR_MOV = 1, // 去噪基础强度参考运动区
XMEDIA_ISP_STNR_YNR_DENOISE_STR_MAX
} xmedia_isp_stnr_ynr_noise_str_mode;
typedef enum {
XMEDIA_ISP_STNR_YNR_GRAD_WIN_SML = 5, // 小窗口计算梯度
XMEDIA_ISP_STNR_YNR_GRAD_WIN_MED = 7, // 中等窗口计算梯度
XMEDIA_ISP_STNR_YNR_GRAD_WIN_LG = 9, // 大窗口计算梯度
XMEDIA_ISP_STNR_YNR_GRAD_WIN_MAX
} xmedia_isp_stnr_ynr_grad_win_size;
typedef enum {
XMEDIA_ISP_STNR_YNR_VAR_MODE_DEFAULT = 0, // 默认不参考运动区算边缘
XMEDIA_ISP_STNR_YNR_VAR_MODE_MOV = 1, // 参考运动区算边缘
XMEDIA_ISP_STNR_YNR_VAR_MODE_MAX
} xmedia_isp_stnr_ynr_var_mode;
typedef enum {
XMEDIA_ISP_STNR_YNR_SELECT_CENTERLUMA_NR = 0, // 经过滤波后的结果作为中心点像素
XMEDIA_ISP_STNR_YNR_SELECT_CENTERLUMA_ORI = 1, // 原始像素作为中心点像素
XMEDIA_ISP_STNR_YNR_SELECT_CENTERLUMA_MAX
} xmedia_isp_stnr_ynr_select_centerluma_mode;
typedef enum {
XMEDIA_ISP_STNR_YNR_ADDBACK_SCL_DEFAULT = 0, // 噪声回叠强度不参考运动区
XMEDIA_ISP_STNR_YNR_ADDBACK_SCL_MOV = 1, // 噪声回叠强度参考运动区
XMEDIA_ISP_STNR_YNR_ADDBACK_SCL_MAX
} xmedia_isp_stnr_ynr_addback_scl_mode;
typedef struct {
xmedia_isp_stnr_ynr_noise_str_mode denoise_str_mode; // 去噪基础强度是否参考运动区模式选择
xmedia_isp_stnr_ynr_grad_win_size grad_win_size; // 计算梯度的窗口大小选择
xmedia_isp_stnr_ynr_var_mode var_mode; // edge图是否参考运动区模式选择
xmedia_isp_stnr_ynr_select_centerluma_mode select_centerluma_mode; // 中心点模式选择
xmedia_bool nr_addback_en; // 噪声回叠开关
xmedia_isp_stnr_ynr_addback_scl_mode ynr_addback_scl_mode; // 噪声回叠强度是否参考运动区模式选择
xmedia_video_operation_mode op_type; // ynr操作模式,0:自动模式;1:手动模式
xmedia_isp_stnr_ynr_param_manual manual_attr; // ynr手动参数结构
xmedia_isp_stnr_ynr_param_auto auto_attr; // ynr自动参数结构
} xmedia_isp_stnr_ynr_param;
typedef struct {
xmedia_video_operation_mode op_type; // tnr操作模式,0:自动模式;1:手动模式
xmedia_isp_stnr_tnr_param_manual manual_attr; // tnr手动参数结构
xmedia_isp_stnr_tnr_param_auto auto_attr; // tnr自动参数结构
} xmedia_isp_stnr_tnr_param;
typedef struct {
xmedia_video_operation_mode op_type; // cnr操作模式,0:自动模式;1:手动模式
xmedia_isp_stnr_cnr_param_manual manual_attr; // cnr手动参数结构
xmedia_isp_stnr_cnr_param_auto auto_attr; // cnr自动参数结构
} xmedia_isp_stnr_cnr_param;
typedef struct {
xmedia_bool stnr_enable; // stnr总开关
xmedia_u8 stnr_mode; // 选择YNR/TNR/YSH顺序的模式
xmedia_bool ynr_enable; // 亮度域空域去噪使能
xmedia_bool cnr_enable; // 色度域空域去噪使能
xmedia_bool tnr_enable; // 时域去噪使能
xmedia_bool tnr_mc_enable; // 时域运动补偿使能
xmedia_isp_stnr_ynr_param ynr; // 亮度域空域去噪参数
xmedia_isp_stnr_tnr_param tnr; // 时域去噪参数
xmedia_isp_stnr_cnr_param cnr; // 色度域空域去噪参数
} xmedia_isp_stnr_attr;
typedef struct {
xmedia_u16 pos_gain;
xmedia_u16 gau_gain;
} xmedia_isp_ainr_manual_attr;
typedef struct {
xmedia_u8 iso_num;
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 pos_gain[XMEDIA_ISP_ISO_MAX_COUNT];
xmedia_u16 gau_gain[XMEDIA_ISP_ISO_MAX_COUNT];
} xmedia_isp_ainr_auto_attr;
typedef struct {
xmedia_bool enable;
xmedia_u32 switch_thd_low;
xmedia_u32 switch_thd_high;
xmedia_video_operation_mode op_type;
xmedia_isp_ainr_manual_attr manual_attr;
xmedia_isp_ainr_auto_attr auto_attr;
} xmedia_isp_ainr_attr;
#define XMEDIA_SENSOR_DEV_MAX_NUM XMEDIA_ISP_PIPE_MAX_NUM
#define XMEDIA_SENSOR_MAX_REGS_NUM 64
#define XMEDIA_SENSOR_VCID_MAX_NUM 4
#define XMEDIA_SENSOR_NAME_MAX_SIZE 128
#define XMEDIA_SENSOR_BAYER_CHN_NUM 4
#define XMEDIA_SENSOR_CCM_MATRIX_SIZE 9
#define XMEDIA_SENSOR_GROUP_MIN_PIPE_NUM 2
#define XMEDIA_SENSOR_GROUP_MAX_PIPE_NUM 4
#define XMEDIA_SENSOR_PDAF_LRPD_MAX_NUM 64
#define XMEDIA_SENSOR_PDAF_LINE_MAX_NUM 16
#define XMEDIA_SENSOR_PDAF_PATTERN_LEFT 0
#define XMEDIA_SENSOR_PDAF_PATTERN_RIGHT 1
typedef enum {
XMEDIA_SENSOR_MIRROR_FLIP_TYPE_MIRROR_FLIP = 0,
XMEDIA_SENSOR_MIRROR_FLIP_TYPE_MIRROR,
XMEDIA_SENSOR_MIRROR_FLIP_TYPE_FLIP,
XMEDIA_SENSOR_MIRROR_FLIP_TYPE_NORMAL,
XMEDIA_SENSOR_MIRROR_FLIP_TYPE_MAX,
} xmedia_sensor_mirror_flip_type;
typedef enum {
XMEDIA_SENSOR_PDAF_TYPE_NONE,
XMEDIA_SENSOR_PDAF_TYPE_1, // output pd value by sensor.
XMEDIA_SENSOR_PDAF_TYPE_2, // output pd pixel by sensor
XMEDIA_SENSOR_PDAF_TYPE_3, // extract pd pixel by soc from image.
XMEDIA_SENSOR_PDAF_TYPE_MAX,
} xmedia_sensor_pdaf_type;
typedef enum {
XMEDIA_SENSOR_PDAF_PATTERN_UNDEFINED,
XMEDIA_SENSOR_PDAF_PATTERN_LINE, // 以pd行为单位进行循环
XMEDIA_SENSOR_PDAF_PATTERN_PIXEL, // 以pd点为单位进行循环
XMEDIA_SENSOR_PDAF_PATTERN_MAX,
} xmedia_sensor_pdaf_pattern_type;
typedef struct {
xmedia_sensor_pdaf_pattern_type type;
xmedia_u32 cycle;
xmedia_u32 pattern[XMEDIA_SENSOR_MIRROR_FLIP_TYPE_MAX];
} xmedia_sensor_pdaf_pattern;
typedef enum {
XMEDIA_SENSOR_PDAF_CORRECT_NONE,
XMEDIA_SENSOR_PDAF_CORRECT_BY_SENSOR, // dpc by sensor
XMEDIA_SENSOR_PDAF_CORRECT_BY_ISP, // dpc by soc
XMEDIA_SENSOR_PDAF_CORRECT_MAX,
} xmedia_sensor_pdaf_correction;
typedef struct {
xmedia_u32 lrpd_num;
xmedia_isp_point left_pd_point[XMEDIA_SENSOR_PDAF_LRPD_MAX_NUM];
xmedia_isp_point right_pd_point[XMEDIA_SENSOR_PDAF_LRPD_MAX_NUM];
} xmedia_sensor_pdaf_point;
typedef struct {
xmedia_sensor_pdaf_type pd_type;
xmedia_sensor_pdaf_correction pd_correction;
xmedia_u8 mipi_vcid; // type1 & type2
xmedia_u8 mipi_data_type; // type1 & type2
xmedia_u8 pd_data_width;
xmedia_video_rect pd_whole_pixel_area;
xmedia_video_size pd_block_pixel_size;
xmedia_video_size pd_block_data_size;
xmedia_sensor_pdaf_pattern pd_block_pattern;
} xmedia_sensor_pdaf_feature;
typedef struct {
const xmedia_sensor_pdaf_feature *pdaf_feature;
const xmedia_sensor_pdaf_point *pdaf_point;
} xmedia_sensor_pdaf_info;
/*
* NORMAL: sensor常规工作模式,也是默认工作模式。
* MASTER: sensor工作在master模式, 向外提供VSYNC等同步信号
* SLAVE: sensor工作在slave模式, 受外部VSYNC信号触发曝光和数据输出
*/
typedef enum {
XMEDIA_SENSOR_WORK_MODE_NORMAL = 0,
XMEDIA_SENSOR_WORK_MODE_MASTER,
XMEDIA_SENSOR_WORK_MODE_SLAVE,
XMEDIA_SENSOR_WORK_MODE_MAX,
} xmedia_sensor_work_mode;
typedef enum{
XMEDIA_SENSOR_TRIG_SOURCE_NONE = 0,
XMEDIA_SENSOR_TRIG_SOURCE_MASTER,
XMEDIA_SENSOR_TRIG_SOURCE_HOST,
XMEDIA_SENSOR_TRIG_SOURCE_MAX,
}xmedia_sensor_trig_source;
typedef struct{
xmedia_sensor_trig_source source;
xmedia_u32 dev_id;
}xmedia_sensor_trig_signal;
typedef enum{
XMEDIA_SENSOR_GROUP_TYPE_MASTER_SLAVE,
XMEDIA_SENSOR_GROUP_TYPE_HOST_SLAVE,
XMEDIA_SENSOR_GROUP_TYPE_MAX,
}xmedia_sensor_group_type;
typedef struct{
xmedia_sensor_group_type type;
xmedia_u32 pipe_num;
xmedia_u32 pipe[XMEDIA_SENSOR_GROUP_MAX_PIPE_NUM];
}xmedia_sensor_group_config;
typedef struct {
xmedia_u16 width;
xmedia_u16 height;
xmedia_video_wdr_mode wdr_mode;
} xmedia_sensor_attr;
typedef enum {
XMEDIA_SENSOR_CFG_POS_VACTIVE = 0,
XMEDIA_SENSOR_CFG_POS_VBLANK,
XMEDIA_SENSOR_CFG_POS_MAX
} xmedia_sensor_cfg_pos;
typedef struct {
xmedia_bool update;
xmedia_u8 delay_frame_num; // sensor 当前寄存器(从配置到)生效的帧数, 控制sensor内部寄存器同步
xmedia_sensor_cfg_pos cfg_pos; // sensor 当前寄存器配置时间点, FS: 帧起始, FE:帧结束
xmedia_u32 dev_addr;
xmedia_u32 reg_addr;
xmedia_u32 addr_byte_num;
xmedia_u32 data;
xmedia_u32 data_byte_num;
} xmedia_sensor_i2c_sync_reg;
typedef enum {
XMEDIA_SENSOR_BUS_TYPE_I2C = 0,
XMEDIA_SENSOR_BUS_TYPE_SPI,
XMEDIA_SENSOR_BUS_TYPE_MAX,
} xmedia_sensor_bus_type;
// sensor communication bus
typedef struct {
xmedia_sensor_bus_type type;
union {
xmedia_s8 i2c_dev;
struct {
xmedia_u8 spi_dev;
xmedia_u8 spi_cs; // chip select: 一主多从模式时,CS为主芯片对从芯片的控制信号
} spi_info;
};
} xmedia_sensor_commbus;
typedef struct {
xmedia_u32 clk_ch;
xmedia_u32 rst_ch;
} xmedia_sensor_ctrl_sig;
typedef enum {
XMEDIA_SENSOR_INIT_MODE_NORMAL = 0,
XMEDIA_SENSOR_INIT_MODE_SKIP, // 跳过sensor寄存器初始化流程
XMEDIA_SENSOR_INIT_MODE_MAX,
} xmedia_sensor_init_mode;
typedef struct {
xmedia_sensor_init_mode init_mode;
xmedia_sensor_ctrl_sig ctrl_sig;
xmedia_sensor_commbus comm_bus;
} xmedia_sensor_config;
typedef enum {
XMEDIA_SENSOR_CLOCK_FREQ_74_25MHZ = 74250000,
XMEDIA_SENSOR_CLOCK_FREQ_72MHZ = 72000000,
XMEDIA_SENSOR_CLOCK_FREQ_54MHZ = 54000000,
XMEDIA_SENSOR_CLOCK_FREQ_37_125MHZ = 37125000,
XMEDIA_SENSOR_CLOCK_FREQ_36MHZ = 36000000,
XMEDIA_SENSOR_CLOCK_FREQ_27MHZ = 27000000,
XMEDIA_SENSOR_CLOCK_FREQ_24MHZ = 24000000,
XMEDIA_SENSOR_CLOCK_FREQ_12MHZ = 12000000,
} xmedia_sensor_clock_freq;
typedef struct {
xmedia_u32 width;
xmedia_u32 height;
xmedia_video_wdr_mode wdr_mode;
xmedia_video_wdr_format wdr_format;
xmedia_float max_fps;
xmedia_sensor_clock_freq input_clock;
xmedia_intf_type output_intf;
xmedia_video_pixel_format pixel_format;
xmedia_video_data_width bit_width;
xmedia_video_bayer_format bayer_format[XMEDIA_SENSOR_MIRROR_FLIP_TYPE_MAX];
xmedia_u8 vcid[XMEDIA_SENSOR_VCID_MAX_NUM];
xmedia_u32 bit_rate; // unit: Mbps
} xmedia_sensor_property;
typedef enum {
XMEDIA_SENSOR_MIPI_LANES_1L = 1,
XMEDIA_SENSOR_MIPI_LANES_2L = 2,
XMEDIA_SENSOR_MIPI_LANES_4L = 4,
XMEDIA_SENSOR_MIPI_LANES_8L = 8,
XMEDIA_SENSOR_MIPI_LANES_MAX
} xmedia_sensor_mipi_lanes;
typedef struct {
xmedia_bool update;
xmedia_u8 delay_frm_num;
xmedia_u8 int_pos;
xmedia_u32 dev_addr;
xmedia_u32 dev_addr_byte_num;
xmedia_u32 reg_addr;
xmedia_u32 reg_addr_byte_num;
xmedia_u32 data;
xmedia_u32 data_byte_num;
} xmedia_sensor_spi_sync_reg;
typedef struct {
xmedia_sensor_commbus com_bus;
xmedia_u8 cfg_to_valid_delay_max; // Sensor 寄存器最大延迟生效帧数 ,控制Sensor与ISP同步
xmedia_u32 reg_num; // RW; Number of registers required when exposure results are written to the sensor
union {
xmedia_sensor_i2c_sync_reg i2c_data[XMEDIA_SENSOR_MAX_REGS_NUM];
xmedia_sensor_spi_sync_reg spi_data[XMEDIA_SENSOR_MAX_REGS_NUM];
};
} xmedia_sensor_regs_info;
#define XMEDIA_SENSOR_BAYER_CHN_R 0
#define XMEDIA_SENSOR_BAYER_CHN_GR 1
#define XMEDIA_SENSOR_BAYER_CHN_GB 2
#define XMEDIA_SENSOR_BAYER_CHN_B 3
typedef struct {
xmedia_bool update;
xmedia_u16 black_level[XMEDIA_SENSOR_BAYER_CHN_NUM];
} xmedia_sensor_black_level;
typedef struct {
xmedia_bool ir_mode;
xmedia_u32 exp_time;
xmedia_u32 again;
xmedia_u32 dgain;
xmedia_u32 ispdgain;
xmedia_u32 exposure;
xmedia_u32 init_iso;
xmedia_u32 piris_fno;
xmedia_u16 wb_rgain;
xmedia_u16 wb_ggain;
xmedia_u16 wb_bgain;
xmedia_u16 sample_rgain;
xmedia_u16 sample_bgain;
xmedia_u16 ccm[XMEDIA_SENSOR_CCM_MATRIX_SIZE];
} xmedia_sensor_init_param;
typedef struct {
const xmedia_isp_ainr_attr *ainr;
const xmedia_isp_anti_false_color_attr *anti_false_color;
const xmedia_isp_blc_attr *blc;
const xmedia_isp_bnr_attr *bnr;
const xmedia_isp_clut_attr *clut_attr;
const xmedia_isp_cr_attr *crosstalk;
const xmedia_isp_csc_attr *csc;
const xmedia_isp_dehaze_attr *dehaze;
const xmedia_isp_demosaic_attr *demosaic;
const xmedia_isp_dpc_dynamic_attr *dpc_dynamic;
const xmedia_isp_dpc_static_attr *dpc_static;
const xmedia_isp_drc_attr *drc;
const xmedia_isp_expander_attr *expander;
const xmedia_isp_fpn_attr *fpn;
const xmedia_isp_gamma_attr *gamma;
const xmedia_isp_gcac_attr *gcac;
const xmedia_isp_hlc_attr *hlc;
const xmedia_isp_lcac_attr *lcac;
const xmedia_isp_lce_attr *lce;
const xmedia_isp_mesh_shading_attr *mlsc_attr;
const xmedia_isp_mesh_shading_lut_attr *mlsc_lut;
const xmedia_isp_rc_attr *radial_crop;
const xmedia_isp_rgbir_attr *rgbir;
const xmedia_isp_radial_shading_attr *rlsc_attr;
const xmedia_isp_radial_shading_lut_attr *rlsc_lut;
const xmedia_isp_sharpen_attr *sharpen;
const xmedia_isp_stnr_attr *stnr;
const xmedia_isp_wdr_attr *wdr;
const xmedia_isp_ca_attr *ca;
} xmedia_sensor_isp_default;
#define XMEDIA_SENSOR_DELAY_FLAG 0xFFFFFFFF
#define XMEDIA_SENSOR_STANDBY_REG_MAX_NUM 16
typedef struct {
xmedia_bool standby_supported;
xmedia_u16 addr_byte_num;
xmedia_u16 data_byte_num;
xmedia_u32 standby_reg_num;
xmedia_u32 standby_reg_addr[XMEDIA_SENSOR_STANDBY_REG_MAX_NUM];
xmedia_u32 standby_reg_data[XMEDIA_SENSOR_STANDBY_REG_MAX_NUM];
xmedia_u32 resume_reg_num;
xmedia_u32 resume_reg_addr[XMEDIA_SENSOR_STANDBY_REG_MAX_NUM];
xmedia_u32 resume_reg_data[XMEDIA_SENSOR_STANDBY_REG_MAX_NUM];
} xmedia_sensor_standby_info;
// reflect the hightest supported specifications
typedef struct {
xmedia_u32 max_width;
xmedia_u32 max_height;
xmedia_float max_fps;
xmedia_intf_type output_intf;
xmedia_sensor_clock_freq init_mclk;
xmedia_video_wdr_mode wdr_mode;
xmedia_video_wdr_format wdr_format;
xmedia_video_data_width bit_width; // max bit width
xmedia_u32 reset_time; // unit: us
// slave mode supported by the driver
xmedia_bool slave_mode_supported;
// all mipi lanes supported by the driver
xmedia_u32 mipi_lanes_supported; // BIT0: 1LANE; BIT1: 2LANE; BIT2: 4LANE; BIT3: 8LANE;
xmedia_sensor_standby_info standby_info;
} xmedia_sensor_capability;
typedef struct {
// called by ISP
xmedia_s32 (*pfn_sensor_init)(xmedia_u32 dev, xmedia_sensor_init_mode init_mode);
xmedia_s32 (*pfn_sensor_exit)(xmedia_u32 dev);
xmedia_s32 (*pfn_sensor_set_attr)(xmedia_u32 dev, const xmedia_sensor_attr *sns_attr);
xmedia_s32 (*pfn_sensor_get_isp_default)(xmedia_u32 dev, xmedia_sensor_isp_default *isp_def);
xmedia_s32 (*pfn_sensor_get_isp_black_level)(xmedia_u32 dev, xmedia_sensor_black_level *black_level);
xmedia_s32 (*pfn_sensor_get_reg_info)(xmedia_u32 dev, xmedia_sensor_regs_info *sns_regs_info);
xmedia_s32 (*pfn_sensor_get_bayer_pattern)(xmedia_u32 dev, xmedia_video_bayer_format *bayer_pattern);
xmedia_s32 (*pfn_sensor_get_capability)(xmedia_sensor_capability *capability);
xmedia_s32 (*pfn_sensor_get_fps)(xmedia_u32 dev, xmedia_float *fps, xmedia_float *min_fps, xmedia_float *max_fps);
xmedia_s32 (*pfn_sensor_get_hmax_vmax)(xmedia_u32 dev, xmedia_u32 *hmax, xmedia_u32*vmax);
xmedia_s32 (*pfn_sensor_get_trig_attr)(xmedia_sensor_trig_attr *trig_attr);
xmedia_s32 (*pfn_sensor_get_dev_addr)(xmedia_u32 dev, xmedia_u32 *slave_addr);
xmedia_s32 (*pfn_sensor_update_reg_info)(xmedia_u32 dev, xmedia_sensor_regs_info *cur_info,
xmedia_sensor_regs_info *pre_info);
xmedia_s32 (*pfn_sensor_get_pdaf_info)(xmedia_u32 dev, xmedia_sensor_pdaf_info *pdaf_info);
xmedia_s32 (*pfn_sensor_format_pdaf)(xmedia_u32 dev, xmedia_void *pd_buff, xmedia_void *tmp_buff,
xmedia_video_size *size, xmedia_u8 bit_width);
xmedia_s32 (*pfn_sensor_calc_image_size)(xmedia_u32 dev, const xmedia_video_size *pd_size,
xmedia_video_size *image_size);
// Called by user
xmedia_s32 (*pfn_sensor_get_property)(xmedia_u32 dev, xmedia_sensor_property *property);
xmedia_s32 (*pfn_sensor_set_work_mode)(xmedia_u32 dev, xmedia_sensor_work_mode work_mode);
xmedia_s32 (*pfn_sensor_set_mipi_lanes)(xmedia_u32 dev, xmedia_sensor_mipi_lanes mipi_lanes);
xmedia_s32 (*pfn_sensor_mirror)(xmedia_u32 dev, xmedia_bool mirror_en);
xmedia_s32 (*pfn_sensor_flip)(xmedia_u32 dev, xmedia_bool flip_en);
xmedia_s32 (*pfn_sensor_set_bus_info)(xmedia_u32 dev, const xmedia_sensor_commbus *sns_bus_info);
xmedia_s32 (*pfn_sensor_set_dev_addr)(xmedia_u32 dev, xmedia_u32 slave_addr);
xmedia_s32 (*pfn_sensor_start)(xmedia_u32 dev);
xmedia_s32 (*pfn_sensor_stop)(xmedia_u32 dev);
xmedia_s32 (*pfn_sensor_standby)(xmedia_u32 dev);
xmedia_s32 (*pfn_sensor_resume)(xmedia_u32 dev);
xmedia_s32 (*pfn_sensor_write_reg)(xmedia_u32 dev, xmedia_u32 addr, xmedia_u32 data);
xmedia_s32 (*pfn_sensor_read_reg)(xmedia_u32 dev, xmedia_u32 addr, xmedia_u32 *data);
xmedia_s32 (*pfn_sensor_set_init_param)(xmedia_u32 dev, const xmedia_sensor_init_param *def_cfg);
xmedia_s32 (*pfn_sensor_low_power)(xmedia_u32 dev, xmedia_bool enable);
} xmedia_sensor_register_isp_func;
typedef struct {
// 曝光比索引按升序排列, 0: 次短帧比最短帧; XMEDIA_ISP_WDR_CHN_MAX_NUM - 1: 最长帧比次长帧
xmedia_u32 ratio[XMEDIA_ISP_WDR_EXP_RATIO_MAX_NUM];
// 索引按升序排列, 0: 最短帧; XMEDIA_ISP_WDR_CHN_MAX_NUM - 1: 最长帧;
xmedia_u32 max_inttime[XMEDIA_ISP_WDR_CHN_MAX_NUM];
// 索引按升序排列, 0: 最短帧; XMEDIA_ISP_WDR_CHN_MAX_NUM - 1: 最长帧;
xmedia_u32 min_inttime[XMEDIA_ISP_WDR_CHN_MAX_NUM];
} xmedia_sensor_ae_inttime_attr;
typedef struct {
xmedia_s32 (*pfn_sensor_get_ae_default)(xmedia_u32 dev, xmedia_isp_ae_sensor_default *ae_sns_dft);
xmedia_s32 (*pfn_sensor_set_fps)(xmedia_u32 dev, xmedia_float fps, xmedia_isp_ae_sensor_default *ae_sns_dft);
xmedia_s32 (*pfn_sensor_set_slow_framerate)(xmedia_u32 dev, xmedia_u32 full_lines,
xmedia_isp_ae_sensor_default *ae_sns_dft);
xmedia_s32 (*pfn_sensor_update_inttime)(xmedia_u32 dev, xmedia_u32 int_time);
xmedia_s32 (*pfn_sensor_calc_again)(xmedia_u32 dev, xmedia_u32 *again_lin, xmedia_u32 *again_db);
xmedia_s32 (*pfn_sensor_calc_dgain)(xmedia_u32 dev, xmedia_u32 *dgain_lin, xmedia_u32 *dgain_db);
xmedia_s32 (*pfn_sensor_update_gains)(xmedia_u32 dev, xmedia_u32 again, xmedia_u32 dgain);
xmedia_s32 (*pfn_sensor_get_max_inttime)(xmedia_u32 dev, xmedia_sensor_ae_inttime_attr *inittime_attr);
xmedia_s32 (*pfn_sensor_set_ae_wdr_attr)(xmedia_u32 dev, xmedia_isp_ae_wdr_mode ae_wdr_mode);
} xmedia_sensor_register_ae_func;
typedef struct {
xmedia_s32 (*pfn_sensor_get_awb_default)(xmedia_u32 dev, xmedia_isp_awb_sensor_default *awb_sns_dft);
xmedia_s32 (*pfn_sensor_set_color_temperature)(xmedia_u32 dev, xmedia_u32 ct);
} xmedia_sensor_register_awb_func;
typedef struct {
} xmedia_sensor_register_af_func;
typedef struct {
xmedia_u32 dev_id;
xmedia_sensor_register_ae_func func;
} xmedia_sensor_register_ae_info;
typedef struct {
xmedia_u32 dev_id;
xmedia_sensor_register_awb_func func;
} xmedia_sensor_register_awb_info;
typedef struct {
xmedia_u32 dev_id;
xmedia_sensor_register_af_func func;
} xmedia_sensor_register_af_info;
typedef struct {
xmedia_u32 dev_id; // sensor dev id
xmedia_char sensor_name[XMEDIA_SENSOR_NAME_MAX_SIZE];
xmedia_sensor_register_isp_func isp_func;
xmedia_sensor_register_awb_func awb_func;
xmedia_sensor_register_ae_func ae_func;
} xmedia_sensor_register_info;
#define XMEDIA_SENSOR_REGISTER_DRIVER(pipe, sensor) \
({ \
extern xmedia_s32 sensor##_register(xmedia_u32); \
sensor##_register(pipe); \
})
#define XMEDIA_SENSOR_UNREGISTER_DRIVER(pipe, sensor) \
({ \
extern xmedia_s32 sensor##_unregister(xmedia_u32); \
sensor##_unregister(pipe); \
})
#define XMEDIA_LENS_DEV_MAX_NUM XMEDIA_ISP_PIPE_MAX_NUM
#define XMEDIA_LENS_NAME_MAX_SIZE 128
typedef struct {
xmedia_s32 (*pfn_lens_init)(xmedia_u32 dev);
xmedia_s32 (*pfn_lens_exit)(xmedia_u32 dev);
xmedia_s32 (*pfn_lens_standby)(xmedia_u32 dev);
xmedia_s32 (*pfn_lens_resume)(xmedia_u32 dev);
xmedia_s32 (*pfn_lens_park)(xmedia_u32 dev);
xmedia_s32 (*pfn_lens_set_ircut)(xmedia_u32 dev, xmedia_bool enable);
} xmedia_lens_register_isp_func;
typedef struct {
xmedia_s32 (*pfn_lens_set_aperture)(xmedia_u32 dev, xmedia_u32 index);
xmedia_s32 (*pfn_lens_set_shutter)(xmedia_u32 dev, xmedia_bool enable);
} xmedia_lens_register_ae_func;
typedef struct {
} xmedia_lens_register_awb_func;
typedef struct {
xmedia_s32 (*pfn_lens_zoom_in)(xmedia_u32 dev, xmedia_u32 distance);
xmedia_s32 (*pfn_lens_zoom_out)(xmedia_u32 dev, xmedia_u32 distance);
xmedia_s32 (*pfn_lens_zoom_pi)(xmedia_u32 dev, xmedia_u32 pi); // 0: tele, 1:wide
xmedia_s32 (*pfn_lens_zoom_status)(xmedia_u32 dev);
xmedia_s32 (*pfn_lens_focus_near)(xmedia_u32 dev, xmedia_u32 distance);
xmedia_s32 (*pfn_lens_focus_far)(xmedia_u32 dev, xmedia_u32 distance);
xmedia_s32 (*pfn_lens_focus_pi)(xmedia_u32 dev, xmedia_u32 pi); // 0: near, 1:far
xmedia_s32 (*pfn_lens_focus_status)(xmedia_u32 dev);
} xmedia_lens_register_af_func;
typedef struct {
xmedia_u32 dev_id;
xmedia_lens_register_ae_func func;
} xmedia_lens_register_ae_info;
typedef struct {
xmedia_u32 dev_id;
xmedia_lens_register_awb_func func;
} xmedia_lens_register_awb_info;
typedef struct {
xmedia_u32 dev_id;
xmedia_lens_register_af_func func;
} xmedia_lens_register_af_info;
typedef struct {
xmedia_u32 dev_id;
xmedia_char lens_name[XMEDIA_LENS_NAME_MAX_SIZE];
xmedia_lens_register_isp_func isp_func;
xmedia_lens_register_awb_func awb_func;
xmedia_lens_register_ae_func ae_func;
xmedia_lens_register_af_func af_func;
} xmedia_lens_register_info;
#define XMEDIA_LENS_REGISTER_DRIVER(pipe, lens) \
({ \
extern xmedia_s32 lens##_register(xmedia_u32); \
lens##_register(pipe); \
})
#define XMEDIA_LENS_UNREGISTER_DRIVER(pipe, lens) \
({ \
extern xmedia_s32 lens##_unregister(xmedia_u32); \
lens##_unregister(pipe); \
})
/*
* 函数功能: 初始化sensor
* 函数参数:
* pipe - 输入参数,pipe号
* cfg - 输入参数,sensor初始化配置参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_EXIST - sensor重复初始化
*/
xmedia_s32 xmedia_sensor_init(xmedia_u32 pipe, xmedia_sensor_config *cfg);
/*
* 函数功能: 反初始化sensor
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* XMEDIA_ERRCODE_NOT_INIT - sensor未初始化
*/
xmedia_s32 xmedia_sensor_exit(xmedia_u32 pipe);
/*
* 函数功能: 获取当前规格下sensor的属性
* 函数参数:
* pipe - 输入参数,pipe号
* property - 输出参数,sensor当前规格下的属性配置
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* 注意: 建议先调用xmedia_sensor_set_attr,然后再调用此接口获取属性
*/
xmedia_s32 xmedia_sensor_get_property(xmedia_u32 pipe, xmedia_sensor_property *property);
/*
* 函数功能: 获取当前sensor的能力集
* 函数参数:
* pipe - 输入参数,pipe号
* capability - 输出参数,sensor的当前能力集
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
*/
xmedia_s32 xmedia_sensor_get_capability(xmedia_u32 pipe, xmedia_sensor_capability *capability);
/*
* 函数功能: 配置sensor工作模式
* 函数参数:
* pipe - 输入参数,pipe号
* work_mode - 输入参数,sensor工作模式
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:默认sensor工作在主模式,因此主模式时为非必调接口, 从模式时为必调接口
* xmedia_sensor_init后xmedia_sensor_start前调用
*/
xmedia_s32 xmedia_sensor_set_work_mode(xmedia_u32 pipe, xmedia_sensor_work_mode mode);
/*
* 函数功能: SLAVE模式下,配置Sensor与触发信号的绑定关系
* 函数参数:
* pipe - 输入参数,pipe号
* signal - 输入参数,Sensor触发信号的类型和设备号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* 注意:SLAVE从模式下, 为必调接口, xmedia_sensor_init后xmedia_sensor_start前调用
*/
xmedia_s32 xmedia_sensor_set_trig_signal(xmedia_u32 pipe, xmedia_sensor_trig_signal *signal);
/*
* 函数功能: 配置sensor属性
* 函数参数:
* pipe - 输入参数,pipe号
* sns_attr - 输入参数,sensor属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意: xmedia_sensor_init后,xmedia_sensor_start前调用
*/
xmedia_s32 xmedia_sensor_set_attr(xmedia_u32 pipe, const xmedia_sensor_attr *sns_attr);
/*
* 函数功能: MIPI模式传输sensor数据时,配置MIPI Lane数
* 函数参数:
* pipe - 输入参数,pipe号
* mipi_lanes - 输入参数,sensor mipi lanes
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:xmedia_sensor_init后xmedia_sensor_start前调用
*/
xmedia_s32 xmedia_sensor_set_mipi_lanes(xmedia_u32 pipe, xmedia_sensor_mipi_lanes mipi_lanes);
/*
* 函数功能: 配置sensor寻址地址
* 函数参数:
* pipe - 输入参数,pipe号
* slave_addr - 输入参数,sensor 寻址地址
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口非必调接口,用于多路输入时,需一个I2C通过不同的寻址地址控制多个同型号sensor时调用;
*/
xmedia_s32 xmedia_sensor_set_dev_addr(xmedia_u32 pipe, xmedia_u32 slave_addr);
/*
* 函数功能: 获取sensor寻址地址
* 函数参数:
* pipe - 输入参数,pipe号
* slave_addr - 输出参数,sensor 寻址地址
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口非必调接口,用于获取当前pipe的sensor从设备的地址;
*/
xmedia_s32 xmedia_sensor_get_dev_addr(xmedia_u32 pipe, xmedia_u32 *slave_addr);
/*
* 函数功能: 创建sensor功能组
* 函数参数:
* group_cfg - 输入参数,group功能组的参数配置
* group - 输出参数,group功能组的handle
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
* 注意:该接口非必调接口,用于多路输入时,同类型功能的sensor创建功能组,以便于同步和同一操作;
* group的pipe_num数量不能低于XMEDIA_SENSOR_GROUP_MIN_PIPE_NUM。
* xmedia_sensor_init后xmedia_sensor_start前调用,如果是HOST_SLAVE/MASTER_SLAVE的功能组,
* 需要先通过xmedia_sensor_set_work_mode、xmedia_sensor_set_trig_signal配置主从模式和触发信号。
*/
xmedia_s32 xmedia_sensor_create_group(xmedia_sensor_group_config *group_cfg, xmedia_handle *group);
/*
* 函数功能: 销毁sensor功能组
* 函数参数:
* group - 输入参数,group功能组的handle
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_INVALID_GRP_ID - 无效group handle
* 注意:该接口非必调接口,如果创建了group功能组,需要功能组内每个sensor
* 在xmedia_sensor_stop后xmedia_sensor_exit前调用本接口。
*/
xmedia_s32 xmedia_sensor_destroy_group(xmedia_handle group);
/*
* 函数功能: 启动sensor
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:调用xmedia_sensor_start之前,需要先确保xmedia_isp_init已配置;
* sensor从模式下,还需确保xmedia_sensor_set_trig_signal已配置。
* 如果需要使用sensor group功能,需要确认group已创建。
*/
xmedia_s32 xmedia_sensor_start(xmedia_u32 pipe);
/*
* 函数功能: 停止sensor
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_INIT - 未初始化sensor
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口调用前,需确保xmedia_isp_init已配置
*/
xmedia_s32 xmedia_sensor_stop(xmedia_u32 pipe);
/*
* 函数功能: 待机sensor
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口调用前,需确保xmedia_isp_init已配置
*/
xmedia_s32 xmedia_sensor_standby(xmedia_u32 pipe);
/*
* 函数功能: 对standby状态下的sensor进行恢复操作
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口调用前,需确保xmedia_isp_init已配置
*/
xmedia_s32 xmedia_sensor_resume(xmedia_u32 pipe);
/*
* 函数功能: 对standby状态下的sensor 配置低功耗模式
* 函数参数:
* pipe - 输入参数,pipe号
* enable - 输入参数,sensor 低功耗使能开关, TRUE: 低功耗使能;FALSE:退出低功耗
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口调用前,需确保xmedia_sensor_standby已配置
*/
xmedia_s32 xmedia_sensor_low_power(xmedia_u32 pipe, xmedia_bool enable);
/*
* 函数功能: 配置sensor镜像模式
* 函数参数:
* pipe - 输入参数,pipe号
* enable - 输入参数,镜像模式使能开关,TRUE:镜像模式;FALSE:非镜像模式
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口调用前,需确保xmedia_sensor_start已配置
*/
xmedia_s32 xmedia_sensor_mirror(xmedia_u32 pipe, xmedia_bool enable);
/*
* 函数功能: 配置sensor翻转模式
* 函数参数:
* pipe - 输入参数,pipe号
* enable - 输入参数,翻转模式使能开关,TRUE:翻转模式;FALSE:非翻转模式
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口调用前,需确保xmedia_sensor_start已配置
*/
xmedia_s32 xmedia_sensor_flip(xmedia_u32 pipe, xmedia_bool enable);
/*
* 函数功能: 写sensor寄存器操作
* 函数参数:
* pipe - 输入参数,pipe号
* addr - 输入参数,待写寄存器的地址
* data - 输入参数,待写的寄存器的值
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_INIT - sensor未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* 注意:该接口调用前,需确保xmedia_sensor_init已配置
*
*/
xmedia_s32 xmedia_sensor_write_reg(xmedia_u32 pipe, xmedia_u32 addr, xmedia_u32 data);
/*
* 函数功能: 读sensor寄存器操作
* 函数参数:
* pipe - 输入参数,pipe号
* addr - 输入参数,待读的sensor寄存器地址
* data - 输出参数,sensor寄存器的值
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_INIT - sensor未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* 注意:该接口调用前,需确保xmedia_sensor_init已配置
*/
xmedia_s32 xmedia_sensor_read_reg(xmedia_u32 pipe, xmedia_u32 addr, xmedia_u32 *data);
/*
* 函数功能: 配置AE/AWB相关默认参数
* 函数参数:
* pipe - 输入参数,pipe号
* init_param - AE/AWB初始化参数结构体
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* 注意:该接口一般用于快启,默认参数一般通过标定获取
*/
xmedia_s32 xmedia_sensor_set_init_param(xmedia_u32 pipe, const xmedia_sensor_init_param *init_param);
/*
* 函数功能: 获取AE/AWB相关默认参数
* 函数参数:
* pipe - 输入参数,pipe号
* init_param - AE/AWB初始化参数结构体
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* 注意:该接口一般用于快启,获取MCU端的收敛结果
*/
xmedia_s32 xmedia_isp_get_sensor_init_param(xmedia_u32 pipe, xmedia_sensor_init_param *init_param);
/*
* 函数功能: 获取sensor的车规安全状态及信息
* 函数参数:
* pipe - 输入参数,pipe号
* status - 输出参数,当前的安全状态,其值可能是一种错误状态或几种错误状态的位或。
* info - 输出参数,与异常状态相关的详细信息。
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入sensor dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_SUPPORT - 此函数不支持
*/
xmedia_s32 xmedia_sensor_get_safety_status(xmedia_u32 pipe, xmedia_u32 *status, xmedia_u32 *info);
/*
* 函数功能: 初始化lens
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入lens dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - lens未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_EXIST - lens重复初始化
*/
xmedia_s32 xmedia_lens_init(xmedia_u32 pipe);
/*
* 函数功能: 反初始化lens
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入lens dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - lens未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
* XMEDIA_ERRCODE_NOT_INIT - lens未初始化
*/
xmedia_s32 xmedia_lens_exit(xmedia_u32 pipe);
/*
* 函数功能: 待机lens
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入lens dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - lens未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
*/
xmedia_s32 xmedia_lens_standby(xmedia_u32 pipe);
/*
* 函数功能: 对standby状态下的lens进行恢复操作
* 函数参数:
* pipe - 输入参数,pipe号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入lens dev无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - lens未注册
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的规格
* XMEDIA_ERRCODE_NOT_PERMITTED - 不被允许的操作
*/
xmedia_s32 xmedia_lens_resume(xmedia_u32 pipe);
/*
* 函数功能: 初始化ISP
* 函数参数:
* pipe - 输入参数,ISP 设备号
* cfg - 输入参数,ISP 初始化配置信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_READY - ISP设备未打开
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
* XMEDIA_ERRCODE_NOT_SUPPORT - 未注册sensor时, 访问或配置senosr相关接口或参数
* XMEDIA_ERRCODE_EXIST - 已初始化
* XMEDIA_ERRCODE_NOT_INIT - 未初始化
*/
xmedia_s32 xmedia_isp_init(xmedia_u32 pipe, xmedia_isp_config *cfg);
/*
* 函数功能: 退出ISP
* 函数参数:
* pipe - 输入参数,ISP 设备号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - 未初始化
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许, ISP停止前调用或重复退出
*/
xmedia_s32 xmedia_isp_exit(xmedia_u32 pipe);
/*
* 函数功能: 获取ISP初始化参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* cfg - 输出参数,ISP 初始化配置信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - 目标不存在
*/
xmedia_s32 xmedia_isp_get_config(xmedia_u32 pipe, xmedia_isp_config *cfg);
/*
* 函数功能: 使能和禁止ISP参数同步功能
* 函数参数:
* pipe - 输入参数,ISP 设备号
* enable - 输入参数,XMEDIA_TRUE 使能同步,XMEDIA_FALSE 禁止同步。
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_enable_sync(xmedia_u32 pipe, xmedia_bool enable);
/*
* 函数功能: ISP 启动
* 函数参数:
* pipe - 输入参数,ISP 设备号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_NOT_INIT - 未初始化
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
* 注意:启动前,需确保xmedia_isp_init已配置
*/
xmedia_s32 xmedia_isp_start(xmedia_u32 pipe);
/*
* 函数功能: ISP 停止
* 函数参数:
* pipe - 输入参数,ISP 设备号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
*/
xmedia_s32 xmedia_isp_stop(xmedia_u32 pipe);
/*
* 函数功能: ISP Firmware 停止/启动 run
* 函数参数:
* pipe - 输入参数,ISP 设备号
* freeze_en - 输入参数,冻结使能
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - 目标不存在
*/
xmedia_s32 xmedia_isp_freeze(xmedia_u32 pipe, xmedia_bool freeze_en);
/*
* 函数功能: 导出算法参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* module_info - 输出参数,算法模块信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
* XMEDIA_ERRCODE_NOT_EXIST - 目标不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
* XMEDIA_ERRCODE_NOT_INIT - 未初始化
*/
xmedia_s32 xmedia_isp_export(xmedia_u32 pipe, xmedia_isp_module_info module_info[XMEDIA_ISP_MODULE_MAX_NUM]);
/*
* 函数功能: 导入算法参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* module_info - 输入参数,算法模块信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
* XMEDIA_ERRCODE_NOT_EXIST - 目标不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
* XMEDIA_ERRCODE_NOT_INIT - 未初始化
*/
xmedia_s32 xmedia_isp_import(xmedia_u32 pipe, const xmedia_isp_module_info module_info[XMEDIA_ISP_MODULE_MAX_NUM]);
/*
* 函数功能: 配置图像属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* attr - 输入参数,图像属性信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - 目标不存在
* 注意:动态切换sensor帧率,分辨率,模式时调用
*/
xmedia_s32 xmedia_isp_set_attr(xmedia_u32 pipe, const xmedia_isp_attr *attr); // dynamic switch
/*
* 函数功能: 获取图像属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* attr - 输出参数,图像属性信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - 目标不存在
*/
xmedia_s32 xmedia_isp_get_attr(xmedia_u32 pipe, xmedia_isp_attr *attr);
/*
* 函数功能: ISP 提供的 sensor 注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* info - 输入参数,Sensor注册信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_EXIST - sensor已注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
*/
xmedia_s32 xmedia_isp_register_sensor(xmedia_u32 pipe, const xmedia_sensor_register_info *info);
/*
* 函数功能: ISP 提供的 sensor 反注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dev_id - 输入参数,向ISP注册的sensor设备号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入设备号无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - sensor未注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
*/
xmedia_s32 xmedia_isp_unregister_sensor(xmedia_u32 pipe, xmedia_u32 dev_id);
/*
* 函数功能: ISP 提供的 lens 注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* info - 输入参数,lens注册信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_EXIST - lens已注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
*/
xmedia_s32 xmedia_isp_register_lens(xmedia_u32 pipe, const xmedia_lens_register_info *info);
/*
* 函数功能: ISP 提供的 lens 反注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dev_id - 输入参数,向ISP注册的lens设备号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入设备号无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST - lens未注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
*/
xmedia_s32 xmedia_isp_unregister_lens(xmedia_u32 pipe, xmedia_u32 dev_id);
/*
* 函数功能: ISP 提供的 AE 库注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ae_info - 输入参数,AE库注册信息
* sensor_func - 输出参数,sensor向AE注册的信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_EXIST - AE库已注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
* 注意:AE向ISP注册前,需确保Sensor已经向ISP注册
*/
xmedia_s32 xmedia_isp_register_ae_lib(xmedia_u32 pipe, const xmedia_isp_ae_register_info *ae_info,
xmedia_sensor_register_ae_info *sensor_func);
/*
* 函数功能: ISP 提供的 AE 库反注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* name - 输入参数,AE向ISP注册的库的名字
* id - 输入参数,AE向ISP注册的CHID
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST- AE库未注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
*/
xmedia_s32 xmedia_isp_unregister_ae_lib(xmedia_u32 pipe, xmedia_char name[XMEDIA_ISP_ALG_NAME_MAX_SIZE], xmedia_s32 id);
/*
* 函数功能: ISP 提供的 AWB 库注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* awb_info - 输入参数,AWB向ISP注册的信息
* sensor_func - 输出参数,sensor向AWB注册的信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_EXIST - AWB库已注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
* 注意:AWB向ISP注册前,需确保Sensor已经向ISP注册
*/
xmedia_s32 xmedia_isp_register_awb_lib(xmedia_u32 pipe, const xmedia_isp_awb_register_info *awb_info,
xmedia_sensor_register_awb_info *sensor_func);
/*
* 函数功能: ISP 提供的 AWB 库反注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* name - 输入参数,AWB向ISP注册的库的名字
* id - 输入参数,AWB向ISP注册的CHID
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST- AWB库未注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
*/
xmedia_s32 xmedia_isp_unregister_awb_lib(xmedia_u32 pipe, xmedia_char name[XMEDIA_ISP_ALG_NAME_MAX_SIZE],
xmedia_s32 id);
/*
* 函数功能: ISP 提供的 AF 库注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* af_info - 输入参数,AF向ISP注册的信息
* sensor_func - 输出参数,sensor向AF注册的信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_EXIST - AF库已注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
* 注意:AF向ISP注册前,需确保Sensor已经向ISP注册
*
*/
xmedia_s32 xmedia_isp_register_af_lib(xmedia_u32 pipe, const xmedia_isp_af_register_info *af_info,
xmedia_lens_register_af_info *lens_func);
/*
* 函数功能: ISP 提供的 AF 库反注册的回调接口
* 函数参数:
* pipe - 输入参数,ISP 设备号
* name - 输入参数,AF向ISP注册的库的名字
* id - 输入参数,AF向ISP注册的CHID
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_EXIST- AF库未注册
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
*/
xmedia_s32 xmedia_isp_unregister_af_lib(xmedia_u32 pipe, xmedia_char name[XMEDIA_ISP_ALG_NAME_MAX_SIZE], xmedia_s32 id);
/*
* 函数功能: 设置多路 ISP Pipe 差异属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* differ - 输入参数,多路ISP差异属性结构体指针
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*
* 注意:该接口不是必调接口,用于多路ISP拼接模式对拼接效果要求更高时,可以通过标定工具
* 标定出多路 ISP 的亮度、颜色等差异,通过此接口配置减少多路 ISP 输出图像的差异。
* 该接口必须在 xmedia_isp_init 之后调用
*/
xmedia_s32 xmedia_isp_set_differ_attr(xmedia_u32 pipe, const xmedia_isp_diff_attr *differ);
/*
* 函数功能: 获取多路 ISP Pipe 差异属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* differ - 输出参数,多路 ISP 差异属性结构体指针
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*
* 注意:该接口不是必调接口,与 xmedia_isp_set_differ_attr 配套使用,可以获取对应配置的多路ISP差异参数
*/
xmedia_s32 xmedia_isp_get_differ_attr(xmedia_u32 pipe, xmedia_isp_diff_attr *differ);
/*
* 函数功能: 获取ISP中断信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* wait_type - 输入参数,等待的中断信号类型
* millisec - 输入参数,超时时间,单位ms
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_READY - ISP设备未打开
*/
xmedia_s32 xmedia_isp_wait_state(xmedia_u32 pipe, xmedia_isp_wait_type wait_type, xmedia_u32 millisec);
/*
* 函数功能: 设置 ISP 调试信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* isp_debug - 输入参数,调试配置信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_debug(xmedia_u32 pipe, const xmedia_isp_debug_info *isp_debug);
/*
* 函数功能: 获取 ISP 调试信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* isp_debug - 输出参数,调试配置信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_debug(xmedia_u32 pipe, xmedia_isp_debug_info *isp_debug);
/*
* 函数功能: 设置 ISP 控制参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* isp_ctrl_attr - 输入参数,控制信息结构体指针
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_ctrl_param(xmedia_u32 pipe, const xmedia_isp_ctrl_param *isp_ctrl_attr);
/*
* 函数功能: 获取 ISP 控制参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* isp_ctrl_attr - 输出参数,控制信息结构体指针
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_ctrl_param(xmedia_u32 pipe, xmedia_isp_ctrl_param *isp_ctrl_attr);
/*
* 函数功能: 向 ISP 模块传递智能信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* smart_info - 输入参数,智能信息结构体指针
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_smart_info(xmedia_u32 pipe, const xmedia_isp_smart_info *smart_info);
/*
* 函数功能: 从 ISP 模块获取智能信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* smart_info - 输出参数,智能信息结构体指针
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_smart_info(xmedia_u32 pipe, xmedia_isp_smart_info *smart_info);
/*
* 函数功能: 设置 ISP 3A 统计信息配置
* 函数参数:
* pipe - 输入参数,ISP 设备号
* stat_cfg - 输入参数,ISP 3A统计信息配置
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_statistics_config(xmedia_u32 pipe, const xmedia_isp_statistics_cfg *stat_cfg);
/*
* 函数功能: 获取 ISP 3A 统计信息配置
* 函数参数:
* pipe - 输入参数,ISP 设备号
* stat_cfg - 输出参数,ISP 3A统计信息配置
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*
*/
xmedia_s32 xmedia_isp_get_statistics_config(xmedia_u32 pipe, xmedia_isp_statistics_cfg *stat_cfg);
/*
* 函数功能: 获取 AE 统计信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ae_stat - 输出参数,AE统计信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_READY - ISP设备未打开
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
*
*/
xmedia_s32 xmedia_isp_get_ae_statistics(xmedia_u32 pipe, xmedia_isp_ae_statistics *ae_stat);
/*
* 函数功能: 获取 AE 融合统计信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ae_blend_stat - 输出参数,AE融合统计信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*
* 注意:非必调接口,用于获取多路ISP融合后AE的统计信息
*/
xmedia_s32 xmedia_isp_get_ae_blend_statistics(xmedia_u32 pipe, xmedia_isp_ae_blend_statistics *ae_blend_stat);
/*
* 函数功能: 获取 AWB 统计信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* awb_stat - 输出参数,AWB统计信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_READY - ISP设备未打开
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
*/
xmedia_s32 xmedia_isp_get_awb_statistics(xmedia_u32 pipe, xmedia_isp_awb_statistics *awb_stat);
/*
* 函数功能: 获取 AWB融合统计信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* awb_blend_stat - 输出参数,AWB融合统计信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*
* 注意:非必调接口,用于获取多路ISP融合后AWB的统计信息
*/
xmedia_s32 xmedia_isp_get_awb_blend_statistics(xmedia_u32 pipe, xmedia_isp_awb_blend_statistics *awb_blend_stat);
/*
* 函数功能: 获取 AF统计信息
* 函数参数:
* pipe - 输入参数,ISP 设备号
* af_stat - 输出参数, AF统计信息
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_READY - ISP设备未打开
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
*/
xmedia_s32 xmedia_isp_get_af_statistics(xmedia_u32 pipe, xmedia_isp_af_statistics *af_stat);
/*
* 函数功能: 设定算法调试属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* mode - 输入参数,算法调试属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* 注意:各算法模块调试模式是互斥的,同一时间仅一个模块调试模式设置有效
*/
xmedia_s32 xmedia_isp_set_debug_mode(xmedia_u32 pipe, const xmedia_isp_debug_mode *mode);
/*
* 函数功能: 获取算法调试属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* mode - 输出参数,算法调试属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_debug_mode(xmedia_u32 pipe, xmedia_isp_debug_mode *mode);
/*
* 函数功能: 设置高光遮蔽的属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* hlc_attr - 输入参数,图像的高光遮蔽属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*
*/
xmedia_s32 xmedia_isp_set_hlc_attr(xmedia_u32 pipe, const xmedia_isp_hlc_attr *hlc_attr);
/*
* 函数功能: 获取图像高光遮蔽的属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* hlc_attr - 输出参数,图像的高光遮蔽属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_hlc_attr(xmedia_u32 pipe, xmedia_isp_hlc_attr *hlc_attr);
/*
* 函数功能: 设置GAMMA属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* gamma_attr - 输入参数,gamma属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*
*/
xmedia_s32 xmedia_isp_set_gamma_attr(xmedia_u32 pipe, const xmedia_isp_gamma_attr *gamma_attr);
/*
* 函数功能: 获取gamma属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* gamma_attr - 输出参数,gamma属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_gamma_attr(xmedia_u32 pipe, xmedia_isp_gamma_attr *gamma_attr);
/*
* 函数功能: 设置动态范围压缩参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* drc_attr - 输入参数,DRC属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_drc_attr(xmedia_u32 pipe, const xmedia_isp_drc_attr *drc_attr);
/*
* 函数功能: 获取动态范围压缩参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* drc_attr - 输出参数,DRC属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_drc_attr(xmedia_u32 pipe, xmedia_isp_drc_attr *drc_attr);
/*
* 函数功能: 设置mesh shading算法参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* shading_attr - 输入参数,Mesh Shading 算法参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_mesh_shading_attr(xmedia_u32 pipe, const xmedia_isp_mesh_shading_attr *shading_attr);
/*
* 函数功能: 获取mesh shading算法参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* shading_attr - 输出参数,Mesh Shading 算法参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_mesh_shading_attr(xmedia_u32 pipe, xmedia_isp_mesh_shading_attr *shading_attr);
/*
* 函数功能: 设置mesh shading增益表属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* shading_gain_lut_attr - 输入参数,Mesh Shading增益表属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_mesh_shading_gain_lut_attr(xmedia_u32 pipe,
const xmedia_isp_mesh_shading_lut_attr *shading_gain_lut_attr);
/*
* 函数功能: 获取mesh shading增益表属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* shading_gain_lut_attr - 输出参数,Mesh Shading增益表属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_mesh_shading_gain_lut_attr(xmedia_u32 pipe,
xmedia_isp_mesh_shading_lut_attr *shading_gain_lut_attr);
/*
* 函数功能: 设置静态坏点标定参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dpc_calibrate - 输入参数,静态坏点标定参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* 注意:fpn标定, bpc标定, ainr, dis, pdaf功能互斥, 不能同时开启.
* 不同芯片版本的差异详见文档:ISP开发参考
*/
xmedia_s32 xmedia_isp_set_dpc_calibrate(xmedia_u32 pipe, const xmedia_isp_dpc_static_calibrate *dpc_calibrate);
/*
* 函数功能: 获取静态坏点标定参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dpc_calibrate - 输出参数,静态坏点标定参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_dpc_calibrate(xmedia_u32 pipe, xmedia_isp_dpc_static_calibrate *dpc_calibrate);
/*
* 函数功能: 设置静态坏点属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dpc_static_attr - 输入参数,静态坏点标定参数属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_dpc_static_attr(xmedia_u32 pipe, const xmedia_isp_dpc_static_attr *dpc_static_attr);
/*
* 函数功能: 获取静态坏点属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dpc_static_attr - 输出参数,静态坏点标定参数属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_dpc_static_attr(xmedia_u32 pipe, xmedia_isp_dpc_static_attr *dpc_static_attr);
/*
* 函数功能: 设置动态坏点属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dpc_dynamic_attr - 输入参数,动态坏点标定参数属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_dpc_dynamic_attr(xmedia_u32 pipe, const xmedia_isp_dpc_dynamic_attr *dpc_dynamic_attr);
/*
* 函数功能: 获取动态坏点属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dpc_dynamic_attr - 输出参数,动态坏点标定参数属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_dpc_dynamic_attr(xmedia_u32 pipe, xmedia_isp_dpc_dynamic_attr *dpc_dynamic_attr);
/*
* 函数功能: 设置crosstalk 属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* cr_attr - 输入参数,crosstalk 属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_crosstalk_attr(xmedia_u32 pipe, const xmedia_isp_cr_attr *cr_attr);
/*
* 函数功能: 获取crosstalk 属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* cr_attr - 输出参数,crosstalk 属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_crosstalk_attr(xmedia_u32 pipe, xmedia_isp_cr_attr *cr_attr);
/*
* 函数功能: 设置BNR属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* bnr_attr - 输入参数,BNR属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_bnr_attr(xmedia_u32 pipe, const xmedia_isp_bnr_attr *bnr_attr);
/*
* 函数功能: 获取BNR属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* bnr_attr - 输出参数,BNR属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_bnr_attr(xmedia_u32 pipe, xmedia_isp_bnr_attr *bnr_attr);
/*
* 函数功能: 设置去雾属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dehaze_attr - 输入参数,去雾属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_dehaze_attr(xmedia_u32 pipe, const xmedia_isp_dehaze_attr *dehaze_attr);
/*
* 函数功能: 获取去雾属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* dehaze_attr - 输出参数,去雾属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_dehaze_attr(xmedia_u32 pipe, xmedia_isp_dehaze_attr *dehaze_attr);
/*
* 函数功能: 设置DMS属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* demosaic_attr - 输入参数,去雾属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_demosaic_attr(xmedia_u32 pipe, const xmedia_isp_demosaic_attr *demosaic_attr);
/*
* 函数功能: 获取DMS属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* demosaic_attr - 输出参数,去雾属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_demosaic_attr(xmedia_u32 pipe, xmedia_isp_demosaic_attr *demosaic_attr);
/*
* 函数功能: 设置黑电平属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* black_level - 输入参数,黑电平属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_black_level_attr(xmedia_u32 pipe, const xmedia_isp_blc_attr *black_level);
/*
* 函数功能: 获取黑电平属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* black_level - 输出参数,黑电平属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_black_level_attr(xmedia_u32 pipe, xmedia_isp_blc_attr *black_level);
/*
* 函数功能: 设定去FPN标定属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* calibrate_attr - 输入参数,去 FPN 标定属性指针
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* 注意:fpn标定, bpc标定, ainr, dis, pdaf功能互斥, 不能同时开启.
* 不同芯片版本的差异详见文档:ISP开发参考
*/
xmedia_s32 xmedia_isp_set_fpn_calibrate(xmedia_u32 pipe, const xmedia_isp_fpn_calibrate_attr *calibrate_attr);
/*
* 函数功能: 设定去FPN属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* fpn_attr - 输入参数,FPN属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_fpn_attr(xmedia_u32 pipe, const xmedia_isp_fpn_attr *fpn_attr);
/*
* 函数功能: 获取去FPN属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* fpn_attr 输出参数,FPN属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_fpn_attr(xmedia_u32 pipe, xmedia_isp_fpn_attr *fpn_attr);
/*
* 函数功能: 设置横向色差校正参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* gcac_attr - 输入参数,横向色差校正参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_gcac_attr(xmedia_u32 pipe, const xmedia_isp_gcac_attr *gcac_attr);
/*
* 函数功能: 获取横向色差校正参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* gcac_attr - 输出参数,横向色差校正参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_gcac_attr(xmedia_u32 pipe, xmedia_isp_gcac_attr *gcac_attr);
/*
* 函数功能: 设置去除紫边参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* lcac_attr - 输入参数,去除紫边参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_lcac_attr(xmedia_u32 pipe, const xmedia_isp_lcac_attr *lcac_attr);
/*
* 函数功能: 获取去除紫边参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* lcac_attr - 输出参数,去除紫边参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_lcac_attr(xmedia_u32 pipe, xmedia_isp_lcac_attr *lcac_attr);
/*
* 函数功能: 设置去伪彩参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* anti_false_color_attr - 输入参数,去除紫边参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_anti_false_color_attr(xmedia_u32 pipe,
const xmedia_isp_anti_false_color_attr *anti_false_color_attr);
/*
* 函数功能: 获取去伪彩参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* anti_false_color_attr - 输出参数,去除紫边参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_anti_false_color_attr(xmedia_u32 pipe,
xmedia_isp_anti_false_color_attr *anti_false_color_attr);
/*
* 函数功能: 设置expander参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* expander_attr - 输入参数,expander参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_set_expander_attr(xmedia_u32 pipe, const xmedia_isp_expander_attr *expander_attr);
/*
* 函数功能: 获取expander参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* expander_attr - 输出参数,expander参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_expander_attr(xmedia_u32 pipe, xmedia_isp_expander_attr *expander_attr);
/*
* 函数功能: 设置WDR帧合成参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* wdr_attr - 输入参数,帧合成参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_set_wdr_attr(xmedia_u32 pipe, const xmedia_isp_wdr_attr *wdr_attr);
/*
* 函数功能: 获取WDR帧合成参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* wdr_attr - 输出参数,帧合成参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_wdr_attr(xmedia_u32 pipe, xmedia_isp_wdr_attr *wdr_attr);
/*
* 函数功能: 设置LCE属性参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* lce_attr - 输入参数,LCE属性参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_set_lce_attr(xmedia_u32 pipe, const xmedia_isp_lce_attr *lce_attr);
/*
* 函数功能: 获取Chroma Adjust属性参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ca_attr 输出参数,Chroma Adjust属性参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_ca_attr(xmedia_u32 pipe, xmedia_isp_ca_attr *ca_attr);
/*
* 函数功能: 设置Chroma Adjust属性参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ca_attr - 输入参数,Chroma Adjust属性参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_set_ca_attr(xmedia_u32 pipe, const xmedia_isp_ca_attr *ca_attr);
/*
* 函数功能: 获取LCE属性参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* lce_attr 输出参数,LCE属性参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_lce_attr(xmedia_u32 pipe, xmedia_isp_lce_attr *lce_attr);
/*
* 函数功能: 获取LCE信息参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* lce_info 输出参数,LCE信息参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_lce_info(xmedia_u32 pipe, xmedia_isp_lce_info *lce_info);
/*
* 函数功能: 设置Radial Crop的参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* rc_attr 输入参数,Radial Crop的参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_set_rc_attr(xmedia_u32 pipe, const xmedia_isp_rc_attr *rc_attr);
/*
* 函数功能: 获取Radial Crop的参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* rc_attr - 输出参数,Radial Crop的参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_get_rc_attr(xmedia_u32 pipe, xmedia_isp_rc_attr *rc_attr);
/*
* 函数功能: 设置 CSC(色彩空间转换) 的参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* csc_attr - 输入参数,CSC的属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_set_csc_attr(xmedia_u32 pipe, const xmedia_isp_csc_attr *csc_attr);
/*
* 函数功能: 设置 CSC(色彩空间转换) 的扩展参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* csc_ex_attr - 输入参数,CSC的扩展属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_set_csc_ex_attr(xmedia_u32 pipe, const xmedia_isp_csc_ex_attr *csc_ex_attr);
/*
* 函数功能: 获取 CSC(色彩空间转换) 的参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* csc_attr - 输出参数,CSC的属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_csc_attr(xmedia_u32 pipe, xmedia_isp_csc_attr *csc_attr);
/*
* 函数功能: 获取 CSC(色彩空间转换) 的扩展参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* csc_ex_attr - 输出参数,CSC的扩展属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_csc_ex_attr(xmedia_u32 pipe, xmedia_isp_csc_ex_attr *csc_ex_attr);
/*
* 函数功能: 设置 CLUT 的属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* clut_attr - 输入参数,CLUT 的属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_set_clut_attr(xmedia_u32 pipe, const xmedia_isp_clut_attr *clut_attr);
/*
* 函数功能: 获取 CLUT 的属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* clut_attr - 输出参数,CLUT 的属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_clut_attr(xmedia_u32 pipe, xmedia_isp_clut_attr *clut_attr);
/*
* 函数功能: 设定 Radial Shading 属性参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ra_shading_attr - 输入参数,Radial Shading 属性参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_set_radial_shading_attr(xmedia_u32 pipe, const xmedia_isp_radial_shading_attr *ra_shading_attr);
/*
* 函数功能: 获取Radial Shading 属性参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ra_shading_attr - 输出参数,Radial Shading 属性参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_radial_shading_attr(xmedia_u32 pipe, xmedia_isp_radial_shading_attr *ra_shading_attr);
/*
* 函数功能: 设置 Radial Shading 对应查找表参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ra_shading_lut_attr 输入参数,Radial Shading 对应查找表参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_set_radial_shading_lut(xmedia_u32 pipe,
const xmedia_isp_radial_shading_lut_attr *ra_shading_lut_attr);
/*
* 函数功能: 获取 Radial Shading 对应查找表参数
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ra_shading_lut_attr - 输出参数,Radial Shading 对应查找表参数
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
*/
xmedia_s32 xmedia_isp_get_radial_shading_lut(xmedia_u32 pipe, xmedia_isp_radial_shading_lut_attr *ra_shading_lut_attr);
/*
* 函数功能: 设定RGBIR属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* rgbir_attr - 输入参数,RGBIR属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_set_rgbir_attr(xmedia_u32 pipe, const xmedia_isp_rgbir_attr *rgbir_attr);
/*
* 函数功能: 获取RGBIR属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* rgbir_attr - 输出参数,RGBIR属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_get_rgbir_attr(xmedia_u32 pipe, xmedia_isp_rgbir_attr *rgbir_attr);
/*
* 函数功能: 设定SHARPEN属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* sharpen_attr - 输入参数,SHARPEN属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_set_sharpen_attr(xmedia_u32 pipe, const xmedia_isp_sharpen_attr *sharpen_attr);
/*
* 函数功能: 获取SHARPEN属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* sharpen_attr - 输出参数,SHARPEN属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_get_sharpen_attr(xmedia_u32 pipe, xmedia_isp_sharpen_attr *sharpen_attr);
/*
* 函数功能: 设定STNR属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* stnr_attr - 输入参数,STNR属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_set_stnr_attr(xmedia_u32 pipe, const xmedia_isp_stnr_attr *stnr_attr);
/*
* 函数功能: 获取STNR属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* stnr_attr - 输出参数,STNR属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_get_stnr_attr(xmedia_u32 pipe, xmedia_isp_stnr_attr *stnr_attr);
/*
* 函数功能: 加载AI ISP模型
* 函数参数:
* model - 输入参数,存储AI模型的buffer地址
* handle - 输出参数,AI模型加载成功后的句柄
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_BUFFER_FULL - 模型存储空间已满
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存分配失败
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
* 注意:该接口调用前,需确保xmedia_isp_init已调用。该接口不支持多进程调用。
*/
xmedia_s32 xmedia_isp_load_model(const xmedia_void *model, xmedia_handle *handle);
/*
* 函数功能: 卸载AI ISP模型
* 函数参数:
* handle - 输入参数,要卸载的AI模型句柄
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_NOT_PERMITTED - 模型未解除绑定,不允许卸载
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
* 注意:该接口调用前,需确保该模型已解除所有绑定。该接口不支持多进程调用。
*/
xmedia_s32 xmedia_isp_unload_model(xmedia_handle handle);
/*
* 函数功能: 绑定ISP和AI模型
* 函数参数:
* pipe - 输入参数,ISP 设备号
* handle - 输入参数,要绑定的AI模型句柄
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_BUFFER_FULL - 模型存储空间已满
* XMEDIA_ERRCODE_NOT_PERMITTED - 不允许绑定的情形
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
* 注意:该接口调用前,需确保xmedia_isp_init已调用。该接口不支持多进程调用。
*/
xmedia_s32 xmedia_isp_bind_model(xmedia_u32 pipe, xmedia_handle handle[XMEDIA_ISP_AI_MODEL_MAX_NUM]);
/*
* 函数功能: 解除ISP和AI模型绑定
* 函数参数:
* pipe - 输入参数,ISP 设备号
* handle - 输入参数,要绑定的AI模型句柄
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
* 注意:该接口调用时,该模型相关的业务将被停止。该接口不支持多进程调用。
*/
xmedia_s32 xmedia_isp_unbind_model(xmedia_u32 pipe, xmedia_handle handle[XMEDIA_ISP_AI_MODEL_MAX_NUM]);
/*
* 函数功能: 加载AINR模型
* 函数参数:
* pipe - 输入参数,ISP 设备号
* model - 输入参数,存储AINR模型的buffer地址
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
* 注意:该接口调用前,需确保xmedia_isp_init已配置
*/
xmedia_s32 xmedia_isp_load_ainr_model(xmedia_u32 pipe, const xmedia_void *model[XMEDIA_ISP_AINR_MODEL_MAX_NUM]);
/*
* 函数功能: 卸载AINR模型
* 函数参数:
* pipe - 输入参数,ISP 设备号
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_unload_ainr_model(xmedia_u32 pipe);
/*
* 函数功能: 设定AINR属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ainr_attr - 输入参数,AINR属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
* 注意:fpn标定, bpc标定, ainr, dis, pdaf功能互斥, 不能同时开启.
* 不同芯片版本的差异详见文档:ISP开发参考
*/
xmedia_s32 xmedia_isp_set_ainr_attr(xmedia_u32 pipe, const xmedia_isp_ainr_attr *ainr_attr);
/*
* 函数功能: 获取AINR属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* ainr_attr - 输出参数,AINR属性
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
* XMEDIA_ERRCODE_NOT_INIT - ISP未初始化
* XMEDIA_ERRCODE_NOT_SUPPORT - 当前版本不支持该功能
*/
xmedia_s32 xmedia_isp_get_ainr_attr(xmedia_u32 pipe, xmedia_isp_ainr_attr *ainr_attr);
/*
* 函数功能: 获取AINR状态属性
* 函数参数:
* pipe - 输入参数,ISP 设备号
* state - 输出参数,AINR 状态属性。TRUE: AINR已激活,FALSE: AINR未激活。
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
*/
xmedia_s32 xmedia_isp_get_ainr_state(xmedia_u32 pipe, xmedia_bool *state);
#ifdef __cplusplus
}
#endif
#endif // __XMEDIA_ISP_H__