1*4882a593Smuzhiyun /* GPL-2.0 WITH Linux-syscall-note OR Apache 2.0 */ 2*4882a593Smuzhiyun /* Copyright (c) 2022 Fuzhou Rockchip Electronics Co., Ltd */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef INCLUDE_RT_MPI_RK_COMM_IVS_H_ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #define INCLUDE_RT_MPI_RK_COMM_IVS_H_ 7*4882a593Smuzhiyun #include "rk_type.h" 8*4882a593Smuzhiyun #include "rk_common.h" 9*4882a593Smuzhiyun #include "rk_errno.h" 10*4882a593Smuzhiyun #include "rk_comm_video.h" 11*4882a593Smuzhiyun #include "rk_comm_mb.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #ifdef __cplusplus 14*4882a593Smuzhiyun #if __cplusplus 15*4882a593Smuzhiyun extern "C" { 16*4882a593Smuzhiyun #endif 17*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define IVS_MAX_AREA_NUM 16 20*4882a593Smuzhiyun #define IVS_MAX_AREA_POINT_NUM 6 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun typedef enum rkIVS_MODE_E { 23*4882a593Smuzhiyun IVS_MODE_MD = 1 << 0, 24*4882a593Smuzhiyun IVS_MODE_OD = 1 << 1, 25*4882a593Smuzhiyun IVS_MODE_MD_OD = IVS_MODE_MD | IVS_MODE_OD, 26*4882a593Smuzhiyun IVS_MODE_BUTT 27*4882a593Smuzhiyun } IVS_MODE_E; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun typedef struct rkIVS_AREA_S { 30*4882a593Smuzhiyun RK_U32 u32PointNum; /* 点个数 */ 31*4882a593Smuzhiyun POINT_S points[IVS_MAX_AREA_POINT_NUM]; /* 围成区域的所有点坐标 */ 32*4882a593Smuzhiyun } IVS_AREA_S; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun typedef struct rkIVS_AREAS_S { 35*4882a593Smuzhiyun RK_U32 u32AreaNum; 36*4882a593Smuzhiyun IVS_AREA_S areas[IVS_MAX_AREA_NUM]; 37*4882a593Smuzhiyun } IVS_AREAS_S; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun typedef struct rkIVS_DET_ATTR_S { 40*4882a593Smuzhiyun IVS_AREAS_S stDetArea; 41*4882a593Smuzhiyun } IVS_DET_ATTR_S; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun typedef struct rkIVS_CHN_ATTR_S { 44*4882a593Smuzhiyun IVS_MODE_E enMode; 45*4882a593Smuzhiyun RK_U32 u32PicWidth; 46*4882a593Smuzhiyun RK_U32 u32PicHeight; 47*4882a593Smuzhiyun PIXEL_FORMAT_E enPixelFormat; 48*4882a593Smuzhiyun ROTATION_E enRotation; 49*4882a593Smuzhiyun MIRROR_E enMirror; 50*4882a593Smuzhiyun RK_BOOL bTraceClose; 51*4882a593Smuzhiyun RK_S32 s32Gop; 52*4882a593Smuzhiyun RK_BOOL bSmearEnable; 53*4882a593Smuzhiyun RK_BOOL bWeightpEnable; 54*4882a593Smuzhiyun RK_BOOL bMDEnable; 55*4882a593Smuzhiyun RK_S32 s32MDInterval; 56*4882a593Smuzhiyun RK_BOOL bMDNightMode; 57*4882a593Smuzhiyun RK_U32 u32MDSensibility; // 1: low, 2: mid, 3: high 58*4882a593Smuzhiyun RK_BOOL bODEnable; 59*4882a593Smuzhiyun RK_S32 s32ODInterval; 60*4882a593Smuzhiyun RK_S32 s32ODPercent; // [5, 8] 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun union { 63*4882a593Smuzhiyun IVS_DET_ATTR_S stDetAttr; 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun } IVS_CHN_ATTR_S; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun typedef struct rkIVS_MD_INFO_S { 68*4882a593Smuzhiyun RK_U32 frameId; /* 所在帧序号 */ 69*4882a593Smuzhiyun RK_U32 u32RectNum; 70*4882a593Smuzhiyun RECT_S stRect[4096]; 71*4882a593Smuzhiyun RK_CHAR *pData; 72*4882a593Smuzhiyun RK_U32 u32Size; 73*4882a593Smuzhiyun RK_S32 s32Fd; 74*4882a593Smuzhiyun } IVS_MD_INFO_S; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun typedef struct rkIVS_OD_INFO_S { 77*4882a593Smuzhiyun RK_U32 frameId; /* 所在帧序号 */ 78*4882a593Smuzhiyun RK_U32 u32Flag; 79*4882a593Smuzhiyun RK_U32 u32PixSum; 80*4882a593Smuzhiyun } IVS_OD_INFO_S; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun typedef struct rkIVS_RESULT_S { 83*4882a593Smuzhiyun IVS_MD_INFO_S stMdInfo; 84*4882a593Smuzhiyun IVS_OD_INFO_S stOdInfo; 85*4882a593Smuzhiyun } IVS_RESULT_S; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun typedef struct rkIVS_RESULT_INFO_S { 88*4882a593Smuzhiyun RK_S32 s32ResultNum; 89*4882a593Smuzhiyun IVS_RESULT_S *pstResults; 90*4882a593Smuzhiyun } IVS_RESULT_INFO_S; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /*********************************************************************************************/ 93*4882a593Smuzhiyun /* invlalid channel ID */ 94*4882a593Smuzhiyun #define RK_ERR_IVS_INVALID_CHNID RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID) 95*4882a593Smuzhiyun /* at lease one parameter is illagal ,eg, an illegal enumeration value */ 96*4882a593Smuzhiyun #define RK_ERR_IVS_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) 97*4882a593Smuzhiyun /* channel exists */ 98*4882a593Smuzhiyun #define RK_ERR_IVS_EXIST RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_EXIST) 99*4882a593Smuzhiyun /* using a NULL point */ 100*4882a593Smuzhiyun #define RK_ERR_IVS_NULL_PTR RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) 101*4882a593Smuzhiyun /* try to enable or initialize system,device or channel, before configing attribute */ 102*4882a593Smuzhiyun #define RK_ERR_IVS_NOT_CONFIG RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_CONFIG) 103*4882a593Smuzhiyun /* operation is not supported by NOW */ 104*4882a593Smuzhiyun #define RK_ERR_IVS_NOT_SUPPORT RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT) 105*4882a593Smuzhiyun /* operation is not permitted ,eg, try to change stati attribute */ 106*4882a593Smuzhiyun #define RK_ERR_IVS_NOT_PERM RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) 107*4882a593Smuzhiyun /* the channle is not existed */ 108*4882a593Smuzhiyun #define RK_ERR_IVS_UNEXIST RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST) 109*4882a593Smuzhiyun /* failure caused by malloc memory */ 110*4882a593Smuzhiyun #define RK_ERR_IVS_NOMEM RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM) 111*4882a593Smuzhiyun /* failure caused by malloc buffer */ 112*4882a593Smuzhiyun #define RK_ERR_IVS_NOBUF RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF) 113*4882a593Smuzhiyun /* no data in buffer */ 114*4882a593Smuzhiyun #define RK_ERR_IVS_BUF_EMPTY RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY) 115*4882a593Smuzhiyun /* no buffer for new data */ 116*4882a593Smuzhiyun #define RK_ERR_IVS_BUF_FULL RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL) 117*4882a593Smuzhiyun /* system is not ready,had not initialed or loaded */ 118*4882a593Smuzhiyun #define RK_ERR_IVS_SYS_NOTREADY RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY) 119*4882a593Smuzhiyun /* system busy */ 120*4882a593Smuzhiyun #define RK_ERR_IVS_BUSY RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY) 121*4882a593Smuzhiyun /* bad address, eg. used for copy_from_user & copy_to_user */ 122*4882a593Smuzhiyun #define RK_ERR_IVS_BADADDR RK_DEF_ERR(RK_ID_IVS, RK_ERR_LEVEL_ERROR, RK_ERR_BADADDR) 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #ifdef __cplusplus 125*4882a593Smuzhiyun #if __cplusplus 126*4882a593Smuzhiyun } 127*4882a593Smuzhiyun #endif 128*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */ 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #endif /* End of #ifndef INCLUDE_RT_MPI_RK_COMM_IVS_H_ */ 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun 133