Files
MilkV-Duo/freertos/cvitek/install/include/common/cvi_comm_isp.h
forum_service bf2d6014f8 freertos: version release v4.1.4
[Audio][Feature]Remove log for VQE config function
[Audio][Feature]Add VQE config function

Change-Id: Ib0c06db87375b17429bb125fbcee73018bdb6910
2023-12-21 16:52:10 +08:00

2668 lines
104 KiB
C

/*
* Copyright (C) Cvitek Co., Ltd. 2019-2022. All rights reserved.
*
* File Name: include/cvi_common_isp.h
* Description:
*/
#ifndef __CVI_COMM_ISP_H__
#define __CVI_COMM_ISP_H__
#include <stdint.h>
#include "cvi_comm_inc.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
#define CCM_MATRIX_SIZE (9)
#define CSC_MATRIX_SIZE (9)
#define CSC_OFFSET_SIZE (3)
#define AE_MAX_ZONE_ROW (30)
#define AE_MAX_ZONE_COLUMN (34)
#define AE_ZONE_ROW (30)
#define AE_ZONE_COLUMN (34)
#define AE_ZONE_NUM (AE_ZONE_ROW * AE_ZONE_COLUMN)
#define AE_MAX_NUM (1)
#define AWB_ZONE_ORIG_ROW (30)
#define AWB_ZONE_ORIG_COLUMN (34)
#define AWB_ZONE_MAX_COLUMN (34)
#define AWB_ZONE_NUM (AWB_ZONE_ORIG_ROW * AWB_ZONE_ORIG_COLUMN)
#define AWB_MAX_NUM (1)
#define HIST_BIN_DEPTH (8)
#define MAX_HIST_BINS (1 << HIST_BIN_DEPTH)
#define MAX_EXPOSURE_RATIO (256)
#define MAX_DRC_HIST_BINS (MAX_HIST_BINS * MAX_EXPOSURE_RATIO)
#define DCF_DRSCRIPTION_LENGTH (32)
#define DCF_CAPTURE_TIME_LENGTH (20)
#define ISP_AUTO_ISO_STRENGTH_NUM (16)
#define ISP_AUTO_EXP_RATIO_NUM (16)
#define ISP_AUTO_COLORTEMP_NUM (7)
#define CVI_ISP_LSC_GRID_COL (37)
#define CVI_ISP_LSC_GRID_ROW (37)
#define CVI_ISP_LSC_GRID_POINTS (CVI_ISP_LSC_GRID_COL * CVI_ISP_LSC_GRID_ROW)
#define DCI_BINS_NUM (256)
#define ISP_MAX_SNS_REGS 32
#define ISP_MAX_WDR_FRAME_NUM 2
#define BAYER_PATTERN_NUM 4
#define MG_ZONE_ROW (15)
#define MG_ZONE_COLUMN (17)
#define AF_ZONE_ROW (15)
#define AF_ZONE_COLUMN (17)
#define AF_XOFFSET_MIN (8)
#define AF_YOFFSET_MIN (2)
#define MAX_AWB_LIB_NUM (VI_MAX_PIPE_NUM)
#define MAX_AE_LIB_NUM (VI_MAX_PIPE_NUM)
#define LTM_DARK_CURVE_NODE_NUM (257)
#define LTM_BRIGHT_CURVE_NODE_NUM (513)
#define LTM_GLOBAL_CURVE_NODE_NUM (769)
#define ISP_3ALIB_FIND_FAIL (-1)
#define SHARPEN_LUT_NUM 33
#define MOTION_NR_TABLE_NUM 16
#define HIST_NUM 256
#define ISP_BASE_ADDR 0x0A000000
#define ISP_REG_RANGE 0x80000
#define DEHAZE_LUT_NUM 32
#define DIS_MAX_WINDOW_X_NUM 3
#define DIS_MAX_WINDOW_Y_NUM 3
#define XHIST_LENGTH 255 // 1024 bin
#define YHIST_LENGTH 255 // 512 bin
#define MIN_LV (-5)
#define MAX_LV (15)
#define LV_TOTAL_NUM (MAX_LV - MIN_LV + 1)
#define AE_LV_FACTOR (100)
#define ISP_AUTO_LV_NUM (LV_TOTAL_NUM)
/*Defines the format of the input Bayer image*/
typedef enum _ISP_BAYER_FORMAT_E {
BAYER_BGGR,
BAYER_GBRG,
BAYER_GRBG,
BAYER_RGGB,
//for RGBIR sensor
BAYER_GRGBI = 8,
BAYER_RGBGI,
BAYER_GBGRI,
BAYER_BGRGI,
BAYER_IGRGB,
BAYER_IRGBG,
BAYER_IBGRG,
BAYER_IGBGR,
BAYER_BUTT
} ISP_BAYER_FORMAT_E;
typedef enum _ISP_OP_TYPE_E {
OP_TYPE_AUTO,
OP_TYPE_MANUAL,
OP_TYPE_BUTT
} ISP_OP_TYPE_E;
typedef enum _ISP_FMW_STATE_E {
ISP_FMW_STATE_RUN,
ISP_FMW_STATE_FREEZE,
ISP_FMW_STATE_BUTT
} ISP_FMW_STATE_E;
typedef enum _ISP_CHANNEL_LIST_E {
ISP_CHANNEL_LE,
ISP_CHANNEL_SE,
ISP_CHANNEL_MAX_NUM,
} ISP_CHANNEL_LIST_E;
typedef enum _ISP_BAYER_CHANNEL_E {
ISP_BAYER_CHN_R,
ISP_BAYER_CHN_GR,
ISP_BAYER_CHN_GB,
ISP_BAYER_CHN_B,
ISP_BAYER_CHN_NUM,
} ISP_BAYER_CHANNEL_E;
typedef enum _ISP_SNS_TYPE_E {
SNS_I2C_TYPE,
SNS_SSP_TYPE,
SNS_TYPE_BUTT,
} ISP_SNS_TYPE_E;
typedef enum _ISP_WDR_FRAME_IDX_E {
ISP_WDR_FRAME_IDX_1,
ISP_WDR_FRAME_IDX_2,
ISP_WDR_FRAME_IDX_3,
ISP_WDR_FRAME_IDX_4,
ISP_WDR_FRAME_IDX_SIZE
} ISP_WDR_FRAME_IDX_E;
typedef union _ISP_SNS_COMMBUS_U {
CVI_S8 s8I2cDev;
struct {
CVI_S8 bit4SspDev : 4;
CVI_S8 bit4SspCs : 4;
} s8SspDev;
} ISP_SNS_COMMBUS_U;
typedef struct _ISP_I2C_DATA_S {
CVI_BOOL bUpdate;
CVI_BOOL bDropFrm;
CVI_BOOL bvblankUpdate;
CVI_U8 u8DelayFrmNum; /*RW; Number of delayed frames for the sensor register*/
CVI_U8 u8DropFrmNum; /*RW; Number of frame to drop*/
CVI_U8 u8IntPos; /*RW;Position where the configuration of the sensor register takes effect */
CVI_U8 u8DevAddr; /*RW;Sensor device address*/
CVI_U32 u32RegAddr; /*RW;Sensor register address*/
CVI_U32 u32AddrByteNum; /*RW;Bit width of the sensor register address*/
CVI_U32 u32Data; /*RW;Sensor register data*/
CVI_U32 u32DataByteNum; /*RW;Bit width of sensor register data*/
} ISP_I2C_DATA_S;
typedef struct _ISP_SSP_DATA_S {
CVI_BOOL bUpdate;
CVI_U8 u8DelayFrmNum; /*RW; Number of delayed frames for the sensor register*/
CVI_U8 u8IntPos; /*RW;Position where the configuration of the sensor register takes effect */
CVI_U32 u32DevAddr; /*RW;Sensor device address*/
CVI_U32 u32DevAddrByteNum; /*RW;Bit width of the sensor device address*/
CVI_U32 u32RegAddr; /*RW;Sensor register address*/
CVI_U32 u32RegAddrByteNum; /*RW;Bit width of the sensor register address*/
CVI_U32 u32Data; /*RW;Sensor register data*/
CVI_U32 u32DataByteNum; /*RW;Bit width of sensor register data*/
} ISP_SSP_DATA_S;
typedef struct _ISP_SNS_REGS_INFO_S {
ISP_SNS_TYPE_E enSnsType;
CVI_U32 u32RegNum;
CVI_U8 u8Cfg2ValidDelayMax;
ISP_SNS_COMMBUS_U unComBus;
union {
ISP_I2C_DATA_S astI2cData[ISP_MAX_SNS_REGS];
ISP_SSP_DATA_S astSspData[ISP_MAX_SNS_REGS];
};
struct {
CVI_BOOL bUpdate;
CVI_U8 u8DelayFrmNum;
CVI_U32 u32SlaveVsTime; /* RW;time of vsync. Unit: inck clock cycle */
CVI_U32 u32SlaveBindDev;
} stSlvSync;
CVI_BOOL bConfig;
CVI_U8 use_snsr_sram;
CVI_U8 need_update;
} ISP_SNS_REGS_INFO_S;
typedef enum _ISP_VD_TYPE_E {
ISP_VD_FE_START = 0,
ISP_VD_FE_END,
ISP_VD_BE_END,
ISP_VD_MAX
} ISP_VD_TYPE_E;
typedef struct _ISP_MANUAL_WDR_ATTR_S {
CVI_S32 devno;
CVI_S32 manual_en;
CVI_S16 l2s_distance;
CVI_S16 lsef_length;
CVI_S32 discard_padding_lines;
CVI_S32 update;
} ISP_MANUAL_WDR_ATTR_S;
typedef struct _ISP_SNS_CIF_INFO_S {
ISP_MANUAL_WDR_ATTR_S wdr_manual;
CVI_U8 u8DelayFrmNum; /*RW; Number of delayed frames for the cif setting */
CVI_U8 need_update;
} ISP_SNS_CIF_INFO_S;
typedef struct _ISP_WDR_SIZE_S {
RECT_S stWndRect;
SIZE_S stSnsSize;
SIZE_S stMaxSize;
} ISP_WDR_SIZE_S;
typedef struct _ISP_SNS_ISP_INFO_S {
CVI_U32 frm_num;
ISP_WDR_SIZE_S img_size[ISP_MAX_WDR_FRAME_NUM];
CVI_U8 u8DelayFrmNum; /*RW; Number of delayed frames for the isp setting */
CVI_U8 need_update;
} ISP_SNS_ISP_INFO_S;
typedef struct _ISP_SNS_SYNC_INFO_S {
ISP_SNS_REGS_INFO_S snsCfg;
ISP_SNS_ISP_INFO_S ispCfg;
ISP_SNS_CIF_INFO_S cifCfg;
} ISP_SNS_SYNC_INFO_S;
typedef struct _ISP_PUB_ATTR_S {
RECT_S stWndRect;
SIZE_S stSnsSize;
CVI_FLOAT f32FrameRate;
ISP_BAYER_FORMAT_E enBayer;
WDR_MODE_E enWDRMode;
CVI_U8 u8SnsMode;
} ISP_PUB_ATTR_S;
typedef struct _ISP_CTRL_PARAM_S {
CVI_U32 u32AEStatIntvl;
CVI_U32 u32AWBStatIntvl;
CVI_U32 u32AFStatIntvl;
CVI_U32 u32ProcParam;
CVI_U32 u32ProcLevel;
CVI_U32 u32UpdatePos;
CVI_U32 u32IntTimeOut;
CVI_U32 u32PwmNumber;
CVI_U32 u32PortIntDelay;
} ISP_CTRL_PARAM_S;
typedef union _ISP_MODULE_CTRL_U {
CVI_U64 u64Key;
struct {
CVI_U64 bitBypassBlc : 1; /*RW:[0]*/
CVI_U64 bitBypassRlsc : 1; /*RW:[1]*/
CVI_U64 bitBypassFpn : 1; /*RW:[2]*/
CVI_U64 bitBypassDpc : 1; /*RW:[3]*/
CVI_U64 bitBypassCrosstalk : 1; /*RW:[4]*/
CVI_U64 bitBypassWBGain : 1; /*RW:[5]*/
CVI_U64 bitBypassDis : 1; /*RW:[6]*/
CVI_U64 bitBypassBnr : 1; /*RW:[7]*/
CVI_U64 bitBypassDemosaic : 1; /*RW:[8]*/
CVI_U64 bitBypassRgbcac : 1; /*RW:[9]*/
CVI_U64 bitBypassLcac : 1; /*RW:[10]*/
CVI_U64 bitBypassMlsc : 1; /*RW:[11]*/
CVI_U64 bitBypassCcm : 1; /*RW:[12]*/
CVI_U64 bitBypassFusion : 1; /*RW:[13]*/
CVI_U64 bitBypassDrc : 1; /*RW:[14]*/
CVI_U64 bitBypassGamma : 1; /*RW:[15]*/
CVI_U64 bitBypassDehaze : 1; /*RW:[16]*/
CVI_U64 bitBypassClut : 1; /*RW:[17]*/
CVI_U64 bitBypassCsc : 1; /*RW:[18]*/
CVI_U64 bitBypassDci : 1; /*RW:[19]*/
CVI_U64 bitBypassLdci : 1; /*RW:[20]*/
CVI_U64 bitBypassCa : 1; /*RW:[21]*/
CVI_U64 bitBypassPreyee : 1; /*RW:[22]*/
CVI_U64 bitBypassMotion : 1; /*RW:[23]*/
CVI_U64 bitBypass3dnr : 1; /*RW:[24]*/
CVI_U64 bitBypassYnr : 1; /*RW:[25]*/
CVI_U64 bitBypassCnr : 1; /*RW:[26]*/
CVI_U64 bitBypassCac : 1; /*RW:[27]*/
CVI_U64 bitBypassCa2 : 1; /*RW:[28]*/
CVI_U64 bitBypassYee : 1; /*RW:[29]*/
CVI_U64 bitBypassYcontrast : 1; /*RW:[30]*/
CVI_U64 bitBypassMono : 1; /*RW:[31]*/
CVI_U64 bitRsv : 32; /*H; [32:63] */
};
} ISP_MODULE_CTRL_U;
typedef union _ISP_STATISTICS_CTRL_U {
CVI_U64 u64Key;
struct {
CVI_U64 bit1FEAeGloStat : 1; /* [0] */
CVI_U64 bit1FEAeLocStat : 1; /* [1] */
CVI_U64 bit1AwbStat1 : 1; /* [2] Awb Stat1 means global awb data. */
CVI_U64 bit1AwbStat2 : 1; /* [3] Awb Stat2 means local awb data. */
CVI_U64 bit1FEAfStat : 1; /* [4] */
CVI_U64 bit14Rsv : 59; /* [5:63] */
};
} ISP_STATISTICS_CTRL_U;
typedef enum _ISP_AE_STAT_MODE_E {
ISP_AE_MODE_BUTT,
} ISP_AE_STAT_MODE_E;
typedef enum _ISP_AE_SWITCH_E {
ISP_AE_SWITCH_BUTT,
} ISP_AE_SWITCH_E;
typedef enum _ISP_AE_FOUR_PLANE_MODE_E {
ISP_AE_FOUR_PLANE_MODE_BUTT,
} ISP_AE_FOUR_PLANE_MODE_E;
typedef enum _ISP_AE_HIST_SKIP_E {
ISP_AE_HIST_SKIP_BUTT,
} ISP_AE_HIST_SKIP_E;
typedef enum _ISP_AE_HIST_OFFSET_X_E {
ISP_AE_HIST_OFFSET_X_BUTT,
} ISP_AE_HIST_OFFSET_X_E;
typedef enum _ISP_AE_HIST_OFFSET_Y_E {
ISP_AE_HIST_OFFSET_Y_BUTT,
} ISP_AE_HIST_OFFSET_Y_E;
typedef enum _ISP_AE_ANTIFLICKER_FREQUENCE_E {
AE_FREQUENCE_60HZ = 0,
AE_FREQUENCE_50HZ,
} ISP_AE_ANTIFLICKER_FREQUENCE_E;
typedef enum _ISP_AE_METER_MODE_E {
AE_METER_MULTI = 0,
AE_METER_AVERAGE,
AE_METER_HIGHLIGHT_PRIORITY,
AE_METER_FISHEYE,
} ISP_AE_METER_MODE_E;
typedef enum _ISP_AE_IR_CUT_FORCE_STATUS {
AE_IR_CUT_FORCE_AUTO = 0,
AE_IR_CUT_FORCE_ON,
AE_IR_CUT_FORCE_OFF,
} ISP_AE_IR_CUT_FORCE_STATUS;
typedef enum _ISP_AE_GAIN_TYPE_E {
AE_TYPE_GAIN = 0,
AE_TYPE_ISO = 1,
AE_TYPE_BUTT
} ISP_AE_GAIN_TYPE_E;
typedef struct _ISP_AE_HIST_CONFIG_S {
ISP_AE_HIST_SKIP_E enHistSkipX;
ISP_AE_HIST_SKIP_E enHistSkipY;
ISP_AE_HIST_OFFSET_X_E enHistOffsetX;
ISP_AE_HIST_OFFSET_Y_E enHistOffsetY;
} ISP_AE_HIST_CONFIG_S;
typedef struct _ISP_3AWIN_CONFIG_S {
CVI_U16 winWidth;
CVI_U16 winHeight;
CVI_U16 winXOffset;
CVI_U16 winYOffset;
CVI_U8 winXNum;
CVI_U8 winYNum;
} ISP_3AWIN_CONFIG_S;
typedef struct _ISP_AE_CROP_S {
CVI_BOOL bEnable; /*RW; Range:[0x0,0x1]*/
CVI_U16 u16X; /*RW; Range:[0x00,0x1FFF]*/
CVI_U16 u16Y; /*RW; Range:[0x00,0x1FFF]*/
CVI_U16 u16W; /*RW; Range:[0x00,0x1FFF]*/
CVI_U16 u16H; /*RW; Range:[0x00,0x1FFF]*/
} ISP_AE_CROP_S;
typedef struct _ISP_AE_FACE_CROP_S {
CVI_BOOL bEnable; /*RW; Range:[0x0,0x1]*/
CVI_U16 u16X; /*RW; Range:[0x00,0x1FFF]*/
CVI_U16 u16Y; /*RW; Range:[0x00,0x1FFF]*/
CVI_U8 u16W; /*RW; Range:[0x00,0xFF]*/
CVI_U8 u16H; /*RW; Range:[0x00,0xFF]*/
} ISP_AE_FACE_CROP_S;
#define AE_WEIGHT_ZONE_ROW 15
#define AE_WEIGHT_ZONE_COLUMN 17
#define FACE_WIN_NUM 4
typedef struct _ISP_AE_STATISTICS_CFG_S {
CVI_BOOL bHisStatisticsEnable; /*RW; Range:[0x0,0x1]*/
ISP_AE_CROP_S stCrop[AE_MAX_NUM];
ISP_AE_FACE_CROP_S stFaceCrop[FACE_WIN_NUM];
CVI_BOOL fast2A_ena; /*RW; Range:[0x0,0x1]*/
CVI_U8 fast2A_ae_low; /*RW; Range:[0x0,0xFF]*/
CVI_U8 fast2A_ae_high; /*RW; Range:[0x0,0xFF]*/
CVI_U16 fast2A_awb_top; /*RW; Range:[0x0,0xFFF]*/
CVI_U16 fast2A_awb_bot; /*RW; Range:[0x0,0xFFF]*/
CVI_U16 over_exp_thr; /*RW; Range:[0x0,0x3FF]*/
CVI_U8 au8Weight[AE_WEIGHT_ZONE_ROW][AE_WEIGHT_ZONE_COLUMN]; /*RW; Range:[0x0, 0xF]*/
} ISP_AE_STATISTICS_CFG_S;
//-----------------------------------------------------------------------------
// IRIS
//-----------------------------------------------------------------------------
typedef enum _ISP_IRIS_TYPE_E {
ISP_IRIS_DC_TYPE = 0,
ISP_IRIS_P_TYPE,
ISP_IRIS_TYPE_BUTT,
} ISP_IRIS_TYPE_E;
typedef enum _ISP_IRIS_F_NO_E {
ISP_IRIS_F_NO_32_0 = 0,
ISP_IRIS_F_NO_22_0,
ISP_IRIS_F_NO_16_0,
ISP_IRIS_F_NO_11_0,
ISP_IRIS_F_NO_8_0,
ISP_IRIS_F_NO_5_6,
ISP_IRIS_F_NO_4_0,
ISP_IRIS_F_NO_2_8,
ISP_IRIS_F_NO_2_0,
ISP_IRIS_F_NO_1_4,
ISP_IRIS_F_NO_1_0,
ISP_IRIS_F_NO_BUTT,
} ISP_IRIS_F_NO_E;
typedef struct _ISP_DCIRIS_ATTR_S {
CVI_S32 s32Kp; /*RW; Range:[0x0, 0x186A0]*/
CVI_S32 s32Ki; /*RW; Range:[0x0, 0x3E8]*/
CVI_S32 s32Kd; /*RW; Range:[0x0, 0x186A0]*/
CVI_U32 u32MinPwmDuty; /*RW; Range:[0x0, 0x3E8]*/
CVI_U32 u32MaxPwmDuty; /*RW; Range:[0x0, 0x3E8]*/
CVI_U32 u32OpenPwmDuty; /*RW; Range:[0x0, 0x3E8]*/
} ISP_DCIRIS_ATTR_S;
#define AI_MAX_STEP_FNO_NUM (1024)
typedef struct _ISP_PIRIS_ATTR_S {
CVI_BOOL bStepFNOTableChange;
CVI_BOOL bZeroIsMax;
CVI_U16 u16TotalStep;
CVI_U16 u16StepCount;
CVI_U16 au16StepFNOTable[AI_MAX_STEP_FNO_NUM];
ISP_IRIS_F_NO_E enMaxIrisFNOTarget;
ISP_IRIS_F_NO_E enMinIrisFNOTarget;
CVI_BOOL bFNOExValid;
CVI_U32 u32MaxIrisFNOTarget;
CVI_U32 u32MinIrisFNOTarget;
} ISP_PIRIS_ATTR_S;
typedef struct _ISP_MI_ATTR_S {
CVI_U32 u32HoldValue; /*RW; Range:[0x0, 0x3E8]*/
ISP_IRIS_F_NO_E enIrisFNO; /*RW; Range:[0x0, 0xA]*/
} ISP_MI_ATTR_S;
typedef enum _ISP_IRIS_STATUS_E {
ISP_IRIS_KEEP = 0,
ISP_IRIS_OPEN = 1,
ISP_IRIS_CLOSE = 2,
ISP_IRIS_BUTT
} ISP_IRIS_STATUS_E;
typedef struct _ISP_IRIS_ATTR_S {
CVI_BOOL bEnable;
ISP_OP_TYPE_E enOpType;
ISP_IRIS_TYPE_E enIrisType;
ISP_IRIS_STATUS_E enIrisStatus;
ISP_MI_ATTR_S stMIAttr;
} ISP_IRIS_ATTR_S;
//-----------------------------------------------------------------------------
// AE Route
//-----------------------------------------------------------------------------
#define ISP_AE_ROUTE_MIN_NODES (1)
#define ISP_AE_ROUTE_MAX_NODES (16)
typedef struct _ISP_AE_ROUTE_NODE_S {
CVI_U32 u32IntTime; /*RW; Range:[0x0, 0x7FFFFFFF]*/
CVI_U32 u32SysGain; /*RW; Range:[0x400, 0x7FFFFFFF]*/
ISP_IRIS_F_NO_E enIrisFNO; /*RW; Range:[0x0, 0xA]*/
CVI_U32 u32IrisFNOLin; /*RW; Range:[0x1, 0x400]*/
} ISP_AE_ROUTE_NODE_S;
typedef struct _ISP_AE_ROUTE_S {
CVI_U32 u32TotalNum; /*RW; Range:[0x1, 0x10]*/
ISP_AE_ROUTE_NODE_S astRouteNode[ISP_AE_ROUTE_MAX_NODES];
} ISP_AE_ROUTE_S;
#define ISP_AE_ROUTE_EX_MIN_NODES (1)
#define ISP_AE_ROUTE_EX_MAX_NODES (16)
typedef struct _ISP_AE_ROUTE_EX_NODE_S {
CVI_U32 u32IntTime; /*RW; Range:[0x0, 0x7FFFFFFF]*/
CVI_U32 u32Again; /*RW; Range:[0x0, 0x7FFFFFFF]*/
CVI_U32 u32Dgain; /*RW; Range:[0x0, 0x7FFFFFFF]*/
CVI_U32 u32IspDgain; /*RW; Range:[0x0, 0x7FFFFFFF]*/
ISP_IRIS_F_NO_E enIrisFNO; /*RW; Range:[0x0, 0xA]*/
CVI_U32 u32IrisFNOLin; /*RW; Range:[0x0, 0x400]*/
} ISP_AE_ROUTE_EX_NODE_S;
typedef struct _ISP_AE_ROUTE_EX_S {
CVI_U32 u32TotalNum; /*RW; Range:[0x1, 0x10]*/
ISP_AE_ROUTE_EX_NODE_S astRouteExNode[ISP_AE_ROUTE_EX_MAX_NODES];
} ISP_AE_ROUTE_EX_S;
//-----------------------------------------------------------------------------
// Exposure Info
//-----------------------------------------------------------------------------
typedef struct _ISP_EXP_INFO_S {
CVI_U32 u32ExpTime; /*R;*/
CVI_U32 u32ShortExpTime; /*R;*/
CVI_U32 u32MedianExpTime; /*R;*/
CVI_U32 u32LongExpTime; /*R;*/
CVI_U32 u32AGain; /*R;*/
CVI_U32 u32DGain; /*R;*/
CVI_U32 u32ISPDGain; /*R;*/
CVI_U32 u32Exposure; /*R;*/
CVI_BOOL bExposureIsMAX; /*R;*/
CVI_S16 s16HistError; /*R;*/
CVI_U32 au32AE_Hist256Value[HIST_NUM]; /*R;*/
CVI_U8 u8AveLum; /*R;*/
CVI_U32 u32LinesPer500ms; /*R;*/
CVI_U32 u32PirisFNO; /*R;*/
CVI_U32 u32Fps; /*R;*/
CVI_U32 u32ISO; /*R;*/
CVI_U32 u32ISOCalibrate; /*R;*/
CVI_U32 u32RefExpRatio; /*R;*/
CVI_U32 u32FirstStableTime; /*R;*/
ISP_AE_ROUTE_S stAERoute; /*R;*/
ISP_AE_ROUTE_EX_S stAERouteEx; /*R;*/
CVI_U8 u8WDRShortAveLuma; /*R;*/
CVI_U32 u32WDRExpRatio; /*R;*/
CVI_U8 u8LEFrameAvgLuma; /*R;*/
CVI_U8 u8SEFrameAvgLuma; /*R;*/
CVI_FLOAT fLightValue; /*R;*/
CVI_U32 u32AGainSF; /*R;*/
CVI_U32 u32DGainSF; /*R;*/
CVI_U32 u32ISPDGainSF; /*R;*/
CVI_U32 u32ISOSF; /*R;*/
ISP_AE_ROUTE_S stAERouteSF; /*R;*/
ISP_AE_ROUTE_EX_S stAERouteSFEx; /*R;*/
CVI_BOOL bGainSepStatus; /*R;*/
} ISP_EXP_INFO_S;
#define SMART_MAX_NUM (3)
typedef struct _ISP_SMART_ROI_S {
CVI_BOOL bEnable;
CVI_BOOL bAvailable;
CVI_U8 u8Luma;
CVI_U8 u8Num;
CVI_U16 u16PosX[SMART_MAX_NUM];
CVI_U16 u16PosY[SMART_MAX_NUM];
CVI_U16 u16Width[SMART_MAX_NUM];
CVI_U16 u16Height[SMART_MAX_NUM];
CVI_U16 u16FrameWidth;
CVI_U16 u16FrameHeight;
} ISP_SMART_ROI_S;
#define SMART_CLASS_MAX (2)
typedef struct _ISP_SMART_INFO_S {
ISP_SMART_ROI_S stROI[SMART_CLASS_MAX];
} ISP_SMART_INFO_S;
//-----------------------------------------------------------------------------
// WDR Exposure Attr
//-----------------------------------------------------------------------------
#define WDR_EXP_RATIO_NUM (3)
typedef struct _ISP_WDR_EXPOSURE_ATTR_S {
ISP_OP_TYPE_E enExpRatioType;
CVI_U32 au32ExpRatio[WDR_EXP_RATIO_NUM]; /*RW; Range:[0x40, 0x4000]*/
CVI_U32 u32ExpRatioMax; /*RW; Range:[0x40, 0x4000]*/
CVI_U32 u32ExpRatioMin; /*RW; Range:[0x40, 0x4000]*/
CVI_U16 u16Tolerance; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 u16Speed; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 u16RatioBias; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U8 u8SECompensation; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 u16SEHisThr; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16SEHisCntRatio1; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16SEHisCntRatio2; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16SEHis255CntThr1; /*RW; Range:[0x0, 0x7FFFFFFF]*/
CVI_U16 u16SEHis255CntThr2; /*RW; Range:[0x0, 0x7FFFFFFF]*/
CVI_U8 au8LEAdjustTargetMin[LV_TOTAL_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 au8LEAdjustTargetMax[LV_TOTAL_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 au8SEAdjustTargetMin[LV_TOTAL_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 au8SEAdjustTargetMax[LV_TOTAL_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 u8AdjustTargetDetectFrmNum; /*RW; Range:[0x0, 0xFF]*/
CVI_U32 u32DiffPixelNum; /*RW; Range:[0x0, 0x7FFFFFFF]*/
CVI_U16 u16LELowBinThr; /*RW; Range:[0x0, 0x100]*/
CVI_U16 u16LEHighBinThr; /*RW; Range:[0x0, 0x100]*/
CVI_U16 u16SELowBinThr; /*RW; Range:[0x0, 0x100]*/
CVI_U16 u16SEHighBinThr; /*RW; Range:[0x0, 0x100]*/
CVI_U8 au8FrameAvgLumaMin[LV_TOTAL_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 au8FrameAvgLumaMax[LV_TOTAL_NUM]; /*RW; Range:[0x0, 0xFF]*/
} ISP_WDR_EXPOSURE_ATTR_S;
//-----------------------------------------------------------------------------
// Smart Exposure Attr
//-----------------------------------------------------------------------------
typedef struct _ISP_SMART_EXPOSURE_ATTR_S {
CVI_BOOL bEnable;
CVI_BOOL bIRMode;
ISP_OP_TYPE_E enSmartExpType;
CVI_U8 u8LumaTarget; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 u16ExpCoef; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16ExpCoefMax; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16ExpCoefMin; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U8 u8SmartInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 u8SmartSpeed; /*RW; Range:[0x1, 0xFF]*/
CVI_U16 u16SmartDelayNum; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 u8Weight; /*RW; Range:[0x0, 0x64]*/
CVI_U8 u8NarrowRatio; /*RW; Range:[0x0, 0x64]*/
} ISP_SMART_EXPOSURE_ATTR_S;
typedef enum _ISP_IR_STATUS_E {
ISP_IR_STATUS_NORMAL = 0,
ISP_IR_STATUS_IR = 1,
ISP_IR_BUTT
} ISP_IR_STATUS_E;
typedef enum _ISP_IR_SWITCH_STATUS_E {
ISP_IR_SWITCH_NONE = 0,
ISP_IR_SWITCH_TO_NORMAL = 1,
ISP_IR_SWITCH_TO_IR = 2,
ISP_IR_SWITCH_BUTT
} ISP_IR_SWITCH_STATUS_E;
typedef struct _ISP_IR_AUTO_ATTR_S {
CVI_BOOL bEnable;
CVI_U32 u32Normal2IrIsoThr;
CVI_U32 u32Ir2NormalIsoThr;
CVI_U32 u32RGMax;
CVI_U32 u32RGMin;
CVI_U32 u32BGMax;
CVI_U32 u32BGMin;
ISP_IR_STATUS_E enIrStatus;
ISP_IR_SWITCH_STATUS_E enIrSwitch;
} ISP_IR_AUTO_ATTR_S;
typedef struct _ISP_AWB_CROP_S {
CVI_BOOL bEnable;
CVI_U16 u16X; /*RW; Range:[0x0, 0x1000]*/
CVI_U16 u16Y; /*RW; Range:[0x0, 0x1000]*/
CVI_U16 u16W; /*RW; Range:[0x0, 0x1000]*/
CVI_U16 u16H; /*RW; Range:[0x0, 0x1000]*/
} ISP_AWB_CROP_S;
typedef enum _ISP_AWB_SWITCH_E {
ISP_AWB_AFTER_DG,
ISP_AWB_AFTER_DRC,
ISP_AWB_SWITCH_BUTT,
} ISP_AWB_SWITCH_E;
typedef enum _ISP_AWB_ALG_TYPE_E {
AWB_ALG_LOWCOST,
AWB_ALG_ADVANCE,
AWB_ALG_BUTT
} ISP_AWB_ALG_TYPE_E;
typedef enum _ISP_AWB_MULTI_LS_TYPE_E {
AWB_MULTI_LS_SAT,
AWB_MULTI_LS_CCM,
AWB_MULTI_LS_BUTT
} ISP_AWB_MULTI_LS_TYPE_E;
typedef enum _ISP_AWB_INDOOR_OUTDOOR_STATUS_E {
AWB_INDOOR_MODE,
AWB_OUTDOOR_MODE,
AWB_INDOOR_OUTDOOR_BUTT
} ISP_AWB_INDOOR_OUTDOOR_STATUS_E;
typedef struct _ISP_WB_STATISTICS_CFG_S {
ISP_AWB_SWITCH_E enAWBSwitch;
CVI_U16 u16ZoneRow; /*RW; Range:[0x0, AWB_ZONE_ORIG_ROW]*/
CVI_U16 u16ZoneCol; /*RW; Range:[0x0, AWB_ZONE_ORIG_COLUMN]*/
CVI_U16 u16ZoneBin;
CVI_U16 au16HistBinThresh[4];
CVI_U16 u16WhiteLevel; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 u16BlackLevel; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 u16CbMax;
CVI_U16 u16CbMin;
CVI_U16 u16CrMax;
CVI_U16 u16CrMin;
ISP_AWB_CROP_S stCrop;
} ISP_WB_STATISTICS_CFG_S;
#define FIR_H_GAIN_NUM (5)
#define FIR_V_GAIN_NUM (3)
#define AF_GAMMA_NUM (256)
// AF window X region must between [0x8 ~ image xsize - 8].
// Y region must between [0x2 ~ image ysize - 2].
typedef struct _ISP_AF_CROP_S {
CVI_BOOL bEnable;
CVI_U16 u16X; /*RW; Range:[0x8, 0xFFF]*/
CVI_U16 u16Y; /*RW; Range:[0x2, 0xFFF]*/
CVI_U16 u16W; /*RW; Range:[0x110, 0xFFF]*/
CVI_U16 u16H; /*RW; Range:[0xF0, 0xFFF]*/
} ISP_AF_CROP_S;
typedef struct _ISP_AF_RAW_CFG_S {
CVI_BOOL PreGammaEn;
CVI_U8 PreGammaTable[AF_GAMMA_NUM]; /*RW; Range:[0x0, 0xFF]*/
} ISP_AF_RAW_CFG_S;
typedef struct _ISP_AF_PRE_FILTER_CFG_S {
CVI_BOOL PreFltEn;
} ISP_AF_PRE_FILTER_CFG_S;
typedef struct _ISP_AF_CFG_S {
CVI_BOOL bEnable;
CVI_U16 u16Hwnd; /*RW; Range:[0x2, 0x11]*/
CVI_U16 u16Vwnd; /*RW; Range:[0x2, 0xF]*/
CVI_U8 u8HFltShift; /*RW; Range:[0x0, 0xF]*/
CVI_S8 s8HVFltLpCoeff[FIR_H_GAIN_NUM]; /*RW; Range:[0x0, 0x1F]*/
ISP_AF_RAW_CFG_S stRawCfg;
ISP_AF_PRE_FILTER_CFG_S stPreFltCfg;
ISP_AF_CROP_S stCrop;
CVI_U8 H0FltCoring; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 H1FltCoring; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 V0FltCoring; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 u16HighLumaTh; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 u8ThLow;
CVI_U8 u8ThHigh;
CVI_U8 u8GainLow; /*RW; Range:[0x0, 0xFE]*/
CVI_U8 u8GainHigh; /*RW; Range:[0x0, 0xFE]*/
CVI_U8 u8SlopLow; /*RW; Range:[0x0, 0xF]*/
CVI_U8 u8SlopHigh; /*RW; Range:[0x0, 0xF]*/
} ISP_AF_CFG_S;
typedef struct _ISP_AF_H_PARAM_S {
CVI_S8 s8HFltHpCoeff[FIR_H_GAIN_NUM]; /*RW; Range:[0x0, 0x1F]*/
} ISP_AF_H_PARAM_S;
typedef struct _ISP_AF_V_PARAM_S {
CVI_S8 s8VFltHpCoeff[FIR_V_GAIN_NUM]; /*RW; Range:[0x0, 0x1F]*/
} ISP_AF_V_PARAM_S;
typedef struct _ISP_FOCUS_STATISTICS_CFG_S {
ISP_AF_CFG_S stConfig;
ISP_AF_H_PARAM_S stHParam_FIR0;
ISP_AF_H_PARAM_S stHParam_FIR1;
ISP_AF_V_PARAM_S stVParam_FIR;
} ISP_FOCUS_STATISTICS_CFG_S;
typedef struct _ISP_STATISTICS_CFG_S {
ISP_STATISTICS_CTRL_U unKey;
ISP_AE_STATISTICS_CFG_S stAECfg;
ISP_WB_STATISTICS_CFG_S stWBCfg;
ISP_FOCUS_STATISTICS_CFG_S stFocusCfg;
} ISP_STATISTICS_CFG_S;
typedef struct _ISP_AE_GRID_INFO_S {
CVI_U16 au16GridYPos[AE_ZONE_ROW + 1];
CVI_U16 au16GridXPos[AE_ZONE_COLUMN + 1];
CVI_U8 u8Status;
} ISP_AE_GRID_INFO_S;
typedef struct _ISP_AE_STATISTICS_S {
CVI_U32 au32FEHist1024Value[ISP_CHANNEL_MAX_NUM][AE_MAX_NUM][MAX_HIST_BINS];
CVI_U16 au16FEGlobalAvg[ISP_CHANNEL_MAX_NUM][AE_MAX_NUM][BAYER_PATTERN_NUM];
CVI_U16 au16FEZoneAvg[ISP_CHANNEL_MAX_NUM][AE_MAX_NUM][AE_ZONE_ROW][AE_ZONE_COLUMN][BAYER_PATTERN_NUM];
CVI_U32 au32BEHist1024Value[MAX_HIST_BINS];
CVI_U16 au16BEGlobalAvg[BAYER_PATTERN_NUM];
CVI_U16 au16BEZoneAvg[AE_ZONE_ROW][AE_ZONE_COLUMN][BAYER_PATTERN_NUM];
ISP_AE_GRID_INFO_S stFEGridInfo;
} ISP_AE_STATISTICS_S;
typedef struct _ISP_AWB_GRID_INFO_S {
CVI_U16 au16GridYPos[AWB_ZONE_ORIG_ROW + 1];
CVI_U16 au16GridXPos[AWB_ZONE_ORIG_COLUMN + 1];
CVI_U8 u8Status;
} ISP_AWB_GRID_INFO_S;
typedef struct _ISP_WB_STATISTICS_S {
CVI_U16 u16GlobalR; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 u16GlobalG; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 u16GlobalB; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 u16CountAll; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 au16ZoneAvgR[AWB_ZONE_NUM]; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 au16ZoneAvgG[AWB_ZONE_NUM]; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 au16ZoneAvgB[AWB_ZONE_NUM]; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 au16ZoneCountAll[AWB_ZONE_NUM]; /*RW; Range:[0x0, 0xFFFF]*/
ISP_AWB_GRID_INFO_S stGridInfo;
} ISP_WB_STATISTICS_S;
typedef struct _ISP_FOCUS_ZONE_S {
CVI_U16 u16HlCnt;
CVI_U64 u64h0;
CVI_U64 u64h1;
CVI_U32 u32v0;
} ISP_FOCUS_ZONE_S;
typedef struct _ISP_FE_FOCUS_STATISTICS_S {
ISP_FOCUS_ZONE_S stZoneMetrics[AF_ZONE_ROW][AF_ZONE_COLUMN]; /*R; The zoned measure of contrast*/
} ISP_FE_FOCUS_STATISTICS_S;
typedef struct _ISP_AF_STATISTICS_S {
ISP_FE_FOCUS_STATISTICS_S stFEAFStat;
} ISP_AF_STATISTICS_S;
typedef struct _ISP_MG_STATISTICS_S {
CVI_U16 au16ZoneAvg[MG_ZONE_ROW][MG_ZONE_COLUMN][BAYER_PATTERN_NUM];
} ISP_MG_STATISTICS_S;
//-----------------------------------------------------------------------------
// WB Attr
//-----------------------------------------------------------------------------
#define AWB_CALIB_PTS_NUM (3)
#define AWB_CT_BIN_NUM (8)
typedef struct _ISP_AWB_LightBox_Gain_S {
CVI_U16 u16AvgRgain;
CVI_U16 u16AvgBgain;
} ISP_AWB_LightBox_Gain_S;
typedef struct _ISP_AWB_Calibration_Gain_S {
CVI_U16 u16AvgRgain[AWB_CALIB_PTS_NUM]; /*RW; Range:[0x0, 0x3FFF]*/
CVI_U16 u16AvgBgain[AWB_CALIB_PTS_NUM]; /*RW; Range:[0x0, 0x3FFF]*/
CVI_U16 u16ColorTemperature[AWB_CALIB_PTS_NUM]; /*RW; Range:[0x1F4, 0x7530]*/
} ISP_AWB_Calibration_Gain_S;
#define AWB_CALIB_PTS_NUM_EX (10)
typedef struct _ISP_AWB_Calibration_Gain_S_EX {
CVI_U16 u16AvgRgain[AWB_CALIB_PTS_NUM_EX]; /*RW; Range:[0x0, 0x3FFF]*/
CVI_U16 u16AvgBgain[AWB_CALIB_PTS_NUM_EX]; /*RW; Range:[0x0, 0x3FFF]*/
CVI_U16 u16ColorTemperature[AWB_CALIB_PTS_NUM_EX]; /*RW; Range:[0x1F4, 0x7530]*/
CVI_U8 u8Weight[AWB_CALIB_PTS_NUM_EX];
} ISP_AWB_Calibration_Gain_S_EX;
#define AWB_LUM_HIST_NUM (6)
typedef struct _ISP_AWB_LUM_HISTGRAM_ATTR_S {
CVI_BOOL bEnable;
ISP_OP_TYPE_E enOpType;
CVI_U8 au8HistThresh[AWB_LUM_HIST_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 au16HistWt[AWB_LUM_HIST_NUM]; /*RW; Range:[0x0, 0x200]*/
} ISP_AWB_LUM_HISTGRAM_ATTR_S;
typedef struct _ISP_AWB_CT_LIMIT_ATTR_S {
CVI_BOOL bEnable;
ISP_OP_TYPE_E enOpType;
CVI_U16 u16HighRgLimit; /*RW; Range:[0x0, 0x3FFF] H temp,Rgain max*/
CVI_U16 u16HighBgLimit; /*RW; Range:[0x0, 0x3FFF] H temp,Bgain max*/
CVI_U16 u16LowRgLimit; /*RW; Range:[0x0, 0x3FFF] Low temp,Rgain min*/
CVI_U16 u16LowBgLimit; /*RW; Range:[0x0, 0x3FFF] Low temp,Bgain min*/
} ISP_AWB_CT_LIMIT_ATTR_S;
typedef struct _ISP_AWB_CBCR_TRACK_ATTR_S {
CVI_BOOL bEnable;
CVI_U16 au16CrMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3FFF] R/G at L tmp*/
CVI_U16 au16CrMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3FFF] R/G at H tmp*/
CVI_U16 au16CbMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3FFF] B/G at H tmp*/
CVI_U16 au16CbMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3FFF] B/G at L tmp*/
} ISP_AWB_CBCR_TRACK_ATTR_S;
typedef struct _ISP_AWB_IN_OUT_ATTR_S {
CVI_BOOL bEnable;
ISP_OP_TYPE_E enOpType;
ISP_AWB_INDOOR_OUTDOOR_STATUS_E enOutdoorStatus;
CVI_U32 u32OutThresh; /*RW; Range:[0x0, 0x14]*/
CVI_U16 u16LowStart; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16LowStop; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16HighStart; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16HighStop; /*RW; Range:[0x0, 0xFFFF]*/
CVI_BOOL bGreenEnhanceEn;
CVI_U8 u8OutShiftLimit;
} ISP_AWB_IN_OUT_ATTR_S;
typedef struct _ISP_AWB_EXTRA_LIGHTSOURCE_INFO_S {
CVI_U16 u16WhiteRgain; /*RW; Range:[0x0, 0x3FFF]*/
CVI_U16 u16WhiteBgain; /*RW; Range:[0x0, 0x3FFF]*/
CVI_U16 u16ExpQuant; /*RW; Range:[0x0, 0xFFF]*/
CVI_U8 u8LightStatus; /*RW; Range:[0x0, 0x2]*/
CVI_U8 u8Radius; /*RW; Range:[0x1, 0xFF]*/
} ISP_AWB_EXTRA_LIGHTSOURCE_INFO_S;
struct ST_ISP_AWB_INTERFERENCE_S {
CVI_U8 u8Mode; /*RW; Range:[0x0, 0x1]*/
CVI_U8 u8Limit; /*RW; Range:[0x32, 0x64]*/
CVI_U8 u8Radius; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 u8Ratio; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 u8Distance; /*RW; Range:[0x1, 0xFF]*/
};
struct ST_ISP_AWB_SKIN_S {
CVI_U8 u8Mode;
CVI_U16 u16RgainDiff;
CVI_U16 u16BgainDiff;
CVI_U8 u8Radius;
};
struct ST_ISP_AWB_SKY_S {
CVI_U8 u8Mode;
CVI_U8 u8ThrLv;
CVI_U16 u16Rgain;
CVI_U16 u16Bgain;
CVI_U16 u16MapRgain;
CVI_U16 u16MapBgain;
CVI_U8 u8Radius;
};
struct ST_ISP_AWB_GRASS_S {
CVI_U8 u8Mode;
CVI_U8 u8ThrLv;
CVI_U16 u16Rgain;
CVI_U16 u16Bgain;
CVI_U16 u16MapRgain;
CVI_U16 u16MapBgain;
CVI_U8 u8Radius;
};
enum ISP_AWB_TEMP_E {
ISP_AWB_COLORTEMP_LOW,
ISP_AWB_COLORTEMP_HIGH,
ISP_AWB_COLORTEMP_NUM
};
struct ST_ISP_AWB_SHIFT_LV_S {
CVI_U8 u8LowLvMode; /*RW; Range:[0x0, 0x1]*/
CVI_U16 u16LowLvCT[ISP_AWB_COLORTEMP_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 u16LowLvThr[ISP_AWB_COLORTEMP_NUM]; /*RW; Range:[0x0, 0x5DC]*/
CVI_U16 u16LowLvRatio[ISP_AWB_COLORTEMP_NUM]; /*RW; Range:[0x64, 0x3E8]*/
CVI_U8 u8HighLvMode; /*RW; Range:[0x0, 0x1]*/
CVI_U16 u16HighLvCT[ISP_AWB_COLORTEMP_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 u16HighLvThr[ISP_AWB_COLORTEMP_NUM]; /*RW; Range:[0x0, 0x5DC]*/
CVI_U16 u16HighLvRatio[ISP_AWB_COLORTEMP_NUM]; /*RW; Range:[0x64, 0x3E8]*/
};
struct ST_ISP_AWB_REGION_S {
CVI_U16 u16Region1; /*RW; Range:[0x1, 0xFFFF]*/
CVI_U16 u16Region2; /*RW; Range:[0x1, 0xFFFF]*/
CVI_U16 u16Region3; /*RW; Range:[0x1, 0xFFFF]*/
};
#define AWB_CT_LV_NUM (4)
struct ST_ISP_AWB_CT_WGT_S {
CVI_BOOL bEnable;
CVI_U16 au16MultiCTBin[AWB_CT_BIN_NUM];//low to High ColorTemp
CVI_S8 s8ThrLv[AWB_CT_LV_NUM];//low to high light
CVI_U16 au16MultiCTWt[AWB_CT_LV_NUM][AWB_CT_BIN_NUM];//0~1024
};
#define AWB_CURVE_PARA_NUM (6)
#define AWB_CURVE_BOUND_NUM (8)
#define AWB_LS_NUM (4)
#define AWB_ZONE_WT_W (32)
#define AWB_ZONE_WT_H (32)
#define AWB_ZONE_WT_NUM (AWB_ZONE_WT_W * AWB_ZONE_WT_H)
typedef struct _ISP_AWB_ATTR_S {
CVI_BOOL bEnable;
CVI_U16 u16RefColorTemp; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 au16StaticWB[ISP_BAYER_CHN_NUM]; /*RW; Range:[0x0, 0xFFFF] G/R*/
CVI_S32 as32CurvePara[AWB_CURVE_PARA_NUM];
ISP_AWB_ALG_TYPE_E enAlgType;
CVI_U8 u8RGStrength;
CVI_U8 u8BGStrength;
CVI_U16 u16Speed; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 u16ZoneSel; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 u16HighColorTemp; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 u16LowColorTemp; /*RW; Range:[0x0, 0xFFFF]*/
ISP_AWB_CT_LIMIT_ATTR_S stCTLimit;
CVI_BOOL bShiftLimitEn;
CVI_U16 u16ShiftLimit[AWB_CURVE_BOUND_NUM]; /*RW; Range:[0x0, 0x3FF]*/
CVI_BOOL bGainNormEn;
CVI_BOOL bNaturalCastEn;
ISP_AWB_CBCR_TRACK_ATTR_S stCbCrTrack;// R/G
ISP_AWB_LUM_HISTGRAM_ATTR_S stLumaHist;
CVI_BOOL bAWBZoneWtEn;
CVI_U8 au8ZoneWt[AWB_ZONE_WT_NUM];
} ISP_AWB_ATTR_S;
typedef struct _ISP_AWB_ATTR_EX_S {
CVI_U8 u8Tolerance;
CVI_U8 u8ZoneRadius;
CVI_U16 u16CurveLLimit; /*RW; Range:[0x0, 0x400]*/
CVI_U16 u16CurveRLimit; /*RW; Range:[0x200, 0x3FFF]*/
CVI_BOOL bExtraLightEn;
ISP_AWB_EXTRA_LIGHTSOURCE_INFO_S stLightInfo[AWB_LS_NUM];
ISP_AWB_IN_OUT_ATTR_S stInOrOut;
CVI_BOOL bMultiLightSourceEn;
ISP_AWB_MULTI_LS_TYPE_E enMultiLSType;
CVI_U16 u16MultiLSScaler; /*RW; Range:[0x0, 0x100]*/
CVI_U16 u16MultiLSThr; /*RW; Range:[0x20, 0x200]*/
CVI_U16 u16CALumaDiff; /*RW; Range:[0x0, 0x100]*/
CVI_U16 u16CAAdjustRatio; /*RW; Range:[0x0, 0x10]*/
CVI_U16 au16MultiCTBin[AWB_CT_BIN_NUM]; /*RW; Range:[0x0, 0xFFFF]*/
CVI_U16 au16MultiCTWt[AWB_CT_BIN_NUM]; /*RW; Range:[0x0, 0x400]*/
CVI_BOOL bFineTunEn;
CVI_U8 u8FineTunStrength;
//AWB Algo 6
struct ST_ISP_AWB_INTERFERENCE_S stInterference;
struct ST_ISP_AWB_SKIN_S stSkin;
struct ST_ISP_AWB_SKY_S stSky;
struct ST_ISP_AWB_GRASS_S stGrass;
struct ST_ISP_AWB_CT_WGT_S stCtLv;
struct ST_ISP_AWB_SHIFT_LV_S stShiftLv;
struct ST_ISP_AWB_REGION_S stRegion;
CVI_U8 adjBgainMode;
} ISP_AWB_ATTR_EX_S;//keep size to 512 bytes
typedef struct _ISP_MWB_ATTR_S {
CVI_U16 u16Rgain; /*RW; Range:[0x1, 0x3FFF]*/
CVI_U16 u16Grgain; /*RW; Range:[0x1, 0x3FFF]*/
CVI_U16 u16Gbgain; /*RW; Range:[0x1, 0x3FFF]*/
CVI_U16 u16Bgain; /*RW; Range:[0x1, 0x3FFF]*/
} ISP_MWB_ATTR_S;
typedef enum _ISP_AWB_ALG_E {
ALG_AWB,
ALG_AWB_SPEC,
ALG_BUTT
} ISP_AWB_ALG_E;
typedef struct _ISP_WB_ATTR_S {
CVI_BOOL bByPass;
CVI_U8 u8AWBRunInterval; /*RW; Range:[0x1, 0xFF]*/
ISP_OP_TYPE_E enOpType;
ISP_MWB_ATTR_S stManual;
ISP_AWB_ATTR_S stAuto;
ISP_AWB_ALG_E enAlgType;
CVI_U8 u8DebugMode;
} ISP_WB_ATTR_S;
//-----------------------------------------------------------------------------
// WB Info
//-----------------------------------------------------------------------------
typedef struct _ISP_WB_INFO_S {
CVI_U16 u16Rgain; /*R; Range:[0x0, 0xFFF]*/
CVI_U16 u16Grgain; /*R; Range:[0x0, 0xFFF]*/
CVI_U16 u16Gbgain; /*R; Range:[0x0, 0xFFF]*/
CVI_U16 u16Bgain; /*R; Range:[0x0, 0xFFF]*/
CVI_U16 u16Saturation; /*R; Range:[0x0, 0xFF]*/
CVI_U16 u16ColorTemp; /*R;*/
CVI_U16 au16CCM[CCM_MATRIX_SIZE]; /*R;*/
CVI_U16 u16LS0CT; /*R;*/
CVI_U16 u16LS1CT; /*R;*/
CVI_U16 u16LS0Area; /*R;*/
CVI_U16 u16LS1Area; /*R;*/
CVI_U8 u8MultiDegree; /*R;*/
CVI_U16 u16ActiveShift; /*R;*/
CVI_U32 u32FirstStableTime; /*R;*/
ISP_AWB_INDOOR_OUTDOOR_STATUS_E enInOutStatus; /*R;*/
CVI_S16 s16Bv; /*R;*/
} ISP_WB_INFO_S;
typedef struct _ISP_DCF_CONST_INFO_S {
CVI_U8 au8ImageDescription[DCF_DRSCRIPTION_LENGTH]; /*Describes image*/
CVI_U8 au8Make[DCF_DRSCRIPTION_LENGTH]; /*Shows manufacturer of digital cameras*/
CVI_U8 au8Model[DCF_DRSCRIPTION_LENGTH]; /*Shows model number of digital cameras*/
CVI_U8 au8Software[DCF_DRSCRIPTION_LENGTH];
/*Shows firmware (internal software of digital cameras) version number*/
CVI_U8 u8LightSource;
CVI_U32 u32FocalLength; /*Focal length of lens used to take image. Unit is millimeter*/
CVI_U8 u8SceneType;
/*Indicates the type of scene. Value '0x01' means that the image was directly photographed.*/
CVI_U8 u8CustomRendered;
CVI_U8 u8FocalLengthIn35mmFilm; /*Indicates the equivalent focal length assuming a 35mm film camera, in mm*/
CVI_U8 u8SceneCaptureType;
CVI_U8 u8GainControl;
CVI_U8 u8Contrast;
CVI_U8 u8Saturation;
CVI_U8 u8Sharpness;
CVI_U8 u8MeteringMode;
} ISP_DCF_CONST_INFO_S;
typedef struct _ISP_DCF_UPDATE_INFO_S {
CVI_U32 u32ISOSpeedRatings; /*CCD sensitivity equivalent to Ag-Hr film speedrate*/
CVI_U32 u32ExposureTime; /*Exposure time (reciprocal of shutter speed).*/
CVI_U32 u32ExposureBiasValue; /*Exposure bias (compensation) value of taking picture*/
CVI_U8 u8ExposureProgram;
CVI_U32 u32FNumber; /*The actual F-number (F-stop) of lens when the image was taken*/
CVI_U32 u32MaxApertureValue; /*Maximum aperture value of lens.*/
CVI_U8 u8ExposureMode;
CVI_U8 u8WhiteBalance;
} ISP_DCF_UPDATE_INFO_S;
typedef struct _ISP_DCF_INFO_S {
ISP_DCF_CONST_INFO_S stIspDCFConstInfo;
ISP_DCF_UPDATE_INFO_S stIspDCFUpdateInfo;
} ISP_DCF_INFO_S;
typedef struct _ISP_MOD_PARAM_S {
CVI_U32 u32IntBotHalf;
} ISP_MOD_PARAM_S;
#if 0
typedef struct _ISP_MESHSHADING_MANUAL_ATTR_S {
CVI_U16 lsc_strength;
CVI_U16 lscr_strnth;
CVI_U16 lscr_gain_lut[32];
} ISP_MESHSHADING_MANUAL_ATTR_S;
typedef struct _ISP_MESHSHADING_AUTO_ATTR_S {
CVI_U16 lsc_strength[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 lscr_strnth[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 lscr_gain_lut[ISP_AUTO_ISO_STRENGTH_NUM][32];
} ISP_MESHSHADING_AUTO_ATTR_S;
typedef struct _ISP_MESHSHADING_ATTR_S {
CVI_BOOL lsc_enable;
CVI_U8 lsc_debug;
CVI_U8 lsc_xblknumm1;
CVI_U8 reg_lsc_yblknumm1;
CVI_U16 reg_lsc_xstep;
CVI_U16 reg_lsc_ystep;
CVI_U32 reg_lsc_imgx0;
CVI_U32 reg_lsc_imgy0;
CVI_U8 reg_lsc_gain_base;
CVI_U16 reg_lsc_scaler[256];
CVI_BOOL lscr_enable;
CVI_U16 lscr_centerx;
CVI_U16 lscr_centery;
CVI_U16 lscr_norm;
ISP_OP_TYPE_E enOpType;
ISP_MESHSHADING_MANUAL_ATTR_S stManual;
ISP_MESHSHADING_AUTO_ATTR_S stAuto;
} ISP_MESHSHADING_ATTR_S;
#endif
//-----------------------------------------------------------------------------
// Black Level Correction(BLC)
//-----------------------------------------------------------------------------
typedef struct _ISP_BLACK_LEVEL_MANUAL_ATTR_S {
CVI_U16 OffsetR; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetGr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetGb; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetB; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetR2; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetGr2; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetGb2; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetB2; /*RW; Range:[0x0, 0xfff]*/
} ISP_BLACK_LEVEL_MANUAL_ATTR_S;
typedef struct _ISP_BLACK_LEVEL_AUTO_ATTR_S {
CVI_U16 OffsetR[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetGr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetGb[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetB[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetR2[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetGr2[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetGb2[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 OffsetB2[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
} ISP_BLACK_LEVEL_AUTO_ATTR_S;
typedef struct _ISP_BLACK_LEVEL_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0x0, 0x1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
ISP_BLACK_LEVEL_MANUAL_ATTR_S stManual;
ISP_BLACK_LEVEL_AUTO_ATTR_S stAuto;
} ISP_BLACK_LEVEL_ATTR_S;
//-----------------------------------------------------------------------------
// Dead pixel correction(DPC)
//-----------------------------------------------------------------------------
typedef struct _ISP_DP_DYNAMIC_MANUAL_ATTR_S {
CVI_U8 ClusterSize; /*RW; Range:[0x0, 0x3]*/
CVI_U8 BrightDefectToNormalPixRatio; /*RW; Range:[0x0, 0xff]*/
CVI_U8 DarkDefectToNormalPixRatio; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreR; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreG; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreB; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreMinG; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreMinRB; /*RW; Range:[0x0, 0xff]*/
} ISP_DP_DYNAMIC_MANUAL_ATTR_S;
typedef struct _ISP_DP_DYNAMIC_AUTO_ATTR_S {
CVI_U8 ClusterSize[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3]*/
CVI_U8 BrightDefectToNormalPixRatio[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 DarkDefectToNormalPixRatio[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreR[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreG[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreB[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreMinG[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FlatThreMinRB[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_DP_DYNAMIC_AUTO_ATTR_S;
typedef struct _ISP_DP_DYNAMIC_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
CVI_U32 DynamicDPCEnable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
ISP_DP_DYNAMIC_MANUAL_ATTR_S stManual;
ISP_DP_DYNAMIC_AUTO_ATTR_S stAuto;
} ISP_DP_DYNAMIC_ATTR_S;
#define STATIC_DP_COUNT_MAX (4096)
typedef struct _ISP_DP_STATIC_ATTR_S {
CVI_BOOL Enable;
CVI_U16 BrightCount; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DarkCount; /*RW; Range:[0x0, 0xfff]*/
CVI_U32 BrightTable[STATIC_DP_COUNT_MAX]; /*RW; Range:[0x0, 0x1fff1fff]*/
CVI_U32 DarkTable[STATIC_DP_COUNT_MAX]; /*RW; Range:[0x0, 0x1fff1fff]*/
CVI_BOOL Show; // not support yet
} ISP_DP_STATIC_ATTR_S;
typedef enum _CVI_STATIC_DP_TYPE_E {
ISP_STATIC_DP_BRIGHT,
ISP_STATIC_DP_DARK,
} CVI_STATIC_DP_TYPE_E;
typedef enum _ISP_STATUS_E {
ISP_STATUS_INIT,
ISP_STATUS_SUCCESS,
ISP_STATUS_TIMEOUT,
ISP_STATUS_SIZE,
} ISP_STATUS_E;
typedef struct _ISP_DP_CALIB_ATTR_S {
CVI_BOOL EnableDetect;
CVI_STATIC_DP_TYPE_E StaticDPType;
CVI_U8 StartThresh; /*RW; Range:[0x0, 0xff]*/
CVI_U16 CountMax; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 CountMin; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 TimeLimit; /*RW; Range:[0x0, 0x640]*/
CVI_BOOL saveFileEn;
// read only
CVI_U32 Table[STATIC_DP_COUNT_MAX]; /*R; Range:[0x0, 0x1fff1fff]*/
CVI_U8 FinishThresh; /*R; Range:[0x0, 0xff]*/
CVI_U16 Count; /*R; Range:[0x0, 0xfff]*/
ISP_STATUS_E Status; /*R; Range:[0x0, 0x2]*/
} ISP_DP_CALIB_ATTR_S;
//-----------------------------------------------------------------------------
// Crosstalk
//-----------------------------------------------------------------------------
typedef struct _ISP_CROSSTALK_MANUAL_ATTR_S {
CVI_U16 Strength; /*RW; Range:[0x0, 0x100]*/
} ISP_CROSSTALK_MANUAL_ATTR_S;
typedef struct _ISP_CROSSTALK_AUTO_ATTR_S {
CVI_U16 Strength[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
} ISP_CROSSTALK_AUTO_ATTR_S;
typedef struct _ISP_CROSSTALK_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U16 GrGbDiffThreSec[4]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 FlatThre[4]; /*RW; Range:[0x0, 0xfff]*/
ISP_CROSSTALK_MANUAL_ATTR_S stManual;
ISP_CROSSTALK_AUTO_ATTR_S stAuto;
} ISP_CROSSTALK_ATTR_S;
//-----------------------------------------------------------------------------
// Bayer domain noise reduction (BNR)
//-----------------------------------------------------------------------------
typedef struct _ISP_NR_MANUAL_ATTR_S {
CVI_U8 WindowType; /*RW; Range:[0x0, 0xb]*/
CVI_U8 DetailSmoothMode; /*RW; Range:[0x0, 0x1]*/
CVI_U8 NoiseSuppressStr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FilterType; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseSuppressStrMode; /*RW; Range:[0x0, 0xff]*/
} ISP_NR_MANUAL_ATTR_S;
typedef struct _ISP_NR_AUTO_ATTR_S {
CVI_U8 WindowType[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xb]*/
CVI_U8 DetailSmoothMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1]*/
CVI_U8 NoiseSuppressStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FilterType[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseSuppressStrMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_NR_AUTO_ATTR_S;
typedef struct _ISP_NR_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_BOOL CoringParamEnable;
ISP_NR_MANUAL_ATTR_S stManual;
ISP_NR_AUTO_ATTR_S stAuto;
} ISP_NR_ATTR_S;
typedef struct _ISP_NR_FILTER_MANUAL_ATTR_S {
CVI_U8 LumaStr[8]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 VarThr; /*RW; Range:[0x0, 0xff]*/
CVI_U16 CoringWgtLF; /*RW; Range:[0x0, 0x100]*/
CVI_U16 CoringWgtHF; /*RW; Range:[0x0, 0x100]*/
CVI_U8 NonDirFiltStr; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 VhDirFiltStr; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 AaDirFiltStr; /*RW; Range:[0x0, 0x1f]*/
CVI_U16 NpSlopeR; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpSlopeGr; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpSlopeGb; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpSlopeB; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLumaThrR; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLumaThrGr; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLumaThrGb; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLumaThrB; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLowOffsetR; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLowOffsetGr; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLowOffsetGb; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLowOffsetB; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpHighOffsetR; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpHighOffsetGr; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpHighOffsetGb; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpHighOffsetB; /*RW; Range:[0x0, 0x3ff]*/
} ISP_NR_FILTER_MANUAL_ATTR_S;
typedef struct _ISP_NR_FILTER_AUTO_ATTR_S {
CVI_U8 LumaStr[8][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 VarThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 CoringWgtLF[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 CoringWgtHF[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U8 NonDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 VhDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 AaDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U16 NpSlopeR[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpSlopeGr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpSlopeGb[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpSlopeB[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLumaThrR[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLumaThrGr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLumaThrGb[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLumaThrB[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLowOffsetR[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLowOffsetGr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLowOffsetGb[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpLowOffsetB[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpHighOffsetR[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpHighOffsetGr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpHighOffsetGb[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
CVI_U16 NpHighOffsetB[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
} ISP_NR_FILTER_AUTO_ATTR_S;
typedef enum _ISP_NR_TUNING_MODE_E {
NR_RESULT = 8,
NR_EDGE_SMOOTH_REGION = 11,
} ISP_NR_TUNING_MODE_E;
typedef struct _ISP_NR_FILTER_ATTR_S {
CVI_U8 TuningMode; /*RW; Range:[0x0, 0xf]*/
ISP_NR_FILTER_MANUAL_ATTR_S stManual;
ISP_NR_FILTER_AUTO_ATTR_S stAuto;
} ISP_NR_FILTER_ATTR_S;
typedef struct _ISP_RLSC_MANUAL_ATTR_S {
CVI_U16 RadialStr; /*RW; Range:[0x0, 0xfff]*/
} ISP_RLSC_MANUAL_ATTR_S;
typedef struct _ISP_RLSC_AUTO_ATTR_S {
CVI_U16 RadialStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
} ISP_RLSC_AUTO_ATTR_S;
typedef struct _ISP_RLSC_ATTR_S {
CVI_BOOL RlscEnable; /*RW; Range:[0, 1]*/
CVI_U16 RlscCenterX; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 RlscCenterY; /*RW; Range:[0x0, 0xfff]*/
ISP_RLSC_MANUAL_ATTR_S stManual;
ISP_RLSC_AUTO_ATTR_S stAuto;
} ISP_RLSC_ATTR_S;
//-----------------------------------------------------------------------------
// Demosaic
//-----------------------------------------------------------------------------
typedef struct _ISP_DEMOSAIC_MANUAL_ATTR_S {
CVI_U16 CoarseEdgeThr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 CoarseStr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 FineEdgeThr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 FineStr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 RbSigLumaThd; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 FilterMode; /*RW; Range:[0, 1]*/
} ISP_DEMOSAIC_MANUAL_ATTR_S;
typedef struct _ISP_DEMOSAIC_AUTO_ATTR_S {
CVI_U16 CoarseEdgeThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 CoarseStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 FineEdgeThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 FineStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 RbSigLumaThd[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 FilterMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0, 1]*/
} ISP_DEMOSAIC_AUTO_ATTR_S;
typedef struct _ISP_DEMOSAIC_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
CVI_BOOL TuningMode; /*RW; Range:[0, 1]*/
CVI_BOOL RbVtEnable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
ISP_DEMOSAIC_MANUAL_ATTR_S stManual;
ISP_DEMOSAIC_AUTO_ATTR_S stAuto;
} ISP_DEMOSAIC_ATTR_S;
typedef struct _ISP_DEMOSAIC_DEMOIRE_MANUAL_ATTR_S {
CVI_U8 AntiFalseColorStr; /*RW; Range:[0x0, 0xff]*/
CVI_U16 SatGainIn[2]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 SatGainOut[2]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 ProtectColorGainIn[2]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 ProtectColorGainOut[2]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 UserDefineProtectColor1; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 UserDefineProtectColor2; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 UserDefineProtectColor3; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 EdgeGainIn[2]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 EdgeGainOut[2]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DetailGainIn[2]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DetailGaintOut[2]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DetailDetectLumaStr; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 DetailSmoothStr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 DetailWgtThr; /*RW; Range:[0x0, 0xff]*/
CVI_U16 DetailWgtMin; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DetailWgtMax; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DetailWgtSlope; /*RW; Range:[0x0, 0x400]*/
CVI_U8 EdgeWgtNp; /*RW; Range:[0x0, 0xff]*/
CVI_U8 EdgeWgtThr; /*RW; Range:[0x0, 0xff]*/
CVI_U16 EdgeWgtMin; /*RW; Range:[0x0, 0x100]*/
CVI_U16 EdgeWgtMax; /*RW; Range:[0x0, 0x100]*/
CVI_U16 EdgeWgtSlope; /*RW; Range:[0x0, 0x400]*/
CVI_U8 DetailSmoothMapTh; /*RW; Range:[0x0, 0xff]*/
CVI_U16 DetailSmoothMapMin; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DetailSmoothMapMax; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DetailSmoothMapSlope; /*RW; Range:[0x0, 0x400]*/
CVI_U8 LumaWgt; /*RW; Range:[0x0, 0xff]*/
} ISP_DEMOSAIC_DEMOIRE_MANUAL_ATTR_S;
typedef struct _ISP_DEMOSAIC_DEMOIRE_AUTO_ATTR_S {
CVI_U8 AntiFalseColorStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 SatGainIn[2][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 SatGainOut[2][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 ProtectColorGainIn[2][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 ProtectColorGainOut[2][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 UserDefineProtectColor1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 UserDefineProtectColor2[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 UserDefineProtectColor3[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 EdgeGainIn[2][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 EdgeGainOut[2][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DetailGainIn[2][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DetailGaintOut[2][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DetailDetectLumaStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 DetailSmoothStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 DetailWgtThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 DetailWgtMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DetailWgtMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DetailWgtSlope[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x400]*/
CVI_U8 EdgeWgtNp[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 EdgeWgtThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 EdgeWgtMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 EdgeWgtMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 EdgeWgtSlope[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x400]*/
CVI_U8 DetailSmoothMapTh[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 DetailSmoothMapMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DetailSmoothMapMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DetailSmoothMapSlope[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x400]*/
CVI_U8 LumaWgt[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_DEMOSAIC_DEMOIRE_AUTO_ATTR_S;
typedef struct _ISP_DEMOSAIC_DEMOIRE_ATTR_S {
CVI_BOOL AntiFalseColorEnable; /*RW; Range:[0, 1]*/
CVI_BOOL ProtectColorEnable; /*RW; Range:[0, 1]*/
CVI_BOOL DetailDetectLumaEnable; /*RW; Range:[0, 1]*/
CVI_BOOL DetailSmoothEnable; /*RW; Range:[0, 1]*/
CVI_BOOL DetailMode; /*RW; Range:[0, 1]*/
ISP_DEMOSAIC_DEMOIRE_MANUAL_ATTR_S stManual;
ISP_DEMOSAIC_DEMOIRE_AUTO_ATTR_S stAuto;
} ISP_DEMOSAIC_DEMOIRE_ATTR_S;
//-----------------------------------------------------------------------------
// RGBCAC
//-----------------------------------------------------------------------------
typedef struct _ISP_RGBCAC_MANUAL_ATTR_S {
CVI_U8 DePurpleStr0; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 DePurpleStr1; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 EdgeCoring; /*RW; Range:[0x0, 0xFFF]*/
CVI_U8 DePurpleCrStr0; /*RW; Range:[0x0, 0x10]*/
CVI_U8 DePurpleCbStr0; /*RW; Range:[0x0, 0x10]*/
CVI_U8 DePurpleCrStr1; /*RW; Range:[0x0, 0x10]*/
CVI_U8 DePurpleCbStr1; /*RW; Range:[0x0, 0x10]*/
} ISP_RGBCAC_MANUAL_ATTR_S;
typedef struct _ISP_RGBCAC_AUTO_ATTR_S {
CVI_U8 DePurpleStr0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 DePurpleStr1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 EdgeCoring[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFFF]*/
CVI_U8 DePurpleCrStr0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x10]*/
CVI_U8 DePurpleCbStr0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x10]*/
CVI_U8 DePurpleCrStr1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x10]*/
CVI_U8 DePurpleCbStr1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x10]*/
} ISP_RGBCAC_AUTO_ATTR_S;
typedef struct _ISP_RGBCAC_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 PurpleDetRange0; /*RW; Range:[0x0, 0x80]*/
CVI_U8 PurpleDetRange1; /*RW; Range:[0x0, 0x80]*/
CVI_U8 DePurpleStrMax0; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 DePurpleStrMin0; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 DePurpleStrMax1; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 DePurpleStrMin1; /*RW; Range:[0x0, 0xFF]*/
CVI_U16 EdgeGlobalGain; /*RW; Range:[0x0, 0xFFF]*/
CVI_U8 EdgeGainIn[3]; /*RW; Range:[0x0, 0x10]*/
CVI_U8 EdgeGainOut[3]; /*RW; Range:[0x0, 0x20]*/
CVI_U16 LumaScale; /*RW; Range:[0x0, 0x7FF]*/
CVI_U16 UserDefineLuma; /*RW; Range:[0x0, 0xFFF]*/
CVI_U8 LumaBlendWgt; /*RW; Range:[0x0, 0x20]*/
CVI_U8 LumaBlendWgt2; /*RW; Range:[0x0, 0x20]*/
CVI_U8 LumaBlendWgt3; /*RW; Range:[0x0, 0x20]*/
CVI_U16 PurpleCb; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 PurpleCr; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 PurpleCb2; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 PurpleCr2; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 PurpleCb3; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 PurpleCr3; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 GreenCb; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 GreenCr; /*RW; Range:[0x0, 0xFFF]*/
CVI_U8 TuningMode; /*RW; Range:[0x0, 0x2]*/
ISP_RGBCAC_MANUAL_ATTR_S stManual;
ISP_RGBCAC_AUTO_ATTR_S stAuto;
} ISP_RGBCAC_ATTR_S;
//-----------------------------------------------------------------------------
// LCAC
//-----------------------------------------------------------------------------
typedef struct _ISP_LCAC_GAUSS_COEF_ATTR_S {
CVI_U8 Wgt; /*RW; Range:[0x0, 0x80]*/
CVI_U8 Sigma; /*RW; Range:[0x1, 0xFF]*/
} ISP_LCAC_GAUSS_COEF_ATTR_S;
typedef struct _ISP_LCAC_MANUAL_ATTR_S {
CVI_U16 DePurpleCrGain; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 DePurpleCbGain; /*RW; Range:[0x0, 0xFFF]*/
CVI_U8 DePurepleCrWgt0; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurepleCbWgt0; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurepleCrWgt1; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurepleCbWgt1; /*RW; Range:[0x0, 0x40]*/
CVI_U8 EdgeCoringBase; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeCoringAdv; /*RW; Range:[0x0, 0xFF]*/
} ISP_LCAC_MANUAL_ATTR_S;
typedef struct _ISP_LCAC_AUTO_ATTR_S {
CVI_U16 DePurpleCrGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 DePurpleCbGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFFF]*/
CVI_U8 DePurepleCrWgt0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurepleCbWgt0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurepleCrWgt1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurepleCbWgt1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x40]*/
CVI_U8 EdgeCoringBase[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeCoringAdv[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
} ISP_LCAC_AUTO_ATTR_S;
typedef struct _ISP_LCAC_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 TuningMode; /*RW; Range:[0x0, 0x6]*/
CVI_U8 DePurpleCrStr0; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurpleCbStr0; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurpleCrStr1; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurpleCbStr1; /*RW; Range:[0x0, 0x40]*/
CVI_U8 FilterTypeBase; /*RW; Range:[0x0, 0x3]*/
CVI_U8 EdgeGainBase0; /*RW; Range:[0x0, 0x1C]*/
CVI_U8 EdgeGainBase1; /*RW; Range:[0x0, 0x23]*/
CVI_U8 EdgeStrWgtBase; /*RW; Range:[0x0, 0x10]*/
CVI_U8 DePurpleStrMaxBase; /*RW; Range:[0x0, 0x80]*/
CVI_U8 DePurpleStrMinBase; /*RW; Range:[0x0, 0x80]*/
CVI_U8 FilterScaleAdv; /*RW; Range:[0x0, 0xF]*/
CVI_U8 LumaWgt; /*RW; Range:[0x0, 0x40]*/
CVI_U8 FilterTypeAdv; /*RW; Range:[0x0, 0x5]*/
CVI_U8 EdgeGainAdv0; /*RW; Range:[0x0, 0x1C]*/
CVI_U8 EdgeGainAdv1; /*RW; Range:[0x0, 0x23]*/
CVI_U8 EdgeStrWgtAdvG; /*RW; Range:[0x0, 0x10]*/
CVI_U8 DePurpleStrMaxAdv; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 DePurpleStrMinAdv; /*RW; Range:[0x0, 0xFF]*/
ISP_LCAC_GAUSS_COEF_ATTR_S EdgeWgtBase;
ISP_LCAC_GAUSS_COEF_ATTR_S EdgeWgtAdv;
ISP_LCAC_MANUAL_ATTR_S stManual;
ISP_LCAC_AUTO_ATTR_S stAuto;
} ISP_LCAC_ATTR_S;
//-----------------------------------------------------------------------------
// Mesh lens shading correction (MLSC)
//-----------------------------------------------------------------------------
#define ISP_MLSC_COLOR_TEMPERATURE_SIZE (7)
typedef struct _ISP_MESH_SHADING_MANUAL_ATTR_S {
CVI_U16 MeshStr; /*RW; Range:[0x0, 0xfff]*/
} ISP_MESH_SHADING_MANUAL_ATTR_S;
typedef struct _ISP_MESH_SHADING_AUTO_ATTR_S {
CVI_U16 MeshStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
} ISP_MESH_SHADING_AUTO_ATTR_S;
typedef struct _ISP_MESH_SHADING_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_BOOL OverflowProtection;
ISP_MESH_SHADING_MANUAL_ATTR_S stManual;
ISP_MESH_SHADING_AUTO_ATTR_S stAuto;
} ISP_MESH_SHADING_ATTR_S;
typedef struct _ISP_MESH_SHADING_GAIN_LUT_S {
CVI_U16 ColorTemperature; /*RW; Range:[0x0, 0x7530]*/
CVI_U16 RGain[CVI_ISP_LSC_GRID_POINTS]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 GGain[CVI_ISP_LSC_GRID_POINTS]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 BGain[CVI_ISP_LSC_GRID_POINTS]; /*RW; Range:[0x0, 0xfff]*/
} ISP_MESH_SHADING_GAIN_LUT_S;
typedef struct _ISP_MESH_SHADING_GAIN_LUT_ATTR_S {
CVI_U8 Size; /*RW; Range:[0x1, 0x7]*/
ISP_MESH_SHADING_GAIN_LUT_S LscGainLut[ISP_MLSC_COLOR_TEMPERATURE_SIZE];
} ISP_MESH_SHADING_GAIN_LUT_ATTR_S;
//-----------------------------------------------------------------------------
// CCM
//-----------------------------------------------------------------------------
// Saturation
typedef struct _ISP_SATURATION_MANUAL_ATTR_S {
CVI_U8 Saturation; /*RW; Range:[0x0, 0xff]*/
} ISP_SATURATION_MANUAL_ATTR_S;
typedef struct _ISP_SATURATION_AUTO_ATTR_S {
CVI_U8 Saturation[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_SATURATION_AUTO_ATTR_S;
typedef struct _ISP_SATURATION_ATTR_SS {
ISP_OP_TYPE_E enOpType;
ISP_SATURATION_MANUAL_ATTR_S stManual;
ISP_SATURATION_AUTO_ATTR_S stAuto;
} ISP_SATURATION_ATTR_S;
// CCM Saturation
typedef struct _ISP_CCM_SATURATION_MANUAL_ATTR_S {
CVI_U8 SaturationLE; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SaturationSE; /*RW; Range:[0x0, 0xff]*/
} ISP_CCM_SATURATION_MANUAL_ATTR_S;
typedef struct _ISP_CCM_SATURATION_AUTO_ATTR_S {
CVI_U8 SaturationLE[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SaturationSE[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_CCM_SATURATION_AUTO_ATTR_S;
typedef struct _ISP_CCM_SATURATION_ATTR_SS {
ISP_CCM_SATURATION_MANUAL_ATTR_S stManual;
ISP_CCM_SATURATION_AUTO_ATTR_S stAuto;
} ISP_CCM_SATURATION_ATTR_S;
// CCM
typedef struct _ISP_COLORMATRIX_ATTR_S {
CVI_U16 ColorTemp; /*RW; Range:[0x1f4, 0x7530]*/
CVI_S16 CCM[9]; /*RW; Range:[-0x2000, 0x1FFF]*/
} ISP_COLORMATRIX_ATTR_S;
typedef struct _ISP_CCM_MANUAL_ATTR_S {
CVI_BOOL SatEnable; /*RW; Range:[0, 1]*/
CVI_S16 CCM[9]; /*RW; Range:[-0x2000, 0x1FFF]*/
} ISP_CCM_MANUAL_ATTR_S;
typedef struct _ISP_CCM_AUTO_ATTR_S {
CVI_BOOL ISOActEnable; /*RW; Range:[0, 1]*/
CVI_BOOL TempActEnable; /*RW; Range:[0, 1]*/
CVI_U8 CCMTabNum; /*RW; Range:[0x3, 0x7]*/
ISP_COLORMATRIX_ATTR_S CCMTab[7];
} ISP_CCM_AUTO_ATTR_S;
typedef struct _ISP_CCM_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
ISP_CCM_MANUAL_ATTR_S stManual;
ISP_CCM_AUTO_ATTR_S stAuto;
} ISP_CCM_ATTR_S;
//-----------------------------------------------------------------------------
// CSC
//-----------------------------------------------------------------------------
typedef enum _ISP_CSC_COLORGAMUT {
ISP_CSC_COLORGAMUT_BT601,
ISP_CSC_COLORGAMUT_BT709,
ISP_CSC_COLORGAMUT_BT2020,
ISP_CSC_COLORGAMUT_USER,
ISP_CSC_COLORGAMUT_NUM
} ISP_CSC_COLORGAMUT;
typedef struct _ISP_CSC_MATRX_S {
CVI_S16 userCscCoef[CSC_MATRIX_SIZE]; /*RW; Range:[-0x2000, 0x1FFF]*/
CVI_S16 userCscOffset[CSC_OFFSET_SIZE]; /*RW; Range:[-0x100, 0xFF]*/
} ISP_CSC_MATRX_S;
typedef struct _ISP_CSC_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_CSC_COLORGAMUT enColorGamut;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 Hue; /*RW; Range:[0, 0x64]*/
CVI_U8 Luma; /*RW; Range:[0, 0x64]*/
CVI_U8 Contrast; /*RW; Range:[0, 0x64]*/
CVI_U8 Saturation; /*RW; Range:[0, 0x64]*/
ISP_CSC_MATRX_S stUserMatrx;
} ISP_CSC_ATTR_S;
//-----------------------------------------------------------------------------
// Color tone
//-----------------------------------------------------------------------------
typedef struct _ISP_COLOR_TONE_ATTR_S {
CVI_U16 u16RedCastGain; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 u16GreenCastGain; /*RW; Range:[0x0, 0xFFF]*/
CVI_U16 u16BlueCastGain; /*RW; Range:[0x0, 0xFFF]*/
} ISP_COLOR_TONE_ATTR_S;
//-----------------------------------------------------------------------------
// FSWDR
//-----------------------------------------------------------------------------
typedef struct _ISP_FSWDR_MANUAL_ATTR_S {
CVI_U16 WDRCombineLongThr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 WDRCombineShortThr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 WDRCombineMaxWeight; /*RW; Range:[0x0, 0x100]*/
CVI_U16 WDRCombineMinWeight; /*RW; Range:[0x0, 0x100]*/
CVI_U8 WDRMtIn[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 WDRMtOut[4]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 WDRLongWgt; /*RW; Range:[0x0, 0x100]*/
CVI_U8 WDRCombineSNRAwareToleranceLevel; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MergeModeAlpha; /*RW; Range:[0x0, 0xff]*/
CVI_U16 WDRMotionCombineLongThr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 WDRMotionCombineShortThr; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 WDRMotionCombineMinWeight; /*RW; Range:[0x0, 0x100]*/
CVI_U16 WDRMotionCombineMaxWeight; /*RW; Range:[0x0, 0x100]*/
} ISP_FSWDR_MANUAL_ATTR_S;
typedef struct _ISP_FSWDR_AUTO_ATTR_S {
CVI_U16 WDRCombineLongThr[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 WDRCombineShortThr[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 WDRCombineMaxWeight[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 WDRCombineMinWeight[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U8 WDRMtIn[4][ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 WDRMtOut[4][ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 WDRLongWgt[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U8 WDRCombineSNRAwareToleranceLevel[ISP_AUTO_LV_NUM];
CVI_U8 MergeModeAlpha[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 WDRMotionCombineLongThr[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 WDRMotionCombineShortThr[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 WDRMotionCombineMinWeight[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 WDRMotionCombineMaxWeight[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x100]*/
} ISP_FSWDR_AUTO_ATTR_S;
typedef struct _ISP_FSWDR_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType; /*RW; Range:[0, 1]*/
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_BOOL MotionCompEnable; /*RW; Range:[0, 1]*/
CVI_U8 TuningMode; /*RW; Range:[0x0, 0x9]*/
CVI_BOOL WDRDCMode;; /*RW; Range:[0, 1]*/
CVI_BOOL WDRLumaMode; /*RW; Range:[0x0, 0x1]*/
CVI_U8 WDRType; /*RW; Range:[0x0, 0x2]*/
CVI_BOOL WDRCombineSNRAwareEn; /*RW; Range:[0, 1]*/
CVI_U16 WDRCombineSNRAwareLowThr; /*RW; Range:[0x0, 0xffff]*/
CVI_U16 WDRCombineSNRAwareHighThr; /*RW; Range:[0x0, 0xffff]*/
CVI_U16 WDRCombineSNRAwareSmoothLevel; /*RW; Range:[0x1, 0xbb8]*/
CVI_BOOL LocalToneRefinedDCMode; /*RW; Range:[0, 1]*/
CVI_BOOL LocalToneRefinedLumaMode; /*RW; Range:[0, 1]*/
CVI_U16 DarkToneRefinedThrL; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DarkToneRefinedThrH; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 DarkToneRefinedMaxWeight; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DarkToneRefinedMinWeight; /*RW; Range:[0x0, 0x100]*/
CVI_U16 BrightToneRefinedThrL; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 BrightToneRefinedThrH; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 BrightToneRefinedMaxWeight; /*RW; Range:[0x0, 0x100]*/
CVI_U16 BrightToneRefinedMinWeight; /*RW; Range:[0x0, 0x100]*/
CVI_U8 WDRMotionFusionMode; /*RW; Range:[0x0, 0x3]*/
CVI_BOOL MtMode; /*RW; Range:[0, 1]*/
ISP_FSWDR_MANUAL_ATTR_S stManual;
ISP_FSWDR_AUTO_ATTR_S stAuto;
} ISP_FSWDR_ATTR_S;
//-----------------------------------------------------------------------------
// DRC
//-----------------------------------------------------------------------------
#define DRC_DARK_USER_DEFINE_NUM (257)
#define DRC_BRIGHT_USER_DEFINE_NUM (513)
#define DRC_GLOBAL_USER_DEFINE_NUM (1025)
typedef struct _ISP_DRC_MANUAL_ATTR_S {
CVI_U32 TargetYScale; /*RW; Range:[0x0, 0x800]*/
CVI_U16 HdrStrength; /*RW; Range:[0x0, 0x100]*/
CVI_U8 DEAdaptPercentile; /*RW; Range:[0x0, 0x19]*/
CVI_U8 DEAdaptTargetGain; /*RW; Range:[0x1, 0x60]*/
CVI_U8 DEAdaptGainUB; /*RW; Range:[0x1, 0xff]*/
CVI_U8 DEAdaptGainLB; /*RW; Range:[0x1, 0xff]*/
CVI_U8 BritInflectPtLuma; /*RW; Range:[0x0, 0x64]*/
CVI_U8 BritContrastLow; /*RW; Range:[0x0, 0x64]*/
CVI_U8 BritContrastHigh; /*RW; Range:[0x0, 0x64]*/
CVI_U8 SdrTargetY; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SdrTargetYGain; /*RW; Range:[0x20, 0x80]*/
CVI_U16 SdrGlobalToneStr; /*RW; Range:[0x0, 0x100]*/
CVI_U8 SdrDEAdaptPercentile; /*RW; Range:[0x0, 0x19]*/
CVI_U8 SdrDEAdaptTargetGain; /*RW; Range:[0x1, 0x40]*/
CVI_U8 SdrDEAdaptGainLB; /*RW; Range:[0x1, 0xff]*/
CVI_U8 SdrDEAdaptGainUB; /*RW; Range:[0x1, 0xff]*/
CVI_U8 SdrBritInflectPtLuma; /*RW; Range:[0x0, 0x64]*/
CVI_U8 SdrBritContrastLow; /*RW; Range:[0x0, 0x64]*/
CVI_U8 SdrBritContrastHigh; /*RW; Range:[0x0, 0x64]*/
CVI_U8 TotalGain; /*RW; Range:[0x0, 0xff]*/
} ISP_DRC_MANUAL_ATTR_S;
typedef struct _ISP_DRC_AUTO_ATTR_S {
CVI_U32 TargetYScale[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x800]*/
CVI_U16 HdrStrength[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U8 DEAdaptPercentile[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x19]*/
CVI_U8 DEAdaptTargetGain[ISP_AUTO_LV_NUM]; /*RW; Range:[0x1, 0x60]*/
CVI_U8 DEAdaptGainUB[ISP_AUTO_LV_NUM]; /*RW; Range:[0x1, 0xff]*/
CVI_U8 DEAdaptGainLB[ISP_AUTO_LV_NUM]; /*RW; Range:[0x1, 0xff]*/
CVI_U8 BritInflectPtLuma[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 BritContrastLow[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 BritContrastHigh[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 SdrTargetY[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SdrTargetYGain[ISP_AUTO_LV_NUM]; /*RW; Range:[0x20, 0x80]*/
CVI_U16 SdrGlobalToneStr[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U8 SdrDEAdaptPercentile[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x19]*/
CVI_U8 SdrDEAdaptTargetGain[ISP_AUTO_LV_NUM]; /*RW; Range:[0x1, 0x40]*/
CVI_U8 SdrDEAdaptGainLB[ISP_AUTO_LV_NUM]; /*RW; Range:[0x1, 0xff]*/
CVI_U8 SdrDEAdaptGainUB[ISP_AUTO_LV_NUM]; /*RW; Range:[0x1, 0xff]*/
CVI_U8 SdrBritInflectPtLuma[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 SdrBritContrastLow[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 SdrBritContrastHigh[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 TotalGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_DRC_AUTO_ATTR_S;
typedef struct _ISP_DRC_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 TuningMode; /*RW; Range:[0x0, 0x7]*/
CVI_BOOL LocalToneEn; /*RW; Range:[0x0, 0x1]*/
CVI_BOOL LocalToneRefineEn; /*RW; Range:[0x0, 0x1]*/
CVI_U8 ToneCurveSelect; /*RW; Range:[0x0, 0x1]*/
CVI_U16 CurveUserDefine[DRC_GLOBAL_USER_DEFINE_NUM]; /*RW; Range:[0x0, 0xffff]*/
CVI_U16 DarkUserDefine[DRC_DARK_USER_DEFINE_NUM]; /*RW; Range:[0x0, 0xffff]*/
CVI_U16 BrightUserDefine[DRC_BRIGHT_USER_DEFINE_NUM]; /*RW; Range:[0x0, 0xffff]*/
CVI_U32 ToneCurveSmooth; /*RW; Range:[0x0, 0x1f4]*/
CVI_U8 CoarseFltScale; /*RW; Range:[0x3, 0x6]*/
CVI_U8 SdrTargetYGainMode; /*RW; Range:[0x0, 0x1]*/
CVI_BOOL DetailEnhanceEn; /*RW; Range:[0x0, 0x1]*/
CVI_U8 LumaGain[33]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 DetailEnhanceMtIn[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 DetailEnhanceMtOut[4]; /*RW; Range:[0x0, 0x100]*/
CVI_U8 OverShootThd; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThd; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootGain; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 UnderShootGain; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 OverShootThdMax; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThdMin; /*RW; Range:[0x0, 0xff]*/
CVI_BOOL SoftClampEnable; /*RW; Range:[0x0, 0x1]*/
CVI_U8 SoftClampUB; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SoftClampLB; /*RW; Range:[0x0, 0xff]*/
CVI_BOOL dbg_182x_sim_enable; /*RW; Range:[0, 1]*/
CVI_U8 DarkMapStr; /*RW; Range:[0x0, 0x80]*/
CVI_U8 BritMapStr; /*RW; Range:[0x0, 0x80]*/
CVI_U8 SdrDarkMapStr; /*RW; Range:[0x0, 0x80]*/
CVI_U8 SdrBritMapStr; /*RW; Range:[0x0, 0x80]*/
CVI_U32 DRCMu[32]; /*RW; Range:[0x0, 0x7fffffff]*/
ISP_DRC_MANUAL_ATTR_S stManual;
ISP_DRC_AUTO_ATTR_S stAuto;
} ISP_DRC_ATTR_S;
//-----------------------------------------------------------------------------
// Gamma
//-----------------------------------------------------------------------------
#define GAMMA_NODE_NUM (256)
#define GAMMA_MAX_INTERPOLATION_NUM (5)
typedef enum _ISP_GAMMA_CURVE_TYPE_E {
ISP_GAMMA_CURVE_DEFAULT,
ISP_GAMMA_CURVE_SRGB,
ISP_GAMMA_CURVE_USER_DEFINE,
ISP_GAMMA_CURVE_AUTO,
ISP_GAMMA_CURVE_MAX
} ISP_GAMMA_CURVE_TYPE_E;
typedef struct _ISP_GAMMA_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U16 Table[GAMMA_NODE_NUM]; /*RW; Range:[0x0, 0xfff]*/
ISP_GAMMA_CURVE_TYPE_E enCurveType;
} ISP_GAMMA_ATTR_S;
typedef struct _ISP_GAMMA_CURVE_ATTR_S {
CVI_S16 Lv; /*RW; Range:[-0x1f4, 0x5dc]*/
CVI_U16 Tbl[GAMMA_NODE_NUM]; /*RW; Range:[0x0, 0xfff]*/
} ISP_GAMMA_CURVE_ATTR_S;
typedef struct _ISP_AUTO_GAMMA_ATTR_S {
CVI_U8 GammaTabNum; /*RW; Range:[1, GAMMA_MAX_INTERPOLATION_NUM]*/
ISP_GAMMA_CURVE_ATTR_S GammaTab[GAMMA_MAX_INTERPOLATION_NUM];
} ISP_AUTO_GAMMA_ATTR_S;
//-----------------------------------------------------------------------------
// Dehaze
//-----------------------------------------------------------------------------
typedef struct _ISP_DEHAZE_MANUAL_ATTR_S {
CVI_U8 Strength; /*RW; Range:[0x0, 0x64]*/
} ISP_DEHAZE_MANUAL_ATTR_S;
typedef struct _ISP_DEHAZE_AUTO_ATTR_S {
CVI_U8 Strength[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x64]*/
} ISP_DEHAZE_AUTO_ATTR_S;
typedef struct _ISP_DEHAZE_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U16 CumulativeThr; /*RW; Range:[0x0, 0x3fff]*/
CVI_U16 MinTransMapValue; /*RW; Range:[0x0, 0x1fff]*/
CVI_BOOL DehazeLumaEnable; /*RW; Range:[0, 1]*/
CVI_BOOL DehazeSkinEnable; /*RW; Range:[0, 1]*/
CVI_U8 AirLightMixWgt; /*RW; Range:[0x0, 0x20]*/
CVI_U8 DehazeWgt; /*RW; Range:[0x0, 0x20]*/
CVI_U8 TransMapScale; /*RW; Range:[0x0, 0xff]*/
CVI_U8 AirlightDiffWgt; /*RW; Range:[0x0, 0x10]*/
CVI_U16 AirLightMax; /*RW; Range:[0x0, 0xfff]*/
CVI_U16 AirLightMin; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 SkinCb; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SkinCr; /*RW; Range:[0x0, 0xff]*/
CVI_U16 DehazeLumaCOEFFI; /*RW; Range:[0x0, 0x7d0]*/
CVI_U16 DehazeSkinCOEFFI; /*RW; Range:[0x0, 0x7d0]*/
CVI_U8 TransMapWgtWgt; /*RW; Range:[0x0, 0x80]*/
CVI_U8 TransMapWgtSigma; /*RW; Range:[0x0, 0xff]*/
ISP_DEHAZE_MANUAL_ATTR_S stManual;
ISP_DEHAZE_AUTO_ATTR_S stAuto;
} ISP_DEHAZE_ATTR_S;
//-----------------------------------------------------------------------------
// CLUT
//-----------------------------------------------------------------------------
#define ISP_CLUT_LUT_LENGTH (4913)
typedef struct _ISP_CLUT_ATTR_S {
CVI_BOOL Enable;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U16 ClutR[ISP_CLUT_LUT_LENGTH]; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 ClutG[ISP_CLUT_LUT_LENGTH]; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 ClutB[ISP_CLUT_LUT_LENGTH]; /*RW; Range:[0x0, 0x3FF]*/
} ISP_CLUT_ATTR_S;
typedef struct _ISP_CLUT_SATURATION_MANUAL_ATTR_S {
CVI_U16 SatIn[4]; /*RW; Range:[0x0, 0x2000]*/
CVI_U16 SatOut[4]; /*RW; Range:[0x0, 0x2000]*/
} ISP_CLUT_SATURATION_MANUAL_ATTR_S;
typedef struct _ISP_CLUT_SATURATION_AUTO_ATTR_S {
CVI_U16 SatIn[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x2000]*/
CVI_U16 SatOut[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x2000]*/
} ISP_CLUT_SATURATION_AUTO_ATTR_S;
typedef struct _ISP_CLUT_SATURATION_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
ISP_CLUT_SATURATION_MANUAL_ATTR_S stManual;
ISP_CLUT_SATURATION_AUTO_ATTR_S stAuto;
} ISP_CLUT_SATURATION_ATTR_S;
//-----------------------------------------------------------------------------
// DCI
//-----------------------------------------------------------------------------
typedef struct _ISP_DCI_MANUAL_ATTR_S {
CVI_U16 ContrastGain; /*RW; Range:[0x0, 0x100]*/
CVI_U8 BlcThr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 WhtThr; /*RW; Range:[0x0, 0xff]*/
CVI_U16 BlcCtrl; /*RW; Range:[0x0, 0x200]*/
CVI_U16 WhtCtrl; /*RW; Range:[0x0, 0x200]*/
CVI_U16 DciGainMax; /*RW; Range:[0x0, 0x100]*/
} ISP_DCI_MANUAL_ATTR_S;
typedef struct _ISP_DCI_AUTO_ATTR_S {
CVI_U16 ContrastGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U8 BlcThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 WhtThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 BlcCtrl[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x200]*/
CVI_U16 WhtCtrl[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x200]*/
CVI_U16 DciGainMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
} ISP_DCI_AUTO_ATTR_S;
typedef struct _ISP_DCI_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
CVI_BOOL TuningMode; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 Method; /*RW; Range:[0x0, 0x1]*/
CVI_U32 Speed; /*RW; Range:[0x0, 0x1f4]*/
CVI_U16 DciStrength; /*RW; Range:[0x0, 0x100]*/
CVI_U16 DciGamma; /*RW; Range:[0x64, 0x320]*/
CVI_U8 DciOffset; /*RW; Range:[0x0, 0xff]*/
CVI_U8 ToleranceY; /*RW; Range:[0x0, 0xff]*/
CVI_U8 Sensitivity; /*RW; Range:[0x0, 0xff]*/
ISP_DCI_MANUAL_ATTR_S stManual;
ISP_DCI_AUTO_ATTR_S stAuto;
} ISP_DCI_ATTR_S;
//-----------------------------------------------------------------------------
// LDCI
//-----------------------------------------------------------------------------
typedef struct _ISP_LDCI_GAUSS_COEF_ATTR_S {
CVI_U8 Wgt; /*RW; Range:[0x1, 0x80]*/
CVI_U8 Sigma; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 Mean; /*RW; Range:[0x1, 0xFF]*/
} ISP_LDCI_GAUSS_COEF_ATTR_S;
typedef struct _ISP_LDCI_MANUAL_ATTR_S {
CVI_U16 LdciStrength; /*RW; Range:[0x0, 0x100]*/
CVI_U16 LdciRange; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 TprCoef; /*RW; Range:[0x0, 0x3FF]*/
CVI_U8 EdgeCoring; /*RW; Range:[0x0, 0x0]*/
CVI_U8 LumaWgtMax; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 LumaWgtMin; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 VarMapMax; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 VarMapMin; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 UvGainMax; /*RW; Range:[0x0, 0x7F]*/
CVI_U8 UvGainMin; /*RW; Range:[0x0, 0x7F]*/
CVI_U8 BrightContrastHigh; /*RW; Range:[0x0, 0x64]*/
CVI_U8 BrightContrastLow; /*RW; Range:[0x0, 0x64]*/
CVI_U8 DarkContrastHigh; /*RW; Range:[0x0, 0x64]*/
CVI_U8 DarkContrastLow; /*RW; Range:[0x0, 0x64]*/
ISP_LDCI_GAUSS_COEF_ATTR_S LumaPosWgt;
} ISP_LDCI_MANUAL_ATTR_S;
typedef struct _ISP_LDCI_AUTO_ATTR_S {
CVI_U16 LdciStrength[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 LdciRange[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3FF]*/
CVI_U16 TprCoef[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3FF]*/
CVI_U8 EdgeCoring[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x0]*/
CVI_U8 LumaWgtMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 LumaWgtMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 VarMapMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 VarMapMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 UvGainMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x7F]*/
CVI_U8 UvGainMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x7F]*/
CVI_U8 BrightContrastHigh[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 BrightContrastLow[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 DarkContrastHigh[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 DarkContrastLow[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x64]*/
ISP_LDCI_GAUSS_COEF_ATTR_S LumaPosWgt[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_LDCI_AUTO_ATTR_S;
typedef struct _ISP_LDCI_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 GaussLPFSigma; /*RW; Range:[0x0, 0xFF]*/
ISP_LDCI_MANUAL_ATTR_S stManual;
ISP_LDCI_AUTO_ATTR_S stAuto;
} ISP_LDCI_ATTR_S;
//-----------------------------------------------------------------------------
// CA (CA/CP)
//-----------------------------------------------------------------------------
#define CA_LUT_NUM (256)
typedef struct _ISP_CA_MANUAL_ATTR_S {
CVI_U16 ISORatio; /*RW; Range:[0x0, 0x7FF]*/
CVI_U16 YRatioLut[CA_LUT_NUM]; /*RW; Range:[0x0, 0x7FF]*/
} ISP_CA_MANUAL_ATTR_S;
typedef struct _ISP_CA_AUTO_ATTR_S {
CVI_U16 ISORatio[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x7FF]*/
CVI_U16 YRatioLut[CA_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x7FF]*/
} ISP_CA_AUTO_ATTR_S;
typedef struct _ISP_CA_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_BOOL CaCpMode;
CVI_U8 CPLutY[CA_LUT_NUM];
CVI_U8 CPLutU[CA_LUT_NUM];
CVI_U8 CPLutV[CA_LUT_NUM];
ISP_CA_MANUAL_ATTR_S stManual;
ISP_CA_AUTO_ATTR_S stAuto;
} ISP_CA_ATTR_S;
//-----------------------------------------------------------------------------
// CA2
//-----------------------------------------------------------------------------
#define CA_LITE_NODE (6)
typedef struct _ISP_CA2_MANUAL_ATTR_S {
CVI_U8 Ca2In[CA_LITE_NODE]; /*RW; Range:[0x0, 0xC0]*/
CVI_U16 Ca2Out[CA_LITE_NODE]; /*RW; Range:[0x0, 0x7FF]*/
} ISP_CA2_MANUAL_ATTR_S;
typedef struct _ISP_CA2_AUTO_ATTR_S {
CVI_U8 Ca2In[CA_LITE_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xC0]*/
CVI_U16 Ca2Out[CA_LITE_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x7FF]*/
} ISP_CA2_AUTO_ATTR_S;
typedef struct _ISP_CA2_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval;
ISP_CA2_MANUAL_ATTR_S stManual;
ISP_CA2_AUTO_ATTR_S stAuto;
} ISP_CA2_ATTR_S;
//-----------------------------------------------------------------------------
// PreSharpen
//-----------------------------------------------------------------------------
#define EE_LUT_NODE (4)
typedef struct _ISP_PRESHARPEN_MANUAL_ATTR_S {
CVI_U8 LumaAdpGain[SHARPEN_LUT_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 DeltaAdpGain[SHARPEN_LUT_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 LumaCorLutIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LumaCorLutOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionCorLutIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCorLutOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionCorWgtLutIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCorWgtLutOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x80]*/
CVI_U8 GlobalGain; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootGain; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 UnderShootGain; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 HFBlendWgt; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MFBlendWgt; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootThr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootThrMax; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThrMin; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionShtGainIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionShtGainOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x80]*/
CVI_U8 HueShtCtrl[SHARPEN_LUT_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 SatShtGainIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SatShtGainOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x80]*/
} ISP_PRESHARPEN_MANUAL_ATTR_S;
typedef struct _ISP_PRESHARPEN_AUTO_ATTR_S {
CVI_U8 LumaAdpGain[SHARPEN_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 DeltaAdpGain[SHARPEN_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 LumaCorLutIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LumaCorLutOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionCorLutIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCorLutOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionCorWgtLutIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCorWgtLutOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x80]*/
CVI_U8 GlobalGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 UnderShootGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 HFBlendWgt[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MFBlendWgt[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootThrMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThrMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionShtGainIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionShtGainOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x80]*/
CVI_U8 HueShtCtrl[SHARPEN_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 SatShtGainIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SatShtGainOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x80]*/
} ISP_PRESHARPEN_AUTO_ATTR_S;
typedef struct _ISP_PRESHARPEN_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0x0, 0x1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 TuningMode; /*RW; Range:[0x0, 0xb]*/
CVI_BOOL LumaAdpGainEn; /*RW; Range:[0x0, 0x1]*/
CVI_BOOL DeltaAdpGainEn; /*RW; Range:[0x0, 0x1]*/
CVI_BOOL NoiseSuppressEnable; /*RW; Range:[0, 1]*/
CVI_BOOL SatShtCtrlEn; /*RW; Range:[0, 1]*/
CVI_BOOL SoftClampEnable; /*RW; Range:[0x0, 0x1]*/
CVI_U8 SoftClampUB; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SoftClampLB; /*RW; Range:[0x0, 0xff]*/
ISP_PRESHARPEN_MANUAL_ATTR_S stManual;
ISP_PRESHARPEN_AUTO_ATTR_S stAuto;
} ISP_PRESHARPEN_ATTR_S;
//-----------------------------------------------------------------------------
// Time-domain noise reduction (TNR)
//-----------------------------------------------------------------------------
typedef struct _ISP_TNR_MANUAL_ATTR_S {
CVI_U8 TnrStrength0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MapThdLow0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MapThdHigh0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MtDetectUnit; /*RW; Range:[0x3, 0x5]*/
CVI_S16 BrightnessNoiseLevelLE; /*RW; Range:[0x1, 0x3ff]*/
CVI_S16 BrightnessNoiseLevelSE; /*RW; Range:[0x1, 0x3ff]*/
CVI_BOOL MtFiltMode; /*RW; Range:[0x0, 0x1]*/
CVI_U16 MtFiltWgt; /*RW; Range:[0x0, 0x100]*/
} ISP_TNR_MANUAL_ATTR_S;
typedef struct _ISP_TNR_AUTO_ATTR_S {
CVI_U8 TnrStrength0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MapThdLow0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MapThdHigh0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MtDetectUnit[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x3, 0x5]*/
CVI_S16 BrightnessNoiseLevelLE[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x1, 0x3ff]*/
CVI_S16 BrightnessNoiseLevelSE[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x1, 0x3ff]*/
CVI_BOOL MtFiltMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1]*/
CVI_U16 MtFiltWgt[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
} ISP_TNR_AUTO_ATTR_S;
typedef struct _ISP_TNR_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_BOOL TuningMode; /*RW; Range:[0, 1]*/
CVI_BOOL TnrMtMode; /*RW; Range:[0, 1]*/
CVI_BOOL YnrCnrSharpenMtMode; /*RW; Range:[0, 1]*/
CVI_BOOL PreSharpenMtMode; /*RW; Range:[0, 1]*/
CVI_U8 ChromaScalingDownMode; /*RW; Range:[0, 3]*/
CVI_BOOL CompGainEnable; /*RW; Range:[0x0, 0x1]*/
ISP_TNR_MANUAL_ATTR_S stManual;
ISP_TNR_AUTO_ATTR_S stAuto;
} ISP_TNR_ATTR_S;
typedef struct _ISP_TNR_NOISE_MODEL_MANUAL_ATTR_S {
CVI_U8 RNoiseLevel0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 GNoiseLevel0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 BNoiseLevel0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 RNoiseLevel1; /*RW; Range:[0x0, 0xff]*/
CVI_U8 GNoiseLevel1; /*RW; Range:[0x0, 0xff]*/
CVI_U8 BNoiseLevel1; /*RW; Range:[0x0, 0xff]*/
CVI_U8 RNoiseHiLevel0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 GNoiseHiLevel0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 BNoiseHiLevel0; /*RW; Range:[0x0, 0xff]*/
CVI_U8 RNoiseHiLevel1; /*RW; Range:[0x0, 0xff]*/
CVI_U8 GNoiseHiLevel1; /*RW; Range:[0x0, 0xff]*/
CVI_U8 BNoiseHiLevel1; /*RW; Range:[0x0, 0xff]*/
} ISP_TNR_NOISE_MODEL_MANUAL_ATTR_S;
typedef struct _ISP_TNR_NOISE_MODEL_AUTO_ATTR_S {
CVI_U8 RNoiseLevel0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 GNoiseLevel0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 BNoiseLevel0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 RNoiseLevel1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 GNoiseLevel1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 BNoiseLevel1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 RNoiseHiLevel0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 GNoiseHiLevel0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 BNoiseHiLevel0[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 RNoiseHiLevel1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 GNoiseHiLevel1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 BNoiseHiLevel1[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_TNR_NOISE_MODEL_AUTO_ATTR_S;
typedef struct _ISP_TNR_NOISE_MODEL_ATTR_S {
ISP_TNR_NOISE_MODEL_MANUAL_ATTR_S stManual;
ISP_TNR_NOISE_MODEL_AUTO_ATTR_S stAuto;
} ISP_TNR_NOISE_MODEL_ATTR_S;
typedef struct _ISP_TNR_LUMA_MOTION_MANUAL_ATTR_S {
CVI_U16 L2mIn0[4]; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 L2mOut0[4]; /*RW; Range:[0x0, 0x3f]*/
CVI_U16 L2mIn1[4]; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 L2mOut1[4]; /*RW; Range:[0x0, 0x3f]*/
CVI_BOOL MtLumaMode; /*RW; Range:[0x0, 0x1]*/
} ISP_TNR_LUMA_MOTION_MANUAL_ATTR_S;
typedef struct _ISP_TNR_LUMA_MOTION_AUTO_ATTR_S {
CVI_U16 L2mIn0[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 L2mOut0[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U16 L2mIn1[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xfff]*/
CVI_U8 L2mOut1[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_BOOL MtLumaMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1]*/
} ISP_TNR_LUMA_MOTION_AUTO_ATTR_S;
typedef struct _ISP_TNR_LUMA_MOTION_ATTR_S {
ISP_TNR_LUMA_MOTION_MANUAL_ATTR_S stManual;
ISP_TNR_LUMA_MOTION_AUTO_ATTR_S stAuto;
} ISP_TNR_LUMA_MOTION_ATTR_S;
typedef struct _ISP_TNR_GHOST_MANUAL_ATTR_S {
CVI_U8 PrvMotion0[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 PrtctWgt0[4]; /*RW; Range:[0x0, 0xf]*/
CVI_U8 MotionHistoryStr; /*RW; Range:[0x0, 0xf]*/
} ISP_TNR_GHOST_MANUAL_ATTR_S;
typedef struct _ISP_TNR_GHOST_AUTO_ATTR_S {
CVI_U8 PrvMotion0[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 PrtctWgt0[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xf]*/
CVI_U8 MotionHistoryStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xf]*/
} ISP_TNR_GHOST_AUTO_ATTR_S;
typedef struct _ISP_TNR_GHOST_ATTR_S {
ISP_TNR_GHOST_MANUAL_ATTR_S stManual;
ISP_TNR_GHOST_AUTO_ATTR_S stAuto;
} ISP_TNR_GHOST_ATTR_S;
typedef struct _ISP_TNR_MT_PRT_MANUAL_ATTR_S {
CVI_U8 LowMtPrtLevelY; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtLevelU; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtLevelV; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtInY[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtInU[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtInV[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtOutY[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtOutU[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtOutV[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtAdvIn[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtAdvOut[4]; /*RW; Range:[0x0, 0xff]*/
} ISP_TNR_MT_PRT_MANUAL_ATTR_S;
typedef struct _ISP_TNR_MT_PRT_AUTO_ATTR_S {
CVI_U8 LowMtPrtLevelY[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtLevelU[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtLevelV[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtInY[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtInU[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtInV[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtOutY[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtOutU[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtOutV[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtAdvIn[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtAdvOut[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_TNR_MT_PRT_AUTO_ATTR_S;
typedef struct _ISP_TNR_MT_PRT_ATTR_S {
CVI_BOOL LowMtPrtEn; /*RW; Range:[0, 1]*/
CVI_BOOL LowMtLowPassEnable; /*RW; Range:[0, 1]*/
CVI_BOOL LowMtPrtAdvLumaEnable; /*RW; Range:[0, 1]*/
CVI_BOOL LowMtPrtAdvMode; /*RW; Range:[0, 1]*/
CVI_U8 LowMtPrtAdvMax; /*RW; Range:[0, 0xff]*/
CVI_BOOL LowMtPrtAdvDebugMode; /*RW; Range:[0, 1]*/
CVI_U8 LowMtPrtAdvDebugIn[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LowMtPrtAdvDebugOut[4]; /*RW; Range:[0x0, 0xff]*/
ISP_TNR_MT_PRT_MANUAL_ATTR_S stManual;
ISP_TNR_MT_PRT_AUTO_ATTR_S stAuto;
} ISP_TNR_MT_PRT_ATTR_S;
typedef struct _ISP_TNR_MOTION_ADAPT_MANUAL_ATTR_S {
CVI_U8 AdaptNrLumaStrIn[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 AdaptNrLumaStrOut[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 AdaptNrChromaStrIn[4]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 AdaptNrChromaStrOut[4]; /*RW; Range:[0x0, 0xff]*/
} ISP_TNR_MOTION_ADAPT_MANUAL_ATTR_S;
typedef struct _ISP_TNR_MOTION_ADAPT_AUTO_ATTR_S {
CVI_U8 AdaptNrLumaStrIn[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 AdaptNrLumaStrOut[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 AdaptNrChromaStrIn[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 AdaptNrChromaStrOut[4][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_TNR_MOTION_ADAPT_AUTO_ATTR_S;
typedef struct _ISP_TNR_MOTION_ADAP_ATTR_S {
ISP_TNR_MOTION_ADAPT_MANUAL_ATTR_S stManual;
ISP_TNR_MOTION_ADAPT_AUTO_ATTR_S stAuto;
} ISP_TNR_MOTION_ADAPT_ATTR_S;
//-----------------------------------------------------------------------------
// Y domain noise reduction (YNR)
//-----------------------------------------------------------------------------
typedef struct _ISP_YNR_MANUAL_ATTR_S {
CVI_U8 WindowType; /*RW; Range:[0x0, 0xb]*/
CVI_U8 DetailSmoothMode; /*RW; Range:[0x0, 0x1]*/
CVI_U8 NoiseSuppressStr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FilterType; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseCoringMax; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseCoringBase; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseCoringAdv; /*RW; Range:[0x0, 0xff]*/
} ISP_YNR_MANUAL_ATTR_S;
typedef struct _ISP_YNR_AUTO_ATTR_S {
CVI_U8 WindowType[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xb]*/
CVI_U8 DetailSmoothMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1]*/
CVI_U8 NoiseSuppressStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 FilterType[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseCoringMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseCoringBase[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseCoringAdv[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_YNR_AUTO_ATTR_S;
typedef enum _ISP_YNR_TUNING_MODE_E {
YNR_RESULT = 8,
YNR_EDGE_SMOOTH_REGION = 11,
} ISP_YNR_TUNING_MODE_E;
typedef struct _ISP_YNR_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_BOOL CoringParamEnable; /*RW; Range:[0, 1]*/
CVI_BOOL FiltModeEnable; /*RW; Range:[0, 1]*/
CVI_U16 FiltMode; /*RW; Range:[0x0, 0x100]*/
CVI_U8 TuningMode; /*RW; Range:[0x0, 0xf]*/
ISP_YNR_MANUAL_ATTR_S stManual;
ISP_YNR_AUTO_ATTR_S stAuto;
} ISP_YNR_ATTR_S;
typedef struct _ISP_YNR_MOTION_NR_MANUAL_ATTR_S {
CVI_U8 MotionCoringWgtMax; /*RW; Range:[0x0, 0xff]*/
CVI_U16 MotionYnrLut[16]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 MotionCoringWgt[16]; /*RW; Range:[0x0, 0x100]*/
} ISP_YNR_MOTION_NR_MANUAL_ATTR_S;
typedef struct _ISP_YNR_MOTION_NR_AUTO_ATTR_S {
CVI_U8 MotionCoringWgtMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 MotionYnrLut[16][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 MotionCoringWgt[16][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
} ISP_YNR_MOTION_NR_AUTO_ATTR_S;
typedef struct _ISP_YNR_MOTION_NR_ATTR_S {
ISP_YNR_MOTION_NR_MANUAL_ATTR_S stManual;
ISP_YNR_MOTION_NR_AUTO_ATTR_S stAuto;
} ISP_YNR_MOTION_NR_ATTR_S;
typedef struct _ISP_YNR_FILTER_MANUAL_ATTR_S {
CVI_U8 VarThr; /*RW; Range:[0x0, 0xff]*/
CVI_U16 CoringWgtLF; /*RW; Range:[0x0, 0x100]*/
CVI_U16 CoringWgtHF; /*RW; Range:[0x0, 0x100]*/
CVI_U8 NonDirFiltStr; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 VhDirFiltStr; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 AaDirFiltStr; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 CoringWgtMax; /*RW; Range:[0x0, 0xff]*/
CVI_U16 FilterMode; /*RW; Range:[0x0, 0x3ff]*/
} ISP_YNR_FILTER_MANUAL_ATTR_S;
typedef struct _ISP_YNR_FILTER_AUTO_ATTR_S {
CVI_U8 VarThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 CoringWgtLF[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U16 CoringWgtHF[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x100]*/
CVI_U8 NonDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 VhDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 AaDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 CoringWgtMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U16 FilterMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3ff]*/
} ISP_YNR_FILTER_AUTO_ATTR_S;
typedef struct _ISP_YNR_FILTER_ATTR_S {
ISP_YNR_FILTER_MANUAL_ATTR_S stManual;
ISP_YNR_FILTER_AUTO_ATTR_S stAuto;
} ISP_YNR_FILTER_ATTR_S;
//-----------------------------------------------------------------------------
// UV domain noise reduction (CNR)
//-----------------------------------------------------------------------------
#define CNR_MOTION_LUT_NUM (16)
typedef struct _ISP_CNR_MANUAL_ATTR_S {
CVI_U8 CnrStr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseSuppressStr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseSuppressGain; /*RW; Range:[0x1, 0x8]*/
CVI_U8 FilterType; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionNrStr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LumaWgt; /*RW; Range:[0x0, 0x8]*/
CVI_U8 DetailSmoothMode; /*RW; Range:[0x0, 0x1]*/
} ISP_CNR_MANUAL_ATTR_S;
typedef struct _ISP_CNR_AUTO_ATTR_S {
CVI_U8 CnrStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseSuppressStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 NoiseSuppressGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x1, 0x8]*/
CVI_U8 FilterType[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionNrStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LumaWgt[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x8]*/
CVI_U8 DetailSmoothMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1]*/
} ISP_CNR_AUTO_ATTR_S;
typedef struct _ISP_CNR_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
ISP_CNR_MANUAL_ATTR_S stManual;
ISP_CNR_AUTO_ATTR_S stAuto;
} ISP_CNR_ATTR_S;
typedef struct _ISP_CNR_MOTION_NR_MANUAL_ATTR_S {
CVI_U8 MotionCnrCoringLut[CNR_MOTION_LUT_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCnrStrLut[CNR_MOTION_LUT_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_CNR_MOTION_NR_MANUAL_ATTR_S;
typedef struct _ISP_CNR_MOTION_NR_AUTO_ATTR_S {
CVI_U8 MotionCnrCoringLut[CNR_MOTION_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCnrStrLut[CNR_MOTION_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
} ISP_CNR_MOTION_NR_AUTO_ATTR_S;
typedef struct _ISP_CNR_MOTION_NR_ATTR_S {
CVI_BOOL MotionCnrEnable; /*RW; Range:[0, 1]*/
ISP_CNR_MOTION_NR_MANUAL_ATTR_S stManual;
ISP_CNR_MOTION_NR_AUTO_ATTR_S stAuto;
} ISP_CNR_MOTION_NR_ATTR_S;
//-----------------------------------------------------------------------------
// CAC
//-----------------------------------------------------------------------------
typedef struct _ISP_CAC_MANUAL_ATTR_S {
CVI_U8 DePurpleStr; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeGlobalGain; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeCoring; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeStrMin; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeStrMax; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 DePurpleCbStr; /*RW; Range:[0x0, 0x8]*/
CVI_U8 DePurpleCrStr; /*RW; Range:[0x0, 0x8]*/
CVI_U8 DePurpleStrMaxRatio; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurpleStrMinRatio; /*RW; Range:[0x0, 0x40]*/
} ISP_CAC_MANUAL_ATTR_S;
typedef struct _ISP_CAC_AUTO_ATTR_S {
CVI_U8 DePurpleStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeGlobalGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeCoring[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeStrMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 EdgeStrMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 DePurpleCbStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x8]*/
CVI_U8 DePurpleCrStr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x8]*/
CVI_U8 DePurpleStrMaxRatio[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x40]*/
CVI_U8 DePurpleStrMinRatio[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x40]*/
} ISP_CAC_AUTO_ATTR_S;
typedef struct _ISP_CAC_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 PurpleDetRange; /*RW; Range:[0x0, 0x80]*/
CVI_U8 PurpleCb; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 PurpleCr; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 PurpleCb2; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 PurpleCr2; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 PurpleCb3; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 PurpleCr3; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 GreenCb; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 GreenCr; /*RW; Range:[0x0, 0xFF]*/
CVI_U8 TuningMode; /*RW; Range:[0x0, 0x2]*/
CVI_U8 EdgeGainIn[3]; /*RW; Range:[0x0, 0x10]*/
CVI_U8 EdgeGainOut[3]; /*RW; Range:[0x0, 0x20]*/
ISP_CAC_MANUAL_ATTR_S stManual;
ISP_CAC_AUTO_ATTR_S stAuto;
} ISP_CAC_ATTR_S;
//-----------------------------------------------------------------------------
// Sharpen
//-----------------------------------------------------------------------------
#define EE_LUT_NODE (4)
typedef struct _ISP_SHARPEN_MANUAL_ATTR_S {
CVI_U8 LumaAdpGain[SHARPEN_LUT_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 DeltaAdpGain[SHARPEN_LUT_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 LumaCorLutIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LumaCorLutOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionCorLutIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCorLutOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionCorWgtLutIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCorWgtLutOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x80]*/
CVI_U8 GlobalGain; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootGain; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 UnderShootGain; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 HFBlendWgt; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MFBlendWgt; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootThr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThr; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootThrMax; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThrMin; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionShtGainIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionShtGainOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x80]*/
CVI_U8 HueShtCtrl[SHARPEN_LUT_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 SatShtGainIn[EE_LUT_NODE]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SatShtGainOut[EE_LUT_NODE]; /*RW; Range:[0x0, 0x80]*/
} ISP_SHARPEN_MANUAL_ATTR_S;
typedef struct _ISP_SHARPEN_AUTO_ATTR_S {
CVI_U8 LumaAdpGain[SHARPEN_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 DeltaAdpGain[SHARPEN_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 LumaCorLutIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 LumaCorLutOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionCorLutIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCorLutOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x1f]*/
CVI_U8 MotionCorWgtLutIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionCorWgtLutOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x80]*/
CVI_U8 GlobalGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 UnderShootGain[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 HFBlendWgt[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MFBlendWgt[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThr[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 OverShootThrMax[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 UnderShootThrMin[ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionShtGainIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 MotionShtGainOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x80]*/
CVI_U8 HueShtCtrl[SHARPEN_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x3f]*/
CVI_U8 SatShtGainIn[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SatShtGainOut[EE_LUT_NODE][ISP_AUTO_ISO_STRENGTH_NUM]; /*RW; Range:[0x0, 0x80]*/
} ISP_SHARPEN_AUTO_ATTR_S;
typedef struct _ISP_SHARPEN_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0x0, 0x1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 TuningMode; /*RW; Range:[0x0, 0xb]*/
CVI_BOOL LumaAdpGainEn; /*RW; Range:[0x0, 0x1]*/
CVI_BOOL DeltaAdpGainEn; /*RW; Range:[0x0, 0x1]*/
CVI_BOOL NoiseSuppressEnable; /*RW; Range:[0, 1]*/
CVI_BOOL SatShtCtrlEn; /*RW; Range:[0, 1]*/
CVI_BOOL SoftClampEnable; /*RW; Range:[0x0, 0x1]*/
CVI_U8 SoftClampUB; /*RW; Range:[0x0, 0xff]*/
CVI_U8 SoftClampLB; /*RW; Range:[0x0, 0xff]*/
ISP_SHARPEN_MANUAL_ATTR_S stManual;
ISP_SHARPEN_AUTO_ATTR_S stAuto;
} ISP_SHARPEN_ATTR_S;
//-----------------------------------------------------------------------------
// Y Contrast
//-----------------------------------------------------------------------------
typedef struct _ISP_YCONTRAST_MANUAL_ATTR_S {
CVI_U8 ContrastLow; /*RW; Range:[0x0, 0x64]*/
CVI_U8 ContrastHigh; /*RW; Range:[0x0, 0x64]*/
CVI_U8 CenterLuma; /*RW; Range:[0x0, 0x40]*/
} ISP_YCONTRAST_MANUAL_ATTR_S;
typedef struct _ISP_YCONTRAST_AUTO_ATTR_S {
CVI_U8 ContrastLow[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 ContrastHigh[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x64]*/
CVI_U8 CenterLuma[ISP_AUTO_LV_NUM]; /*RW; Range:[0x0, 0x40]*/
} ISP_YCONTRAST_AUTO_ATTR_S;
typedef struct _ISP_YCONTRAST_ATTR_S {
CVI_BOOL Enable; /*RW; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
ISP_YCONTRAST_MANUAL_ATTR_S stManual;
ISP_YCONTRAST_AUTO_ATTR_S stAuto;
} ISP_YCONTRAST_ATTR_S;
//-----------------------------------------------------------------------------
// Mono
//-----------------------------------------------------------------------------
typedef struct _ISP_MONO_ATTR_S {
CVI_BOOL Enable;
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
} ISP_MONO_ATTR_S;
//-----------------------------------------------------------------------------
// DIS
//-----------------------------------------------------------------------------
typedef enum _ISP_DIS_MODE_E {
DIS_MODE_2_DOF_GME = 0, /* Only use with GME in 2 dof */
DIS_MODE_DEBUG,
DIS_MODE_DOF_BUTT,
} DIS_MODE_E;
typedef enum _ISP_DIS_MOTION_LEVEL_E {
DIS_MOTION_LEVEL_NORMAL = 1,
DIS_MOTION_LEVEL_BUTT
} DIS_MOTION_LEVEL_E;
typedef struct _ISP_DIS_CONFIG_S {
DIS_MODE_E mode;
DIS_MOTION_LEVEL_E motionLevel;
CVI_U32 cropRatio; /*RW; Range:[0x32, 0x62] */
} ISP_DIS_CONFIG_S;
typedef struct _ISP_DIS_ATTR_S {
CVI_BOOL enable;
CVI_U32 movingSubjectLevel; /*RW; Range:[0x0, 0x6] */
CVI_U32 horizontalLimit; /*RW; Range:[0x0, 0x3E8] */
CVI_U32 verticalLimit; /*RW; Range:[0x0, 0x3E8] */
CVI_BOOL stillCrop;
} ISP_DIS_ATTR_S;
typedef struct _ISP_INNER_STATE_INFO_S {
CVI_U32 blcOffsetR;
CVI_U32 blcOffsetGr;
CVI_U32 blcOffsetGb;
CVI_U32 blcOffsetB;
CVI_U32 blcGainR;
CVI_U32 blcGainGr;
CVI_U32 blcGainGb;
CVI_U32 blcGainB;
CVI_S32 ccm[9];
CVI_U16 drcGlobalToneBinNum;
CVI_U16 drcGlobalToneBinSEStep;
CVI_U32 drcGlobalTone[LTM_GLOBAL_CURVE_NODE_NUM];
CVI_U32 drcDarkTone[LTM_DARK_CURVE_NODE_NUM];
CVI_U32 drcBrightTone[LTM_BRIGHT_CURVE_NODE_NUM];
CVI_BOOL bWDRSwitchFinish;
// For 2TO1/3TO1/4TO1 use.
CVI_U32 u32WDRExpRatioActual[ISP_WDR_FRAME_IDX_SIZE];
ISP_MESH_SHADING_GAIN_LUT_S mlscGainTable;
} ISP_INNER_STATE_INFO_S;
typedef struct _ISP_VC_ATTR_S {
CVI_U8 UpdateInterval; /*RW; Range:[0x1, 0xFF]*/
CVI_U8 MotionThreshold; /*RW; Range:[0x0, 0xff] */
} ISP_VC_ATTR_S;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif /* __CVI_COMM_ISP_H__ */