1*4882a593Smuzhiyun /* GPL-2.0 WITH Linux-syscall-note OR Apache 2.0 */ 2*4882a593Smuzhiyun /* Copyright (c) 2021 Fuzhou Rockchip Electronics Co., Ltd */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef INCLUDE_RT_MPI_RK_COMM_VGS_H_ 5*4882a593Smuzhiyun #define INCLUDE_RT_MPI_RK_COMM_VGS_H_ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifdef __cplusplus 8*4882a593Smuzhiyun #if __cplusplus 9*4882a593Smuzhiyun extern "C" { 10*4882a593Smuzhiyun #endif 11*4882a593Smuzhiyun #endif /* __cplusplus */ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include "rk_type.h" 14*4882a593Smuzhiyun #include "rk_common.h" 15*4882a593Smuzhiyun #include "rk_errno.h" 16*4882a593Smuzhiyun #include "rk_comm_video.h" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* failure caused by malloc buffer */ 19*4882a593Smuzhiyun #define RK_VGS_SUCCESS RK_SUCCESS 20*4882a593Smuzhiyun #define RK_ERR_VGS_NOBUF RK_DEF_ERR(RK_ID_VGS, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF) 21*4882a593Smuzhiyun #define RK_ERR_VGS_BUF_EMPTY RK_DEF_ERR(RK_ID_VGS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY) 22*4882a593Smuzhiyun #define RK_ERR_VGS_NULL_PTR RK_DEF_ERR(RK_ID_VGS, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) 23*4882a593Smuzhiyun #define RK_ERR_VGS_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_VGS, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) 24*4882a593Smuzhiyun #define RK_ERR_VGS_BUF_FULL RK_DEF_ERR(RK_ID_VGS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL) 25*4882a593Smuzhiyun #define RK_ERR_VGS_SYS_NOTREADY RK_DEF_ERR(RK_ID_VGS, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY) 26*4882a593Smuzhiyun #define RK_ERR_VGS_NOT_SUPPORT RK_DEF_ERR(RK_ID_VGS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT) 27*4882a593Smuzhiyun #define RK_ERR_VGS_NOT_PERMITTED RK_DEF_ERR(RK_ID_VGS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define VGS_MAX_ARRAY_SIZE 100 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun typedef RK_S32 VGS_HANDLE; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun typedef enum rkVGS_COLOR_REVERT_MODE_E { 34*4882a593Smuzhiyun VGS_COLOR_REVERT_NONE = 0, /* Not revert */ 35*4882a593Smuzhiyun VGS_COLOR_REVERT_RGB, /* Revert RGB */ 36*4882a593Smuzhiyun VGS_COLOR_REVERT_ALPHA, /* Revert alpha */ 37*4882a593Smuzhiyun VGS_COLOR_REVERT_BOTH, /* Revert RGB and alpha*/ 38*4882a593Smuzhiyun VGS_COLOR_REVERT_BUTT 39*4882a593Smuzhiyun } VGS_COLOR_REVERT_MODE_E; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun typedef struct rkVGS_OSD_REVERT_S { 42*4882a593Smuzhiyun RECT_S stSrcRect; /* OSD color revert area */ 43*4882a593Smuzhiyun VGS_COLOR_REVERT_MODE_E enColorRevertMode; /* OSD color revert mode */ 44*4882a593Smuzhiyun } VGS_OSD_REVERT_S; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun typedef struct rkVGS_TASK_ATTR_S { 47*4882a593Smuzhiyun VIDEO_FRAME_INFO_S stImgIn; /* Input picture */ 48*4882a593Smuzhiyun VIDEO_FRAME_INFO_S stImgOut; /* Output picture */ 49*4882a593Smuzhiyun RK_U64 au64PrivateData[4]; /* RW; Private data of task */ 50*4882a593Smuzhiyun RK_U32 reserved; /* RW; Debug information,state of current picture */ 51*4882a593Smuzhiyun } VGS_TASK_ATTR_S; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun typedef struct rkVGS_DRAW_LINE_S { 54*4882a593Smuzhiyun POINT_S stStartPoint; /* Line start point */ 55*4882a593Smuzhiyun POINT_S stEndPoint; /* Line end point */ 56*4882a593Smuzhiyun RK_U32 u32Thick; /* RW; Width of line */ 57*4882a593Smuzhiyun RK_U32 u32Color; /* RW; Range: [0,0xFFFFFF]; Color of line */ 58*4882a593Smuzhiyun } VGS_DRAW_LINE_S; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun typedef enum rkVGS_COVER_TYPE_E { 61*4882a593Smuzhiyun COVER_RECT = 0, /* Retangle cover */ 62*4882a593Smuzhiyun COVER_QUAD_RANGLE, /* Quadrangle cover */ 63*4882a593Smuzhiyun COVER_BUTT 64*4882a593Smuzhiyun } VGS_COVER_TYPE_E; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun typedef struct rkVGS_QUADRANGLE_COVER_S { 67*4882a593Smuzhiyun RK_BOOL bSolid; /* Solid or hollow cover */ 68*4882a593Smuzhiyun RK_U32 u32Thick; /* RW; Range: [2,8]; Thick of the hollow quadrangle */ 69*4882a593Smuzhiyun POINT_S stPoint[4]; /* Four points of the quadrangle */ 70*4882a593Smuzhiyun } VGS_QUADRANGLE_COVER_S; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun typedef struct rkVGS_ADD_COVER_S { 73*4882a593Smuzhiyun VGS_COVER_TYPE_E enCoverType; /* Cover type */ 74*4882a593Smuzhiyun union { 75*4882a593Smuzhiyun RECT_S stDstRect; /* The rectangle area */ 76*4882a593Smuzhiyun VGS_QUADRANGLE_COVER_S stQuadRangle; /* The quadrangle area */ 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun RK_U32 u32Color; /* RW; Range: [0,0xFFFFFF]; Color of cover */ 80*4882a593Smuzhiyun } VGS_ADD_COVER_S; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun typedef struct rkVGS_ADD_OSD_S { 83*4882a593Smuzhiyun MB_BLK pMbBlk; 84*4882a593Smuzhiyun RECT_S stRect; /* Osd area */ 85*4882a593Smuzhiyun PIXEL_FORMAT_E enPixelFmt; /* Pixel format of osd */ 86*4882a593Smuzhiyun RK_U32 u32FgAlpha; /* RW; Range: [0,255]; Foreground alpha of osd */ 87*4882a593Smuzhiyun RK_U32 u32BgAlpha; /* RW; Range: [0,255]; Background alpha of osd */ 88*4882a593Smuzhiyun } VGS_ADD_OSD_S; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun typedef enum rkVGS_SCLCOEF_MODE_E { 91*4882a593Smuzhiyun VGS_SCLCOEF_NORMAL = 0, /* normal scale coefficient*/ 92*4882a593Smuzhiyun VGS_SCLCOEF_TAP2 = 1, /* scale coefficient of 2 tap */ 93*4882a593Smuzhiyun VGS_SCLCOEF_TAP4 = 2, /* scale coefficient of 4 tap */ 94*4882a593Smuzhiyun VGS_SCLCOEF_TAP6 = 3, /* scale coefficient of 6 tap */ 95*4882a593Smuzhiyun VGS_SCLCOEF_TAP8 = 4, /* scale coefficient of 8 tap */ 96*4882a593Smuzhiyun VGS_SCLCOEF_BUTT 97*4882a593Smuzhiyun } VGS_SCLCOEF_MODE_E; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun typedef enum rkVGS_MOSAIC_BLK_SIZE_E { 100*4882a593Smuzhiyun RK_MOSAIC_BLK_SIZE_8 = 8, /* block size 8*8 of MOSAIC */ 101*4882a593Smuzhiyun RK_MOSAIC_BLK_SIZE_16 = 16, /* block size 16*16 of MOSAIC */ 102*4882a593Smuzhiyun RK_MOSAIC_BLK_SIZE_32 = 32, /* block size 32*32 of MOSAIC */ 103*4882a593Smuzhiyun RK_MOSAIC_BLK_SIZE_64 = 64, /* block size 64*64 of MOSAIC */ 104*4882a593Smuzhiyun RK_MOSAIC_BLK_SIZE_BUT 105*4882a593Smuzhiyun } VGS_MOSAIC_BLK_SIZE_E; 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun typedef struct rkVGS_MOSAIC_S { 108*4882a593Smuzhiyun VGS_MOSAIC_BLK_SIZE_E enBlkSize; 109*4882a593Smuzhiyun RECT_S stDstRect; /* RW; The rectangle area. */ 110*4882a593Smuzhiyun } VGS_MOSAIC_S; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun typedef enum rkVGS_CROP_COORDINATE_E { 113*4882a593Smuzhiyun VGS_CROP_RATIO_COOR = 0, /* Ratio coordinate. */ 114*4882a593Smuzhiyun VGS_CROP_ABS_COOR /* Absolute coordinate. */ 115*4882a593Smuzhiyun } VGS_CROP_COORDINATE_E; 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun typedef struct rkVGS_CROP_INFO_S { 118*4882a593Smuzhiyun VGS_CROP_COORDINATE_E enCropCoordinate; /* RW; Range: [0, 1]; Coordinate mode of the crop start point. */ 119*4882a593Smuzhiyun RECT_S stCropRect; /* CROP rectangular. */ 120*4882a593Smuzhiyun } VGS_CROP_INFO_S; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun #ifdef __cplusplus 123*4882a593Smuzhiyun #if __cplusplus 124*4882a593Smuzhiyun } 125*4882a593Smuzhiyun #endif 126*4882a593Smuzhiyun #endif /* __cplusplus */ 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun #endif /* __RK_COMM_VGS_H__ */ 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun 131