Files
BPI-CM9-Linux/aml-comp/hardware/amlogic/cve/lib/v2/include/aml_cve.h
T
2026-08-24 10:03:24 +08:00

1138 lines
33 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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__ */