You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

748 lines
24 KiB

3 years ago
/******************************************************************************
Copyright (C), 2001-2014, Hisilicon Tech. Co., Ltd.
******************************************************************************
File Name : hi_comm_ive.h
Version : Initial Draft
Author : Hisilicon multimedia software (IVE) group
Created : 2014/08/05
Description :
History :
1.Date : 2013/07/01~2014/08/05
Author : t00228657\c00211359\c00206215
Modification: Created file
******************************************************************************/
#ifndef _HI_IVE_H_
#define _HI_IVE_H_
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif
#include "hi_comm_ive.h"
//if sdk environment,include hi_common.h,else typedef HI_S32 IVE_HANDLE
#include "hi_common.h"
#define IVE_HIST_NUM 256
#define IVE_MAP_NUM 256
#define IVE_MAX_REGION_NUM 254
#define IVE_ST_MAX_CORNER_NUM 200
/*
*DMA mode ,created by Chen Quanfu 2013-07-19
*/
typedef enum hiIVE_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;
/*
*DMA control parameter ,created by Chen Quanfu 2013-07-19
*/
typedef struct hiIVE_DMA_CTRL_S
{
IVE_DMA_MODE_E enMode;
HI_U64 u64Val; /*Used in memset mode*/
HI_U8 u8HorSegSize; /*Used in interval-copy mode, every row was segmented by u8HorSegSize bytes, restricted in values of 2,3,4,8,16*/
HI_U8 u8ElemSize; /*Used in interval-copy mode, the valid bytes copied in front of every segment in a valid row, which 0<u8ElemSize<u8HorSegSize*/
HI_U8 u8VerSegRows; /*Used in interval-copy mode, copy one row in every u8VerSegRows*/
}IVE_DMA_CTRL_S;
/*
*Filter control parameters
*You need to set these parameters when using the filter operator.
*Modify template filter from 3x3 to 5x5 by Chen Quanfu 2013-07-11
*/
typedef struct hiIVE_FILTER_CTRL_S
{
HI_S8 as8Mask[25]; /*Template parameter filter coefficient*/
HI_U8 u8Norm; /*Normalization parameter, by right shift*/
}IVE_FILTER_CTRL_S;
/*
* CSC working mode.
* Modified by Tan Bing, 2013-7-22.
*/
typedef enum hiIVE_CSC_MODE_E
{
IVE_CSC_MODE_VIDEO_BT601_YUV2RGB = 0x0, /*CSC: YUV2RGB, video transfer mode, RGB value range [16, 235]*/
IVE_CSC_MODE_VIDEO_BT709_YUV2RGB = 0x1, /*CSC: YUV2RGB, video transfer mode, RGB value range [16, 235]*/
IVE_CSC_MODE_PIC_BT601_YUV2RGB = 0x2, /*CSC: YUV2RGB, picture transfer mode, RGB value range [0, 255]*/
IVE_CSC_MODE_PIC_BT709_YUV2RGB = 0x3, /*CSC: YUV2RGB, picture transfer mode, RGB value range [0, 255]*/
IVE_CSC_MODE_PIC_BT601_YUV2HSV = 0x4, /*CSC: YUV2HSV, picture transfer mode, HSV value range [0, 255]*/
IVE_CSC_MODE_PIC_BT709_YUV2HSV = 0x5, /*CSC: YUV2HSV, picture transfer mode, HSV value range [0, 255]*/
IVE_CSC_MODE_PIC_BT601_YUV2LAB = 0x6, /*CSC: YUV2LAB, picture transfer mode, Lab value range [0, 255]*/
IVE_CSC_MODE_PIC_BT709_YUV2LAB = 0x7, /*CSC: YUV2LAB, picture transfer mode, Lab value range [0, 255]*/
IVE_CSC_MODE_VIDEO_BT601_RGB2YUV = 0x8, /*CSC: RGB2YUV, video transfer mode, YUV value range [0, 255]*/
IVE_CSC_MODE_VIDEO_BT709_RGB2YUV = 0x9, /*CSC: RGB2YUV, video transfer mode, YUV value range [0, 255]*/
IVE_CSC_MODE_PIC_BT601_RGB2YUV = 0xa, /*CSC: RGB2YUV, picture transfer mode, Y:[16, 235],U\V:[16, 240]*/
IVE_CSC_MODE_PIC_BT709_RGB2YUV = 0xb, /*CSC: RGB2YUV, picture transfer mode, Y:[16, 235],U\V:[16, 240]*/
IVE_CSC_MODE_BUTT
}IVE_CSC_MODE_E;
/*
*CSC control parameters
*You need to set these parameters when using the CSC operator.
*Removed the CSC output format, replaced by setting the output image type.
*Modified by tanbing 2013-7-22.
*/
typedef struct hiIVE_CSC_CTRL_S
{
IVE_CSC_MODE_E enMode; /*Working mode*/
}IVE_CSC_CTRL_S;
/*
*Filter+CSC control parameters
*You need to set these parameters when using the filter+CSC operator.
*The control information about both the filter and CSC needs to be configured.
*Modify template filter from 3x3 to 5x5 by Tan Bing 2013-07-11
*/
typedef struct hiIVE_FILTER_AND_CSC_CTRL_S
{
IVE_CSC_MODE_E enMode; /*CSC working mode*/
HI_S8 as8Mask[25]; /*Template parameter filter coefficient*/
HI_U8 u8Norm; /*Normalization parameter, by right shift*/
}IVE_FILTER_AND_CSC_CTRL_S;
/*
*SOBEL output ctrl
*/
typedef enum hiIVE_SOBEL_OUT_CTRL_E
{
IVE_SOBEL_OUT_CTRL_BOTH = 0x0, /*Output horizontal and vertical*/
IVE_SOBEL_OUT_CTRL_HOR = 0x1, /*Output horizontal*/
IVE_SOBEL_OUT_CTRL_VER = 0x2, /*Output vertical*/
IVE_SOBEL_OUT_CTRL_BUTT
}IVE_SOBEL_OUT_CTRL_E;
/*
*SOBEL control parameter
*Add IVE_SOBEL_OUT_CTRL_E by Chen Quanfu 2013-07-11
*/
typedef struct hiIVE_SOBEL_CTRL_S
{
IVE_SOBEL_OUT_CTRL_E enOutCtrl; /*Output format*/
HI_S8 as8Mask[25]; /*Template parameter*/
}IVE_SOBEL_CTRL_S;
/*
*Type of the magnitude and angle output results
*Modified by Chen Quanfu 2013-07-23
*/
typedef enum hiIVE_MAG_AND_ANG_OUT_CTRL_E
{
IVE_MAG_AND_ANG_OUT_CTRL_MAG = 0x0, /*Only the magnitude is output.*/
IVE_MAG_AND_ANG_OUT_CTRL_MAG_AND_ANG = 0x1, /*The magnitude and angle are output.*/
IVE_MAG_AND_ANG_OUT_CTRL_BUTT
}IVE_MAG_AND_ANG_OUT_CTRL_E;
/*
*Magnitude and angle control parameter
*/
typedef struct hiIVE_MAG_AND_ANG_CTRL_S
{
IVE_MAG_AND_ANG_OUT_CTRL_E enOutCtrl;
HI_U16 u16Thr;
HI_S8 as8Mask[25]; /*Template parameter.*/
}IVE_MAG_AND_ANG_CTRL_S;
/*
*Dilate control parameters
*/
typedef struct hiIVE_DILATE_CTRL_S
{
HI_U8 au8Mask[25]; /*The template parameter value must be 0 or 255.*/
}IVE_DILATE_CTRL_S;
/*
*Erode control parameter
*/
typedef struct hiIVE_ERODE_CTRL_S
{
HI_U8 au8Mask[25]; /*The template parameter value must be 0 or 255.*/
}IVE_ERODE_CTRL_S;
/*
* Type of the Thresh mode.
* Modified by Tan Bing, 2013-7-22
*/
typedef enum hiIVE_THRESH_MODE_E
{
IVE_THRESH_MODE_BINARY = 0x0, /*srcVal <= lowThr, dstVal = minVal; srcVal > lowThr, dstVal = maxVal.*/
IVE_THRESH_MODE_TRUNC = 0x1, /*srcVal <= lowThr, dstVal = srcVal; srcVal > lowThr, dstVal = maxVal.*/
IVE_THRESH_MODE_TO_MINVAL = 0x2, /*srcVal <= lowThr, dstVal = minVal; srcVal > lowThr, dstVal = srcVal.*/
IVE_THRESH_MODE_MIN_MID_MAX = 0x3, /*srcVal <= lowThr, dstVal = minVal; lowThr < srcVal <= highThr, dstVal = midVal; srcVal > highThr, dstVal = maxVal.*/
IVE_THRESH_MODE_ORI_MID_MAX = 0x4, /*srcVal <= lowThr, dstVal = srcVal; lowThr < srcVal <= highThr, dstVal = midVal; srcVal > highThr, dstVal = maxVal.*/
IVE_THRESH_MODE_MIN_MID_ORI = 0x5, /*srcVal <= lowThr, dstVal = minVal; lowThr < srcVal <= highThr, dstVal = midVal; srcVal > highThr, dstVal = srcVal.*/
IVE_THRESH_MODE_MIN_ORI_MAX = 0x6, /*srcVal <= lowThr, dstVal = minVal; lowThr < srcVal <= highThr, dstVal = srcVal; srcVal > highThr, dstVal = maxVal.*/
IVE_THRESH_MODE_ORI_MID_ORI = 0x7, /*srcVal <= lowThr, dstVal = srcVal; lowThr < srcVal <= highThr, dstVal = midVal; srcVal > highThr, dstVal = srcVal.*/
IVE_THRESH_MODE_BUTT
}IVE_THRESH_MODE_E;
/*
* Thresh control parameters.
* Modified by Tan Bing, 2013-7-22
*/
typedef struct hiIVE_THRESH_CTRL_S
{
IVE_THRESH_MODE_E enMode;
HI_U8 u8LowThr; /*user-defined threshold, 0<=u8LowThr<=255 */
HI_U8 u8HighThr; /*user-defined threshold, if enMode<IVE_THRESH_MODE_MIN_MID_MAX, u8HighThr is not used, else 0<=u8LowThr<=u8HighThr<=255;*/
HI_U8 u8MinVal; /*Minimum value when tri-level thresholding*/
HI_U8 u8MidVal; /*Middle value when tri-level thresholding, if enMode<2, u32MidVal is not used; */
HI_U8 u8MaxVal; /*Maxmum value when tri-level thresholding*/
}IVE_THRESH_CTRL_S;
/*
*Type of the Sub output results
*/
typedef enum hiIVE_SUB_MODE_E
{
IVE_SUB_MODE_ABS = 0x0, /*Absolute value of the difference*/
IVE_SUB_MODE_SHIFT = 0x1, /*The output result is obtained by shifting the result one digit right to reserve the signed bit.*/
IVE_SUB_MODE_BUTT
}IVE_SUB_MODE_E;
/*
*Sub control parameters
*/
typedef struct hiIVE_SUB_CTRL_S
{
IVE_SUB_MODE_E enMode;
}IVE_SUB_CTRL_S;
/*
*Type of the Integ output results, created by Tan Bing, 2013-03-18
* Modify by Chen Quanfu 2013-07-15
* Spec: add IVE_INTEG_OUT_CTRL_SQSUM output format
*/
typedef enum hiIVE_INTEG_OUT_CTRL_E
{
IVE_INTEG_OUT_CTRL_COMBINE = 0x0,
IVE_INTEG_OUT_CTRL_SUM = 0x1,
IVE_INTEG_OUT_CTRL_SQSUM = 0x2,
IVE_INTEG_OUT_CTRL_BUTT
}IVE_INTEG_OUT_CTRL_E;
/*
* Integ control parameters,Create by Chen Quanfu 2013-07-15
*/
typedef struct hiIVE_INTEG_CTRL_S
{
IVE_INTEG_OUT_CTRL_E enOutCtrl;
}IVE_INTEG_CTRL_S;
/*
*Type of the Thresh_S16 mode
*/
typedef enum hiIVE_THRESH_S16_MODE_E
{
IVE_THRESH_S16_MODE_S16_TO_S8_MIN_MID_MAX = 0x0,
IVE_THRESH_S16_MODE_S16_TO_S8_MIN_ORI_MAX = 0x1,
IVE_THRESH_S16_MODE_S16_TO_U8_MIN_MID_MAX = 0x2,
IVE_THRESH_S16_MODE_S16_TO_U8_MIN_ORI_MAX = 0x3,
IVE_THRESH_S16_MODE_BUTT
}IVE_THRESH_S16_MODE_E;
/*
*Thresh_S16 control parameters
*/
typedef struct hiIVE_THRESH_S16_CTRL_S
{
IVE_THRESH_S16_MODE_E enMode;
HI_S16 s16LowThr; /*User-defined threshold*/
HI_S16 s16HighThr; /*User-defined threshold*/
IVE_8BIT_U un8MinVal; /*Minimum value when tri-level thresholding*/
IVE_8BIT_U un8MidVal; /*Middle value when tri-level thresholding*/
IVE_8BIT_U un8MaxVal; /*Maxmum value when tri-level thresholding*/
}IVE_THRESH_S16_CTRL_S;
/*
*Type of the Thresh_U16 mode
*/
typedef enum hiIVE_THRESH_U16_MODE_E
{
IVE_THRESH_U16_MODE_U16_TO_U8_MIN_MID_MAX = 0x0,
IVE_THRESH_U16_MODE_U16_TO_U8_MIN_ORI_MAX = 0x1,
IVE_THRESH_U16_MODE_BUTT
}IVE_THRESH_U16_MODE_E;
/*
*Thresh_U16 control parameters
*/
typedef struct hiIVE_THRESH_U16_CTRL_S
{
IVE_THRESH_U16_MODE_E enMode;
HI_U16 u16LowThr;
HI_U16 u16HighThr;
HI_U8 u8MinVal;
HI_U8 u8MidVal;
HI_U8 u8MaxVal;
}IVE_THRESH_U16_CTRL_S;
/*
*Mode of 16BitTo8Bit
*/
typedef enum hiIVE_16BIT_TO_8BIT_MODE_E
{
IVE_16BIT_TO_8BIT_MODE_S16_TO_S8 = 0x0,
IVE_16BIT_TO_8BIT_MODE_S16_TO_U8_ABS = 0x1,
IVE_16BIT_TO_8BIT_MODE_S16_TO_U8_BIAS = 0x2,
IVE_16BIT_TO_8BIT_MODE_U16_TO_U8 = 0x3,
IVE_16BIT_TO_8BIT_MODE_BUTT
}IVE_16BIT_TO_8BIT_MODE_E;
/*
*16BitTo8Bit control parameters
*/
typedef struct hiIVE_16BIT_TO_8BIT_CTRL_S
{
IVE_16BIT_TO_8BIT_MODE_E enMode;
HI_U16 u16Denominator;
HI_U8 u8Numerator;
HI_S8 s8Bias;
}IVE_16BIT_TO_8BIT_CTRL_S;
/*
*Type of the OrdStaFilter
*/
typedef enum hiIVE_ORD_STAT_FILTER_MODE_E
{
IVE_ORD_STAT_FILTER_MODE_MEDIAN = 0x0,
IVE_ORD_STAT_FILTER_MODE_MAX = 0x1,
IVE_ORD_STAT_FILTER_MODE_MIN = 0x2,
IVE_ORD_STAT_FILTER_MODE_BUTT
}IVE_ORD_STAT_FILTER_MODE_E;
/*
*OrdStaFilter control parameters
*/
typedef struct hiIVE_ORD_STAT_FILTER_CTRL_S
{
IVE_ORD_STAT_FILTER_MODE_E enMode;
}IVE_ORD_STAT_FILTER_CTRL_S;
/*
* Map LUT memory struct
*/
typedef struct hiIVE_MAP_LUT_MEM_S
{
HI_U8 au8Map[IVE_MAP_NUM];
}IVE_MAP_LUT_MEM_S;
/*
* Equalizehist control member struct
*/
typedef struct hiIVE_EQUALIZE_HIST_CTRL_MEM_S
{
HI_U32 au32Hist[IVE_HIST_NUM];
HI_U8 au8Map[IVE_MAP_NUM];
}IVE_EQUALIZE_HIST_CTRL_MEM_S;
/*
*Equalizehist control parameters,created by Chen Quanfu 2013-07-17
*/
typedef struct hiIVE_EQUALIZE_HIST_CTRL_S
{
IVE_MEM_INFO_S stMem;
}IVE_EQUALIZE_HIST_CTRL_S;
/*
*Add control parameters,created by Chen Quanfu 2013-07-17
*/
typedef struct hiIVE_ADD_CTRL_S
{
HI_U0Q16 u0q16X; /*x of "xA+yB"*/
HI_U0Q16 u0q16Y; /*y of "xA+yB"*/
}IVE_ADD_CTRL_S;
/*
*NCC dst memory struct
*/
typedef struct hiIVE_NCC_DST_MEM_S
{
HI_U64 u64Numerator;
HI_U64 u64QuadSum1;
HI_U64 u64QuadSum2;
HI_U8 u8Reserved[8];
}IVE_NCC_DST_MEM_S;
/*
*Region struct
*/
typedef struct hiIVE_REGION_S
{
HI_U32 u32Area; /*Represented by the pixel number*/
HI_U16 u16Left; /*Circumscribed rectangle left border*/
HI_U16 u16Right; /*Circumscribed rectangle right border*/
HI_U16 u16Top; /*Circumscribed rectangle top border*/
HI_U16 u16Bottom; /*Circumscribed rectangle bottom border*/
}IVE_REGION_S;
/*
*CCBLOB struct
*/
typedef struct hiIVE_CCBLOB_S
{
HI_U16 u16CurAreaThr; /*Threshold of the result regions' area*/
HI_S8 s8LabelStatus; /*-1: Labeled failed ; 0: Labeled successfully*/
HI_U8 u8RegionNum; /*Number of valid region, non-continuous stored*/
IVE_REGION_S astRegion[IVE_MAX_REGION_NUM]; /*Valid regions with 'u32Area>0' and 'label = ArrayIndex+1'*/
}IVE_CCBLOB_S;
/*
*CCL control struct
*/
typedef struct hiIVE_CCL_CTRL_S
{
HI_U16 u16InitAreaThr; /*Init threshold of region area*/
HI_U16 u16Step; /*Increase area step for once*/
}IVE_CCL_CTRL_S;
/*
*GMM control struct
*/
typedef struct hiIVE_GMM_CTRL_S
{
HI_U22Q10 u22q10NoiseVar; /*Initial noise Variance*/
HI_U22Q10 u22q10MaxVar; /*Max Variance*/
HI_U22Q10 u22q10MinVar; /*Min Variance*/
HI_U0Q16 u0q16LearnRate; /*Learning rate*/
HI_U0Q16 u0q16BgRatio; /*Background ratio*/
HI_U8Q8 u8q8VarThr; /*Variance Threshold*/
HI_U0Q16 u0q16InitWeight; /*Initial Weight*/
HI_U8 u8ModelNum; /*Model number: 3 or 5*/
}IVE_GMM_CTRL_S;
/*
*CannyHysEdge control struct
*/
typedef struct hiIVE_CANNY_HYS_EDGE_CTRL_S
{
IVE_MEM_INFO_S stMem;
HI_U16 u16LowThr;
HI_U16 u16HighThr;
HI_S8 as8Mask[25];
} IVE_CANNY_HYS_EDGE_CTRL_S;
/*
*Canny stack size struct
*/
typedef struct hiIVE_CANNY_STACK_SIZE_S
{
HI_U32 u32StackSize; /*Stack size for output*/
HI_U8 u8Reserved[12]; /*For 16 byte align*/
}IVE_CANNY_STACK_SIZE_S;
/*
*LBP compare mode
*/
typedef enum hiIVE_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;
/*
*LBP control struct
*/
typedef struct hiIVE_LBP_CTRL_S
{
IVE_LBP_CMP_MODE_E enMode;
IVE_8BIT_U un8BitThr;
}IVE_LBP_CTRL_S;
/*
*Type of the GradientFilter output format
*/
typedef enum hiIVE_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;
/*
*GradientFilter control parameters
*/
typedef struct hiIVE_NORM_GRAD_CTRL_S
{
IVE_NORM_GRAD_OUT_CTRL_E enOutCtrl;
HI_S8 as8Mask[25];
HI_U8 u8Norm;
}IVE_NORM_GRAD_CTRL_S;
/*
* LKOpticalFlow movement
*/
typedef struct hiIVE_MV_S9Q7_S
{
HI_S32 s32Status; /*Result of tracking: 0-success; -1-failure*/
HI_S9Q7 s9q7Dx; /*X-direction component of the movement*/
HI_S9Q7 s9q7Dy; /*Y-direction component of the movement*/
}IVE_MV_S9Q7_S;
typedef struct hiIVE_LK_OPTICAL_FLOW_CTRL_S
{
HI_U16 u16CornerNum; /*Number of the feature points,<200*/
HI_U0Q8 u0q8MinEigThr; /*Minimum eigenvalue threshold*/
HI_U8 u8IterCount; /*Maximum iteration times*/
HI_U0Q8 u0q8Epsilon; /*Threshold of iteration for dx^2 + dy^2 < u0q8Epsilon */
}IVE_LK_OPTICAL_FLOW_CTRL_S;
typedef struct hiIVE_ST_MAX_EIG_S
{
HI_U16 u16MaxEig; /*Shi-Tomasi second step output MaxEig*/
HI_U8 u8Reserved[14]; /*For 16 byte align*/
}IVE_ST_MAX_EIG_S;
/*
*ShiTomasi control parameters
*/
typedef struct hiIVE_ST_CANDI_CORNER_CTRL_S
{
IVE_MEM_INFO_S stMem;
HI_U0Q8 u0q8QualityLevel;
}IVE_ST_CANDI_CORNER_CTRL_S;
typedef struct hiIVE_ST_CORNER_INFO_S
{
HI_U16 u16CornerNum;
IVE_POINT_U16_S astCorner[IVE_ST_MAX_CORNER_NUM];
}IVE_ST_CORNER_INFO_S;
typedef struct hiIVE_ST_CORNER_CTRL_S
{
HI_U16 u16MaxCornerNum;
HI_U16 u16MinDist;
}IVE_ST_CORNER_CTRL_S;
/*
* GradFg mode enum
*/
typedef enum hiIVE_GRAD_FG_MODE_E
{
IVE_GRAD_FG_MODE_USE_CUR_GRAD = 0x0,
IVE_GRAD_FG_MODE_FIND_MIN_GRAD = 0x1,
IVE_GRAD_FG_MODE_BUTT
}IVE_GRAD_FG_MODE_E;
/*
* GradFg ctrl struct
*/
typedef struct hiIVE_GRAD_FG_CTRL_S
{
IVE_GRAD_FG_MODE_E enMode; /*Calculation mode*/
HI_U16 u16EdwFactor; /*Edge width adjustment factor (range: 500 to 2000; default: 1000)*/
HI_U8 u8CrlCoefThr; /*Gradient vector correlation coefficient threshold (ranges: 50 to 100; default: 80)*/
HI_U8 u8MagCrlThr; /*Gradient amplitude threshold (range: 0 to 20; default: 4)*/
HI_U8 u8MinMagDiff; /*Gradient magnitude difference threshold (range: 2 to 8; default: 2)*/
HI_U8 u8NoiseVal; /*Gradient amplitude noise threshold (range: 1 to 8; default: 1)*/
HI_U8 u8EdwDark; /*Black pixels enable flag (range: 0 (no), 1 (yes); default: 1)*/
}IVE_GRAD_FG_CTRL_S;
typedef struct hiIVE_CANDI_BG_PIX_S
{
HI_U8Q4F4 u8q4f4Mean; /*Candidate background grays value */
HI_U16 u16StartTime; /*Candidate Background start time */
HI_U16 u16SumAccessTime; /*Candidate Background cumulative access time */
HI_U16 u16ShortKeepTime; /*Candidate background short hold time*/
HI_U8 u8ChgCond; /*Time condition for candidate background into the changing state*/
HI_U8 u8PotenBgLife; /*Potential background cumulative access time */
}IVE_CANDI_BG_PIX_S;
typedef struct hiIVE_WORK_BG_PIX_S
{
HI_U8Q4F4 u8q4f4Mean; /*0# background grays value */
HI_U16 u16AccTime; /*Background cumulative access time */
HI_U8 u8PreGray; /*Gray value of last pixel */
HI_U5Q3 u5q3DiffThr; /*Differential threshold */
HI_U8 u8AccFlag; /*Background access flag */
HI_U8 u8BgGray[3]; /*1# ~ 3# background grays value */
}IVE_WORK_BG_PIX_S;
typedef struct hiIVE_BG_LIFE_S
{
HI_U8 u8WorkBgLife[3]; /*1# ~ 3# background vitality */
HI_U8 u8CandiBgLife; /*Candidate background vitality */
}IVE_BG_LIFE_S;
typedef struct hiIVE_BG_MODEL_PIX_S
{
IVE_WORK_BG_PIX_S stWorkBgPixel; /*Working background */
IVE_CANDI_BG_PIX_S stCandiPixel; /*Candidate background */
IVE_BG_LIFE_S stBgLife; /*Background vitality */
}IVE_BG_MODEL_PIX_S;
typedef struct hiIVE_FG_STAT_DATA_S
{
HI_U32 u32PixNum;
HI_U32 u32SumLum;
HI_U8 u8Reserved[8];
}IVE_FG_STAT_DATA_S;
typedef struct hiIVE_BG_STAT_DATA_S
{
HI_U32 u32PixNum;
HI_U32 u32SumLum;
HI_U8 u8Reserved[8];
}IVE_BG_STAT_DATA_S;
typedef struct hiIVE_MATCH_BG_MODEL_CTRL_S
{
HI_U32 u32CurFrmNum; /*Current frame timestamp, in frame units */
HI_U32 u32PreFrmNum; /*Previous frame timestamp, in frame units */
HI_U16 u16TimeThr; /*Potential background replacement time threshold (range: 2 to 100 frames; default: 20) */
HI_U8 u8DiffThrCrlCoef; /*Correlation coefficients between differential threshold and gray value (range: 0 to 5; default: 0) */
HI_U8 u8DiffMaxThr; /*Maximum of background differential threshold (range: 3 to 15; default: 6) */
HI_U8 u8DiffMinThr; /*Minimum of background differential threshold (range: 3 to 15; default: 4) */
HI_U8 u8DiffThrInc; /*Dynamic Background differential threshold increment (range: 0 to 6; default: 0) */
HI_U8 u8FastLearnRate; /*Quick background learning rate (range: 0 to 4; default: 2) */
HI_U8 u8DetChgRegion; /*Whether to detect change region (range: 0 (no), 1 (yes); default: 0) */
}IVE_MATCH_BG_MODEL_CTRL_S;
typedef struct hiIVE_UPDATE_BG_MODEL_CTRL_S
{
HI_U32 u32CurFrmNum; /*Current frame timestamp, in frame units */
HI_U32 u32PreChkTime; /*The last time when background status is checked */
HI_U32 u32FrmChkPeriod; /*Background status checking period (range: 0 to 2000 frames; default: 50) */
HI_U32 u32InitMinTime; /*Background initialization shortest time (range: 20 to 6000 frames; default: 100)*/
HI_U32 u32StyBgMinBlendTime; /*Steady background integration shortest time (range: 20 to 6000 frames; default: 200)*/
HI_U32 u32StyBgMaxBlendTime; /*Steady background integration longest time (range: 20 to 40000 frames; default: 1500)*/
HI_U32 u32DynBgMinBlendTime; /*Dynamic background integration shortest time (range: 0 to 6000 frames; default: 0)*/
HI_U32 u32StaticDetMinTime; /*Still detection shortest time (range: 20 to 6000 frames; default: 80)*/
HI_U16 u16FgMaxFadeTime; /*Foreground disappearing longest time (range: 1 to 255 seconds; default: 15)*/
HI_U16 u16BgMaxFadeTime; /*Background disappearing longest time (range: 1 to 255 seconds ; default: 60)*/
HI_U8 u8StyBgAccTimeRateThr; /*Steady background access time ratio threshold (range: 10 to 100; default: 80)*/
HI_U8 u8ChgBgAccTimeRateThr; /*Change background access time ratio threshold (range: 10 to 100; default: 60)*/
HI_U8 u8DynBgAccTimeThr; /*Dynamic background access time ratio threshold (range: 0 to 50; default: 0)*/
HI_U8 u8DynBgDepth; /*Dynamic background depth (range: 0 to 3; default: 3)*/
HI_U8 u8BgEffStaRateThr; /*Background state time ratio threshold when initializing (range: 90 to 100; default: 90)*/
HI_U8 u8AcceBgLearn; /*Whether to accelerate background learning (range: 0 (no), 1 (yes); default: 0)*/
HI_U8 u8DetChgRegion; /*Whether to detect change region (range: 0 (no), 1 (yes); default: 0)*/
} IVE_UPDATE_BG_MODEL_CTRL_S;
typedef enum hiIVE_ANN_MLP_ACTIV_FUNC_E
{
IVE_ANN_MLP_ACTIV_FUNC_IDENTITY = 0x0,
IVE_ANN_MLP_ACTIV_FUNC_SIGMOID_SYM = 0x1,
IVE_ANN_MLP_ACTIV_FUNC_GAUSSIAN = 0x2,
IVE_ANN_MLP_ACTIV_FUNC_BUTT
}IVE_ANN_MLP_ACTIV_FUNC_E;
typedef struct hiIVE_ANN_MLP_MODEL_S
{
IVE_ANN_MLP_ACTIV_FUNC_E enActivFunc;
IVE_MEM_INFO_S stWeight;
HI_U32 u32TotalWeightSize;
HI_U16 au16LayerCount[8]; /*8 layers, including input and output layer, every layerCount<=256*/
HI_U16 u16MaxCount; /*MaxCount<=256*/
HI_U8 u8LayerNum; /*2<layerNum<=8*/
}IVE_ANN_MLP_MODEL_S;
typedef enum hiIVE_SVM_TYPE_E
{
IVE_SVM_TYPE_C_SVC = 0x0,
IVE_SVM_TYPE_NU_SVC = 0x1,
IVE_SVM_TYPE_BUTT
}IVE_SVM_TYPE_E;
typedef enum hiIVE_SVM_KERNEL_TYPE_E
{
IVE_SVM_KERNEL_TYPE_LINEAR = 0x0,
IVE_SVM_KERNEL_TYPE_POLY = 0x1,
IVE_SVM_KERNEL_TYPE_RBF = 0x2,
IVE_SVM_KERNEL_TYPE_SIGMOID = 0x3,
IVE_SVM_KERNEL_TYPE_BUTT
}IVE_SVM_KERNEL_TYPE_E;
typedef struct hiIVE_SVM_MODEL_S
{
IVE_SVM_TYPE_E enType;
IVE_SVM_KERNEL_TYPE_E enKernelType;
IVE_MEM_INFO_S stSv; /*SV memory*/
IVE_MEM_INFO_S stDf; /*Decision functions memory*/
HI_U32 u32TotalDfSize; /*All decision functions coef size in byte*/
HI_U16 u16FeatureDim;
HI_U16 u16SvTotal;
HI_U8 u8ClassCount;
}IVE_SVM_MODEL_S;
/*
* Sad mode
*/
typedef enum hiIVE_SAD_MODE_E
{
IVE_SAD_MODE_MB_4X4 = 0x0, /*4x4*/
IVE_SAD_MODE_MB_8X8 = 0x1, /*8x8*/
IVE_SAD_MODE_MB_16X16 = 0x2, /*16x16*/
IVE_SAD_MODE_BUTT
}IVE_SAD_MODE_E;
/*
*Sad output ctrl
*/
typedef enum hiIVE_SAD_OUT_CTRL_E
{
IVE_SAD_OUT_CTRL_16BIT_BOTH = 0x0, /*Output 16 bit sad and thresh*/
IVE_SAD_OUT_CTRL_8BIT_BOTH = 0x1, /*Output 8 bit sad and thresh*/
IVE_SAD_OUT_CTRL_16BIT_SAD = 0x2, /*Output 16 bit sad*/
IVE_SAD_OUT_CTRL_8BIT_SAD = 0x3, /*Output 8 bit sad*/
IVE_SAD_OUT_CTRL_THRESH = 0x4, /*Output thresh,16 bits sad */
IVE_SAD_OUT_CTRL_BUTT
}IVE_SAD_OUT_CTRL_E;
/*
* Sad ctrl param
*/
typedef struct hiIVE_SAD_CTRL_S
{
IVE_SAD_MODE_E enMode;
IVE_SAD_OUT_CTRL_E enOutCtrl;
HI_U16 u16Thr; /*srcVal <= u16Thr, dstVal = minVal; srcVal > u16Thr, dstVal = maxVal.*/
HI_U8 u8MinVal; /*Min value*/
HI_U8 u8MaxVal; /*Max value*/
}IVE_SAD_CTRL_S;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif/*_HI_IVE_H_*/