xref: /OK3568_Linux_fs/external/rockit/mpi/sdk/include/rk_comm_avs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* GPL-2.0 WITH Linux-syscall-note OR Apache 2.0 */
2*4882a593Smuzhiyun /* Copyright (c) 2023 Fuzhou Rockchip Electronics Co., Ltd */
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef INCLUDE_RT_MPI_RK_COMMON_AVS_H_
5*4882a593Smuzhiyun #define INCLUDE_RT_MPI_RK_COMMON_AVS_H_
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include "rk_common.h"
8*4882a593Smuzhiyun #include "rk_errno.h"
9*4882a593Smuzhiyun #include "rk_comm_video.h"
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifdef __cplusplus
12*4882a593Smuzhiyun #if __cplusplus
13*4882a593Smuzhiyun extern "C" {
14*4882a593Smuzhiyun #endif
15*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define AVS_SPLIT_NUM            2
18*4882a593Smuzhiyun #define AVS_SPLIT_PIPE_NUM       6
19*4882a593Smuzhiyun #define AVS_CUBE_MAP_SURFACE_NUM 6
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun typedef enum rkAVS_LUT_ACCURACY_E {
22*4882a593Smuzhiyun     AVS_LUT_ACCURACY_HIGH    = 0,    /* LUT high accuracy. */
23*4882a593Smuzhiyun     AVS_LUT_ACCURACY_LOW     = 1,    /* LUT low accuracy. */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun     AVS_LUT_ACCURACY_BUTT
26*4882a593Smuzhiyun } AVS_LUT_ACCURACY_E;
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun typedef enum rkAVS_LUT_STEP_E {
29*4882a593Smuzhiyun     AVS_LUT_STEP_HIGH    = 0,    /* LUT step size 16  pixel */
30*4882a593Smuzhiyun     AVS_LUT_STEP_MEDIUM  = 1,    /* LUT step size 32 pixel */
31*4882a593Smuzhiyun     AVS_LUT_STEP_LOW     = 2,    /* LUT step size 64 pixel */
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun     AVS_LUT_STEP_BUTT
34*4882a593Smuzhiyun } AVS_LUT_STEP_E;
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun typedef enum rkAVS_FUSE_WIDTH_E {
37*4882a593Smuzhiyun     AVS_FUSE_WIDTH_HIGH      = 0,    /* Fusion zone size 128 pixel */
38*4882a593Smuzhiyun     AVS_FUSE_WIDTH_MEDIUM    = 1,    /* Fusion zone size 256 pixel */
39*4882a593Smuzhiyun     AVS_FUSE_WIDTH_LOW       = 2,    /* Fusion zone size 512 pixel */
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun     AVS_FUSE_WIDTH_BUTT
42*4882a593Smuzhiyun } AVS_FUSE_WIDTH_E;
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun typedef enum rkAVS_PROJECTION_MODE_E {
45*4882a593Smuzhiyun     AVS_PROJECTION_EQUIRECTANGULAR       = 0,  /* Equirectangular mode. */
46*4882a593Smuzhiyun     AVS_PROJECTION_RECTILINEAR           = 1,  /* Rectilinear mode. */
47*4882a593Smuzhiyun     AVS_PROJECTION_CYLINDRICAL           = 2,  /* Cylindrical mode. */
48*4882a593Smuzhiyun     AVS_PROJECTION_CUBE_MAP              = 3,  /* Cube map mode. */
49*4882a593Smuzhiyun     AVS_PROJECTION_EQUIRECTANGULAR_TRANS = 4,  /* Transvers Equirectangular  mode. */
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun     AVS_PROJECTION_BUTT
52*4882a593Smuzhiyun } AVS_PROJECTION_MODE_E;
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun typedef enum rkAVS_GAIN_MODE_E {
55*4882a593Smuzhiyun     AVS_GAIN_MODE_MANUAL = 0,
56*4882a593Smuzhiyun     AVS_GAIN_MODE_AUTO   = 1,
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun     AVS_GAIN_MODE_BUTT
59*4882a593Smuzhiyun } AVS_GAIN_MODE_E;
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun typedef enum rkAVS_MODE_E {
62*4882a593Smuzhiyun     AVS_MODE_BLEND        = 0, /* according to LUT stitching, blend at the splicing point */
63*4882a593Smuzhiyun     AVS_MODE_NOBLEND_VER  = 1, /* place input images vertically together, no blend at the stitching point. */
64*4882a593Smuzhiyun     AVS_MODE_NOBLEND_HOR  = 2, /* place input images horizontally together, no blend at the stitching point */
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun     /* Only 4 image stitching is supported,
67*4882a593Smuzhiyun     *   two rows are placed, two rows are placed together,
68*4882a593Smuzhiyun     *   no blend at the stitching point.
69*4882a593Smuzhiyun     *  The input image arrangement position of each pipe
70*4882a593Smuzhiyun     *   is as follows.
71*4882a593Smuzhiyun     * +-----------+-----------+
72*4882a593Smuzhiyun     * |   pipe0   |   pipe1   |
73*4882a593Smuzhiyun     * +-----------+-----------+
74*4882a593Smuzhiyun     * |   pipe2   |   pipe3   |
75*4882a593Smuzhiyun     * +-----------+-----------+
76*4882a593Smuzhiyun     * */
77*4882a593Smuzhiyun     AVS_MODE_NOBLEND_QR   = 3,
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun     AVS_MODE_BUTT
80*4882a593Smuzhiyun } AVS_MODE_E;
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun typedef enum rkAVS_PARAM_SOURCE_E {
83*4882a593Smuzhiyun     AVS_PARAM_SOURCE_LUT   = 0,     /* Look up table*/
84*4882a593Smuzhiyun     AVS_PARAM_SOURCE_CALIB = 1,     /* Calibration file */
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun     AVS_PARAM_SOURCE_MODE_BUT
87*4882a593Smuzhiyun } AVS_PARAM_SOURCE_E;
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun typedef struct rkAVS_GAIN_ATTR_S {
90*4882a593Smuzhiyun     AVS_GAIN_MODE_E enMode;
91*4882a593Smuzhiyun     RK_S32          s32Coef[AVS_PIPE_NUM];
92*4882a593Smuzhiyun } AVS_GAIN_ATTR_S;
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun typedef struct rkAVS_ROTATION_S {
95*4882a593Smuzhiyun     RK_S32 s32Yaw;
96*4882a593Smuzhiyun     RK_S32 s32Pitch;
97*4882a593Smuzhiyun     RK_S32 s32Roll;
98*4882a593Smuzhiyun } AVS_ROTATION_S;
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun typedef struct rkAVS_FOV_S {
101*4882a593Smuzhiyun     RK_U32 u32FOVX;
102*4882a593Smuzhiyun     RK_U32 u32FOVY;
103*4882a593Smuzhiyun } AVS_FOV_S;
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun typedef struct rkAVS_LUT_STEP_S {
106*4882a593Smuzhiyun     AVS_LUT_STEP_E    enStepX;
107*4882a593Smuzhiyun     AVS_LUT_STEP_E    enStepY;
108*4882a593Smuzhiyun } AVS_STEP_ATTR_S;
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun typedef struct rkAVS_SPLIT_ATTR_S {
111*4882a593Smuzhiyun     RK_U32   u32PipeNum;
112*4882a593Smuzhiyun     AVS_PIPE AVSPipe[AVS_SPLIT_PIPE_NUM];
113*4882a593Smuzhiyun } AVS_SPLIT_ATTR_S;
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun typedef struct rkAVS_CUBE_MAP_ATTR_S {
116*4882a593Smuzhiyun     RK_BOOL   bBgColor;
117*4882a593Smuzhiyun     RK_U32    u32BgColor;
118*4882a593Smuzhiyun     RK_U32    u32SurfaceLength;
119*4882a593Smuzhiyun     POINT_S   stStartPoint[AVS_CUBE_MAP_SURFACE_NUM];  /* RW; Start point of each surface. */
120*4882a593Smuzhiyun } AVS_CUBE_MAP_ATTR_S;
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun typedef struct rkAVS_LUT_S {
123*4882a593Smuzhiyun     AVS_LUT_ACCURACY_E enAccuracy;
124*4882a593Smuzhiyun     AVS_FUSE_WIDTH_E   enFuseWidth;
125*4882a593Smuzhiyun     AVS_STEP_ATTR_S    stLutStep;
126*4882a593Smuzhiyun     RK_VOID           *pVirAddr[AVS_PIPE_NUM];
127*4882a593Smuzhiyun } AVS_LUT_S;
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun typedef struct rkAVS_CALIB_S {
130*4882a593Smuzhiyun     const RK_CHAR *pCalibFilePath;
131*4882a593Smuzhiyun     const RK_CHAR *pMeshAlphaPath;
132*4882a593Smuzhiyun } AVS_CALIB_S;
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun typedef struct rkAVS_FINAL_LUT_S {
135*4882a593Smuzhiyun     MB_BLK pMeshBlk[AVS_PIPE_NUM];
136*4882a593Smuzhiyun     MB_BLK pAlphaBlk[AVS_PIPE_NUM];
137*4882a593Smuzhiyun     MB_BLK pLdchBlk[AVS_PIPE_NUM];
138*4882a593Smuzhiyun     MB_BLK pParamBlk[AVS_PIPE_NUM];
139*4882a593Smuzhiyun } AVS_FINAL_LUT_S;
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun typedef struct rkAVS_INPUT_ATTR_S {
142*4882a593Smuzhiyun     AVS_PARAM_SOURCE_E  enParamSource;         /* RW; Input param source. */
143*4882a593Smuzhiyun     union {
144*4882a593Smuzhiyun         AVS_LUT_S       stLUT;                 /* Look up table. */
145*4882a593Smuzhiyun         AVS_CALIB_S     stCalib;               /* Calibration file. */
146*4882a593Smuzhiyun     };
147*4882a593Smuzhiyun     SIZE_S              stSize;                /* Source resolution */
148*4882a593Smuzhiyun } AVS_INPUT_ATTR_S;
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun typedef struct rkAVS_OUTPUT_ATTR_S {
151*4882a593Smuzhiyun     AVS_PROJECTION_MODE_E    enPrjMode;                  /* RW; Projection mode. */
152*4882a593Smuzhiyun     POINT_S                  stCenter;                   /* Center point. */
153*4882a593Smuzhiyun     AVS_FOV_S                stFOV;                      /* Output FOV. */
154*4882a593Smuzhiyun     AVS_ROTATION_S           stORIRotation;              /* Output original rotation. */
155*4882a593Smuzhiyun     AVS_ROTATION_S           stRotation;                 /* Output rotation. */
156*4882a593Smuzhiyun     AVS_SPLIT_ATTR_S         stSplitAttr[AVS_SPLIT_NUM]; /* Split attribute for 7 or 8 inputs stitching. */
157*4882a593Smuzhiyun     AVS_CUBE_MAP_ATTR_S      stCubeMapAttr;              /* Cube map attribute. */
158*4882a593Smuzhiyun     SIZE_S                   stSize;                     /* Mesh resolution */
159*4882a593Smuzhiyun     RK_FLOAT                 fDistance;                  /* Optimum stitch distance. */
160*4882a593Smuzhiyun } AVS_OUTPUT_ATTR_S;
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun typedef struct rkAVS_GRP_ATTR_S {
163*4882a593Smuzhiyun     AVS_MODE_E           enMode;                        /* Group work mode */
164*4882a593Smuzhiyun     RK_U32               u32PipeNum;                    /* RW; Pipe number. */
165*4882a593Smuzhiyun     RK_BOOL              bSyncPipe;                     /* RW; Whether sync pipe image. */
166*4882a593Smuzhiyun     AVS_INPUT_ATTR_S     stInAttr;                      /* Input attribute */
167*4882a593Smuzhiyun     AVS_GAIN_ATTR_S      stGainAttr;                    /* Gain attribute. */
168*4882a593Smuzhiyun     RK_U64               u64BBoxPhyAddr[AVS_PIPE_NUM];  /* Physical address of bounding box data. */
169*4882a593Smuzhiyun     AVS_OUTPUT_ATTR_S    stOutAttr;                     /* Output attribute. */
170*4882a593Smuzhiyun     FRAME_RATE_CTRL_S    stFrameRate;                   /* Frame rate control info. */
171*4882a593Smuzhiyun } AVS_GRP_ATTR_S;
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun typedef struct rkAVS_CHN_ATTR_S {
174*4882a593Smuzhiyun     RK_U32              u32Width;           /* RW; Width of target image. */
175*4882a593Smuzhiyun     RK_U32              u32Height;          /* RW; Height of target image. */
176*4882a593Smuzhiyun     COMPRESS_MODE_E     enCompressMode;     /* RW; Compression mode of the output. */
177*4882a593Smuzhiyun     DYNAMIC_RANGE_E     enDynamicRange;     /* RW; Dynamic range. */
178*4882a593Smuzhiyun     RK_U32              u32Depth;           /* RW; Chn user list depth. */
179*4882a593Smuzhiyun     FRAME_RATE_CTRL_S   stFrameRate;        /* Frame rate control info. */
180*4882a593Smuzhiyun     RK_U32              u32FrameBufCnt;     /* RW; frame buffer cnt only used by MB_SOURCE_PRIVATE */
181*4882a593Smuzhiyun } AVS_CHN_ATTR_S;
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun typedef struct rkAVS_MOD_PARAM_S {
184*4882a593Smuzhiyun     RK_U32 u32WorkingSetSize;               /* RW; AVS work */
185*4882a593Smuzhiyun     MB_SOURCE_E enMBSource;                 /* RW; AVS MB pool source type */
186*4882a593Smuzhiyun } AVS_MOD_PARAM_S;
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun #define RK_AVS_OK                   RK_SUCCESS
189*4882a593Smuzhiyun #define RK_ERR_AVS_NULL_PTR         RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR)
190*4882a593Smuzhiyun #define RK_ERR_AVS_NOTREADY         RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY)
191*4882a593Smuzhiyun #define RK_ERR_AVS_INVALID_DEVID    RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_DEVID)
192*4882a593Smuzhiyun #define RK_ERR_AVS_INVALID_CHNID    RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID)
193*4882a593Smuzhiyun #define RK_ERR_AVS_INVALID_PIPEID   RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_PIPEID)
194*4882a593Smuzhiyun #define RK_ERR_AVS_EXIST            RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_EXIST)
195*4882a593Smuzhiyun #define RK_ERR_AVS_UNEXIST          RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST)
196*4882a593Smuzhiyun #define RK_ERR_AVS_NOT_SUPPORT      RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT)
197*4882a593Smuzhiyun #define RK_ERR_AVS_NOT_PERM         RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM)
198*4882a593Smuzhiyun #define RK_ERR_AVS_NOMEM            RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM)
199*4882a593Smuzhiyun #define RK_ERR_AVS_NOBUF            RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF)
200*4882a593Smuzhiyun #define RK_ERR_AVS_ILLEGAL_PARAM    RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM)
201*4882a593Smuzhiyun #define RK_ERR_AVS_BUF_EMPTY        RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY)
202*4882a593Smuzhiyun #define RK_ERR_AVS_BUF_FULL         RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL)
203*4882a593Smuzhiyun #define RK_ERR_AVS_BUSY             RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY)
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun #ifdef __cplusplus
206*4882a593Smuzhiyun #if __cplusplus
207*4882a593Smuzhiyun }
208*4882a593Smuzhiyun #endif
209*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun #endif /* INCLUDE_RT_MPI_RK_COMMON_AVS_H_ */
212