// SPDX-License-Identifier: (GPL-2.0-only OR MIT) /* * Copyright (C) 2025 Amlogic, Inc. All rights reserved */ #ifndef __AML_CVE_H__ #define __AML_CVE_H__ #include "aml_comm_cve.h" #define CVE_LUMA_RECT_MAX 64 #define CVE_HIST_NUM 256 #define CVE_MAP_NUM 256 #define CVE_MAX_REGION_NUM 384 #define CVE_ST_MAX_CORNER_NUM 500 #define CVE_FILTER_CLARITY_MAX 64 /* Crop */ typedef struct { bool enCrop; /*Crop enable*/ U16 u16X; /*Crop xstart*/ U16 u16Y; /*Crop ystart*/ U16 u16Width; /*Crop xsize*/ U16 u16Height; /*Crop ysize*/ } CVE_CROP_T; /* mode of the DMA */ typedef enum { CVE_DMA_MODE_DIRECT_COPY = 0x0, /* direct copy */ CVE_DMA_MODE_INTERVAL_COPY = 0x1, /* interval copy */ CVE_DMA_MODE_SET_3BYTE = 0x2, /* 3-byte filling mode */ CVE_DMA_MODE_SET_8BYTE = 0x3, /* 8-byte filling mode */ CVE_DMA_MODE_NOT = 0x4, /* u8data is reversed */ CVE_DMA_MODE_DIRECT_COPY_TO_LINE = 0x6, /* direct copy to line mode */ CVE_DMA_MODE_COL2IM = 0x7, /* channel to image copy mode */ CVE_DMA_MODE_BUTT } CVE_DMA_MODE_E; /* control parameter of the DMA */ typedef struct { CVE_CROP_T stCrop; CVE_DMA_MODE_E enMode; U64 u64Val; /* memset mode parameter */ U8 u8HorSegSize; /* interval-copy,u8HorSegSize divides bytes of each row,The limit values are 2,3,4,8,16 */ U8 u8ElemSize; /* interval-copy,copy to the valid bytes before each segment in the valid row,0> */ CVE_FILTER_MODE_E filter_mode; /* 0:filter normal 1:filter clarity*/ CVE_FILTER_CLARITY_MODE_E filter_clarity_mode; /* 0:clarity detect abs 1: clarity detect pow2*/ U8 filter_clarity_idx; /* clarity idx < clarity num*/ U8 filter_clarity_num; /* clarity num = dst2 width*/ } CVE_FILTER_CTRL_T; /* mode of the CSC */ typedef enum { CVE_CSC_MODE_PIC_BT601_YUV2RGB = 0x0, CVE_CSC_MODE_PIC_BT601_YUV2BGR = 0x1, CVE_CSC_MODE_PIC_BT601_YUV2HSV = 0x2, CVE_CSC_MODE_PIC_BT601_YUV2LAB = 0x3, CVE_CSC_MODE_PIC_BT601_RGB2YUV = 0x4, CVE_CSC_MODE_PIC_BT601_BGR2YUV = 0x5, CVE_CSC_MODE_PIC_BT601_RGB2HSV = 0x6, CVE_CSC_MODE_PIC_BT601_RGB2LAB = 0x7, CVE_CSC_MODE_PIC_BT601_RGB2BGR = 0x8, CVE_CSC_MODE_PIC_BT601_BGR2RGB = 0x9, CVE_CSC_MODE_PIC_BT601_YVU2RGB = 0xa, CVE_CSC_MODE_PIC_BT601_YVU2BGR = 0xb, CVE_CSC_MODE_PIC_BT601_YVU2HSV = 0xc, CVE_CSC_MODE_PIC_BT601_YVU2LAB = 0xd, CVE_CSC_MODE_PIC_BT601_RGB2YVU = 0xe, CVE_CSC_MODE_PIC_BT601_BGR2YVU = 0xf, CVE_CSC_MODE_PIC_BT601_BGR2HSV = 0x10, CVE_CSC_MODE_PIC_BT601_BGR2LAB = 0x11, CVE_CSC_MODE_BUTT } CVE_CSC_MODE_E; /* * These parameters need to be set when using the CSC operator * The CSC output format is removed and replaced with output image type */ typedef struct { CVE_CROP_T stCrop; CVE_CSC_MODE_E enMode; /* CSC mode */ } CVE_CSC_CTRL_T; /* * These parameters need to be set when using the filter+CSC operator * Control message about the filter and CSC needs to be set * Change the template filter from 3x3 to 5x5 */ typedef struct { CVE_CROP_T stCrop; CVE_CSC_MODE_E enMode; /* CSC mode */ S8 as8Mask[25]; /* Template parameter filter factor */ U8 u8Norm; /* standardized parameter,shift right >> */ } CVE_FILTER_AND_CSC_CTRL_T; /* output ctrl of the SOBEL */ typedef enum { CVE_SOBEL_OUT_CTRL_BOTH = 0x0, /* horizontal and vertical output */ CVE_SOBEL_OUT_CTRL_HOR = 0x1, /* horizontal output */ CVE_SOBEL_OUT_CTRL_VER = 0x2, /* vertical output */ CVE_SOBEL_OUT_CTRL_BUTT } CVE_SOBEL_OUT_CTRL_E; /* control parameter of the SOBEL */ typedef struct { CVE_CROP_T stCrop; CVE_SOBEL_OUT_CTRL_E enOutCtrl; /* The output format */ S8 as8Mask[25]; /* Template parameter SOBEL factor */ } CVE_SOBEL_CTRL_T; /* magnitude and angle output type */ typedef enum { CVE_MAG_AND_ANG_OUT_CTRL_MAG = 0x0, /* magnitude output */ CVE_MAG_AND_ANG_OUT_CTRL_MAG_AND_ANG = 0x1, /* output both magnitude and angle */ CVE_MAG_AND_ANG_OUT_CTRL_HOG = 0x2, /* output both magnitude and angle in HOG mode */ CVE_MAG_AND_ANG_OUT_CTRL_BUTT } CVE_MAG_AND_ANG_OUT_CTRL_E; /* control parameter of the magnitude and angle */ typedef struct { CVE_CROP_T stCrop; CVE_MAG_AND_ANG_OUT_CTRL_E enOutCtrl; U16 u16Thr; S8 as8Mask[25]; /* Template parameter magnitude and angle factor */ } CVE_MAG_AND_ANG_CTRL_T; /* Control parameter of the Dilate */ typedef struct { CVE_CROP_T stCrop; U8 au8Mask[25]; /* template parameter must be 0 or 255 */ } CVE_DILATE_CTRL_T; /* Control parameter of the Erode */ typedef struct { CVE_CROP_T stCrop; U8 au8Mask[25]; /* template parameter must be 0 or 255 */ } CVE_ERODE_CTRL_T; typedef enum { CVE_BERNSNS_3x3 = 0, CVE_BERNSNS_5x5 = 1, CVE_BERNSNS_BUTT, } CVE_BERNSNS_WIN_SIZE_E; /* Control parameter of the Bernsen */ typedef struct { CVE_CROP_T stCrop; U8 au8Mask[25]; /* template parameter must be 0 or 255 */ CVE_BERNSNS_WIN_SIZE_E winSize; /* 3x3 or 5x5 */ U8 judgethresh; /* the threshold of uniform judge */ U8 thresh; U16 alpha; /* coefficient alpha */ U16 beta; /* coefficient beta */ } CVE_BERNSEN_CTRL_T; /* Thresh mode type */ typedef enum { CVE_THRESH_MODE_BINARY = 0x0, /* outVal = minVal,srcVal <= lowThr; outVal = maxVal,srcVal > lowThr */ CVE_THRESH_MODE_TRUNC = 0x1, /* outVal = srcVal,srcVal <= lowThr; outVal = maxVal,srcVal > lowThr */ CVE_THRESH_MODE_TO_MINVAL = 0x2, /* outVal = minVal,srcVal <= lowThr; outVal = srcVal,srcVal > lowThr */ CVE_THRESH_MODE_MIN_MID_MAX = 0x3, /* outVal = minVal,srcVal <= lowThr; outVal = midVal,lowThr < srcVal <= highThr; outVal = maxVal,srcVal > highThr */ CVE_THRESH_MODE_ORI_MID_MAX = 0x4, /* outVal = srcVal,srcVal <= lowThr; outVal = midVal,lowThr < srcVal <= highThr; outVal = maxVal,srcVal > highThr */ CVE_THRESH_MODE_MIN_MID_ORI = 0x5, /* outVal = minVal,srcVal <= lowThr; outVal = midVal,lowThr < srcVal <= highThr; outVal = srcVal,srcVal > highThr */ CVE_THRESH_MODE_MIN_ORI_MAX = 0x6, /* outVal = minVal,srcVal <= lowThr; outVal = srcVal,lowThr < srcVal <= highThr; outVal = maxVal,srcVal > highThr */ CVE_THRESH_MODE_ORI_MID_ORI = 0x7, /* outVal = srcVal,srcVal <= lowThr; outVal = midVal,lowThr < srcVal <= highThr; outVal = srcVal,srcVal > highThr */ CVE_THRESH_MODE_BUTT } CVE_THRESH_MODE_E; /* Control parameters of the Thresh */ typedef struct { CVE_CROP_T stCrop; CVE_THRESH_MODE_E enMode; U8 u8LowThr; /* Threshold value,usr-defined,0 <= LowThr <= 255 */ U8 u8HighThr; /* Threshold value,usr-defined; if (enMode < CVE_THRESH_MODE_MIN_MID_MAX) U8HighThr is not used; else 0 <= u8LowThr <= u8HighThr <= 255 */ U8 u8MinVal; /* tri level threshold minimum */ U8 u8MidVal; /* tri level threshold middle; if (enMode < 2) U8MidVal is not used */ U8 u8MaxVal; /* tri level threshold maximum */ } CVE_THRESH_CTRL_T; /* Integ output results type */ typedef enum { CVE_INTEG_OUT_CTRL_COMBINE = 0x0, CVE_INTEG_OUT_CTRL_TUM = 0x1, CVE_INTEG_OUT_CTRL_TQSUM = 0x2, CVE_INTEG_OUT_CTRL_BUTT } CVE_INTEG_OUT_CTRL_E; /* Control parameter of the integ */ typedef struct { CVE_CROP_T stCrop; CVE_INTEG_OUT_CTRL_E enOutCtrl; } CVE_INTEG_CTRL_T; /* Control parameter of the hist */ typedef struct { bool eqhist_curv_mode; CVE_CROP_T stCrop; } CVE_HIST_CTRL_T; /* Thresh_s16 mode type */ typedef enum { CVE_THRESH_S16_MODE_S16_TO_S8_MIN_MID_MAX = 0x0, CVE_THRESH_S16_MODE_S16_TO_S8_MIN_ORI_MAX = 0x1, CVE_THRESH_S16_MODE_S16_TO_U8_MIN_MID_MAX = 0x2, CVE_THRESH_S16_MODE_S16_TO_U8_MIN_ORI_MAX = 0x3, CVE_THRESH_S16_MODE_BUTT } CVE_THRESH_S16_MODE_E; /* Control parameters of the Thresh_s16 */ typedef struct { CVE_CROP_T stCrop; CVE_THRESH_S16_MODE_E enMode; S16 s16LowThr; /* threshold value ,usr-defined */ S16 s16HighThr; /* threshold value ,usr-defined */ CVE_8BIT_U un8MinVal; /* tri level threshold minimum */ CVE_8BIT_U un8MidVal; /* tri level threshold midimum */ CVE_8BIT_U un8MaxVal; /* tri level threshold maximum */ } CVE_THRESH_S16_CTRL_T; /* Thresh_u16 mode type */ typedef enum { CVE_THRESH_U16_MODE_U16_TO_U8_MIN_MID_MAX = 0x0, CVE_THRESH_U16_MODE_U16_TO_U8_MIN_ORI_MAX = 0x1, CVE_THRESH_U16_MODE_BUTT } CVE_THRESH_U16_MODE_E; /* Control parameters of the Thresh_u16 */ typedef struct { CVE_CROP_T stCrop; CVE_THRESH_U16_MODE_E enMode; U16 u16LowThr; /* threshold value ,usr-defined */ U16 u16HighThr; /* threshold value ,usr-defined */ U8 u8MinVal; /* tri level threshold minimum */ U8 u8MidVal; /* tri level threshold midimum */ U8 u8MaxVal; /* tri level threshold maximum */ } CVE_THRESH_U16_CTRL_T; /* 16bit to 8bit mode */ typedef enum { CVE_16BIT_TO_8BIT_MODE_S16_TO_S8 = 0x0, CVE_16BIT_TO_8BIT_MODE_S16_TO_U8_ABS = 0x1, CVE_16BIT_TO_8BIT_MODE_S16_TO_U8_BIAS = 0x2, CVE_16BIT_TO_8BIT_MODE_U16_TO_U8 = 0x3, CVE_16BIT_TO_8BIT_MODE_BUTT } CVE_16BIT_TO_8BIT_MODE_E; /* Control parameters of the 16bit to 8bit */ typedef struct { CVE_CROP_T stCrop; CVE_16BIT_TO_8BIT_MODE_E enMode; U16 u8LineCoefThr; S8 s8Bias; } CVE_16BIT_TO_8BIT_CTRL_T; /* OrdstaFilter type */ typedef enum { CVE_ORD_STAT_FILTER_MODE_MIN = 0x0, CVE_ORD_STAT_FILTER_MODE_MEDIAN = 0x1, CVE_ORD_STAT_FILTER_MODE_MAX = 0x2, CVE_ORD_STAT_FILTER_MODE_BUTT } CVE_ORD_STAT_FILTER_MODE_E; /* Control parameters of the OrdstaFilter */ typedef struct { CVE_CROP_T stCrop; CVE_ORD_STAT_FILTER_MODE_E enMode; } CVE_ORD_STAT_FILTER_CTRL_T; /* Map type */ typedef enum { CVE_MAP_MODE_U8 = 0x0, CVE_MAP_MODE_S16 = 0x1, CVE_MAP_MODE_U16 = 0x2, CVE_MAP_MODE_BUTT } CVE_MAP_MODE_E; /* Control parameter of the Map */ typedef struct { CVE_CROP_T stCrop; CVE_MAP_MODE_E enMode; } CVE_MAP_CTRL_T; /* unsigned 8bit LUT memory of the Map */ typedef struct { U8 au8Map[CVE_MAP_NUM]; } CVE_MAP_U8BIT_LUT_MEM_T; /* unsigned 16bit LUT memory of the Map */ typedef struct { U16 au16Map[CVE_MAP_NUM]; } CVE_MAP_U16BIT_LUT_MEM_T; /* 16bit LUT memory of the Map */ typedef struct { S16 as16Map[CVE_MAP_NUM]; } CVE_MAP_S16BIT_LUT_MEM_T; /* Control member of the Equalizehist */ typedef struct { U32 au32Hist[CVE_HIST_NUM]; U8 au8Map[CVE_MAP_NUM]; } CVE_EQUALIZE_HIST_CTRL_MEM_T; /* Control parameter of the Equalizehist */ typedef struct { CVE_CROP_T stCrop; CVE_MEM_INFO_T stMem; } CVE_EQUALIZE_HIST_CTRL_T; /* Sub output type */ typedef enum { CVE_SUB_MODE_ABS = 0x0, /* Absolute value of the srcVal difference */ CVE_SUB_MODE_SHIFT = 0x1, /* Result right shift 1bit to reserve the signed bit ,get the output */ CVE_SUB_MODE_THRESH = 0x2, CVE_SUB_MODE_BUTT } CVE_SUB_MODE_E; /* Control parameter of the SUB */ typedef struct { CVE_CROP_T stCrop; CVE_SUB_MODE_E enMode; U16 u16ThreshRatio; /* Threshold ratio of the difference */ } CVE_SUB_CTRL_T; /* Control parameters of the Add */ typedef struct { CVE_CROP_T stCrop; U0Q16 u0q16X; U0Q16 u0q16Y; } CVE_ADD_CTRL_T; /* Control parameters of the Add and & 0x01*/ typedef struct { CVE_CROP_T stCrop; U0Q16 u0q16X; U0Q16 u0q16Y; } CVE_ADD_MAP_255_TO_1_CTRL_T; /* Control parameters of the And */ typedef struct { CVE_CROP_T stCrop; } CVE_AND_CTRL_T; /* Control parameters of the Or */ typedef struct { CVE_CROP_T stCrop; } CVE_OR_CTRL_T; /* Control parameters of the Xor */ typedef struct { CVE_CROP_T stCrop; } CVE_XOR_CTRL_T; /* Control parameters of the Dot */ typedef struct { CVE_CROP_T stCrop; } CVE_DOT_CTRL_T; /* NCC dst memory */ typedef struct { U64 u64Numerator; U64 u64QuadSum1; U64 u64QuadSum2; U8 u8Reserved[8]; } CVE_NCC_DST_MEM_T; /* Region factors */ typedef struct { U32 u32Area; /* expressed by the number of pixel */ U16 u16Left; /* The left boundary of the rectangle */ U16 u16Right; /* The right boundary of the rectangle */ U16 u16Top; /* The top boundary of the rectangle */ U16 u16Bottom; /* The bottom boundary of the rectangle */ U16 u16label; } CVE_REGION_T; /* CCBLOB factors */ typedef struct { CVE_REGION_T astRegion[CVE_MAX_REGION_NUM]; /* u32Areae > 0, label = Arrayindex+1 */ U16 u16RegionNum; /* CCL connected component */ } CVE_CCBLOB_T; /* NCC mode */ typedef enum { CVE_NCC_MODE_COM = 0x0, CVE_NCC_MODE_SIMILAR = 0x1, CVE_NCC_MODE_BUTT } CVE_NCC_MODE_E; /* NCC control factors */ typedef struct { CVE_CROP_T stCrop; CVE_NCC_MODE_E enMode; U8 u8Src1Offset; U8 u8Src0Offset; } CVE_NCC_CTRL_T; /* CCL input mode */ typedef enum { CVE_CCL_INPUT_DATA_MODE_U8 = 0x0, /* [0,255] */ CVE_CCL_INPUT_DATA_MODE_U1 = 0x1, /* {0,1} */ CVE_CCL_INPUT_DATA_MODE_BUTT } CVE_CCL_INPUT_DATA_MODE_E; /* CCL control factor */ typedef struct { CVE_CROP_T stCrop; CVE_CCL_INPUT_DATA_MODE_E enInputDataMode; } CVE_CCL_CTRL_T; /* GMM output mode */ typedef enum { CVE_GMM_OUTPUT_MODE_FG = 0x0, /* output FG */ CVE_GMM_OUTPUT_MODE_FG_AND_BG = 0x1, /* output FG and BG */ CVE_GMM_OUTPUT_MODE_BUTT } CVE_GMM_OUTPUT_MODE_E; /* GMM sensitivity mode */ typedef enum { CVE_GMM_SNS_FACTOR_MODE_GLB = 0x0, /* Global mode */ CVE_GMM_SNS_FACTOR_MODE_PIX = 0x1, /* Pixel mode */ CVE_GMM_SNS_FACTOR_MODE_BUTT } CVE_GMM_SNS_FACTOR_MODE_E; /* GMM duration update factor mode */ typedef enum { CVE_GMM_DURATION_UPDATE_FACTOR_MODE_GLB = 0x0, /* Global mode */ CVE_GMM_DURATION_UPDATE_FACTOR_MODE_PIX = 0x1, /* Pixel mode */ CVE_GMM_DURATION_UPDATE_FACTOR_MODE_BUTT } CVE_GMM_DURATION_UPDATE_FACTOR_MODE_E; /* GMMM down scale factor mode */ typedef enum { CVE_GMM_DOWN_SCALE_MODE_DISABLE = 0x0, CVE_GMM_DOWN_SCALE_MODE_2X2 = 0x1, CVE_GMM_DOWN_SCALE_MODE_4X4 = 0x2, CVE_GMM_DOWN_SCALE_MODE_BUTT } CVE_GMM_DOWN_SCALE_MODE_E; typedef enum { CVE_GMM_OUTPUT_DATA_MODE_U8 = 0x0, /* [0,255] */ CVE_GMM_OUTPUT_DATA_MODE_U1 = 0x1, /* {0,1} */ CVE_GMM_OUTPUT_DATA_MODE_BUTT } CVE_GMM_OUTPUT_DATA_MODE_E; /* GMM control factor */ typedef struct { CVE_CROP_T stCrop; CVE_GMM_OUTPUT_MODE_E enOutputMode; CVE_GMM_SNS_FACTOR_MODE_E enSnsFactorMode; /* sensitivity factor mode */ CVE_GMM_DURATION_UPDATE_FACTOR_MODE_E enDurationUpdateFactorMode; /* Duration update factor mode */ CVE_GMM_DOWN_SCALE_MODE_E enDownScaleMode; /* Down scale mode */ CVE_GMM_OUTPUT_DATA_MODE_E enOutputDataMode; /* output data mode */ U10Q6 u10q6NoiseVar; /* Initial noise Variance */ U10Q6 u10q6MaxVar; /* Max Variance */ U10Q6 u10q6MinVar; /* Min Variance */ U0Q16 u0q16LearnRate; /* Learn rate */ U0Q16 u0q16InitWeight; /* Initial weight */ U0Q16 u0q16WeightThr; /* Weight threshold */ U8 u8ModelNum; /* [1,5] */ U3Q7 u3q7SigmaScale; /* Variance scale */ bool enFastLearn; /* Fast learn switch */ } CVE_GMM_CTRL_T; /* CannyHysEdge control factor */ typedef struct { CVE_CROP_T stCrop; CVE_MEM_INFO_T stMem; bool bGauss; U16 u16LowThr; U16 u16HighThr; U32 *u32CannyCount; S8 as8Mask[25]; } CVE_CANNY_HYS_EDGE_CTRL_T; /* CannyEdge output data mode */ typedef enum { CVE_CANNY_EDGE_OUTPUT_DATA_MODE_U8 = 0x0, /* [0,255] */ CVE_CANNY_EDGE_OUTPUT_DATA_MODE_U1 = 0x1, /* {0,1} */ CVE_CANNY_EDGE_OUTPUT_DATA_MODE_BUTT } CVE_CANNY_EDGE_OUTPUT_DATA_MODE_E; /* control parameter of the CannyEdge */ typedef struct { CVE_CROP_T stCrop; CVE_CANNY_EDGE_OUTPUT_DATA_MODE_E enOutputDataMode; U32 u32CannyCount; } CVE_CANNY_EDGE_CTRL_T; /* LBP compare mode */ typedef enum { CVE_LBP_CMP_MODE_NORMAL = 0x0, /* P(x)-P(center)>= un8BitThr.s8Val, s(x)=1; else s(x)=0 */ CVE_LBP_CMP_MODE_ABS = 0x1, /* Abs(P(x)-P(center))>=un8BitThr.u8Val, s(x)=1; else s(x)=0 */ CVE_LBP_CMP_MODE_BUTT } CVE_LBP_CMP_MODE_E; /* LBP control factor */ typedef struct { CVE_CROP_T stCrop; CVE_LBP_CMP_MODE_E enMode; CVE_8BIT_U un8BitThr; } CVE_LBP_CTRL_T; /* GradientFilter output format type */ typedef enum { CVE_NORM_GRAD_OUT_CTRL_HOR_AND_VER = 0x0, CVE_NORM_GRAD_OUT_CTRL_HOR = 0x1, CVE_NORM_GRAD_OUT_CTRL_VER = 0x2, CVE_NORM_GRAD_OUT_CTRL_COMBINE = 0x3, CVE_NORM_GRAD_OUT_CTRL_BUTT } CVE_NORM_GRAD_OUT_CTRL_E; /* Control parameters of the GradientFilter */ typedef struct { CVE_CROP_T stCrop; CVE_NORM_GRAD_OUT_CTRL_E enOutCtrl; S8 as8Mask[25]; U8 u8Norm; } CVE_NORM_GRAD_CTRL_T; /* LK Optical flow output mode */ typedef enum { CVE_LK_OPTICAL_FLOW_PYR_OUT_MODE_NONE = 0, /* none */ CVE_LK_OPTICAL_FLOW_PYR_OUT_MODE_ERR = 1, /* error */ CVE_LK_OPTICAL_FLOW_PYR_OUT_MODE_BOTH = 2, /* error */ CVE_LK_OPTICAL_FLOW_PYR_OUT_MODE_BUTT } CVE_LK_OPTICAL_FLOW_PYR_OUT_MODE_E; /* Control parameter of the LK Optical flow */ typedef struct { CVE_CROP_T stCrop; U8 u8MaxLevel; /* Sub 1 from the number of levels in the pyramid, corresponding to pyramid layers [1,4], (range: [0,3]; default:3) */ } CVE_BUILD_LK_OPTICAL_FLOW_PYR_CTRL_T; /* Control parameter of the Build LK Optical flow */ typedef struct { CVE_CROP_T stCrop; CVE_LK_OPTICAL_FLOW_PYR_OUT_MODE_E enOutMode; /* out mode */ bool bUseInitFlow; /* Use initial flow or not */ U16 u16PtsNum; /* Feature points number (range: [1,500]; default : 100) */ U8 u8MaxLevel; /* Sub 1 from the number of levels in the pyramid, corresponding to pyramid layers [1,4], (range: [0,3]; default:3) */ U8 u8IterCnt; /* Max iteration times (range: [1,20]; default: 10) */ U0Q8 u0q8Eps; /* exit criteria:(range: [1,255]; default :10) */ } CVE_LK_OPTICAL_FLOW_PYR_CTRL_T; /* STCandiCorner output data mode */ typedef enum { CVE_ST_CANDI_CORNER_OUTPUT_DATA_MODE_U8 = 0x0, /* [0,255] */ CVE_ST_CANDI_CORNER_OUTPUT_DATA_MODE_U1 = 0x1, /* {0,1} */ CVE_ST_CANDI_CORNER_OUTPUT_DATA_MODE_BUTT } CVE_ST_CANDI_CORNER_OUTPUT_DATA_MODE_E; /* Control parameter of the STCandiCorner */ typedef struct { CVE_CROP_T stCrop; CVE_ST_CANDI_CORNER_OUTPUT_DATA_MODE_E enOutputDataMode; CVE_MEM_INFO_T stMem; U32 *u32PointNum; } CVE_ST_CANDI_CORNER_CTRL_T; /* ST Corner struct */ typedef struct { CVE_POINT_U16_T astCorner[CVE_ST_MAX_CORNER_NUM]; U16 u16CornerNum; } CVE_ST_CORNER_INFO_T; /* Control parameters of the STCorner */ typedef struct { U32 u32CornerNum; U16 u32MaxCornerNum; U16 u32MinDist; } CVE_ST_CORNER_CTRL_T; /* Gradfg mode */ typedef enum { CVE_GRAD_FG_MODE_DIRECT = 0x0, /* output = diff = current gradient - background gradient */ CVE_GRAD_FG_MODE_THR = 0x1, /* if(diff < threshold) output = 0; else output = diff */ CVE_GRAD_FG_MODE_THR_FG = 0x2, /* if(foreground != O && diff < threshold) output = diff; else output = 0 */ CVE_GRAD_FG_MODE_FG = 0x3, /* if(foreground != 0) output = diff; else output = 0 */ CVE_GRAD_FG_MODE_BUTT } CVE_GRAD_FG_MODE_E; /* Gradfg ctrl factor */ typedef struct { CVE_CROP_T stCrop; CVE_GRAD_FG_MODE_E enMode; /* ctrl mode (range: [0,3]; default: 0) */ U8 u8MinMagDiff; /* Max gradient and min gradient difference threshold(range : [0,255]; default: 100) */ } CVE_GRAD_FG_CTRL_T; /* Candi background pixels parameters */ typedef struct { U8Q4F4 u8q4f4Mean; /* Candidate background grays value */ U16 u16StartTime; /* Candidate background start time */ U16 u16SumAccessTime; /* Candidate background Cumulative access time */ U16 u16ShortKeepTime; /* Candidate background hold time */ U8 u8ChgCond; /* The time condition is that candidate background enter a state of change */ U8 u8PotenBgLife; /* Potential background cumulative access time */ } CVE_CANDI_BG_PIX_T; /* WorkBg pixels parameters */ typedef struct { U8Q4F4 u8q4f4Mean; /* Background grays value 0# */ U16 u16AccTime; /* Background Cumulative access time */ U8 u8PreGray; /* The ray value of the last pixel */ U5Q3 u5q3DiffThr; /* Differential threshold */ U8 u8AccFlag; /* Background access flag */ U8 u8BgGray[3]; /* Background grays value 1# to 3# */ } CVE_WORK_BG_PIX_T; /* BgLife parameters */ typedef struct { U8 u8WorkBgLife[3]; /* background vitality 1# to 3# */ U8 u8CandiBgLife; /* Candidate background vitality */ } CVE_BG_LIFE_T; /* BgModel Pixel parameters */ typedef struct { CVE_WORK_BG_PIX_T stWorkBgPixel; /* Working background */ CVE_CANDI_BG_PIX_T stCandiPixel; /* Candidate background */ CVE_BG_LIFE_T stBgLife; /* Background vitality */ } CVE_BG_MODEL_PIX_T; /* FgStat data */ typedef struct { U32 u32PixNum; U32 u32SumLum; } CVE_FG_STAT_DATA_T; /* BgStat data */ typedef struct { U32 u32PixNum; U32 u32SumLum; } CVE_BG_STAT_DATA_T; /* MatchBgModel output mode */ typedef enum { CVE_MATCH_BG_MODEL_OUTPUT_MODE_FG = 0x0, /* Fg output */ CVE_MATCH_BG_MODEL_OUTPUT_MODE_FG_AND_BG = 0x1, /* Fg and Bg output */ CVE_MATCH_BG_MODEL_OUTPUT_MODE_FG_AND_BG_AND_CURDIFFBG = 0x2, /* Fg ,Bg and curDiffbg output */ CVE_MATCH_BG_MODEL_OUTPUT_MODE_ALL = 0x3, /* all output (Fg,Bg,curDiffbg,frmDiff) */ CVE_MATCH_BG_MODEL_OUTPUT_MODE_BUTT } CVE_MATCH_BG_MODEL_OUTPUT_MODE_E; /* MatchBgModel down scale mode */ typedef enum { CVE_MATCH_BG_MODEL_DOWN_SCALE_MODE_DISABLE = 0x0, CVE_MATCH_BG_MODEL_DOWN_SCALE_MODE_2X2 = 0x1, CVE_MATCH_BG_MODEL_DOWN_SCALE_MODE_4X4 = 0x2, CVE_MATCH_BG_MODEL_DOWN_SCALE_MODE_BUTT } CVE_MATCH_BG_MODEL_DOWN_SCALE_MODE_E; /* Control parameters of the MatchBgModel */ typedef struct { CVE_CROP_T stCrop; CVE_MATCH_BG_MODEL_OUTPUT_MODE_E enOutputMode; /* output mode (range: [0,2]; default: 0) */ CVE_MATCH_BG_MODEL_DOWN_SCALE_MODE_E enDownScaleMode; /* Down scale mdoe (range: [0,2]; default: 2) */ U8Q4 u8q4DistThr; /* Variance threshold (range:[0,4095]; default: 400) */ U8 u8GrayThr; /* current frame sub background (range [0,255]; default: 20) */ } CVE_MATCH_BG_MODEL_CTRL_T; /* updateBgModel down scale mode */ typedef enum { CVE_UPDATE_BG_MODEL_DOWN_SCALE_MODE_DISABLE = 0x0, CVE_UPDATE_BG_MODEL_DOWN_SCALE_MODE_2X2 = 0x1, CVE_UPDATE_BG_MODEL_DOWN_SCALE_MODE_4X4 = 0x2, CVE_UPDATE_BG_MODEL_DOWN_SCALE_MODE_BUTT } CVE_UPDATE_BG_MODEL_DOWN_SCALE_MODE_E; /* Control parameters of the updateBgModel */ typedef struct { CVE_CROP_T stCrop; CVE_UPDATE_BG_MODEL_DOWN_SCALE_MODE_E enDownScaleMode; /* Down scale mode(range: [0,2];default: 0) */ U16 u16DelThr; /* Delete threshold(range: [0,65535];default: 1000) */ U16 u16FrqThr; /* Frequency threshold(range: [0,65535];default: 200) */ U16 u16IntervalThr; /* Interval threshold(range: [0,65535];default: 40) */ U0Q16 u0q16LearnRate; /* Learn rate(range: [0,65535];default:1310) */ } CVE_UPDATE_BG_MODEL_CTRL_T; /* SAD mode */ typedef enum { CVE_SAD_MODE_MB_4X4 = 0x0, /* 4 x 4 */ CVE_SAD_MODE_MB_8X8 = 0x1, /* 8 x 8 */ CVE_SAD_MODE_MB_16X16 = 0x2, /* 16 x 16 */ CVE_SAD_MODE_BUTT } CVE_SAD_MODE_E; /* Control parameters of the SAD */ typedef struct { CVE_CROP_T stCrop; CVE_SAD_MODE_E enMode; U16 u16Thr; /* output threshold = minVal, srcVal <= u16Thr; output threshold = maxVal, srcVal > u16Thr */ U8 u8MinVal; /* Min value */ U8 u8MaxVal; /* Max value */ } CVE_SAD_CTRL_T; /* ROI info */ typedef struct { CVE_RECT_S24Q8_T stRoi; U32 u32RoiId; } CVE_ROI_INFO_T; typedef enum { CVE_KCF_FHOG_WH_SEL_8 = 0x0, CVE_KCF_FHOG_WH_SEL_16 = 0x1, CVE_KCF_FHOG_WH_SEL_32 = 0x2, CVE_KCF_FHOG_WH_SEL_BUTT } CVE_KCF_FHOG_WH_SEL_E; /* KCF GET YF Contrl params*/ typedef struct { CVE_KCF_FHOG_WH_SEL_E u8FhogWidthSel; CVE_KCF_FHOG_WH_SEL_E u8FhogHeightSel; } CVE_KCF_GET_YF_CTRL_T; typedef enum { CVE_KCF_FHOG_MODE_WIDTH_FIRST = 0x0, CVE_KCF_FHOG_MODE_CHANNEL_FIRST = 0x1, CVE_KCF_FHOG_MODE_BUTT } CVE_KCF_FHOG_MODE_E; /* KCF GET FEATURE Contrl params*/ typedef struct { S16 s16CropXstart; S16 s16CropYstart; S16 s16CropXSize; S16 s16CropYSize; CVE_KCF_FHOG_MODE_E enFhogMode; CVE_KCF_FHOG_WH_SEL_E u8FhogWidthSel; CVE_KCF_FHOG_WH_SEL_E u8FhogHeightSel; // CVE_KCF_FHOG_RESIZE_SEL_E u8FhogIxSizeSel; // CVE_KCF_FHOG_RESIZE_SEL_E u8FhogIySizeSel; U16 u16TrancAlpha; /* 0~4095 */ U8 u8LowCostEn; /*0: no, standard of FHOG, 1:yes, lowcost version */ U8 u8HanningEn; U8 u8TranMode; // U16 u16RatioX; /* 1~1023 */ // U16 u16RatioY; /* 1~1023 */ } CVE_KCF_GET_FEATURE_CTRL_T; typedef enum { CVE_KCF_TRAIN_MODE = 0x0, CVE_KCF_TRACK_MODE = 0x1, CVE_KCF_TRAIN_OR_TRACK_BUTT } CVE_KCF_TRAIN_OR_TRACK_MODE_E; /* KCF TRAIN AND TRACK Contrl params*/ typedef struct { // S16 s16CropXstart; // S16 s16CropYstart; S16 s16CropXSize; S16 s16CropYSize; CVE_KCF_FHOG_WH_SEL_E u8FhogWidthSel; CVE_KCF_FHOG_WH_SEL_E u8FhogHeightSel; CVE_KCF_TRAIN_OR_TRACK_MODE_E u8Mode; U8 u8ObjIdx; U8 u8ObjNum; U16 u16BldCoef; U8 u8HanningEn; U8 u8LowCostEn; } CVE_KCF_TRAIN_AND_TRACK_CTRL_T; typedef enum { CVE_LINE_FILTER_HOR_FIRST = 0, CVE_LINE_FILTER_HOR_SECOND = 1, CVE_LINE_FILTER_VER = 2, CVE_LINE_FILTER_BUTT } CVE_LINE_FILTER_MODE_E; typedef struct { CVE_CROP_T stCrop; CVE_LINE_FILTER_MODE_E LineFilterMode; U8 u8Thresh[4]; } CVE_LINE_FILTER_CTRL_T; typedef struct { CVE_CROP_T stCrop; U8 u8Thresh; U8 u8MaxThresh; } CVE_NOISE_REMOVE_CTRL_T; typedef enum { CVE_ADP_THRESH_BINARY = 0, CVE_ADP_THRESH_BINARY_INV = 1, CVE_ADP_THRESH_BUTT } CVE_ADP_THRESH_MODE_E; typedef struct { CVE_CROP_T stCrop; U8 u8HalfMaskX; U8 u8HalfMaskY; U8 u8RateThr; U8 u8ValueThr; S8 s8Offset; U8 u8MaxValue; CVE_ADP_THRESH_MODE_E u8Mode; } CVE_ADP_THRESH_CTRL_T; typedef struct { CVE_CROP_T stCrop; } CVE_REDUCE_CTRL_T; typedef struct { CVE_CROP_T stCrop; int s32TransferMatrix[6]; // U8 u8SrcImgType; /* 0:U8C1 2:YUV420SP, 3 YUV422SP */ // U8 u8YuvImgType; /* 0:NV21 1:NV12*/ bool UvEn; /*0:only Y or U8C1 1:only UV channel*/ U8 u8OobUv; U8 u8OobY; } CVE_PERSP_TRANS_CTRL_T; typedef struct { CVE_CROP_T stCrop; U16 u16Filter_Eps; U8 u8FilterWinSize; /* 3 or 5*/ // U16 u16FilterNorm; } CVE_FAST_GUIDE_FILTER_CTRL_T; typedef struct { CVE_CROP_T stCrop; bool u8HogGamma; U8 u8HogCellSize; /* 4 or 8 */ // U16 u16HogBlockSumW; U8 u8HogOShift; /* [0,31]*/ } CVE_HOG_CTRL_T; typedef struct { U32 u32InvScaleX; U32 u32InvScaleY; U32 u32ScaleX; U32 u32ScaleY; CVE_CROP_T stCrop; } CVE_RESIZE_CTRL_T; typedef enum { CVE_SVM_KERNEL_TYPE_LINEAR = 0, CVE_SVM_KERNEL_TYPE_POLY, CVE_SVM_KERNEL_TYPE_RBF, CVE_SVM_KERNEL_TYPE_SIGMOID, CVE_SVM_KERNEL_TYPE_BUTT, } CVE_SVM_ENKERNEL_TYPE_E; typedef struct { CVE_SVM_ENKERNEL_TYPE_E u8EnKernelType; U16 u16SvNum; U16 u16FeatureDim; U16 u16FeatureNum; } CVE_SVM_KERNEL_CTRL_T; typedef struct { U16 u16SvNum; U8 u8Class_count; int s32PredictThr; U16 u16FeatureNum; } CVE_SVM_PREDICT_CTRL_T; typedef enum { CVE_RESHAPE_TRANSPOSE, CVE_RESHAPE_ROTATE_90, CVE_RESHAPE_ROTATE_180, CVE_RESHAPE_BUTT } CVE_RESHAPE_MODE_E; typedef struct { CVE_RESHAPE_MODE_E enReshapMode; U16 u16BlockWidth; U16 u16BlockHeight; } CVE_RESHAPE_CTRL_T; typedef enum { CVE_IM2COL_MODE_FC, CVE_IM2COL_MODE_FC_TRANS, CVE_IM2COL_MODE_CONV, CVE_IM2COL_MODE_BUTT } CVE_IM2COL_MODE_E; typedef struct { CVE_IM2COL_MODE_E enMode; U8 u8KSize; U8 u8Stride; S8 s8Zp; U8 u8OHeight; U8 u8OWidth; U8 u8PaddingTop; U8 u8PaddingLeft; U32 u32OWidthDivCoef; } CVE_IM2COL_CTRL_T; typedef enum { CVE_GEMM_ACT_NONE, CVE_GEMM_ACT_RELU, CVE_GEMM_ACT_BUTT, } CVE_GEMM_ACT_MODE_E; typedef struct { U8 u8Src0RemainLen; U8 u8Src1RemainLen; CVE_GEMM_ACT_MODE_E ActMode; S8 s8ZpA; S8 s8ZpB; S8 s8ZpOut; U32 u32ScaleSlope; U32 u32ReluSlope; } CVE_GEMM_CTRL_T; typedef enum { CVE_POOLING_AVG = 0, CVE_POOLING_MAX, CVE_POOLING_BUTT } CVE_POOLING_MODE_E; typedef struct { CVE_POOLING_MODE_E enMode; U8 u8NChannel; U8 u8Stride; U8 u8KSize; S8 s8Zp; U8 u8PaddingTop; U8 u8PaddingLeft; } CVE_POOLING_CTRL_T; typedef struct { CVE_CROP_T stCrop; U16 u16ImgW; U16 u16ImgH; U16 u16ImgShuffleW; U16 u16ImgShuffleH; U8 u8Channel; U16 u16ImgPadW; U16 u16ImgPadH; CVE_RAW_AIISP_MODE_E u8MipiBit; /* 8, 10, 12, 14, 16 */ bool MipiCompactEn; U0Q16 u0q16DiffScale; U8 u8DiffOffset; U8 u8IdxLut16[16]; /* u4x16 */ } CVE_AIISP_TNR_PRE_PROCESS_CTRL_T; typedef struct { CVE_CROP_T stCrop; U16 u16ImgW; U16 u16ImgH; U16 u16ImgShuffleW; U16 u16ImgShuffleH; U8 u8Channel; U16 u16ImgPadW; U16 u16ImgPadH; CVE_RAW_AIISP_MODE_E u8MipiBit; /* 8, 10, 12, 14, 16 */ bool MipiCompactEn; U8 u8MaskChannel; U8 u8MaskThr; U8 u8MinCounter; U16 u16BlcSnrIn[4]; /* u12x4*/ U8 u8TnrBldLut1[33]; U8 u8TnrBltNum1; U8 u8TnrBltStep1; U8 u8TnrBldLut2[33]; U8 u8TnrBltNum2[3]; U8 u8TnrBltStep2[3]; } CVE_AIISP_TNR_POST_PROCESS_CTRL_T; typedef struct { U16 u16ImgW; U16 u16ImgH; U16 u16ImgShuffleW; U16 u16ImgShuffleH; U8 u8Channel; // U16 u16TnrImgPadW; U16 u16ImgPadW; U16 u16ImgPadH; CVE_RAW_AIISP_MODE_E u8MipiBit; /* 8, 10, 12, 14, 16 */ bool MipiCompactEn; // U8 u8MaskChannel; U8 u8SnrDequantScale; U16 u16SnrDequantOffset; U16 u16BlcSnrOut[4]; /* u12x4*/ U8 u8NcEn; U8 u8NoiseLut[16]; U8 u8NoiseBins; U8 u8NoiseStep; } CVE_AIISP_SNR_POST_PROCESS_CTRL_T; typedef enum { CVE_AIISP_MFNR_OUT_16BIT_BIT_MODE = 0, CVE_AIISP_MFNR_OUT_12BIT_BIT_RIGHT_SHIFT_4BIT_MODE, /* >> 4 */ CVE_AIISP_MFNR_OUT_12BIT_BIT_MODE, /* &0xFFF*/ } CVE_AIISP_MFNR_OUT_MODE_T; typedef struct { CVE_CROP_T stCrop; U16 u16ImgW; U16 u16ImgH; U16 u16ImgShuffleW; U16 u16ImgShuffleH; U8 u8Channel; U16 u16ImgPadW; U16 u16ImgPadH; CVE_RAW_AIISP_MODE_E u8MipiBit; /* 8, 10, 12, 14, 16 */ bool MipiCompactEn; U0Q16 u0q16DiffScale; U8 u8DiffOffset; U8 u8IdxLut16[16]; /* u4x16 */ U16 u8MfnrBlcIn0[8]; /* u16x4 */ U16 u8MfnrBlcIn1[8]; /* u16x4 */ CVE_AIISP_MFNR_OUT_MODE_T u8DataBitMode; bool DgainEn; U4Q6 u6q6Dgain; bool IsShortFrame; U4Q6 u4q6ExpRatio; } CVE_AIISP_TNR_MFNR_PROCESS_CTRL_T; typedef struct { CVE_CROP_T stCrop; U16 u16ImgW; U16 u16ImgH; U16 u16ImgShuffleW; U16 u16ImgShuffleH; U8 u8Channel; // MBP_U16 u16TnrImgPadW; U16 u16ImgPadW; U16 u16ImgPadH; CVE_RAW_AIISP_MODE_E u8MipiBit; /* 8, 10, 12, 14, 16 */ bool MipiCompactEn; // MBP_U8 u8MaskChannel; U8 u8SnrDequantScale; U16 u16SnrDequantOffset; U16 u16BlcSnrOut[4]; /* u12x4*/ U8 u8NcEn; U8 u8NoiseLut[16]; U8 u8NoiseBins; U8 u8NoiseStep; CVE_AIISP_MFNR_OUT_MODE_T u8DataBitMode; U16 u16MfnrBlcOut[4]; } CVE_AIISP_SNR_MFNR_PROCESS_CTRL_T; #endif /* __AML_CVE_H__ */