Files
Linux_Drivers/freertos/cvitek/common/include/cv1835/cvi_comm_isp.h
carbon ca03037500 freertos: release the generic version source code
freertos runs on the second core (small one) of the CPU
2023-10-19 14:31:43 +08:00

1861 lines
54 KiB
C

/*
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
*
* File Name: include/cvi_common_isp.h
* Description:
*/
#ifndef __CVI_COMM_ISP_H__
#define __CVI_COMM_ISP_H__
#include "cvi_common.h"
#include "cvi_comm_video.h"
#include "cvi_defines.h"
#include "cvi_debug.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
#define ISP_CHECK_POINTER(addr) \
do { \
if (addr == NULL) \
return CVI_FAILURE; \
} while (0)
#define CVI_TRACE_ISP(level, fmt, ...) \
CVI_TRACE(level, CVI_ID_ISP, "%s:%d:%s(): " fmt, __FILENAME__, __LINE__, __func__, ##__VA_ARGS__)
#define CCM_MATRIX_SIZE (9)
#define AE_MAX_ZONE_ROW (24)
#define AE_MAX_ZONE_COLUMN (32)
#define AE_ZONE_ROW (15)
#define AE_ZONE_COLUMN (17)
#define AE_MAX_NUM (2)
#define ISP_SENSOR_MAX_DELAY_NUM (5)
#define AWB_ZONE_ORIG_ROW (48)
#define AWB_ZONE_ORIG_COLUMN (64)
#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 ISP_AUTO_LV_NUM ISP_AUTO_ISO_STRENGTH_NUM
#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 ISP_3ALIB_FIND_FAIL (-1)
#define HIST_NUM 256
/*Defines the format of the input Bayer image*/
typedef enum _ISP_BAYER_FORMAT_E {
BAYER_BGGR,
BAYER_GBRG,
BAYER_GRBG,
BAYER_RGGB,
BAYER_BUTT
} ISP_BAYER_FORMAT_E;
typedef enum bmISP_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 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_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_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 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 u32StatIntvl;
CVI_U32 u32ProcParam;
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 bitBypassISPDGain : 1; /* RW;[0] */
CVI_U64 bitBypassAntiFC : 1; /* RW;[1] */
CVI_U64 bitBypassCrosstalkR : 1; /* RW;[2] */
CVI_U64 bitBypassDPC : 1; /* RW;[3] */
CVI_U64 bitBypassNR : 1; /* RW;[4] */
CVI_U64 bitBypassDehaze : 1; /* RW;[5] */
CVI_U64 bitBypassWBGain : 1; /* RW;[6] */
CVI_U64 bitBypassMeshShading : 1; /* RW;[7] */
CVI_U64 bitBypassDRC : 1; /* RW;[8] */
CVI_U64 bitBypassDemosaic : 1; /* RW;[9] */
CVI_U64 bitBypassColorMatrix : 1; /* RW;[10] */
CVI_U64 bitBypassGamma : 1; /* RW;[11] */
CVI_U64 bitBypassFSWDR : 1; /* RW;[12] */
CVI_U64 bitBypassCA : 1; /* RW;[13] */
CVI_U64 bitBypassCsConv : 1; /* RW;[14] */
CVI_U64 bitBypassRadialCrop : 1; /* RW;[15] */
CVI_U64 bitBypassSharpen : 1; /* RW;[16] */
CVI_U64 bitBypassLCAC : 1; /* RW;[17] */
CVI_U64 bitBypassGCAC : 1; /* RW;[18] */
CVI_U64 bit2ChnSelect : 2; /* RW;[19:20] */
CVI_U64 bitBypassLdci : 1; /* RW;[21] */
CVI_U64 bitBypassPreGamma : 1; /* RW;[22] */
CVI_U64 bitBypassRadialShading : 1; /* RW;[23] */
CVI_U64 bitBypassAEStatFE : 1; /* RW;[24] */
CVI_U64 bitBypassAEStatBE : 1; /* RW;[25] */
CVI_U64 bitBypassMGStat : 1; /* RW;[26] */
CVI_U64 bitBypassDE : 1; /* RW;[27] */
CVI_U64 bitBypassAFStatFE : 1; /* RW;[28] */
CVI_U64 bitBypassAFStatBE : 1; /* RW;[29] */
CVI_U64 bitBypassAWBStat : 1; /* RW;[30] */
CVI_U64 bitBypassCLUT : 1; /* RW;[31] */
CVI_U64 bitBypassHLC : 1; /* RW;[32] */
CVI_U64 bitBypassEdgeMark : 1; /* RW;[33] */
CVI_U64 bitBypassRGBIR : 1; /* RW;[34] */
CVI_U64 bitBypassHSV : 1; /* RW;[35] */
CVI_U64 bitBypassRgbDither : 1; /* RW;[36] */
CVI_U64 bitBypassYuvDither : 1; /* RW;[37] */
CVI_U64 bitBypassYnr : 1; /* RW;[38] */
CVI_U64 bitBypassCnr : 1; /* RW;[39] */
CVI_U64 bitBypassRgbEE : 1; /* RW;[40] */
CVI_U64 bitBypass3DNR : 1; /* RW;[41] */
CVI_U64 bitRsv21 : 21; /* H ; [42: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_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 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;
CVI_U16 u16X;
CVI_U16 u16Y;
CVI_U16 u16W;
CVI_U16 u16H;
} ISP_AE_CROP_S;
typedef struct _ISP_AE_STATISTICS_CFG_S {
ISP_AE_SWITCH_E enAESwitch; /*RW; Range:[0,2]; */
ISP_AE_HIST_CONFIG_S stHistConfig;
ISP_AE_FOUR_PLANE_MODE_E enFourPlaneMode; /*RW; Range:[0,1]; */
ISP_AE_STAT_MODE_E enHistMode; /*RW; Range:[0,1]; */
ISP_AE_STAT_MODE_E enAverMode; /*RW; Range:[0,1]; */
ISP_AE_STAT_MODE_E enMaxGainMode; /*RW; Range:[0,1]; */
ISP_AE_CROP_S stCrop[AE_MAX_NUM];
CVI_U8 au8Weight[AE_ZONE_ROW][AE_ZONE_COLUMN]; /*RW; Range:[0x0, 0xF]; */
} ISP_AE_STATISTICS_CFG_S;
typedef struct _ISP_AE_WIN_STATISTICS_CFG_S {
CVI_BOOL bHisStatisticsEnable;
CVI_BOOL bCropEnable;
CVI_U16 ZoneOffsetX;
CVI_U16 ZoneOffsetY;
CVI_U16 ZoneWidth;
CVI_U16 ZoneHeight;
CVI_U8 StatisticsShiftBits;
CVI_U16 RGain;
CVI_U16 GGain;
CVI_U16 BGain;
CVI_U8 au8WinWeight[AE_ZONE_ROW][AE_ZONE_COLUMN];
} ISP_AE_WIN_STATISTICS_CFG_S;
typedef enum _ISP_IRIS_TYPE_E {
ISP_IRIS_DC_TYPE = 0,
ISP_IRIS_P_TYPE,
ISP_IRIS_TYPE_BUTT,
} ISP_IRIS_TYPE_E;
//Defines the F value of the ISP iris
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;
#define ISP_AE_ROUTE_MAX_NODES (16)
typedef struct _ISP_AE_ROUTE_NODE_S {
CVI_U32 u32IntTime;
CVI_U32 u32SysGain;
ISP_IRIS_F_NO_E enIrisFNO;
CVI_U32 u32IrisFNOLin;
} ISP_AE_ROUTE_NODE_S;
typedef struct _ISP_AE_ROUTE_S {
CVI_U32 u32TotalNum;
ISP_AE_ROUTE_NODE_S astRouteNode[ISP_AE_ROUTE_MAX_NODES];
} ISP_AE_ROUTE_S;
#define ISP_AE_ROUTE_EX_MAX_NODES (16)
typedef struct _ISP_AE_ROUTE_EX_NODE_S {
CVI_U32 u32IntTime;
CVI_U32 u32Again;
CVI_U32 u32Dgain;
CVI_U32 u32IspDgain;
ISP_IRIS_F_NO_E enIrisFNO;
CVI_U32 u32IrisFNOLin;
} ISP_AE_ROUTE_EX_NODE_S;
typedef struct _ISP_AE_ROUTE_EX_S {
CVI_U32 u32TotalNum;
ISP_AE_ROUTE_EX_NODE_S astRouteExNode[ISP_AE_ROUTE_EX_MAX_NODES];
} ISP_AE_ROUTE_EX_S;
typedef struct _ISP_EXP_INFO_S {
CVI_U32 u32ExpTime;
CVI_U32 u32ShortExpTime;
CVI_U32 u32MedianExpTime;
CVI_U32 u32LongExpTime;
CVI_U32 u32AGain;
CVI_U32 u32DGain;
CVI_U32 u32ISPDGain;
CVI_U32 u32Exposure;
CVI_BOOL bExposureIsMAX;
CVI_S16 s16HistError;
CVI_U32 au32AE_Hist1024Value[HIST_NUM];
CVI_U8 u8AveLum;
CVI_U32 u32LinesPer500ms;
CVI_U32 u32PirisFNO;
CVI_U32 u32Fps;
CVI_U32 u32ISO;
CVI_U32 u32ISOCalibrate;
CVI_U32 u32RefExpRatio;
CVI_U32 u32FirstStableTime;
ISP_AE_ROUTE_S stAERoute;
ISP_AE_ROUTE_EX_S stAERouteEx;
CVI_U8 u8WDRShortAveLuma;
CVI_U32 u32WDRExpRatio;
CVI_U8 u8LEFrameAvgLuma;
CVI_U8 u8SEFrameAvgLuma;
CVI_FLOAT fLightValue;
} ISP_EXP_INFO_S;
#define WDR_EXP_RATIO_NUM (3)
#define WDR_LV_TARGET_NUM (16)
typedef struct _ISP_WDR_EXPOSURE_ATTR_S {
ISP_OP_TYPE_E enExpRatioType;
CVI_U32 au32ExpRatio[WDR_EXP_RATIO_NUM];
CVI_U32 u32ExpRatioMax;
CVI_U32 u32ExpRatioMin;
CVI_U16 u16Tolerance;
CVI_U16 u16Speed;
CVI_U16 u16RatioBias;
CVI_U8 u8SECompensation;
CVI_U16 u16SEHisThr;
CVI_U16 u16SEHisCntRatio1;
CVI_U16 u16SEHisCntRatio2;
CVI_U32 u16SEHis255CntThr1;
CVI_U32 u16SEHis255CntThr2;
CVI_U8 au8LEAdjustTargetMin[WDR_LV_TARGET_NUM];
CVI_U8 au8LEAdjustTargetMax[WDR_LV_TARGET_NUM];
CVI_U8 au8SEAdjustTargetMin[WDR_LV_TARGET_NUM];
CVI_U8 au8SEAdjustTargetMax[WDR_LV_TARGET_NUM];
CVI_U8 u8AdjustTargetDetectFrmNum;
CVI_U32 u32DiffPixelNum;
CVI_U16 u16LELowBinThr;
CVI_U16 u16LEHighBinThr;
CVI_U16 u16SELowBinThr;
CVI_U16 u16SEHighBinThr;
CVI_U8 au8FrameAvgLumaMin[WDR_LV_TARGET_NUM];
CVI_U8 au8FrameAvgLumaMax[WDR_LV_TARGET_NUM];
} ISP_WDR_EXPOSURE_ATTR_S;
typedef struct _ISP_AWB_CROP_S {
CVI_BOOL bEnable;
CVI_U16 u16X;
CVI_U16 u16Y;
CVI_U16 u16W;
CVI_U16 u16H;
} 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;
CVI_U16 u16ZoneCol;
CVI_U16 u16ZoneBin;
CVI_U16 au16HistBinThresh[4];
CVI_U16 u16WhiteLevel;
CVI_U16 u16BlackLevel;
CVI_U16 u16CbMax;
CVI_U16 u16CbMin;
CVI_U16 u16CrMax;
CVI_U16 u16CrMin;
ISP_AWB_CROP_S stCrop;
} ISP_WB_STATISTICS_CFG_S;
typedef struct _ISP_WB_WIN_STATISTICS_CFG_S {
CVI_BOOL bStatisticsEnable;
ISP_AWB_SWITCH_E enAWBSwitch;
CVI_BOOL bCropEnable;
CVI_U16 ZoneOffsetX;
CVI_U16 ZoneOffsetY;
CVI_U16 ZoneWidth;
CVI_U16 ZoneHeight;
CVI_U16 u16BlackLevel;
CVI_U16 u16WhiteLevel;
CVI_U8 u8ZoneRow;
CVI_U8 u8ZoneColumn;
CVI_BOOL CornerAvgEnable;
CVI_U8 CornerSize;
CVI_U8 StatisticsShiftBits;
} ISP_WB_WIN_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; // Range: must more than 8.
CVI_U16 u16Y; // Range: must more than 2.
CVI_U16 u16W;
CVI_U16 u16H;
} ISP_AF_CROP_S;
typedef struct _ISP_AF_RAW_CFG_S {
CVI_U8 PreGammaEn;
CVI_U8 PreGammaTable[AF_GAMMA_NUM];
} 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;
CVI_U16 u16Vwnd;
CVI_U8 u8HFltShift;
CVI_S8 s8HVFltLpCoeff[FIR_H_GAIN_NUM];
ISP_AF_RAW_CFG_S stRawCfg;
ISP_AF_PRE_FILTER_CFG_S stPreFltCfg;
ISP_AF_CROP_S stCrop;
CVI_U16 u16HighLumaTh;
} ISP_AF_CFG_S;
typedef struct _ISP_AF_H_PARAM_S {
CVI_S8 s8HFltHpCoeff[FIR_H_GAIN_NUM];
} ISP_AF_H_PARAM_S;
typedef struct _ISP_AF_V_PARAM_S {
CVI_S8 s8VFltHpCoeff[FIR_V_GAIN_NUM];
} 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;
CVI_U16 u16GlobalG;
CVI_U16 u16GlobalB;
CVI_U16 u16CountAll;
CVI_U16 au16ZoneAvgR[AWB_ZONE_NUM];
CVI_U16 au16ZoneAvgG[AWB_ZONE_NUM];
CVI_U16 au16ZoneAvgB[AWB_ZONE_NUM];
CVI_U16 au16ZoneCountAll[AWB_ZONE_NUM];
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;
#define AWB_CALIB_PTS_NUM (3)
typedef struct _ISP_AWB_Calibration_Gain_S {
CVI_U16 u16AvgRgain[AWB_CALIB_PTS_NUM];
CVI_U16 u16AvgBgain[AWB_CALIB_PTS_NUM];
CVI_U16 u16ColorTemperature[AWB_CALIB_PTS_NUM];
} ISP_AWB_Calibration_Gain_S;
#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];
CVI_U16 au16HistWt[AWB_LUM_HIST_NUM];
} 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;
CVI_U16 u16HighBgLimit;
CVI_U16 u16LowRgLimit;
CVI_U16 u16LowBgLimit;
} 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];
CVI_U16 au16CrMin[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 au16CbMax[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 au16CbMin[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_AWB_CBCR_TRACK_ATTR_S;
#define AWB_CURVE_PARA_NUM (6)
#define AWB_CURVE_BOUND_NUM (8)
typedef struct _ISP_AWB_ATTR_S {
CVI_BOOL bEnable;
CVI_U16 u16RefColorTemp;
CVI_U16 au16StaticWB[ISP_BAYER_CHN_NUM];
CVI_S32 as32CurvePara[AWB_CURVE_PARA_NUM];
ISP_AWB_ALG_TYPE_E enAlgType;
CVI_U8 u8RGStrength;
CVI_U8 u8BGStrength;
CVI_U16 u16Speed;
CVI_U16 u16ZoneSel;
CVI_U16 u16HighColorTemp;
CVI_U16 u16LowColorTemp;
ISP_AWB_CT_LIMIT_ATTR_S stCTLimit;
CVI_BOOL bShiftLimitEn;
CVI_U8 u8ShiftLimit;
CVI_BOOL bGainNormEn;
CVI_BOOL bNaturalCastEn;
CVI_U8 u8RGainBias;
CVI_U8 u8BGainBias;
ISP_AWB_CBCR_TRACK_ATTR_S stCbCrTrack;
ISP_AWB_LUM_HISTGRAM_ATTR_S stLumaHist;
CVI_BOOL bAWBZoneWtEn;
CVI_U8 au8ZoneWt[AWB_ZONE_ORIG_ROW * AWB_ZONE_ORIG_COLUMN];
CVI_U16 u16ShiftLimit[AWB_CURVE_BOUND_NUM];
} ISP_AWB_ATTR_S;
typedef struct _ISP_MWB_ATTR_S {
CVI_U16 u16Rgain;
CVI_U16 u16Grgain;
CVI_U16 u16Gbgain;
CVI_U16 u16Bgain;
} 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;
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;
typedef struct _ISP_WB_INFO_S {
CVI_U16 u16Rgain;
CVI_U16 u16Grgain;
CVI_U16 u16Gbgain;
CVI_U16 u16Bgain;
CVI_U16 u16Saturation;
CVI_U16 u16ColorTemp;
CVI_U16 au16CCM[CCM_MATRIX_SIZE];
CVI_U16 u16LS0CT;
CVI_U16 u16LS1CT;
CVI_U16 u16LS0Area;
CVI_U16 u16LS1Area;
CVI_U8 u8MultiDegree;
CVI_U16 u16ActiveShift;
CVI_U32 u32FirstStableTime;
ISP_AWB_INDOOR_OUTDOOR_STATUS_E enInOutStatus;
CVI_S16 s16Bv;
} 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;
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_U8 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_U8 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;
//-----------------------------------------------------------------------------
// YNR
//-----------------------------------------------------------------------------
#define YNR_CORING_NUM 6
typedef struct _ISP_YNR_MANUAL_ATTR_S {
CVI_U8 WindowType;
CVI_U8 DetailSmoothMode;
CVI_U8 NoiseSuppressStr;
CVI_U8 FilterType;
CVI_U8 NoiseSuppressStrMode;
CVI_U8 NoiseCoringBaseLuma[YNR_CORING_NUM];
CVI_U8 NoiseCoringBaseOffset[YNR_CORING_NUM];
CVI_U8 NoiseCoringAdvLuma[YNR_CORING_NUM];
CVI_U8 NoiseCoringAdvOffset[YNR_CORING_NUM];
} ISP_YNR_MANUAL_ATTR_S;
typedef struct _ISP_YNR_AUTO_ATTR_S {
CVI_U8 WindowType[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 DetailSmoothMode[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseSuppressStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 FilterType[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseSuppressStrMode[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseCoringBaseLuma[YNR_CORING_NUM][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseCoringBaseOffset[YNR_CORING_NUM][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseCoringAdvLuma[YNR_CORING_NUM][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseCoringAdvOffset[YNR_CORING_NUM][ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_YNR_AUTO_ATTR_S;
typedef struct _ISP_YNR_ATTR_S {
CVI_BOOL Enable;
CVI_BOOL CoringParamEnable;
CVI_U8 TuningMode;
ISP_OP_TYPE_E enOpType;
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 MotionThr;
CVI_U8 MotionNrPosGain;
CVI_U8 MotionNrNegGain;
} ISP_YNR_MOTION_NR_MANUAL_ATTR_S;
typedef struct _ISP_YNR_MOTION_NR_AUTO_ATTR_S {
CVI_U8 MotionThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MotionNrPosGain[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MotionNrNegGain[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_YNR_MOTION_NR_AUTO_ATTR_S;
typedef struct _ISP_YNR_MOTION_NR_ATTR_S {
ISP_OP_TYPE_E enOpType;
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 LumaStr[8];
CVI_U8 VarThr;
CVI_U16 CoringWgtLF;
CVI_U16 CoringWgtHF;
CVI_U8 NonDirFiltStr;
CVI_U8 VhDirFiltStr;
CVI_U8 AaDirFiltStr;
CVI_U16 FilterMode;
} ISP_YNR_FILTER_MANUAL_ATTR_S;
typedef struct _ISP_YNR_FILTER_AUTO_ATTR_S {
CVI_U8 LumaStr[8][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 VarThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 CoringWgtLF[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 CoringWgtHF[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NonDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 VhDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 AaDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 FilterMode[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_YNR_FILTER_AUTO_ATTR_S;
typedef struct _ISP_YNR_FILTER_ATTR_S {
ISP_OP_TYPE_E enOpType;
ISP_YNR_FILTER_MANUAL_ATTR_S stManual;
ISP_YNR_FILTER_AUTO_ATTR_S stAuto;
} ISP_YNR_FILTER_ATTR_S;
typedef struct _ISP_DEHAZE_MANUAL_ATTR_S {
CVI_U8 Strength;
} ISP_DEHAZE_MANUAL_ATTR_S;
typedef struct _ISP_DEHAZE_AUTO_ATTR_S {
CVI_U8 Strength[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_DEHAZE_AUTO_ATTR_S;
typedef struct _ISP_DEHAZE_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
CVI_U16 CumulativeThr;
CVI_U16 MinTransMapValue;
ISP_DEHAZE_MANUAL_ATTR_S stManual;
ISP_DEHAZE_AUTO_ATTR_S stAuto;
} ISP_DEHAZE_ATTR_S;
//-----------------------------------------------------------------------------
// CNR
//-----------------------------------------------------------------------------
typedef struct _ISP_CNR_MANUAL_ATTR_S {
CVI_U8 CnrStr;
CVI_U8 NoiseSuppressStr;
CVI_U8 NoiseSuppressGain;
CVI_U8 FilterType;
CVI_U8 MotionNrStr;
CVI_U8 LumaWgt;
CVI_U8 DetailSmoothMode;
} ISP_CNR_MANUAL_ATTR_S;
typedef struct _ISP_CNR_AUTO_ATTR_S {
CVI_U8 CnrStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseSuppressStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseSuppressGain[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 FilterType[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MotionNrStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 LumaWgt[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 DetailSmoothMode[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_CNR_AUTO_ATTR_S;
typedef struct _ISP_CNR_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
ISP_CNR_MANUAL_ATTR_S stManual;
ISP_CNR_AUTO_ATTR_S stAuto;
} ISP_CNR_ATTR_S;
//-----------------------------------------------------------------------------
// CAC
//-----------------------------------------------------------------------------
typedef struct _ISP_CAC_MANUAL_ATTR_S {
CVI_U8 DePurpleStr;
} ISP_CAC_MANUAL_ATTR_S;
typedef struct _ISP_CAC_AUTO_ATTR_S {
CVI_U8 DePurpleStr[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_CAC_AUTO_ATTR_S;
typedef struct _ISP_CAC_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
CVI_U16 VarThr;
CVI_U8 PurpleDetRange;
CVI_U8 PurpleCb;
CVI_U8 PurpleCr;
CVI_U8 GreenCb;
CVI_U8 GreenCr;
CVI_U8 TuningMode;
ISP_CAC_MANUAL_ATTR_S stManual;
ISP_CAC_AUTO_ATTR_S stAuto;
} ISP_CAC_ATTR_S;
#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_MAX
} ISP_GAMMA_CURVE_TYPE_E;
typedef struct _ISP_GAMMA_ATTR_S {
CVI_BOOL Enable;
CVI_U16 Table[GAMMA_NODE_NUM];
ISP_GAMMA_CURVE_TYPE_E enCurveType;
} ISP_GAMMA_ATTR_S;
typedef struct _ISP_GAMMA_CURVE_ATTR_S {
CVI_S16 Lv;
CVI_U16 Tbl[GAMMA_NODE_NUM];
} ISP_GAMMA_CURVE_ATTR_S;
typedef struct _ISP_AUTO_GAMMA_ATTR_S {
CVI_BOOL Enable;
CVI_U8 GammaTabNum;
ISP_GAMMA_CURVE_ATTR_S GammaTab[GAMMA_MAX_INTERPOLATION_NUM];
} ISP_AUTO_GAMMA_ATTR_S;
typedef struct _ISP_NR_MANUAL_ATTR_S {
CVI_U8 WindowType;
CVI_U8 DetailSmoothMode;
CVI_U8 NoiseSuppressStr;
CVI_U8 FilterType;
CVI_U8 NoiseSuppressStrMode;
} ISP_NR_MANUAL_ATTR_S;
typedef struct _ISP_NR_AUTO_ATTR_S {
CVI_U8 WindowType[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 DetailSmoothMode[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseSuppressStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 FilterType[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseSuppressStrMode[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_NR_AUTO_ATTR_S;
typedef struct _ISP_NR_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
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 NrLscRatio;
CVI_U8 LumaStr[8];
CVI_U16 VarThr;
CVI_U16 CoringWgtLF;
CVI_U16 CoringWgtHF;
CVI_U8 NonDirFiltStr;
CVI_U8 VhDirFiltStr;
CVI_U8 AaDirFiltStr;
} ISP_NR_FILTER_MANUAL_ATTR_S;
typedef struct _ISP_NR_FILTER_AUTO_ATTR_S {
CVI_U8 NrLscRatio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 LumaStr[8][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 VarThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 CoringWgtLF[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 CoringWgtHF[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NonDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 VhDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 AaDirFiltStr[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_NR_FILTER_AUTO_ATTR_S;
typedef struct _ISP_NR_FILTER_ATTR_S {
ISP_OP_TYPE_E enOpType;
CVI_U8 TuningMode;
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;
} ISP_RLSC_MANUAL_ATTR_S;
typedef struct _ISP_RLSC_AUTO_ATTR_S {
CVI_U16 RadialStr[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_RLSC_AUTO_ATTR_S;
typedef struct _ISP_RLSC_ATTR_S {
CVI_BOOL RlscEnable;
CVI_U16 RlscCenterX;
CVI_U16 RlscCenterY;
ISP_OP_TYPE_E enOpType;
ISP_RLSC_MANUAL_ATTR_S stManual;
ISP_RLSC_AUTO_ATTR_S stAuto;
} ISP_RLSC_ATTR_S;
typedef struct _ISP_DPC_MANUAL_ATTR_S {
CVI_BOOL dpc_enable;
CVI_U8 dpc_staticdpc_enable;
CVI_U8 dpc_cluster_size;
CVI_U16 dpc_r_bright_pixel_ratio;
CVI_U16 dpc_g_bright_pixel_ratio;
CVI_U16 dpc_b_bright_pixel_ratio;
CVI_U16 dpc_r_dark_pixel_ratio;
CVI_U16 dpc_g_dark_pixel_ratio;
CVI_U16 dpc_b_dark_pixel_ratio;
CVI_U8 dpc_r_dark_pixel_mindiff;
CVI_U8 dpc_g_dark_pixel_mindiff;
CVI_U8 dpc_b_dark_pixel_mindiff;
CVI_U8 dpc_flat_thre_r;
CVI_U8 dpc_flat_thre_g;
CVI_U8 dpc_flat_thre_b;
CVI_U8 dpc_flat_thre_min_g;
CVI_U8 dpc_flat_thre_min_rb;
} ISP_DPC_MANUAL_ATTR_S;
typedef struct _ISP_DPC_AUTO_ATTR_S {
CVI_U8 dpc_enable[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_staticdpc_enable[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_cluster_size[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 dpc_r_bright_pixel_ratio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 dpc_g_bright_pixel_ratio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 dpc_b_bright_pixel_ratio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 dpc_r_dark_pixel_ratio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 dpc_g_dark_pixel_ratio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 dpc_b_dark_pixel_ratio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_r_dark_pixel_mindiff[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_g_dark_pixel_mindiff[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_b_dark_pixel_mindiff[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_flat_thre_r[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_flat_thre_g[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_flat_thre_b[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_flat_thre_min_g[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 dpc_flat_thre_min_rb[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_DPC_AUTO_ATTR_S;
typedef struct _ISP_DPC_ATTR_S {
ISP_OP_TYPE_E enOpType;
ISP_DPC_MANUAL_ATTR_S stManual;
ISP_DPC_AUTO_ATTR_S stAuto;
} ISP_DPC_ATTR_S;
//-----------------------------------------------------------------------------
// Sharpen
//-----------------------------------------------------------------------------
#define SHARPEN_LUT_NUM 33
typedef struct _ISP_SHARPEN_MANUAL_ATTR_S {
CVI_U8 EdgeFreq;
CVI_U8 TextureFreq;
CVI_U8 LumaAdpGain[SHARPEN_LUT_NUM];
CVI_U8 GlobalGain;
CVI_U8 OverShootThr;
CVI_U8 UnderShootThr;
CVI_U8 YNoiseLevel;
CVI_U16 LumaAdpCoring[SHARPEN_LUT_NUM];
} ISP_SHARPEN_MANUAL_ATTR_S;
typedef struct _ISP_SHARPEN_AUTO_ATTR_S {
CVI_U8 EdgeFreq[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 TextureFreq[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 LumaAdpGain[SHARPEN_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 GlobalGain[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 OverShootThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 UnderShootThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 YNoiseLevel[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 LumaAdpCoring[SHARPEN_LUT_NUM][ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_SHARPEN_AUTO_ATTR_S;
typedef struct _ISP_SHARPEN_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
CVI_U8 TuningMode;
CVI_U8 TuningModeLevelShift;
CVI_U8 EdgeGain;
CVI_U16 TextureGain;
CVI_U8 EdgeThr;
CVI_U8 TextureThr;
CVI_BOOL LumaAdpCoringEn;
CVI_BOOL LumaAdpGainEn;
CVI_BOOL DeltaAdpGainEn;
CVI_U8 DeltaAdpGain[SHARPEN_LUT_NUM];
CVI_BOOL WdrCoringCompensationEn;
CVI_U8 WdrCoringCompensationMode;
CVI_U16 WdrCoringToleranceLevel;
CVI_U8 WdrCoringHighThr;
CVI_U8 WdrCoringLowThr;
ISP_SHARPEN_MANUAL_ATTR_S stManual;
ISP_SHARPEN_AUTO_ATTR_S stAuto;
} ISP_SHARPEN_ATTR_S;
typedef struct _ISP_TNR_MANUAL_ATTR_S {
CVI_U8 MergeMode;
CVI_U8 MergeModeAlpha;
CVI_U8 TnrStrength0;
CVI_U8 MapThdLow0;
CVI_U8 MapThdHigh0;
CVI_U8 TnrStrength1;
CVI_U8 MapThdLow1;
CVI_U8 MapThdHigh1;
CVI_S16 BrightnessNoiseLevelLE;
CVI_S16 BrightnessNoiseLevelSE;
} ISP_TNR_MANUAL_ATTR_S;
typedef struct _ISP_TNR_AUTO_ATTR_S {
CVI_U8 MergeMode[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MergeModeAlpha[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 TnrStrength0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MapThdLow0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MapThdHigh0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 TnrStrength1[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MapThdLow1[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MapThdHigh1[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_S16 BrightnessNoiseLevelLE[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_S16 BrightnessNoiseLevelSE[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_TNR_AUTO_ATTR_S;
typedef struct _ISP_TNR_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
CVI_BOOL TuningMode;
CVI_U8 DeflickerMode;
CVI_U16 DeflickerToleranceLevel;
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;
CVI_U8 GNoiseLevel0;
CVI_U8 BNoiseLevel0;
CVI_U8 RNoiseLevel1;
CVI_U8 GNoiseLevel1;
CVI_U8 BNoiseLevel1;
CVI_U8 RNoiseHiLevel0;
CVI_U8 GNoiseHiLevel0;
CVI_U8 BNoiseHiLevel0;
CVI_U8 RNoiseHiLevel1;
CVI_U8 GNoiseHiLevel1;
CVI_U8 BNoiseHiLevel1;
} ISP_TNR_NOISE_MODEL_MANUAL_ATTR_S;
typedef struct _ISP_TNR_NOISE_MODEL_AUTO_ATTR_S {
CVI_U8 RNoiseLevel0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 GNoiseLevel0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 BNoiseLevel0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 RNoiseLevel1[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 GNoiseLevel1[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 BNoiseLevel1[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 RNoiseHiLevel0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 GNoiseHiLevel0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 BNoiseHiLevel0[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 RNoiseHiLevel1[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 GNoiseHiLevel1[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 BNoiseHiLevel1[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_TNR_NOISE_MODEL_AUTO_ATTR_S;
typedef struct _ISP_TNR_NOISE_MODEL_ATTR_S {
ISP_OP_TYPE_E enOpType;
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];
CVI_U8 L2mOut0[4];
CVI_U16 L2mIn1[4];
CVI_U8 L2mOut1[4];
} 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];
CVI_U8 L2mOut0[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 L2mIn1[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 L2mOut1[4][ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_TNR_LUMA_MOTION_AUTO_ATTR_S;
typedef struct _ISP_TNR_LUMA_MOTION_ATTR_S {
ISP_OP_TYPE_E enOpType;
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 PrtctIn0[4];
CVI_U8 PrtctOut0[4];
CVI_U8 PrtctIn1[4];
CVI_U8 PrtctOut1[4];
} ISP_TNR_GHOST_MANUAL_ATTR_S;
typedef struct _ISP_TNR_GHOST_AUTO_ATTR_S {
CVI_U8 PrtctIn0[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 PrtctOut0[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 PrtctIn1[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 PrtctOut1[4][ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_TNR_GHOST_AUTO_ATTR_S;
typedef struct _ISP_TNR_GHOST_ATTR_S {
ISP_OP_TYPE_E enOpType;
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 LowMtPrtLevel;
CVI_U8 LowMtPrtIn[4];
CVI_U8 LowMtPrtOut[4];
CVI_S16 LowMtPrtSlope0[3];
} ISP_TNR_MT_PRT_MANUAL_ATTR_S;
typedef struct _ISP_TNR_MT_PRT_AUTO_ATTR_S {
CVI_U8 LowMtPrtLevel[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 LowMtPrtIn[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 LowMtPrtOut[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_S16 LowMtPrtSlope0[3][ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_TNR_MT_PRT_AUTO_ATTR_S;
typedef struct _ISP_TNR_MT_PRT_ATTR_S {
CVI_U8 LowMtPrtEn;
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_CLUT_MANUAL_ATTR_S {
} ISP_CLUT_MANUAL_ATTR_S;
typedef struct _ISP_CLUT_AUTO_ATTR_S {
} ISP_CLUT_AUTO_ATTR_S;
typedef struct _ISP_CLUT_ATTR_S {
CVI_U8 hsv3dlut_enable;
CVI_U8 hsv3dlut_h_clamp_wrap_opt;
} ISP_CLUT_ATTR_S;
//-----------------------------------------------------------------------------
// BlackLevel
//-----------------------------------------------------------------------------
typedef struct _ISP_BLACK_LEVEL_MANUAL_ATTR_S {
CVI_U16 OffsetR;
CVI_U16 OffsetGr;
CVI_U16 OffsetGb;
CVI_U16 OffsetB;
CVI_U16 GainR;
CVI_U16 GainGr;
CVI_U16 GainGb;
CVI_U16 GainB;
} ISP_BLACK_LEVEL_MANUAL_ATTR_S;
typedef struct _ISP_BLACK_LEVEL_AUTO_ATTR_S {
CVI_U16 OffsetR[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 OffsetGr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 OffsetGb[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 OffsetB[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 GainR[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 GainGr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 GainGb[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 GainB[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_BLACK_LEVEL_AUTO_ATTR_S;
typedef struct _ISP_BLACK_LEVEL_ATTR_S {
CVI_U8 Enable;
ISP_OP_TYPE_E enOpType;
ISP_BLACK_LEVEL_MANUAL_ATTR_S stManual;
ISP_BLACK_LEVEL_AUTO_ATTR_S stAuto;
} ISP_BLACK_LEVEL_ATTR_S;
typedef struct _ISP_COLOR_TONE_MANUAL_ATTR_S {
} ISP_COLOR_TONE_MANUAL_ATTR_S;
typedef struct _ISP_COLOR_TONE_AUTO_ATTR_S {
} ISP_COLOR_TONE_AUTO_ATTR_S;
typedef struct _ISP_COLOR_TONE_ATTR_S {
CVI_BOOL wbg_enable; // TODO@Kidd remove this
CVI_U16 u16RedCastGain;
CVI_U16 u16GreenCastGain;
CVI_U16 u16BlueCastGain;
} ISP_COLOR_TONE_ATTR_S;
//-----------------------------------------------------------------------------
// DCI
//-----------------------------------------------------------------------------
typedef struct _ISP_DCI_MANUAL_ATTR_S {
CVI_U16 ContrastGain;
CVI_U8 BlcThr;
CVI_U8 WhtThr;
CVI_U16 BlcCtrl;
CVI_U16 WhtCtrl;
} ISP_DCI_MANUAL_ATTR_S;
typedef struct _ISP_DCI_AUTO_ATTR_S {
CVI_U16 ContrastGain[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 BlcThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 WhtThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 BlcCtrl[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 WhtCtrl[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_DCI_AUTO_ATTR_S;
typedef struct _ISP_DCI_ATTR_S {
CVI_BOOL Enable;
CVI_BOOL TuningMode;
ISP_OP_TYPE_E enOpType;
CVI_U8 Method;
CVI_U32 Speed;
CVI_U16 DciStrength;
ISP_DCI_MANUAL_ATTR_S stManual;
ISP_DCI_AUTO_ATTR_S stAuto;
} ISP_DCI_ATTR_S;
//-----------------------------------------------------------------------------
// MeshShading
//-----------------------------------------------------------------------------
typedef enum _ISP_MLSC_COLOR_TEMPERATURE {
ISP_MLSC_COLOR_TEMPERATURE_0,
ISP_MLSC_COLOR_TEMPERATURE_1,
ISP_MLSC_COLOR_TEMPERATURE_2,
ISP_MLSC_COLOR_TEMPERATURE_3,
ISP_MLSC_COLOR_TEMPERATURE_4,
ISP_MLSC_COLOR_TEMPERATURE_5,
ISP_MLSC_COLOR_TEMPERATURE_6,
ISP_MLSC_COLOR_TEMPERATURE_SIZE,
} ISP_MLSC_COLOR_TEMPERATURE;
typedef struct _ISP_MESH_SHADING_MANUAL_ATTR_S {
CVI_U16 MeshStr;
} ISP_MESH_SHADING_MANUAL_ATTR_S;
typedef struct _ISP_MESH_SHADING_AUTO_ATTR_S {
CVI_U16 MeshStr[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_MESH_SHADING_AUTO_ATTR_S;
typedef struct _ISP_MESH_SHADING_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
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 RGain[CVI_ISP_LSC_GRID_POINTS];
CVI_U16 GGain[CVI_ISP_LSC_GRID_POINTS];
CVI_U16 BGain[CVI_ISP_LSC_GRID_POINTS];
} ISP_MESH_SHADING_GAIN_LUT_S;
typedef struct _ISP_MESH_SHADING_GAIN_LUT_ATTR_S {
CVI_U8 Size;
CVI_U16 ColorTemperature[ISP_MLSC_COLOR_TEMPERATURE_SIZE];
ISP_MESH_SHADING_GAIN_LUT_S LscGainLut[ISP_MLSC_COLOR_TEMPERATURE_SIZE];
} ISP_MESH_SHADING_GAIN_LUT_ATTR_S;
//-----------------------------------------------------------------------------
// RadialShading
//-----------------------------------------------------------------------------
typedef enum _ISP_RLSC_COLOR_TEMPERATURE {
ISP_RLSC_COLOR_TEMPERATURE_LOW,
ISP_RLSC_COLOR_TEMPERATURE_HIGH,
ISP_RLSC_COLOR_TEMPERATURE_SIZE,
} ISP_RLSC_COLOR_TEMPERATURE;
#define ISP_RLSC_WINDOW_SIZE 32
typedef struct _ISP_RADIAL_SHADING_ATTR_S {
CVI_BOOL Enable;
CVI_U16 CenterX;
CVI_U16 CenterY;
} ISP_RADIAL_SHADING_ATTR_S;
typedef struct _ISP_RADIAL_SHADING_GAIN_LUT_ATTR_S {
CVI_U16 RLscGainLut[ISP_RLSC_COLOR_TEMPERATURE_SIZE][ISP_RLSC_WINDOW_SIZE];
} ISP_RADIAL_SHADING_GAIN_LUT_ATTR_S;
//-----------------------------------------------------------------------------
// Demosaic
//-----------------------------------------------------------------------------
typedef struct _ISP_DEMOSAIC_MANUAL_ATTR_S {
CVI_U16 CoarseEdgeThr;
CVI_U16 CoarseStr;
CVI_U16 FineEdgeThr;
CVI_U16 FineStr;
} ISP_DEMOSAIC_MANUAL_ATTR_S;
typedef struct _ISP_DEMOSAIC_AUTO_ATTR_S {
CVI_U16 CoarseEdgeThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 CoarseStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 FineEdgeThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 FineStr[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_DEMOSAIC_AUTO_ATTR_S;
typedef struct _ISP_DEMOSAIC_ATTR_S {
CVI_BOOL Enable;
CVI_BOOL TuningMode;
ISP_OP_TYPE_E enOpType;
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_BOOL DetailSmoothEnable;
CVI_U8 DetailSmoothStr;
CVI_U8 EdgeWgtStr;
} ISP_DEMOSAIC_DEMOIRE_MANUAL_ATTR_S;
typedef struct _ISP_DEMOSAIC_DEMOIRE_AUTO_ATTR_S {
CVI_BOOL DetailSmoothEnable[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 DetailSmoothStr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 EdgeWgtStr[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_DEMOSAIC_DEMOIRE_AUTO_ATTR_S;
typedef struct _ISP_DEMOSAIC_DEMOIRE_ATTR_S {
ISP_OP_TYPE_E enOpType;
ISP_DEMOSAIC_DEMOIRE_MANUAL_ATTR_S stManual;
ISP_DEMOSAIC_DEMOIRE_AUTO_ATTR_S stAuto;
} ISP_DEMOSAIC_DEMOIRE_ATTR_S;
typedef struct _ISP_DEMOSAIC_FILTER_MANUAL_ATTR_S {
CVI_U16 DetailWgtThr;
CVI_U8 DetailWgtSlope;
CVI_U8 DetailWgtMin;
CVI_U8 DetailWgtMax;
CVI_U16 LumaWgtThr;
CVI_U8 LumaWgtSlope;
CVI_U8 LumaWgtMin;
CVI_U8 LumaWgtMax;
} ISP_DEMOSAIC_FILTER_MANUAL_ATTR_S;
typedef struct _ISP_DEMOSAIC_FILTER_AUTO_ATTR_S {
CVI_U16 DetailWgtThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 DetailWgtSlope[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 DetailWgtMin[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 DetailWgtMax[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 LumaWgtThr[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 LumaWgtSlope[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 LumaWgtMin[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 LumaWgtMax[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_DEMOSAIC_FILTER_AUTO_ATTR_S;
typedef struct _ISP_DEMOSAIC_FILTER_ATTR_S {
ISP_OP_TYPE_E enOpType;
ISP_DEMOSAIC_FILTER_MANUAL_ATTR_S stManual;
ISP_DEMOSAIC_FILTER_AUTO_ATTR_S stAuto;
} ISP_DEMOSAIC_FILTER_ATTR_S;
typedef struct _ISP_DEMOSAIC_EE_MANUAL_ATTR_S {
CVI_BOOL EdgeEnhanceEnable;
CVI_U16 OverShtGain;
CVI_U16 UnderShtGain;
CVI_U8 HFGainTable[33];
CVI_U8 GainTable[33];
CVI_U8 NoiseSuppressStr;
} ISP_DEMOSAIC_EE_MANUAL_ATTR_S;
typedef struct _ISP_DEMOSAIC_EE_AUTO_ATTR_S {
CVI_BOOL EdgeEnhanceEnable[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 OverShtGain[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 UnderShtGain[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 HFGainTable[33][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 GainTable[33][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 NoiseSuppressStr[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_DEMOSAIC_EE_AUTO_ATTR_S;
typedef struct _ISP_DEMOSAIC_EE_ATTR_S {
ISP_OP_TYPE_E enOpType;
ISP_DEMOSAIC_EE_MANUAL_ATTR_S stManual;
ISP_DEMOSAIC_EE_AUTO_ATTR_S stAuto;
} ISP_DEMOSAIC_EE_ATTR_S;
//-----------------------------------------------------------------------------
// CCM
//-----------------------------------------------------------------------------
// Saturation
typedef struct _ISP_SATURATION_MANUAL_ATTR_S {
CVI_U8 Saturation;
} ISP_SATURATION_MANUAL_ATTR_S;
typedef struct _ISP_SATURATION_AUTO_ATTR_S {
CVI_U8 Saturation[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_SATURATION_AUTO_ATTR_S;
typedef struct _ISP_SATURATION_ATTR_SS {
ISP_OP_TYPE_E enOpType;
ISP_SATURATION_AUTO_ATTR_S stAuto;
ISP_SATURATION_MANUAL_ATTR_S stManual;
} ISP_SATURATION_ATTR_S;
// CCM
typedef struct _ISP_COLORMATRIX_ATTR_S {
CVI_U16 ColorTemp;
CVI_S16 CCM[9];
} ISP_COLORMATRIX_ATTR_S;
typedef struct _ISP_CCM_MANUAL_ATTR_S {
CVI_U8 SatEnable;
CVI_S16 CCM[9];
} ISP_CCM_MANUAL_ATTR_S;
typedef struct _ISP_CCM_AUTO_ATTR_S {
CVI_U8 ISOActEnable;
CVI_U8 TempActEnable;
CVI_U8 CCMTabNum;
ISP_COLORMATRIX_ATTR_S CCMTab[7];
} ISP_CCM_AUTO_ATTR_S;
typedef struct _ISP_CCM_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
ISP_CCM_AUTO_ATTR_S stAuto;
ISP_CCM_MANUAL_ATTR_S stManual;
} ISP_CCM_ATTR_S;
//-----------------------------------------------------------------------------
// HSV
//-----------------------------------------------------------------------------
typedef struct _ISP_HSV_MANUAL_ATTR_S {
CVI_U8 AllSatStrength;
CVI_U16 AllSatCoring;
CVI_U16 SatCoringLinearTh;
CVI_U16 SatCoringLinearLmt;
} ISP_HSV_MANUAL_ATTR_S;
typedef struct _ISP_HSV_AUTO_ATTR_S {
CVI_U8 AllSatStrength[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 AllSatCoring[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 SatCoringLinearTh[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 SatCoringLinearLmt[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_HSV_AUTO_ATTR_S;
typedef struct _ISP_HSV_ATTR_S {
CVI_BOOL Enable;
ISP_OP_TYPE_E enOpType;
ISP_HSV_AUTO_ATTR_S stAuto;
ISP_HSV_MANUAL_ATTR_S stManual;
} ISP_HSV_ATTR_S;
//-----------------------------------------------------------------------------
// DPC
//-----------------------------------------------------------------------------
typedef struct _ISP_DP_DYNAMIC_MANUAL_ATTR_S {
CVI_U8 ClusterSize;
CVI_U8 BrightDefectToNormalPixRatio;
CVI_U8 DarkDefectToNormalPixRatio;
CVI_U8 FlatThreR;
CVI_U8 FlatThreG;
CVI_U8 FlatThreB;
CVI_U8 FlatThreMinG;
CVI_U8 FlatThreMinRB;
} ISP_DP_DYNAMIC_MANUAL_ATTR_S;
typedef struct _ISP_DP_DYNAMIC_AUTO_ATTR_S {
CVI_U8 ClusterSize[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 BrightDefectToNormalPixRatio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 DarkDefectToNormalPixRatio[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 FlatThreR[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 FlatThreG[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 FlatThreB[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 FlatThreMinG[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 FlatThreMinRB[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_DP_DYNAMIC_AUTO_ATTR_S;
typedef struct _ISP_DP_DYNAMIC_ATTR_S {
CVI_BOOL Enable;
// CVI_U32 StaticDpcEnable;
ISP_OP_TYPE_E enOpType;
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;
CVI_U16 DarkCount;
CVI_U32 BrightTable[STATIC_DP_COUNT_MAX];
CVI_U32 DarkTable[STATIC_DP_COUNT_MAX];
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;
CVI_U16 CountMax;
CVI_U16 CountMin;
CVI_U16 TimeLimit;
CVI_BOOL saveFileEn;
// read only
CVI_U32 Table[STATIC_DP_COUNT_MAX];
CVI_U8 FinishThresh;
CVI_U16 Count;
ISP_STATUS_E Status;
} ISP_DP_CALIB_ATTR_S;
//-----------------------------------------------------------------------------
// Crosstalk
//-----------------------------------------------------------------------------
typedef struct _ISP_CROSSTALK_MANUAL_ATTR_S {
CVI_U16 Strength;
} ISP_CROSSTALK_MANUAL_ATTR_S;
typedef struct _ISP_CROSSTALK_AUTO_ATTR_S {
CVI_U16 Strength[ISP_AUTO_ISO_STRENGTH_NUM];
} ISP_CROSSTALK_AUTO_ATTR_S;
typedef struct _ISP_CROSSTALK_ATTR_S {
CVI_BOOL Enable;
CVI_U16 GrGbDiffThreSec[4];
CVI_U16 FlatThre[4];
ISP_OP_TYPE_E enOpType;
ISP_CROSSTALK_MANUAL_ATTR_S stManual;
ISP_CROSSTALK_AUTO_ATTR_S stAuto;
} ISP_CROSSTALK_ATTR_S;
//-----------------------------------------------------------------------------
// FSWDR
//-----------------------------------------------------------------------------
typedef struct _ISP_FSWDR_MANUAL_ATTR_S {
CVI_U8 MergeMode;
CVI_U8 MergeModeAlpha;
CVI_U16 WDRCombineShortThr;
CVI_U16 WDRCombineLongThr;
CVI_U8 WDRCombineMinWeight;
CVI_U8 WDRCombineMaxWeight;
} ISP_FSWDR_MANUAL_ATTR_S;
typedef struct _ISP_FSWDR_AUTO_ATTR_S {
CVI_U8 MergeMode[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U8 MergeModeAlpha[ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 WDRCombineShortThr[ISP_AUTO_LV_NUM];
CVI_U16 WDRCombineLongThr[ISP_AUTO_LV_NUM];
CVI_U8 WDRCombineMinWeight[ISP_AUTO_LV_NUM];
CVI_U8 WDRCombineMaxWeight[ISP_AUTO_LV_NUM];
} ISP_FSWDR_AUTO_ATTR_S;
typedef struct _ISP_FSWDR_ATTR_S {
CVI_BOOL Enable;
CVI_BOOL MotionCompEnable;
CVI_BOOL WDRCombineSNRAwareEn;
CVI_U16 WDRCombineSNRAwareSmoothLevel;
CVI_U16 WDRCombineSNRAwareLowThr;
CVI_U16 WDRCombineSNRAwareHighThr;
CVI_U8 WDRCombineSNRAwareToleranceLevel;
CVI_U8 TuningMode;
ISP_OP_TYPE_E enOpType;
ISP_FSWDR_MANUAL_ATTR_S stManual;
ISP_FSWDR_AUTO_ATTR_S stAuto;
} ISP_FSWDR_ATTR_S;
//-----------------------------------------------------------------------------
// DRC
//-----------------------------------------------------------------------------
typedef struct _ISP_DRC_MANUAL_ATTR_S {
CVI_U16 NLDetailDarkGain[4];
CVI_S32 NLDetailDarkAmplitude[4];
CVI_U16 NLDetailBrightGain[4];
CVI_S32 NLDetailBrightAmplitude[4];
CVI_U32 TargetYScale;
CVI_U32 SETargetYScale;
CVI_U32 LETargetYScale;
CVI_U16 ContrastDarkMinThrd;
CVI_U16 ContrastDarkMaxThrd;
CVI_U8 ContrastDarkMinWeight;
CVI_U8 ContrastDarkMaxWeight;
CVI_U16 ContrastBrightMinThrd;
CVI_U16 ContrastBrightMaxThrd;
CVI_U8 ContrastBrightMinWeight;
CVI_U8 ContrastBrightMaxWeight;
} ISP_DRC_MANUAL_ATTR_S;
typedef struct _ISP_DRC_AUTO_ATTR_S {
CVI_U16 NLDetailDarkGain[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_S32 NLDetailDarkAmplitude[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U16 NLDetailBrightGain[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_S32 NLDetailBrightAmplitude[4][ISP_AUTO_ISO_STRENGTH_NUM];
CVI_U32 TargetYScale[ISP_AUTO_LV_NUM];
CVI_U32 SETargetYScale[ISP_AUTO_LV_NUM];
CVI_U32 LETargetYScale[ISP_AUTO_LV_NUM];
CVI_U16 ContrastDarkMinThrd[ISP_AUTO_LV_NUM];
CVI_U16 ContrastDarkMaxThrd[ISP_AUTO_LV_NUM];
CVI_U8 ContrastDarkMinWeight[ISP_AUTO_LV_NUM];
CVI_U8 ContrastDarkMaxWeight[ISP_AUTO_LV_NUM];
CVI_U16 ContrastBrightMinThrd[ISP_AUTO_LV_NUM];
CVI_U16 ContrastBrightMaxThrd[ISP_AUTO_LV_NUM];
CVI_U8 ContrastBrightMinWeight[ISP_AUTO_LV_NUM];
CVI_U8 ContrastBrightMaxWeight[ISP_AUTO_LV_NUM];
} ISP_DRC_AUTO_ATTR_S;
typedef struct _ISP_DRC_ATTR_S {
CVI_BOOL Enable;
CVI_BOOL NLDetailEnhanceEn;
CVI_U8 TuningMode;
CVI_U8 ToneCurveSelect;
CVI_U8 CoarseFltScale;
CVI_U16 CurveUserDefine[769];
CVI_U16 BrightUserDefine[513];
CVI_U16 DarkUserDefine[257];
CVI_U32 DRCMu[32];
CVI_U8 DRangeFltScale;
CVI_U8 DRangeFltCoef;
CVI_U8 SpatialFltScale;
CVI_U8 SpatialFltCoef;
CVI_U32 TargetYLowBound;
CVI_U32 TargetYHighBound;
CVI_U32 SETargetYLowBound;
CVI_U32 SETargetYHighBound;
CVI_U32 LETargetYLowBound;
CVI_U32 LETargetYHighBound;
CVI_U32 LocalToneEn;
CVI_U32 ToneCurveSmooth;
CVI_U16 HdrStrength;
CVI_U8 PwlEn;
CVI_U16 LinearStart;
CVI_U16 LinearEnd;
CVI_U16 DarkOffset;
ISP_OP_TYPE_E enOpType;
ISP_DRC_MANUAL_ATTR_S stManual;
ISP_DRC_AUTO_ATTR_S stAuto;
} ISP_DRC_ATTR_S;
typedef struct _ISP_MONO_ATTR_S {
CVI_BOOL Enable;
} ISP_MONO_ATTR_S;
#define MAX_VPSS_ADJUSTMENT_GRP 4
typedef struct _VPSS_ATTR_S {
CVI_S32 brightness[MAX_VPSS_ADJUSTMENT_GRP];
CVI_S32 contrast[MAX_VPSS_ADJUSTMENT_GRP];
CVI_S32 saturation[MAX_VPSS_ADJUSTMENT_GRP];
CVI_S32 hue[MAX_VPSS_ADJUSTMENT_GRP];
} VPSS_ADJUSTMENT_ATTR_S;
typedef struct _ISP_INNER_STATE_INFO_S {
CVI_U32 wdrHistBinNum;
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_U32 wdrHistogramBefore[MAX_HIST_BINS * MAX_HIST_BINS];
CVI_U32 wdrHistogramAfter[MAX_HIST_BINS * MAX_HIST_BINS];
CVI_U32 *pWdrHistogram;
CVI_U32 *pWdrHistogramResult;
CVI_U32 drcDarkTone[LTM_DARK_CURVE_NODE_NUM];
CVI_U32 drcBrightTone[LTM_BRIGHT_CURVE_NODE_NUM];
} ISP_INNER_STATE_INFO_S;
// Backward Compatible
#include "cvi_isp_backwardcompatible.h"
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif /* __CVI_COMM_ISP_H__ */