xref: /OK3568_Linux_fs/external/rockit/mpi/sdk/include/rk_comm_rgn.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* GPL-2.0 WITH Linux-syscall-note OR Apache 2.0 */
2 /* Copyright (c) 2021 Fuzhou Rockchip Electronics Co., Ltd */
3 
4 #ifndef INCLUDE_RT_MPI_RK_COMM_RGN_H__
5 #define INCLUDE_RT_MPI_RK_COMM_RGN_H__
6 
7 #include "rk_common.h"
8 #include "rk_comm_video.h"
9 #include "rk_errno.h"
10 
11 #ifdef __cplusplus
12 #if __cplusplus
13 extern "C" {
14 #endif
15 #endif /* End of #ifdef __cplusplus */
16 
17 typedef RK_U32 RGN_HANDLE;
18 
19 #define RGN_CLUT_NUM                   256
20 #define RGN_MAX_BUF_NUM                2
21 #define RGN_COLOR_LUT_NUM              2
22 
23 #define RGN_MIN_WIDTH                  16
24 #define RGN_MIN_HEIGHT                 16
25 
26 #define RGN_COVER_MIN_X                0
27 #define RGN_COVER_MIN_Y                0
28 #define RGN_COVER_MAX_X                8192
29 #define RGN_COVER_MAX_Y                8192
30 #define RGN_COVER_MAX_WIDTH            8192
31 #define RGN_COVER_MAX_HEIGHT           8192
32 
33 #define RGN_OVERLAY_MIN_X              -8192
34 #define RGN_OVERLAY_MIN_Y              -8192
35 #define RGN_OVERLAY_MAX_X              8192
36 #define RGN_OVERLAY_MAX_Y              8192
37 #define RGN_OVERLAY_MAX_WIDTH          8192
38 #define RGN_OVERLAY_MAX_HEIGHT         8192
39 
40 #define RGN_MOSAIC_MIN_X               0
41 #define RGN_MOSAIC_MIN_Y               0
42 #define RGN_MOSAIC_MAX_X               8192
43 #define RGN_MOSAIC_MAX_Y               8192
44 #define RGN_MOSAIC_MIN_WIDTH           32
45 #define RGN_MOSAIC_MIN_HEIGHT          32
46 #define RGN_MOSAIC_MAX_WIDTH           8192
47 #define RGN_MOSAIC_MAX_HEIGHT          8192
48 
49 #define RGN_LINE_MIN_X                 0
50 #define RGN_LINE_MIN_Y                 0
51 #define RGN_LINE_MAX_X                 8192
52 #define RGN_LINE_MAX_Y                 8192
53 #define RGN_LINE_MIN_THICK             1
54 #define RGN_LINE_MAX_THICK             32
55 
56 /* type of video regions */
57 typedef enum rkRGN_TYPE_E {
58     OVERLAY_RGN = 0,     /* video overlay region */
59     OVERLAY_EX_RGN,
60     COVER_RGN,
61     MOSAIC_RGN,
62     LINE_RGN,
63     RGN_BUTT
64 } RGN_TYPE_E;
65 
66 /* overlay regions qp info (only support to venc) */
67 typedef struct rkOVERLAY_QP_INFO {
68     /* qp protect is enable */
69     RK_BOOL bEnable;
70     /* is abs qp, RK_TRUE: overlay regions set to the qp; RK_FALSE: regions set around the qp. */
71     RK_BOOL bAbsQp;
72     /* flag of forced intra macroblock */
73     RK_BOOL bForceIntra;
74     /* absolute / relative qp of macroblock */
75     RK_S32 s32Qp;
76 } OVERLAY_QP_INFO_S;
77 
78 typedef enum rkINVERT_COLOR_MODE_E {
79     LESSTHAN_LUM_THRESH = 0,
80     MORETHAN_LUM_THRESH,
81     INVERT_COLOR_BUTT
82 } INVERT_COLOR_MODE_E;
83 
84 typedef struct rkOVERLAY_INVERT_COLOR_S {
85     SIZE_S stInvColArea;
86     RK_U32 u32LumThresh;
87     INVERT_COLOR_MODE_E enChgMod;
88     RK_BOOL bInvColEn;
89 } OVERLAY_INVERT_COLOR_S;
90 
91 typedef struct rkOVERLAY_ATTR_S {
92     /* bitmap pixel format,now only support BGRA5551 or ARGB8888 */
93     PIXEL_FORMAT_E enPixelFmt;
94     /* region size,W:[16,RGN_OVERLAY_MAX_WIDTH],align:16,H:[16,RGN_OVERLAY_MAX_HEIGHT],align:16 */
95     SIZE_S stSize;
96     RK_U32 u32CanvasNum; /* canvas number, default 2. */
97     /* color loop up table number, default 0. range:[0, RGN_CLUT_NUM) */
98     RK_U32 u32ClutNum;
99     /* color loop up table, only support BGRA8888 format now. */
100     RK_U32 u32Clut[RGN_CLUT_NUM];
101     /* ex overlay fiter device type, now only support venc module*/
102     VIDEO_PROC_DEV_TYPE_E enVProcDev;
103 } OVERLAY_ATTR_S;
104 
105 typedef struct rkOVERLAY_CHN_ATTR_S {
106     /* X:[0,OVERLAY_MAX_X_VENC],align:16,Y:[0,OVERLAY_MAX_Y_VENC],align:16 */
107     POINT_S stPoint;
108 
109     /* background an foreground transparence when pixel format is BGRA5551
110       * the pixel format is BGRA5551,when the alpha bit is 1 this alpha is value!
111       * range:[0,255]
112       */
113     RK_U32 u32FgAlpha;
114 
115     /* background an foreground transparence when pixel format is BGRA5551
116       * the pixel format is BGRA5551,when the alpha bit is 0 this alpha is value!
117       * range:[0,255]
118       */
119     RK_U32 u32BgAlpha;
120 
121     RK_U32 u32Layer;   /* OVERLAY region layer range:[0,7]*/
122 
123     /* overlay regions qp info (only support to venc) */
124     OVERLAY_QP_INFO_S stQpInfo;
125     /* 2BPP color table*/
126     RK_U32 u32ColorLUT[RGN_COLOR_LUT_NUM];
127 
128     OVERLAY_INVERT_COLOR_S stInvertColor;
129 } OVERLAY_CHN_ATTR_S;
130 
131 typedef struct rkRGN_QUADRANGLE_S {
132     RK_BOOL bSolid;
133     RK_U32 u32Thick;
134     POINT_S stPoint[4];
135 } RGN_QUADRANGLE_S;
136 
137 typedef enum rkRGN_COORDINATE_E {
138     RGN_ABS_COOR = 0,   /*Absolute coordinate*/
139     RGN_RATIO_COOR      /*Ratio coordinate*/
140 } RGN_COORDINATE_E;
141 
142 typedef enum rkRGN_AREA_TYPE_E {
143     AREA_RECT = 0,
144     AREA_QUAD_RANGLE,
145     AREA_BUTT
146 } RGN_COVER_TYPE_E;
147 
148 typedef struct rkCOVER_CHN_ATTR_S {
149     RGN_COVER_TYPE_E enCoverType;
150     union {
151         RECT_S stRect;                      /* config of rect */
152         RGN_QUADRANGLE_S stQuadRangle;
153     };
154     RK_U32 u32Color;                        /* RGB888 format */
155     RK_U32 u32Layer;                        /* COVER region layer */
156     RGN_COORDINATE_E enCoordinate;          /* ratio coordiante or abs coordinate */
157 } COVER_CHN_ATTR_S;
158 
159 typedef enum rkMOSAIC_BLK_SIZE_E {
160     MOSAIC_BLK_SIZE_8 = 0,    /*block size 8*8 of MOSAIC*/
161     MOSAIC_BLK_SIZE_16,       /*block size 16*16 of MOSAIC*/
162     MOSAIC_BLK_SIZE_32,       /*block size 32*32 of MOSAIC*/
163     MOSAIC_BLK_SIZE_64,       /*block size 64*64 of MOSAIC*/
164     MOSAIC_BLK_SIZE_BUTT
165 } MOSAIC_BLK_SIZE_E;
166 
167 typedef struct rkMOSAIC_CHN_ATTR_S {
168     RECT_S stRect;                 /*location of MOSAIC*/
169     MOSAIC_BLK_SIZE_E enBlkSize;   /*block size of MOSAIC*/
170     RK_U32 u32Layer;               /*MOSAIC region layer range:[0,3] */
171 } MOSAIC_CHN_ATTR_S;
172 
173 typedef struct rkLINE_CHN_ATTR_S {
174     RK_U32 u32Thick;
175     RK_U32 u32Color;
176     POINT_S stStartPoint;
177     POINT_S stEndPoint;
178 } LINE_CHN_ATTR_S;
179 
180 typedef union rkRGN_ATTR_U {
181     OVERLAY_ATTR_S      stOverlay;      /* attribute of overlay region */
182 } RGN_ATTR_U;
183 
184 typedef union rkRGN_CHN_ATTR_U {
185     OVERLAY_CHN_ATTR_S      stOverlayChn;      /* attribute of overlay region */
186     COVER_CHN_ATTR_S        stCoverChn;        /* attribute of cover region */
187     MOSAIC_CHN_ATTR_S       stMosaicChn;       /* attribute of mosaic region */
188     LINE_CHN_ATTR_S         stLineChn;         /* attribute of draw line region */
189 } RGN_CHN_ATTR_U;
190 
191 /* attribute of a region */
192 typedef struct rkRGN_ATTR_S {
193     RGN_TYPE_E enType;  /* region type */
194     RGN_ATTR_U unAttr;  /* region attribute */
195 } RGN_ATTR_S;
196 
197 /* attribute of a region */
198 typedef struct rkRGN_CHN_ATTR_S {
199     RK_BOOL           bShow;
200     RGN_TYPE_E        enType;     /* region type */
201     RGN_CHN_ATTR_U    unChnAttr;  /* region attribute */
202 } RGN_CHN_ATTR_S;
203 
204 typedef struct rkRGN_CANVAS_INFO_S {
205     MB_BLK canvasBlk;
206     RK_U64 u64VirAddr;
207     SIZE_S stSize;
208     RK_U32 u32VirWidth;
209     RK_U32 u32VirHeight;
210     PIXEL_FORMAT_E enPixelFmt;
211 } RGN_CANVAS_INFO_S;
212 
213 /* PingPong buffer change when set attr, it needs to remap memory in mpi interface */
214 #define RK_NOTICE_RGN_BUFFER_CHANGE  RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_NOTICE, RK_SUCCESS)
215 
216 /* invlalid device ID */
217 #define RK_ERR_RGN_INVALID_DEVID     RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_DEVID)
218 /* invlalid channel ID */
219 #define RK_ERR_RGN_INVALID_CHNID     RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID)
220 /* at lease one parameter is illagal ,eg, an illegal enumeration value  */
221 #define RK_ERR_RGN_ILLEGAL_PARAM     RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM)
222 /* channel exists */
223 #define RK_ERR_RGN_EXIST             RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_EXIST)
224 /*UN exist*/
225 #define RK_ERR_RGN_UNEXIST           RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST)
226 /* using a NULL point */
227 #define RK_ERR_RGN_NULL_PTR          RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR)
228 /* try to enable or initialize system,device or channel, before configing attribute */
229 #define RK_ERR_RGN_NOT_CONFIG        RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_CONFIG)
230 /* operation is not supported by NOW */
231 #define RK_ERR_RGN_NOT_SUPPORT       RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT)
232 /* operation is not permitted ,eg, try to change stati attribute */
233 #define RK_ERR_RGN_NOT_PERM          RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM)
234 /* failure caused by malloc memory */
235 #define RK_ERR_RGN_NOMEM             RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM)
236 /* failure caused by malloc buffer */
237 #define RK_ERR_RGN_NOBUF             RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF)
238 /* no data in buffer */
239 #define RK_ERR_RGN_BUF_EMPTY         RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY)
240 /* no buffer for new data */
241 #define RK_ERR_RGN_BUF_FULL          RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL)
242 /* bad address, eg. used for copy_from_user & copy_to_user */
243 #define RK_ERR_RGN_BADADDR           RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_BADADDR)
244 /* resource is busy, eg. destroy a venc chn without unregistering it */
245 #define RK_ERR_RGN_BUSY              RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY)
246 /* System is not ready,maybe not initialed or loaded.
247  * Returning the error code when opening a device file failed.
248  */
249 #define RK_ERR_RGN_NOTREADY          RK_DEF_ERR(RK_ID_RGN, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY)
250 
251 #ifdef __cplusplus
252 #if __cplusplus
253 }
254 #endif
255 #endif /* __cplusplus */
256 
257 #endif /* INCLUDE_RT_MPI_RK_COMM_RGN_H__ */
258 
259