#ifndef _CVI_COMM_IVE_H_ #define _CVI_COMM_IVE_H_ typedef void *IVE_HANDLE; #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif #include "cvi_type.h" #include "cvi_errno.h" typedef unsigned char CVI_U0Q8; typedef unsigned char CVI_U1Q7; typedef unsigned char CVI_U5Q3; typedef unsigned short CVI_U0Q16; typedef unsigned short CVI_U4Q12; typedef unsigned short CVI_U6Q10; typedef unsigned short CVI_U8Q8; typedef unsigned short CVI_U9Q7; typedef unsigned short CVI_U12Q4; typedef unsigned short CVI_U14Q2; typedef unsigned short CVI_U5Q11; typedef short CVI_S9Q7; typedef short CVI_S14Q2; typedef short CVI_S1Q15; typedef unsigned int CVI_U22Q10; typedef unsigned int CVI_U25Q7; typedef unsigned int CVI_U21Q11; typedef int CVI_S25Q7; typedef int CVI_S16Q16; typedef unsigned short CVI_U8Q4F4; typedef float CVI_FLOAT; typedef double CVI_DOUBLE; typedef enum _IVE_IMAGE_TYPE_E { IVE_IMAGE_TYPE_U8C1 = 0x0, IVE_IMAGE_TYPE_S8C1 = 0x1, IVE_IMAGE_TYPE_YUV420SP = 0x2, /*YUV420 SemiPlanar*/ IVE_IMAGE_TYPE_YUV422SP = 0x3, /*YUV422 SemiPlanar*/ IVE_IMAGE_TYPE_YUV420P = 0x4, /*YUV420 Planar */ IVE_IMAGE_TYPE_YUV422P = 0x5, /*YUV422 planar */ IVE_IMAGE_TYPE_S8C2_PACKAGE = 0x6, IVE_IMAGE_TYPE_S8C2_PLANAR = 0x7, IVE_IMAGE_TYPE_S16C1 = 0x8, IVE_IMAGE_TYPE_U16C1 = 0x9, IVE_IMAGE_TYPE_U8C3_PACKAGE = 0xa, IVE_IMAGE_TYPE_U8C3_PLANAR = 0xb, IVE_IMAGE_TYPE_S32C1 = 0xc, IVE_IMAGE_TYPE_U32C1 = 0xd, IVE_IMAGE_TYPE_S64C1 = 0xe, IVE_IMAGE_TYPE_U64C1 = 0xf, IVE_IMAGE_TYPE_BF16C1 = 0x10, IVE_IMAGE_TYPE_FP32C1 = 0x11, IVE_IMAGE_TYPE_BUTT } IVE_IMAGE_TYPE_E; typedef struct CVI_IMG CVI_IMG_S; typedef struct _IVE_IMAGE_S { IVE_IMAGE_TYPE_E enType; CVI_U64 u64PhyAddr[3]; CVI_U64 u64VirAddr[3]; CVI_U32 u32Stride[3]; CVI_U32 u32Width; CVI_U32 u32Height; CVI_U32 u32Reserved; } IVE_IMAGE_S; typedef IVE_IMAGE_S IVE_SRC_IMAGE_S; typedef IVE_IMAGE_S IVE_DST_IMAGE_S; typedef struct _IVE_MEM_INFO_S { CVI_U64 u64PhyAddr; CVI_U64 u64VirAddr; CVI_U32 u32Size; } IVE_MEM_INFO_S; typedef IVE_MEM_INFO_S IVE_SRC_MEM_INFO_S; typedef IVE_MEM_INFO_S IVE_DST_MEM_INFO_S; typedef struct _IVE_DATA_S { CVI_U64 u64PhyAddr; CVI_U64 u64VirAddr; CVI_U32 u32Stride; CVI_U32 u32Width; CVI_U32 u32Height; CVI_U32 u32Reserved; } IVE_DATA_S; typedef IVE_DATA_S IVE_SRC_DATA_S; typedef IVE_DATA_S IVE_DST_DATA_S; typedef union _IVE_8BIT_U { CVI_S8 s8Val; CVI_U8 u8Val; } IVE_8BIT_U; typedef struct _IVE_POINT_U16_S { CVI_U16 u16X; CVI_U16 u16Y; } IVE_POINT_U16_S; typedef struct _IVE_POINT_S16_S { CVI_U16 s16X; CVI_U16 s16Y; } IVE_POINT_S16_S; typedef struct _IVE_POINT_S25Q7_S { CVI_S25Q7 s25q7X; /*X coordinate*/ CVI_S25Q7 s25q7Y; /*Y coordinate*/ } IVE_POINT_S25Q7_S; typedef struct _IVE_RECT_U16_S { CVI_U16 u16X; CVI_U16 u16Y; CVI_U16 u16Width; CVI_U16 u16Height; } IVE_RECT_U16_S; typedef struct _IVE_LOOK_UP_TABLE_S { IVE_MEM_INFO_S stTable; CVI_U16 u16ElemNum; /*LUT's elements number*/ CVI_U8 u8TabInPreci; CVI_U8 u8TabOutNorm; CVI_S32 s32TabInLower; /*LUT's original input lower limit*/ CVI_S32 s32TabInUpper; /*LUT's original input upper limit*/ } IVE_LOOK_UP_TABLE_S; typedef enum _EN_IVE_ERR_CODE_E { ERR_IVE_SYS_TIMEOUT = 0x40, /* IVE process timeout */ ERR_IVE_QUERY_TIMEOUT = 0x41, /* IVE query timeout */ ERR_IVE_OPEN_FILE = 0x42, /* IVE open file error */ ERR_IVE_READ_FILE = 0x43, /* IVE read file error */ ERR_IVE_WRITE_FILE = 0x44, /* IVE write file error */ ERR_IVE_BUTT } EN_IVE_ERR_CODE_E; typedef enum _EN_FD_ERR_CODE_E { ERR_FD_SYS_TIMEOUT = 0x40, /* FD process timeout */ ERR_FD_CFG = 0x41, /* FD configuration error */ ERR_FD_FACE_NUM_OVER = 0x42, /* FD candidate face number over*/ ERR_FD_OPEN_FILE = 0x43, /* FD open file error */ ERR_FD_READ_FILE = 0x44, /* FD read file error */ ERR_FD_WRITE_FILE = 0x45, /* FD write file error */ ERR_FD_BUTT } EN_FD_ERR_CODE_E; #define CVI_ERR_IVE_INVALID_DEVID \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID) #define CVI_ERR_IVE_INVALID_CHNID \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID) #define CVI_ERR_IVE_ILLEGAL_PARAM \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM) #define CVI_ERR_IVE_EXIST \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST) #define CVI_ERR_IVE_UNEXIST \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST) #define CVI_ERR_IVE_NULL_PTR \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR) #define CVI_ERR_IVE_NOT_CONFIG \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG) #define CVI_ERR_IVE_NOT_SURPPORT \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT) #define CVI_ERR_IVE_NOT_PERM \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM) #define CVI_ERR_IVE_NOMEM \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM) #define CVI_ERR_IVE_NOBUF \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF) #define CVI_ERR_IVE_BUF_EMPTY \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY) #define CVI_ERR_IVE_BUF_FULL \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL) #define CVI_ERR_IVE_NOTREADY \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY) #define CVI_ERR_IVE_BADADDR \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_BADADDR) #define CVI_ERR_IVE_BUSY \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY) #define CVI_ERR_IVE_SYS_TIMEOUT \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_SYS_TIMEOUT) #define CVI_ERR_IVE_QUERY_TIMEOUT \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_QUERY_TIMEOUT) #define CVI_ERR_IVE_OPEN_FILE \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_OPEN_FILE) #define CVI_ERR_IVE_READ_FILE \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_READ_FILE) #define CVI_ERR_IVE_WRITE_FILE \ CVI_DEF_ERR(CVI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_WRITE_FILE) #define CVI_ERR_FD_INVALID_DEVID \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID) #define CVI_ERR_FD_INVALID_CHNID \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID) #define CVI_ERR_FD_ILLEGAL_PARAM \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM) #define CVI_ERR_FD_EXIST \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST) #define CVI_ERR_FD_UNEXIST \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST) #define CVI_ERR_FD_NULL_PTR \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR) #define CVI_ERR_FD_NOT_CONFIG \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG) #define CVI_ERR_FD_NOT_SURPPORT \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT) #define CVI_ERR_FD_NOT_PERM \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM) #define CVI_ERR_FD_NOMEM \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM) #define CVI_ERR_FD_NOBUF \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF) #define CVI_ERR_FD_BUF_EMPTY \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY) #define CVI_ERR_FD_BUF_FULL \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL) #define CVI_ERR_FD_NOTREADY \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY) #define CVI_ERR_FD_BADADDR \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_BADADDR) #define CVI_ERR_FD_BUSY CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY) #define CVI_ERR_FD_SYS_TIMEOUT \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_SYS_TIMEOUT) #define CVI_ERR_FD_CFG CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_CFG) #define CVI_ERR_FD_FACE_NUM_OVER \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_FACE_NUM_OVER) #define CVI_ERR_FD_OPEN_FILE \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_OPEN_FILE) #define CVI_ERR_FD_READ_FILE \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_READ_FILE) #define CVI_ERR_FD_WRITE_FILE \ CVI_DEF_ERR(CVI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_WRITE_FILE) #define CVI_ERR_ODT_INVALID_CHNID \ CVI_DEF_ERR(CVI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID) #define CVI_ERR_ODT_EXIST \ CVI_DEF_ERR(CVI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST) #define CVI_ERR_ODT_UNEXIST \ CVI_DEF_ERR(CVI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST) #define CVI_ERR_ODT_NOT_PERM \ CVI_DEF_ERR(CVI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM) #define CVI_ERR_ODT_NOTREADY \ CVI_DEF_ERR(CVI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY) #define CVI_ERR_ODT_BUSY \ CVI_DEF_ERR(CVI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY) //============================================================================== typedef struct IVE_BLOCK_CTRL { CVI_FLOAT f32ScaleSize; CVI_U32 u32CellSize; } IVE_BLOCK_CTRL_S; typedef struct IVE_BLEND_CTRL_S { CVI_U8 u8Weight; } IVE_BLEND_CTRL_S; typedef enum IVE_CC_DIR { DIRECTION_4 = 0x0, DIRECTION_8 = 0x1 } IVE_CC_DIR_E; typedef struct IVE_CC_CTRL { IVE_CC_DIR_E enMode; } IVE_CC_CTRL_S; typedef struct IVE_HOG_CTRL { CVI_U8 u8BinSize; CVI_U32 u32CellSize; CVI_U16 u16BlkSizeInCell; CVI_U16 u16BlkStepX; CVI_U16 u16BlkStepY; } IVE_HOG_CTRL_S; typedef enum IVE_ITC_TYPE { IVE_ITC_SATURATE = 0x0, IVE_ITC_NORMALIZE = 0x1, } IVE_ITC_TYPE_E; typedef struct IVE_ITC_CRTL { IVE_ITC_TYPE_E enType; } IVE_ITC_CRTL_S; //============================================================================== #define IVE_HIST_NUM 256 #define IVE_MAP_NUM 256 #define IVE_MAX_REGION_NUM 254 #define IVE_ST_MAX_CORNER_NUM 500 typedef enum _IVE_DMA_MODE_E { IVE_DMA_MODE_DIRECT_COPY = 0x0, IVE_DMA_MODE_INTERVAL_COPY = 0x1, IVE_DMA_MODE_SET_3BYTE = 0x2, IVE_DMA_MODE_SET_8BYTE = 0x3, IVE_DMA_MODE_BUTT } IVE_DMA_MODE_E; typedef struct _IVE_DMA_CTRL_S { IVE_DMA_MODE_E enMode; CVI_U64 u64Val; /*Used in memset mode*/ /* * Used in interval-copy mode, every row was segmented by * u8HorSegSize bytes, restricted in values of 2,3,4,8,16 */ CVI_U8 u8HorSegSize; /* * Used in interval-copy mode, the valid bytes copied * in front of every segment in a valid row, w_ch 0 lowThr, dstVal = maxVal.*/ IVE_THRESH_MODE_BINARY = 0x0, /*srcVal <= lowThr, dstVal = srcVal; srcVal > lowThr, dstVal = maxVal.*/ IVE_THRESH_MODE_TRUNC = 0x1, /*srcVal <= lowThr, dstVal = minVal; srcVal > lowThr, dstVal = srcVal.*/ IVE_THRESH_MODE_TO_MINVAL = 0x2, /* * srcVal <= lowThr, dstVal = minVal; lowThr < srcVal <= _ghThr, * dstVal = midVal; srcVal > _ghThr, dstVal = maxVal. */ IVE_THRESH_MODE_MIN_MID_MAX = 0x3, /* * srcVal <= lowThr, dstVal = srcVal; lowThr < srcVal <= _ghThr, * dstVal = midVal; srcVal > _ghThr, dstVal = maxVal. */ IVE_THRESH_MODE_ORI_MID_MAX = 0x4, /* * srcVal <= lowThr, dstVal = minVal; lowThr < srcVal <= _ghThr, * dstVal = midVal; srcVal > _ghThr, dstVal = srcVal. */ IVE_THRESH_MODE_MIN_MID_ORI = 0x5, /* * srcVal <= lowThr, dstVal = minVal; lowThr < srcVal <= _ghThr, * dstVal = srcVal; srcVal > _ghThr, dstVal = maxVal. */ IVE_THRESH_MODE_MIN_ORI_MAX = 0x6, /* * srcVal <= lowThr, dstVal = srcVal; lowThr < srcVal <= _ghThr, * dstVal = midVal; srcVal > _ghThr, dstVal = srcVal. */ IVE_THRESH_MODE_ORI_MID_ORI = 0x7, IVE_THRESH_MODE_BUTT } IVE_THRESH_MODE_E; typedef struct _IVE_THRESH_CTRL_S { IVE_THRESH_MODE_E enMode; CVI_U8 u8LowThr; /*user-defined threshold, 0<=u8LowThr<=255 */ /* * user-defined threshold, if enMode0' and 'label = ArrayIndex+1'*/ IVE_REGION_S astRegion[IVE_MAX_REGION_NUM]; } IVE_CCBLOB_S; typedef enum _IVE_CCL_MODE_E { IVE_CCL_MODE_4C = 0x0, /*4-connected*/ IVE_CCL_MODE_8C = 0x1, /*8-connected*/ IVE_CCL_MODE_BUTT } IVE_CCL_MODE_E; typedef struct _IVE_CCL_CTRL_S { IVE_CCL_MODE_E enMode; /*Mode*/ CVI_U16 u16InitAreaThr; /*Init threshold of region area*/ CVI_U16 u16Step; /*Increase area step for once*/ } IVE_CCL_CTRL_S; typedef struct _IVE_GMM_CTRL_S { CVI_U22Q10 u22q10NoiseVar; /*Initial noise Variance*/ CVI_U22Q10 u22q10MaxVar; /*Max Variance*/ CVI_U22Q10 u22q10MinVar; /*Min Variance*/ CVI_U0Q16 u0q16LearnRate; /*Learning rate*/ CVI_U0Q16 u0q16BgRatio; /*Background ratio*/ CVI_U8Q8 u8q8VarThr; /*Variance Threshold*/ CVI_U0Q16 u0q16InitWeight; /*Initial Weight*/ CVI_U8 u8ModelNum; /*Model number: 3 or 5*/ } IVE_GMM_CTRL_S; typedef enum _IVE_GMM2_SNS_FACTOR_MODE_E { IVE_GMM2_SNS_FACTOR_MODE_GLB = 0x0, /*Global sensitivity factor mode*/ IVE_GMM2_SNS_FACTOR_MODE_PIX = 0x1, /*Pixel sensitivity factor mode*/ IVE_GMM2_SNS_FACTOR_MODE_BUTT } IVE_GMM2_SNS_FACTOR_MODE_E; typedef enum _IVE_GMM2_LIFE_UPDATE_FACTOR_MODE_E { IVE_GMM2_LIFE_UPDATE_FACTOR_MODE_GLB = 0x0, /*Global life update factor mode*/ IVE_GMM2_LIFE_UPDATE_FACTOR_MODE_PIX = 0x1, /*Pixel life update factor mode*/ IVE_GMM2_LIFE_UPDATE_FACTOR_MODE_BUTT } IVE_GMM2_LIFE_UPDATE_FACTOR_MODE_E; typedef struct _IVE_GMM2_CTRL_S { IVE_GMM2_SNS_FACTOR_MODE_E enSnsFactorMode; /*Sensitivity factor mode*/ IVE_GMM2_LIFE_UPDATE_FACTOR_MODE_E enLifeUpdateFactorMode; /*Life update factor mode*/ CVI_U16 u16GlbLifeUpdateFactor; /*Global life update factor (default: 4)*/ CVI_U16 u16LifeThr; /*Life threshold (default: 5000)*/ CVI_U16 u16FreqInitVal; /*Initial frequency (default: 20000)*/ CVI_U16 u16FreqReduFactor; /*Frequency reduction factor (default: 0xFF00)*/ CVI_U16 u16FreqAddFactor; /*Frequency adding factor (default: 0xEF)*/ CVI_U16 u16FreqThr; /*Frequency threshold (default: 12000)*/ CVI_U16 u16VarRate; /*Variation update rate (default: 1)*/ CVI_U9Q7 u9q7MaxVar; /*Max variation (default: (16 * 16)<<7)*/ CVI_U9Q7 u9q7MinVar; /*Min variation (default: ( 8 * 8)<<7)*/ CVI_U8 u8GlbSnsFactor; /*Global sensitivity factor (default: 8)*/ CVI_U8 u8ModelNum; /*Model number (range: 1~5, default: 3)*/ } IVE_GMM2_CTRL_S; typedef struct _IVE_CANNY_HYS_EDGE_CTRL_S { IVE_MEM_INFO_S stMem; CVI_U16 u16LowThr; CVI_U16 u16HighThr; CVI_S8 as8Mask[25]; } IVE_CANNY_HYS_EDGE_CTRL_S; typedef struct _IVE_CANNY_STACK_SIZE_S { CVI_U32 u32StackSize; /*Stack size for output*/ CVI_U8 u8Reserved[12]; /*For 16 byte align*/ } IVE_CANNY_STACK_SIZE_S; typedef enum _IVE_LBP_CMP_MODE_E { IVE_LBP_CMP_MODE_NORMAL = 0x0, /* P(x)-P(center)>= un8BitThr.s8Val, s(x)=1; else s(x)=0; */ IVE_LBP_CMP_MODE_ABS = 0x1, /* Abs(P(x)-P(center))>=un8BitThr.u8Val, s(x)=1; else s(x)=0; */ IVE_LBP_CMP_MODE_BUTT } IVE_LBP_CMP_MODE_E; typedef struct _IVE_LBP_CTRL_S { IVE_LBP_CMP_MODE_E enMode; IVE_8BIT_U un8BitThr; } IVE_LBP_CTRL_S; typedef enum _IVE_NORM_GRAD_OUT_CTRL_E { IVE_NORM_GRAD_OUT_CTRL_HOR_AND_VER = 0x0, IVE_NORM_GRAD_OUT_CTRL_HOR = 0x1, IVE_NORM_GRAD_OUT_CTRL_VER = 0x2, IVE_NORM_GRAD_OUT_CTRL_COMBINE = 0x3, IVE_NORM_GRAD_OUT_CTRL_BUTT } IVE_NORM_GRAD_OUT_CTRL_E; typedef struct _IVE_NORM_GRAD_CTRL_S { IVE_NORM_GRAD_OUT_CTRL_E enOutCtrl; CVI_S8 as8Mask[25]; CVI_U8 u8Norm; } IVE_NORM_GRAD_CTRL_S; typedef struct _IVE_FRAME_DIFF_MOTION_CTRL_S { IVE_SUB_MODE_E enSubMode; IVE_THRESH_MODE_E enThrMode; CVI_U8 u8ThrLow; /*user-defined threshold, 0<=u8LowThr<=255 */ /* * user-defined threshold, if enMode u16Thr, dstVal = maxVal.*/ CVI_U8 u8MinVal; /*Min value*/ CVI_U8 u8MaxVal; /*Max value*/ } IVE_SAD_CTRL_S; typedef enum _IVE_RESIZE_MODE_E { IVE_RESIZE_MODE_LINEAR = 0x0, /*Bilinear interpolation*/ IVE_RESIZE_MODE_AREA = 0x1, /*Area-based (or super) interpolation*/ IVE_RESIZE_MODE_BUTT } IVE_RESIZE_MODE_E; typedef struct _IVE_RESIZE_CTRL_S { IVE_RESIZE_MODE_E enMode; IVE_MEM_INFO_S stMem; CVI_U16 u16Num; } IVE_RESIZE_CTRL_S; typedef enum _IVE_CNN_ACTIV_FUNC_E { IVE_CNN_ACTIV_FUNC_NONE = 0x0, /*Do not taking a activation, equivalent f(x)=x*/ IVE_CNN_ACTIV_FUNC_RELU = 0x1, /*f(x)=max(0, x)*/ IVE_CNN_ACTIV_FUNC_SIGMOID = 0x2, /*f(x)=1/(1+exp(-x)), not support*/ IVE_CNN_ACTIV_FUNC_BUTT } IVE_CNN_ACTIV_FUNC_E; typedef enum _IVE_CNN_POOLING_E { IVE_CNN_POOLING_NONE = 0x0, /*Do not taking a pooling action*/ IVE_CNN_POOLING_MAX = 0x1, /*Using max value of every pooling area*/ IVE_CNN_POOLING_AVG = 0x2, /*Using average value of every pooling area*/ IVE_CNN_POOLING_BUTT } IVE_CNN_POOLING_E; typedef struct _IVE_CNN_CONV_POOLING_S { IVE_CNN_ACTIV_FUNC_E enActivFunc; /*Type of activation function*/ IVE_CNN_POOLING_E enPooling; /*Mode of pooling method*/ CVI_U8 u8FeatureMapNum; /*Number of feature maps*/ CVI_U8 u8KernelSize; /*Kernel size, only support 3 currently*/ CVI_U8 u8ConvStep; /*Convolution step, only support 1 currently*/ CVI_U8 u8PoolSize; /*Pooling size, only support 2 currently*/ CVI_U8 u8PoolStep; /*Pooling step, only support 2 currently*/ CVI_U8 u8Reserved[3]; } IVE_CNN_CONV_POOLING_S; typedef struct _IVE_CNN_FULL_CONNECT_S { CVI_U16 au16LayerCnt[8]; /*Neuron number of every fully connected layers*/ CVI_U16 u16MaxCnt; /*Max neuron number in all fully connected layers*/ CVI_U8 u8LayerNum; /*Number of fully connected layer*/ CVI_U8 u8Reserved; } IVE_CNN_FULL_CONNECT_S; typedef struct _IVE_CNN_MODEL_S { IVE_CNN_CONV_POOLING_S astConvPool[8]; /*Conv-ReLU-Pooling layers info*/ IVE_CNN_FULL_CONNECT_S stFullConnect; /*Fully connected layers info*/ IVE_MEM_INFO_S stConvKernelBias; /*Conv-ReLU-Pooling layers' kernels and bias*/ CVI_U32 u32ConvKernelBiasSize; /*Size of Conv-ReLU-Pooling layer' kernels and bias*/ IVE_MEM_INFO_S stFCLWgtBias; /*Fully Connection Layers' weights and bias*/ CVI_U32 u32FCLWgtBiasSize; /*Size of fully connection layers weights and bias*/ CVI_U32 u32TotalMemSize; /*Total memory size of all kernels, weights, bias*/ IVE_IMAGE_TYPE_E enType; /*Image type used for the CNN model*/ CVI_U32 u32Width; /*Image width used for the model*/ CVI_U32 u32Height; /*Image height used for the model*/ CVI_U16 u16ClassCount; /*Number of classes*/ CVI_U8 u8ConvPoolLayerNum; /*Number of Conv-ReLU-Pooling layers*/ CVI_U8 u8Reserved; } IVE_CNN_MODEL_S; typedef struct _IVE_CNN_CTRL_S { IVE_MEM_INFO_S stMem; /*Assist memory*/ CVI_U32 u32Num; /*Input image number*/ } IVE_CNN_CTRL_S; typedef struct _IVE_CNN_RESULT_S { CVI_S32 s32ClassIdx; /*The most possible index of the classification*/ CVI_S32 s32Confidence; /*The confidence of the classification*/ } IVE_CNN_RESULT_S; typedef enum _IVE_BERNSEN_MODE_E { IVE_BERNSEN_MODE_NORMAL = 0x0, /*Simple Bernsen thresh*/ IVE_BERNSEN_MODE_THRESH = 0x1, /*Thresh based on the global threshold and local Bernsen threshold*/ IVE_BERNSEN_MODE_PAPER = 0x2, /*This method is same with original paper*/ IVE_BERNSEN_MODE_BUTT } IVE_BERNSEN_MODE_E; typedef struct _IVE_BERNSEN_CTRL_S { IVE_BERNSEN_MODE_E enMode; CVI_U8 u8WinSize; /* 3x3 or 5x5 */ CVI_U8 u8Thr; CVI_U8 u8ContrastThreshold; // compare with midgray } IVE_BERNSEN_CTRL_S; #ifdef __cplusplus #if __cplusplus } #endif #endif #endif /*_CVI_COMM_IVE_H*/