Files
hisi_SS524V100_SDK/mpp/include/ot_common_vda.h
T

200 lines
7.4 KiB
C

/*
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
*/
#ifndef __OT_COMMON_VDA_H__
#define __OT_COMMON_VDA_H__
#include "ot_type.h"
#include "ot_debug.h"
#include "ot_common_video.h"
#include "ot_common.h"
#include "ot_errno.h"
#include "ot_defines.h"
#ifdef __cplusplus
extern "C" {
#endif
#define OT_VDA_OD_RGN_NUM_MAX 4
typedef enum {
OT_VDA_REF_MODE_DYNAMIC = 0, /* reference picture dynamic */
OT_VDA_REF_MODE_STATIC, /* reference picture static */
OT_VDA_REF_MODE_USER, /* reference picture user */
OT_VDA_REF_MODE_BUTT
} ot_vda_ref_mode;
typedef enum {
OT_VDA_ALG_BG = 0, /* base on background picture */
OT_VDA_ALG_REF, /* base on reference picture */
OT_VDA_ALG_BUTT
} ot_vda_alg;
typedef enum {
OT_VDA_MB_8PIXEL, /* 8*8 */
OT_VDA_MB_16PIXEL, /* 16*16 */
OT_VDA_MB_BUTT
} ot_vda_mb_size;
typedef enum {
OT_VDA_MB_SAD_8BIT = 0, /* SAD precision 8bits */
OT_VDA_MB_SAD_16BIT, /* SAD precision 16bits */
OT_VDA_MB_SAD_BUTT
} ot_vda_mb_sad_bits;
typedef enum {
OT_VDA_WORK_MODE_MD = 0, /* motion detection */
OT_VDA_WORK_MODE_OD, /* Occlusion detection */
OT_VDA_WORK_MODE_BUTT
} ot_vda_work_mode;
typedef struct {
td_u16 upper_left_x;
td_u16 upper_left_y;
td_u16 lower_right_x;
td_u16 lower_right_y;
} ot_vda_rgn;
typedef struct {
/* static attribute */
ot_rect rect; /*
* region rect
* X:[0,OT_VDA_MAX_WIDTH),align:16
* Y:[0,OT_VDA_MAX_HEIGHT)
* W:[16,OT_VDA_MAX_WIDTH],align:16
* H:[16,OT_VDA_MAX_HEIGHT],align:16
* X+W <= channel wight
* Y+H <= channel height
*/
/* dynamic attribute */
td_u32 sad_threshold; /* SAD threshold,range:[0,4080] */
td_u32 area_threshold; /* alarm area threshold,range:[0,100] */
td_u32 occlusion_cnt_threshold; /* alarm frame count threshold,range:[1,256] */
td_u32 uncover_cnt_threshold; /* the max uncover count,range:[0,256] */
} ot_vda_od_rgn_attr;
typedef struct {
/* static attribute */
ot_vda_alg vda_alg; /* arithmetic */
ot_vda_mb_size mb_size; /* MB size */
ot_vda_mb_sad_bits mb_sad_bits; /* MB SAD size */
ot_vda_ref_mode ref_mode; /* reference picture mode */
td_u32 md_buf_num; /* result buffer number,range:[1,16] */
/* dynamic attribute */
td_u32 vda_interval; /* VDA interval,range:[0,256] */
td_u32 bg_up_src_wgt; /*
* the source picture weight,
* back ground update total weight 256,
* range:[1,255],recommendatory value:128
*/
td_u32 sad_threshold; /* SAD threshold,range:[0,4080],recommendatory value:100 */
td_u32 obj_num_max; /* max OBJ number,range:[1,128] */
} ot_vda_md_attr;
typedef struct {
td_u32 rgn_num; /* region number */
ot_vda_od_rgn_attr od_rgn_attr[OT_VDA_OD_RGN_NUM_MAX]; /* region attribute */
/* static attribute */
ot_vda_alg vda_alg; /* arithmetic */
ot_vda_mb_size mb_size; /* MB size */
ot_vda_mb_sad_bits mb_sad_bits; /* MB SAD size */
ot_vda_ref_mode ref_mode; /* reference picture mode */
/* dynamic attribute */
td_u32 vda_interval; /* VDA interval,[0,256] */
td_u32 bg_up_src_wgt; /* back ground update total weight 256,the source picture weight,[1,255] */
} ot_vda_od_attr;
typedef union {
ot_vda_md_attr md_attr; /* MD attribute. AUTO:ot_vda_work_mode:OT_VDA_WORK_MODE_MD; */
ot_vda_od_attr od_attr; /* OD attribute. AUTO:ot_vda_work_mode:OT_VDA_WORK_MODE_OD; */
} ot_vda_work_mode_attr;
typedef struct {
ot_vda_work_mode work_mode; /* work mode */
ot_vda_work_mode_attr attr; /* work mode attribute */
td_u32 width; /* the width of CHNL,[OT_VDA_MIN_WIDTH,OT_VDA_MAX_WIDTH] */
td_u32 height; /* the height of CHNL,[OT_VDA_MIN_HEIGHT,OT_VDA_MAX_HEIGHT] */
} ot_vda_chn_attr;
typedef struct {
td_u32 stride; /* stride */
ot_vda_mb_sad_bits mb_sad_bits; /* the MB SAD size */
td_void ATTRIBUTE *addr; /* address */
} ot_vda_mb_sad_data;
typedef struct {
td_u32 obj_num; /* OBJ number */
ot_vda_rgn *addr; /* OBJ data address */
td_u32 idx_of_max_obj; /* index of max OBJ */
td_u32 size_of_max_obj; /* size of max OBJ */
td_u32 size_of_total_obj; /* total size of all OBJ */
} ot_vda_obj_data;
typedef struct {
td_bool mb_sad_valid; /* SAD data is valid */
ot_vda_mb_sad_data mb_sad_data; /* MB SAD data */
td_bool obj_valid; /* OBJ data is valid */
ot_vda_obj_data obj_data; /* OBJ data */
td_bool pixel_num_valid; /* alarm pixel number data is valid */
td_u32 alarm_pixel_cnt; /* motion pix of picture */
} ot_vda_md_data;
typedef struct {
td_u32 rgn_num; /* region number */
td_bool rgn_alarm_en[OT_VDA_OD_RGN_NUM_MAX]; /* TD_TRUE:alarm */
} ot_vda_od_data;
typedef union {
ot_vda_md_data md_data; /* MD data. AUTO:ot_vda_work_mode:OT_VDA_WORK_MODE_MD; */
ot_vda_od_data od_data; /* OD data. AUTO:ot_vda_work_mode:OT_VDA_WORK_MODE_OD; */
} ot_vda_data_type;
typedef struct {
ot_vda_work_mode work_mode; /* work mode */
ot_vda_data_type data; /* VDA data type */
ot_vda_mb_size mb_size; /* MB size */
td_u32 mb_width; /* VDA channel width in MB */
td_u32 mb_height; /* VDA channel height in MB */
td_u64 pts; /* time */
} ot_vda_data;
typedef struct {
td_bool recv_pic_en; /* start receive picture */
td_u32 left_pic; /* left picture */
td_u32 left_data; /* left data */
} ot_vda_chn_status;
#define OT_ERR_VDA_INVALID_DEV_ID OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_INVALID_DEV_ID)
#define OT_ERR_VDA_INVALID_CHN_ID OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_INVALID_CHN_ID)
#define OT_ERR_VDA_ILLEGAL_PARAM OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_ILLEGAL_PARAM)
#define OT_ERR_VDA_EXIST OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_EXIST)
#define OT_ERR_VDA_UNEXIST OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_UNEXIST)
#define OT_ERR_VDA_NULL_PTR OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_NULL_PTR)
#define OT_ERR_VDA_NOT_CFG OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_CFG)
#define OT_ERR_VDA_NOT_SUPPORT OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_SUPPORT)
#define OT_ERR_VDA_NOT_PERM OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_PERM)
#define OT_ERR_VDA_NO_MEM OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_NO_MEM)
#define OT_ERR_VDA_NO_BUF OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_NO_BUF)
#define OT_ERR_VDA_BUF_EMPTY OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_BUF_EMPTY)
#define OT_ERR_VDA_BUF_FULL OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_BUF_FULL)
#define OT_ERR_VDA_BAD_ADDR OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_BAD_ADDR)
#define OT_ERR_VDA_BUSY OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_BUSY)
#define OT_ERR_VDA_NOT_READY OT_DEFINE_ERR(OT_ID_VDA, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_READY)
#ifdef __cplusplus
}
#endif
#endif