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.

289 lines
9.4 KiB

3 years ago
/******************************************************************************
*
* Copyright (C), 2001-2011, Huawei Tech. Co., Ltd.
*
*******************************************************************************
* File Name : hi_comm_vda.h
* Version : Initial Draft
* Author : j00169368,l64467
* Created : 2011/1/7
* Last Modified :
* Description : include VDA struct , Marco and Error information
* Function List :
*
*
* History:
*
* 1. Date : 2011/1/7
* Author : j00169368,l64467
* Modification : Created file
*
******************************************************************************/
#ifndef __HI_COMM_VDA_H__
#define __HI_COMM_VDA_H__
#include "hi_type.h"
#include "hi_debug.h"
#include "hi_comm_video.h"
#include "hi_common.h"
#include "hi_errno.h"
#include "hi_defines.h"
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* End of #ifdef __cplusplus */
/*Motion Region Data*/
typedef struct hiVDA_OBJ_S
{
HI_U16 u16Left;
HI_U16 u16Top;
HI_U16 u16Right;
HI_U16 u16Bottom;
}VDA_OBJ_S;
/*reference pictrue mode*/
typedef enum hiVDA_REF_MODE_E
{
VDA_REF_MODE_DYNAMIC = 0, /*reference pictrue dynamic*/
VDA_REF_MODE_STATIC, /*reference pictrue static*/
VDA_REF_MODE_USER, /*reference pictrue user*/
VDA_REF_MODE_BUTT /*reserve*/
}VDA_REF_MODE_E;
/*VDA algorithm*/
typedef enum hiVDA_ALG_E
{
VDA_ALG_BG = 0, /*base on background pictrue*/
VDA_ALG_REF, /*base on reference pictrue*/
VDA_ALG_BUTT
}VDA_ALG_E;
/*MB size*/
typedef enum hiVDA_MB_SIZE_E
{
VDA_MB_8PIXEL, /* 8*8 */
VDA_MB_16PIXEL, /* 16*16 */
VDA_MB_BUTT
}VDA_MB_SIZE_E;
/*SAD bits*/
typedef enum hiVDA_MB_SADBITS_E
{
VDA_MB_SAD_8BIT = 0, /*SAD precision 8bits*/
VDA_MB_SAD_16BIT, /*SAD precision 16bits*/
VDA_MB_SAD_BUTT /*reserve*/
} VDA_MB_SADBITS_E;
/*OD region attribute*/
typedef struct hiVDA_OD_RGN_ATTR_S
{
/*static attribute*/
RECT_S stRect; /*region rect
*X:[0,VDA_MAX_WIDTH),align:16
*Y:[0,VDA_MAX_HEIGHT)
*W:[16,VDA_MAX_WIDTH],align:16
*H:[16,VDA_MAX_HEIGHT],align:16
*X+W <= chunnel wight
*Y+H <= chunnel height
*/
/*dynamic attribute*/
HI_U32 u32SadTh; /*SAD threshold,range:[0,4080]*/
HI_U32 u32AreaTh; /*alarm area threshold,range:[0,100]*/
HI_U32 u32OccCntTh; /*alarm frame count threshold,range:[1,256]*/
HI_U32 u32UnOccCntTh; /*The max uncover count,range:[0,256]*/
}VDA_OD_RGN_ATTR_S;
/*MD attribute*/
typedef struct hiVDA_MD_ATTR_S
{
/*static attribute*/
VDA_ALG_E enVdaAlg; /*arithmetic*/
VDA_MB_SIZE_E enMbSize; /*MB size*/
VDA_MB_SADBITS_E enMbSadBits; /*MB SAD size*/
VDA_REF_MODE_E enRefMode; /*reference picture mode*/
HI_U32 u32MdBufNum; /*Result buffer number,range:[1,16]*/
/*dynamic attribute*/
HI_U32 u32VdaIntvl; /*VDA interval,range:[0,256]*/
HI_U32 u32BgUpSrcWgt; /*the source picture weight,
*back ground updata totle weight 256,
*range:[1,255],recommendatory value:128
*/
HI_U32 u32SadTh; /*SAD threshold,range:[0,4080],recommendatory value:100*/
HI_U32 u32ObjNumMax; /*max OBJ number,range:[1,128]*/
}VDA_MD_ATTR_S;
#define VDA_OD_RGN_NUM_MAX 4
/*OD attribute*/
typedef struct hiVDA_OD_ATTR_S
{
HI_U32 u32RgnNum; /*region number*/
VDA_OD_RGN_ATTR_S astOdRgnAttr[VDA_OD_RGN_NUM_MAX]; /*region attribute*/
/*static attribute*/
VDA_ALG_E enVdaAlg; /*arithmetic*/
VDA_MB_SIZE_E enMbSize; /*MB size*/
VDA_MB_SADBITS_E enMbSadBits; /*MB SAD size*/
VDA_REF_MODE_E enRefMode; /*reference picture mode*/
/*dynamic attribute*/
HI_U32 u32VdaIntvl; /*VDA interval,[0,256]*/
HI_U32 u32BgUpSrcWgt; /*back ground updata totle weight 256,the source picture weight,[1,255]*/
}VDA_OD_ATTR_S;
/*work mode*/
typedef enum hiVDA_WORK_MODE_E
{
VDA_WORK_MODE_MD = 0, /*motion detection*/
VDA_WORK_MODE_OD, /*Occlusion detection*/
VDA_WORK_MODE_BUTT
}VDA_WORK_MODE_E;
/*work mode attribute*/
typedef union hiVDA_WORK_MODE_ATTR_U
{
VDA_MD_ATTR_S stMdAttr; /*MD attribute*/
VDA_OD_ATTR_S stOdAttr; /*OD attribute*/
}VDA_WORK_MODE_ATTR_U;
/*VDA CHN attribute*/
typedef struct hiVDA_CHN_ATTR_S
{
VDA_WORK_MODE_E enWorkMode; /*work mode*/
VDA_WORK_MODE_ATTR_U unAttr; /*work mode attribute*/
HI_U32 u32Width; /*the width of CHNL,[16,VDA_MAX_WIDTH]*/
HI_U32 u32Height; /*the height of CHNL,[16,VDA_MAX_HEIGHT]*/
}VDA_CHN_ATTR_S;
/*MB SAD data*/
typedef struct hiVDA_MB_SAD_DATA_S
{
HI_VOID *pAddr; /*address*/
HI_U32 u32Stride; /*stride*/
VDA_MB_SADBITS_E enMbSadBits; /*the MB SAD size*/
}VDA_MB_SAD_DATA_S;
/*OBJ data*/
typedef struct hiVDA_OBJ_DATA_S
{
HI_U32 u32ObjNum; /*OBJ number*/
VDA_OBJ_S *pstAddr; /*OBJ data address*/
HI_U32 u32IndexOfMaxObj; /*index of max OBJ*/
HI_U32 u32SizeOfMaxObj; /*size of max OBJ*/
HI_U32 u32SizeOfTotalObj; /*total size of all OBJ*/
}VDA_OBJ_DATA_S;
/*MD data*/
typedef struct hiVDA_MD_DATA_S
{
HI_BOOL bMbSadValid; /*SAD data is valid?*/
VDA_MB_SAD_DATA_S stMbSadData; /*MB SAD data*/
HI_BOOL bObjValid; /*OBJ data is valid?*/
VDA_OBJ_DATA_S stObjData; /*OBJ data*/
HI_BOOL bPelsNumValid; /*alarm pixel number data is valid?*/
HI_U32 u32AlarmPixCnt;/*motion pix of picture*/
}VDA_MD_DATA_S;
/*OD data*/
typedef struct hiVDA_OD_DATA_S
{
HI_U32 u32RgnNum; /*region number*/
HI_BOOL abRgnAlarm[VDA_OD_RGN_NUM_MAX]; /*HI_TRUE:alarm*/
}VDA_OD_DATA_S;
typedef union hiVDA_DATA_U
{
VDA_MD_DATA_S stMdData; /*MD data*/
VDA_OD_DATA_S stOdData; /*OD data*/
}VDA_DATA_U;
/*VDA data*/
typedef struct hiVDA_DATA_S
{
VDA_WORK_MODE_E enWorkMode; /*work mode*/
VDA_DATA_U unData; /*VDA data*/
VDA_MB_SIZE_E enMbSize; /*MB size*/
HI_U32 u32MbWidth; /*VDA channle width in MB*/
HI_U32 u32MbHeight; /*VDA channle height in MB*/
HI_U64 u64Pts; /*time*/
}VDA_DATA_S;
/*chnnel state*/
typedef struct hiVDA_CHN_STAT_S
{
HI_BOOL bStartRecvPic; /*start receive picture*/
HI_U32 u32LeftPic; /*left picture*/
HI_U32 u32LeftRst; /*left data*/
}VDA_CHN_STAT_S;
/* invlalid device ID */
#define HI_ERR_VDA_INVALID_DEVID HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
/* invlalid channel ID */
#define HI_ERR_VDA_INVALID_CHNID HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
/* at lease one parameter is illagal ,eg, an illegal enumeration value */
#define HI_ERR_VDA_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
/* channel exists */
#define HI_ERR_VDA_EXIST HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST)
/*UN exist*/
#define HI_ERR_VDA_UNEXIST HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
/* using a NULL point */
#define HI_ERR_VDA_NULL_PTR HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
/* try to enable or initialize system,device or channel, before configing attribute */
#define HI_ERR_VDA_NOT_CONFIG HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
/* operation is not supported by NOW */
#define HI_ERR_VDA_NOT_SUPPORT HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
/* operation is not permitted ,eg, try to change stati attribute */
#define HI_ERR_VDA_NOT_PERM HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
/* failure caused by malloc memory */
#define HI_ERR_VDA_NOMEM HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
/* failure caused by malloc buffer */
#define HI_ERR_VDA_NOBUF HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
/* no data in buffer */
#define HI_ERR_VDA_BUF_EMPTY HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
/* no buffer for new data */
#define HI_ERR_VDA_BUF_FULL HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
/* bad address, eg. used for copy_from_user & copy_to_user */
#define HI_ERR_VDA_BADADDR HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_BADADDR)
/* resource is busy, eg. destroy a venc chn without unregistering it */
#define HI_ERR_VDA_BUSY HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
/* System is not ready,maybe not initialed or loaded.
* Returning the error code when opening a device file failed.
*/
#define HI_ERR_VDA_NOTREADY HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif /* End of #ifndef __HI_COMM_VDA_H__ */