xref: /OK3568_Linux_fs/external/rockit/mpi/sdk/include/rk_comm_rc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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_RC_H_
5*4882a593Smuzhiyun #define INCLUDE_RT_MPI_RK_COMM_RC_H_
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include "rk_type.h"
8*4882a593Smuzhiyun #include "rk_errno.h"
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifdef __cplusplus
11*4882a593Smuzhiyun #if __cplusplus
12*4882a593Smuzhiyun extern "C" {
13*4882a593Smuzhiyun #endif
14*4882a593Smuzhiyun #endif /* __cplusplus */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* rc quality */
17*4882a593Smuzhiyun typedef enum rkVENC_RC_QUALITY_E {
18*4882a593Smuzhiyun     VENC_RC_QUALITY_HIGHEST,
19*4882a593Smuzhiyun     VENC_RC_QUALITY_HIGHER,
20*4882a593Smuzhiyun     VENC_RC_QUALITY_HIGH,
21*4882a593Smuzhiyun     VENC_RC_QUALITY_MEDIUM,
22*4882a593Smuzhiyun     VENC_RC_QUALITY_LOW,
23*4882a593Smuzhiyun     VENC_RC_QUALITY_LOWER,
24*4882a593Smuzhiyun     VENC_RC_QUALITY_LOWEST,
25*4882a593Smuzhiyun     VENC_RC_QUALITY_BUTT,
26*4882a593Smuzhiyun } VENC_RC_QUALITY_E;
27*4882a593Smuzhiyun /* rc mode */
28*4882a593Smuzhiyun typedef enum rkVENC_RC_MODE_E {
29*4882a593Smuzhiyun     // H264
30*4882a593Smuzhiyun     VENC_RC_MODE_H264CBR = 1,
31*4882a593Smuzhiyun     VENC_RC_MODE_H264VBR,
32*4882a593Smuzhiyun     VENC_RC_MODE_H264AVBR,
33*4882a593Smuzhiyun     VENC_RC_MODE_H264FIXQP,
34*4882a593Smuzhiyun     // MJPEG
35*4882a593Smuzhiyun     VENC_RC_MODE_MJPEGCBR,
36*4882a593Smuzhiyun     VENC_RC_MODE_MJPEGVBR,
37*4882a593Smuzhiyun     VENC_RC_MODE_MJPEGFIXQP,
38*4882a593Smuzhiyun     // H265
39*4882a593Smuzhiyun     VENC_RC_MODE_H265CBR,
40*4882a593Smuzhiyun     VENC_RC_MODE_H265VBR,
41*4882a593Smuzhiyun     VENC_RC_MODE_H265AVBR,
42*4882a593Smuzhiyun     VENC_RC_MODE_H265FIXQP,
43*4882a593Smuzhiyun     VENC_RC_MODE_BUTT,
44*4882a593Smuzhiyun } VENC_RC_MODE_E;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun typedef enum rkVENC_NALU_TYPE_E {
47*4882a593Smuzhiyun     VENC_NALU_BSLICE = 1,
48*4882a593Smuzhiyun     VENC_NALU_PSLICE,
49*4882a593Smuzhiyun     VENC_NALU_ISLICE,
50*4882a593Smuzhiyun     VENC_NALU_IDRSLICE,
51*4882a593Smuzhiyun     VENC_NALU_SEI,
52*4882a593Smuzhiyun     VENC_NALU_VPS,
53*4882a593Smuzhiyun     VENC_NALU_SPS,
54*4882a593Smuzhiyun     VENC_NALU_PPS,
55*4882a593Smuzhiyun     VENC_NALU_BUTT
56*4882a593Smuzhiyun } VENC_NALU_TYPE_E;
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun /* the attribute of h264e cbr*/
59*4882a593Smuzhiyun typedef struct rkVENC_H264_CBR_S {
60*4882a593Smuzhiyun     RK_U32 u32Gop;  // RW; Range:[1, 65536]; the interval of I Frame.
61*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateNum;
62*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateDen;
63*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateNum;
64*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateDen;
65*4882a593Smuzhiyun     RK_U32 u32BitRate;     // RW; Range:[2, 200000]kbps; average bitrate; default : u32VirWidth*u32VirHeight/8*30;
66*4882a593Smuzhiyun     RK_U32 u32StatTime;    // RW; Range:[1,60]second;default : 3
67*4882a593Smuzhiyun } VENC_H264_CBR_S;
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun /* the attribute of h264e vbr*/
70*4882a593Smuzhiyun typedef struct rkVENC_H264_VBR_S {
71*4882a593Smuzhiyun     RK_U32 u32Gop;  // RW; Range:[1, 65536]; the interval of ISLICE.
72*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateNum;
73*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateDen;
74*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateNum;
75*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateDen;
76*4882a593Smuzhiyun     RK_U32 u32BitRate;     // RW; Range:[2, 200000]kbps; average bitrate; default : u32VirWidth*u32VirHeight/8*30;
77*4882a593Smuzhiyun     RK_U32 u32MaxBitRate;  // RW; Range:[u32BitRate, 200000]kbps; max bitrate; default : u32BitRate*3/2;
78*4882a593Smuzhiyun     RK_U32 u32MinBitRate;  // RW; Range:[2, u32BitRate]kbps; min bitrate;; default : u32BitRate/2;
79*4882a593Smuzhiyun     RK_U32 u32StatTime;    // RW; Range:[1,60]second;default : 3
80*4882a593Smuzhiyun } VENC_H264_VBR_S;
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun /* the attribute of h264e vbr*/
83*4882a593Smuzhiyun typedef struct rkVENC_H264_AVBR_S {
84*4882a593Smuzhiyun     RK_U32 u32Gop;  // RW; Range:[1, 65536]; the interval of ISLICE.
85*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateNum;
86*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateDen;
87*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateNum;
88*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateDen;
89*4882a593Smuzhiyun     RK_U32 u32BitRate;     // RW; Range:[2, 200000]kbps; average bitrate; default : u32VirWidth*u32VirHeight/8*30;
90*4882a593Smuzhiyun     RK_U32 u32MaxBitRate;  // RW; Range:[u32BitRate, 200000]kbps; max bitrate; default : u32BitRate*3/2;
91*4882a593Smuzhiyun     RK_U32 u32MinBitRate;  // RW; Range:[2, u32BitRate]kbps; min bitrate;; default : u32BitRate/2;
92*4882a593Smuzhiyun     RK_U32 u32StatTime;    // RW; Range:[1,60]second;default : 3
93*4882a593Smuzhiyun } VENC_H264_AVBR_S;
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun /* the attribute of h264e fixqp*/
96*4882a593Smuzhiyun typedef struct rkVENC_H264_FIXQP_S {
97*4882a593Smuzhiyun     RK_U32 u32Gop;  // RW; Range:[1, 65536]; the interval of ISLICE.
98*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateNum;
99*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateDen;
100*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateNum;
101*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateDen;
102*4882a593Smuzhiyun     RK_U32 u32IQp;  // RW; Range:[1, 51];
103*4882a593Smuzhiyun     RK_U32 u32PQp;  // RW; Range:[1, 51];
104*4882a593Smuzhiyun     RK_U32 u32BQp;  // reserved.
105*4882a593Smuzhiyun } VENC_H264_FIXQP_S;
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun /* the attribute of mjpege cbr*/
108*4882a593Smuzhiyun typedef struct rkVENC_MJPEG_CBR_S {
109*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateNum;
110*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateDen;
111*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateNum;
112*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateDen;
113*4882a593Smuzhiyun     RK_U32 u32BitRate;     // RW; Range:[5, 800000]kbps; average bitrate; default : u32VirWidth*u32VirHeight/8*30;
114*4882a593Smuzhiyun     RK_U32 u32StatTime;    // RW; Range:[1,60]second;default : 3
115*4882a593Smuzhiyun } VENC_MJPEG_CBR_S;
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun /* the attribute of mjpege vbr*/
118*4882a593Smuzhiyun typedef struct rkVENC_MJPEG_VBR_S {
119*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateNum;
120*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateDen;
121*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateNum;
122*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateDen;
123*4882a593Smuzhiyun     RK_U32 u32BitRate;      // RW; Range:[5, 800000]kbps; average bitrate; default : u32VirWidth*u32VirHeight/8*30;
124*4882a593Smuzhiyun     RK_U32 u32MaxBitRate;   // RW; Range:[u32BitRate, 800000]kbps; max bitrate; default : u32BitRate*3/2;
125*4882a593Smuzhiyun     RK_U32 u32MinBitRate;   // RW; Range:[5, u32BitRate]kbps; min bitrate;; default : u32BitRate/2;
126*4882a593Smuzhiyun     RK_U32 u32StatTime;     // RW; Range:[1,60]second;default : 3
127*4882a593Smuzhiyun } VENC_MJPEG_VBR_S;
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun /* the attribute of mjpege fixqp*/
130*4882a593Smuzhiyun typedef struct rkVENC_MJPEG_FIXQP_S {
131*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateNum;
132*4882a593Smuzhiyun     RK_U32 u32SrcFrameRateDen;
133*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateNum;
134*4882a593Smuzhiyun     RK_U32 fr32DstFrameRateDen;
135*4882a593Smuzhiyun     RK_U32 u32Qfactor;  // RW; Range:[1, 99];
136*4882a593Smuzhiyun } VENC_MJPEG_FIXQP_S;
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun typedef struct rkVENC_H264_CBR_S VENC_H265_CBR_S;
139*4882a593Smuzhiyun typedef struct rkVENC_H264_VBR_S VENC_H265_VBR_S;
140*4882a593Smuzhiyun typedef struct rkVENC_H264_AVBR_S VENC_H265_AVBR_S;
141*4882a593Smuzhiyun typedef struct rkVENC_H264_FIXQP_S VENC_H265_FIXQP_S;
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun /* the attribute of rc*/
144*4882a593Smuzhiyun typedef struct rkVENC_RC_ATTR_S {
145*4882a593Smuzhiyun     /* RW; the type of rc*/
146*4882a593Smuzhiyun     VENC_RC_MODE_E enRcMode;
147*4882a593Smuzhiyun     union {
148*4882a593Smuzhiyun         VENC_H264_CBR_S stH264Cbr;
149*4882a593Smuzhiyun         VENC_H264_VBR_S stH264Vbr;
150*4882a593Smuzhiyun         VENC_H264_AVBR_S stH264Avbr;
151*4882a593Smuzhiyun         VENC_H264_FIXQP_S stH264FixQp;
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun         VENC_MJPEG_CBR_S stMjpegCbr;
154*4882a593Smuzhiyun         VENC_MJPEG_VBR_S stMjpegVbr;
155*4882a593Smuzhiyun         VENC_MJPEG_FIXQP_S stMjpegFixQp;
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun         VENC_H265_CBR_S stH265Cbr;
158*4882a593Smuzhiyun         VENC_H265_VBR_S stH265Vbr;
159*4882a593Smuzhiyun         VENC_H265_AVBR_S stH265Avbr;
160*4882a593Smuzhiyun         VENC_H265_FIXQP_S stH265FixQp;
161*4882a593Smuzhiyun     };
162*4882a593Smuzhiyun } VENC_RC_ATTR_S;
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun /* The param of H264e */
165*4882a593Smuzhiyun typedef struct rkVENC_PARAM_H264_S {
166*4882a593Smuzhiyun     RK_U32 u32StepQp;
167*4882a593Smuzhiyun     RK_U32 u32MaxQp;   // RW; Range:[8, 51];the max QP value
168*4882a593Smuzhiyun     RK_U32 u32MinQp;   // RW; Range:[0, 48]; the min QP value,can not be larger than
169*4882a593Smuzhiyun                        // u32MaxQp
170*4882a593Smuzhiyun     RK_U32 u32MaxIQp;  // RW; max qp for i frame
171*4882a593Smuzhiyun     RK_U32 u32MinIQp;  // RW; min qp for i frame,can not be larger than u32MaxIQp
172*4882a593Smuzhiyun     RK_S32 s32DeltIpQp;  // RW; Range:[-7, 7]; pppp..i delta qp between the mean of p and I
173*4882a593Smuzhiyun     RK_S32 s32MaxReEncodeTimes;  // RW; Range:[0, 3]; Range:max number of re-encode times.
174*4882a593Smuzhiyun     RK_U32 u32FrmMaxQp; // RW; Range:[0, 51];the frame max QP value
175*4882a593Smuzhiyun     RK_U32 u32FrmMinQp; // RW; Range:[0, 51];the frame min QP value, recommended larger than u32MinQp
176*4882a593Smuzhiyun     RK_U32 u32FrmMaxIQp; // RW; Range:[0, 51];the I frame max QP value
177*4882a593Smuzhiyun     RK_U32 u32FrmMinIQp; // RW; Range:[0, 51];the I frame min QP value, recommended larger than u32MinIQp
178*4882a593Smuzhiyun } VENC_PARAM_H264_S;
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /* The param of h265e */
181*4882a593Smuzhiyun typedef struct rkVENC_PARAM_H265_S {
182*4882a593Smuzhiyun     RK_U32 u32StepQp;
183*4882a593Smuzhiyun     RK_U32 u32MaxQp;   // RW; Range:[8, 51];the max QP value
184*4882a593Smuzhiyun     RK_U32 u32MinQp;   // RW; Range:[0, 48];the min QP value ,can not be larger than
185*4882a593Smuzhiyun                        // u32MaxQp
186*4882a593Smuzhiyun     RK_U32 u32MaxIQp;  // RW; max qp for i frame
187*4882a593Smuzhiyun     RK_U32 u32MinIQp;  // RW; min qp for i frame,can not be larger than u32MaxIQp
188*4882a593Smuzhiyun     RK_S32 s32DeltIpQp;  // RW; Range:[-7, 7]; pppp..i delta qp between the mean of p and I
189*4882a593Smuzhiyun     RK_S32 s32MaxReEncodeTimes;  // RW; Range:[0, 3]; Range:max number of re-encode times.
190*4882a593Smuzhiyun     RK_U32 u32FrmMaxQp; // RW; Range:[0, 51];the frame max QP value
191*4882a593Smuzhiyun     RK_U32 u32FrmMinQp; // RW; Range:[0, 51];the frame min QP value, recommended larger than u32MinQp
192*4882a593Smuzhiyun     RK_U32 u32FrmMaxIQp; // RW; Range:[0, 51];the I frame max QP value
193*4882a593Smuzhiyun     RK_U32 u32FrmMinIQp; // RW; Range:[0, 51];the I frame min QP value, recommended larger than u32MinIQp
194*4882a593Smuzhiyun } VENC_PARAM_H265_S;
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun /* The param of mjpege */
197*4882a593Smuzhiyun typedef struct rkVENC_PARAM_MJPEG_S {
198*4882a593Smuzhiyun     RK_U32 u32Qfactor;     // RW; Range:[1, 99]; default : 70
199*4882a593Smuzhiyun     RK_U32 u32MaxQfactor;  // RW; Range:[u32Qfactor, 99]; default : 99
200*4882a593Smuzhiyun     RK_U32 u32MinQfactor;  // RW; Range:[1, u32Qfactor]; default : 30
201*4882a593Smuzhiyun } VENC_PARAM_MJPEG_S;
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun /* The param of rc */
204*4882a593Smuzhiyun typedef struct rkVENC_RC_PARAM_S {
205*4882a593Smuzhiyun     RK_U32 s32FirstFrameStartQp;  // RW; Start QP value of the first frame
206*4882a593Smuzhiyun     union {
207*4882a593Smuzhiyun         VENC_PARAM_H264_S stParamH264;
208*4882a593Smuzhiyun         VENC_PARAM_H265_S stParamH265;
209*4882a593Smuzhiyun         VENC_PARAM_MJPEG_S stParamMjpeg;
210*4882a593Smuzhiyun     };
211*4882a593Smuzhiyun } VENC_RC_PARAM_S;
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun #ifdef __cplusplus
214*4882a593Smuzhiyun #if __cplusplus
215*4882a593Smuzhiyun }
216*4882a593Smuzhiyun #endif
217*4882a593Smuzhiyun #endif /* __cplusplus */
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun #endif /* INCLUDE_RT_MPI_RK_COMM_RC_H_ */
220