xref: /OK3568_Linux_fs/external/rockit/mpi/sdk/include/rk_comm_ivs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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