Files
BPI-CM9-Linux/aml-comp/hardware/amlogic/cve/lib/v2/include/aml_cve.h
T

1138 lines
33 KiB
C
Raw Normal View History

2026-08-13 11:28:40 +08:00
// 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<u8ElemSize<u8HorSegSize */
U8 u8VerSegRows; /* interval-copy,make a row copy from each
u8VerSegRows */
U8 u8DmaNumChannel; /*channel to image, num of channel*/
} CVE_DMA_CTRL_T;
/* mode of the LumaStat */
typedef enum {
CVE_LUMA_STAT_MODE_STEP_0 = 0x0,
CVE_LUMA_STAT_MODE_STEP_1 = 0x1,
CVE_LUMA_STAT_MODE_STEP_2 = 0x2,
CVE_LUMA_STAT_MODE_STEP_3 = 0x3,
CVE_LUMA_STAT_MODE_BUTT
} CVE_LUMA_STAT_MODE_E;
/* control parameter of the LumaStat */
typedef struct {
CVE_CROP_T stCrop;
CVE_LUMA_STAT_MODE_E enMode;
U8 u8MaxLumaRect; /* 0 <= u8MaxLumaRect <= 63 */
} CVE_LUMA_STAT_ARRAY_CTRL_T;
typedef enum {
CVE_FILTER_NORMAL = 0,
CVE_FILTER_CLARITY = 1,
CVE_FILTER_BUTT
} CVE_FILTER_MODE_E;
typedef enum {
CVE_FILTER_CLARITY_DETECT_ABS = 0,
CVE_FILTER_CLARITY_DETECT_POW2 = 1,
CVE_FILTER_CLARITY_MODE_BUTT
} CVE_FILTER_CLARITY_MODE_E;
/*
* These parameters need to be set when using the filter operator
* Change the template filter from 3x3 to 5x5
*/
typedef struct {
CVE_CROP_T stCrop;
S8 as8Mask[25]; /* Template parameter filter factor */
U8 u8Norm; /* standardized parameter,shift right >> */
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__ */