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