123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- /**********************************************************************************
- *
- * Copyright (c) 2019-2020 Beijing AXera Technology Co., Ltd. All Rights Reserved.
- *
- * This source file is the property of Beijing AXera Technology Co., Ltd. and
- * may not be copied or distributed in any isomorphic form without the prior
- * written consent of Beijing AXera Technology Co., Ltd.
- *
- **********************************************************************************/
- #ifndef __AX_COMM_VENC_RC_H__
- #define __AX_COMM_VENC_RC_H__
- #include "ax_base_type.h"
- #ifdef __cplusplus
- #if __cplusplus
- extern "C"{
- #endif
- #endif /* __cplusplus */
- /* For RC, in kbps */
- #define VENC_MIN_BITRATE (3)
- #define VENC_MAX_BITRATE (60*1000)
- #define VENC_BITRATE_RATIO (1000)
- /* IDR interval */
- #define VENC_MIN_IDR_INTERVAL (0)
- #define VENC_MAX_IDR_INTERVAL (65536)
- /* qp range */
- #define VENC_MIN_QP (0)
- #define VENC_MAX_QP (51)
- /* frame rate range */
- #define VENC_MIN_FRAME_RATE (1)
- #define VENC_MAX_FRAME_RATE (240)
- /* qpmap block unit */
- #define VENC_MIN_QPMAP_BLOCK_UNIT (0)
- #define VENC_MAX_H264_QPMAP_BLOCK_UNIT (2)
- #define VENC_MAX_H265_QPMAP_BLOCK_UNIT (3)
- /* qpmap qp type */
- #define VENC_MIN_QPMAP_QPTYPE (0)
- #define VENC_MAX_QPMAP_QPTYPE (3)
- /* ctbrc type */
- #define VENC_MIN_CTBRC_TYPE (0)
- #define VENC_MAX_CTBRC_TYPE (3)
- #define MAX_EXTRA_BITRATE 1000*1024
- /* rc mode */
- typedef enum
- {
- VENC_RC_MODE_H264CBR = 1,
- VENC_RC_MODE_H264VBR,
- VENC_RC_MODE_H264AVBR,
- VENC_RC_MODE_H264QVBR,
- VENC_RC_MODE_H264CVBR,
- VENC_RC_MODE_H264FIXQP,
- VENC_RC_MODE_H264QPMAP,
- VENC_RC_MODE_MJPEGCBR,
- VENC_RC_MODE_MJPEGVBR,
- VENC_RC_MODE_MJPEGFIXQP,
- VENC_RC_MODE_H265CBR,
- VENC_RC_MODE_H265VBR,
- VENC_RC_MODE_H265AVBR,
- VENC_RC_MODE_H265QVBR,
- VENC_RC_MODE_H265CVBR,
- VENC_RC_MODE_H265FIXQP,
- VENC_RC_MODE_H265QPMAP,
- VENC_RC_MODE_BUTT,
- } AX_VENC_RC_MODE_E;
- /* qpmap mode*/
- typedef enum
- {
- VENC_RC_QPMAP_MODE_MEANQP= 0,
- VENC_RC_QPMAP_MODE_MINQP ,
- VENC_RC_QPMAP_MODE_MAXQP,
- VENC_RC_QPMAP_MODE_BUTT,
- } AX_VENC_RC_QPMAP_MODE_E;
- /* the attribute of h264e fixqp*/
- typedef struct axVENC_H264_FIXQP_S
- {
- AX_U32 u32Gop; /* RW; Range:[1, 65536]; the interval of ISLICE. */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_U32 u32IQp; /* RW; Range:[0, 51]; qp of the i frame */
- AX_U32 u32PQp; /* RW; Range:[0, 51]; qp of the p frame */
- AX_U32 u32BQp; /* RW; Range:[0, 51]; qp of the b frame */
- } AX_VENC_H264_FIXQP_S;
- typedef enum
- {
- VENC_RC_CTBRC_DISABLE = 0,
- VENC_RC_CTBRC_QUALITY,
- VENC_RC_CTBRC_RATE,
- VENC_RC_CTBRC_QUALITY_RATE,
- } AX_VENC_RC_CTBRC_MODE_E;
- typedef enum
- {
- VENC_QPMAP_DISABLE = 0,
- VENC_QPMAP_ENABLE_DELTAQP = 1, /* qp rang in [-31, 32] */
- VENC_QPMAP_ENABLE_ABSQP = 2, /* qp range in [0, 51] */
- VENC_QPMAP_ENABLE_IPCM = 3,
- } AX_VENC_QPMAP_QP_TYPE_E;
- typedef struct axVENC_QPMAP_META_S
- {
- AX_VENC_RC_CTBRC_MODE_E enCtbRcMode; /* RW: Ctb rc mode */
- AX_VENC_QPMAP_QP_TYPE_E enQpmapQpType; /* RW: The qp type of qpmap */
- AX_U32 u32QpmapBlockUnit; /* RW: Range:[0,3]; 0: 64x64, 1: 32x32, 2: 16x16, 3: 8x8.(h264 not support 8x8)*/
- } AX_VENC_QPMAP_META_S;
- /* the attribute of h264e cbr*/
- typedef struct axVENC_H264_CBR_S
- {
- AX_U32 u32Gop; /* RW; Range:[1, 65536]; the interval of I Frame. */
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate ; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_U32 u32BitRate; /* RW; average bitrate(kbps) */
- AX_U32 u32MaxQp; /* RW; Range:[0, 51]; the max QP value */
- AX_U32 u32MinQp; /* RW: Range:[0, 51]; the min QP value */
- AX_U32 u32MaxIQp; /* RW: Range:[0, 51]; the max I qp */
- AX_U32 u32MinIQp; /* RW: Range:[0, 51]; the min I qp */
- AX_U32 u32MaxIprop; /* RW: Range:[1, 100]; the max I P size ratio */
- AX_U32 u32MinIprop; /* RW: Range:[1, u32MaxIprop]; the min I P size ratio */
- AX_S32 s32IntraQpDelta; /* RW: Range:[-51, 51]; QP difference between target QP and intra frame QP */
- AX_VENC_QPMAP_META_S stQpmapInfo; /* RW: Qpmap related info */
- } AX_VENC_H264_CBR_S;
- /* the attribute of h264e vbr*/
- typedef struct axVENC_H264_VBR_S
- {
- AX_U32 u32Gop; /* RW; Range:[1, 65536]; the interval of ISLICE. */
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate ; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_U32 u32MaxBitRate; /* RW; the max bitrate(kbps) */
- AX_U32 u32MaxQp; /* RW; Range:[0, 51]; the max QP value */
- AX_U32 u32MinQp; /* RW: Range:[0, 51]; the min QP value */
- AX_U32 u32MaxIQp; /* RW: Range:[0, 51]; the max I qp */
- AX_U32 u32MinIQp; /* RW: Range:[0, 51]; the min I qp */
- AX_S32 s32IntraQpDelta; /* RW: Range:[-51, 51]; QP difference between target QP and intra frame QP */
- AX_VENC_QPMAP_META_S stQpmapInfo; /* RW: Qpmap related info */
- } AX_VENC_H264_VBR_S;
- /* the attribute of h264e cvbr*/
- typedef struct axVENC_H264_CVBR_S
- {
- AX_U32 u32Gop; /* RW; Range:[1, 65536]; the interval of ISLICE. */
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate ; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_U32 u32MaxBitRate; /* RW; the max bitrate, the unit is kbps */
- AX_U32 u32ShortTermStatTime; /* RW; Range:[1, 120]; the long-term rate statistic time, the unit is second (s)*/
- AX_U32 u32LongTermStatTime; /* RW; Range:[1, 1440]; the long-term rate statistic time, the unit is u32LongTermStatTimeUnit*/
- AX_U32 u32LongTermMaxBitrate; /* RW; Range:[2, 614400];the long-term target max bitrate, can not be larger than u32MaxBitRate,the unit is kbps */
- AX_U32 u32LongTermMinBitrate; /* RW; Range:[0, 614400];the long-term target min bitrate, can not be larger than u32LongTermMaxBitrate,the unit is kbps */
- } AX_VENC_H264_CVBR_S;
- /* the attribute of h264e avbr*/
- typedef struct axVENC_H264_AVBR_S
- {
- AX_U32 u32Gop; /* RW; Range:[1, 65536]; the interval of ISLICE. */
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate ; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_U32 u32MaxBitRate; /* RW; the max bitrate, the unit is kbps */
-
- AX_U32 u32MaxQp; /* RW; Range:[0, 51]; the max QP value */
- AX_U32 u32MinQp; /* RW: Range:[0, 51]; the min QP value */
- AX_U32 u32MaxIQp; /* RW: Rangeb:[0, 51]; the max I qp */
- AX_U32 u32MinIQp; /* RW: Range:[0, 51]; the min I qp */
- AX_S32 s32IntraQpDelta; /* RW: Range:[-51, 51]; QP difference between target QP and intra frame QP */
- AX_VENC_QPMAP_META_S stQpmapInfo; /* RW: Qpmap related info */
- } AX_VENC_H264_AVBR_S;
- /* the attribute of h264e qpmap*/
- typedef struct axVENC_H264_QPMAP_S
- {
- AX_U32 u32Gop; /* RW; Range:[1, 65536]; the interval of ISLICE. */
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_VENC_RC_CTBRC_MODE_E enCtbRcMode; /* RW: CTB QP adjustment mode for Rate Control and Subjective Quality */
- AX_VENC_QPMAP_QP_TYPE_E enQpmapQpType; /* RW: The qp type of qpmap */
- AX_U32 u32QpmapBlockUnit; /* Range:[0,2]; 0: 64x64, 1: 32x32, 2: 16x16 */
- AX_U32 u32TargetBitRate; /* the target bitrate, the unit is kbps */
- } AX_VENC_H264_QPMAP_S;
- typedef struct axVENC_H264_QVBR_S
- {
- AX_U32 u32Gop; /* RW; Range:[1, 65536];the interval of ISLICE. */
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate ; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_U32 u32TargetBitRate; /* RW; the target bitrate, the unit is kbps */
- } AX_VENC_H264_QVBR_S;
- /* the attribute of h265e qpmap*/
- typedef struct axVENC_H265_QPMAP_S
- {
- AX_U32 u32Gop; /* RW; Range:[1, 65536]; the interval of ISLICE. */
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_VENC_RC_CTBRC_MODE_E enCtbRcMode; /* RW: CTB QP adjustment mode for Rate Control and Subjective Quality */
- AX_VENC_QPMAP_QP_TYPE_E enQpmapQpType; /* RW: The qp type of qpmap */
- AX_U32 u32QpmapBlockUnit; /* Range:[0,3]; 0: 64x64, 1: 32x32, 2: 16x16, 3: 8x8 */
- AX_U32 u32TargetBitRate; /* the target bitrate, the unit is kbps */
- } AX_VENC_H265_QPMAP_S;
- typedef struct axVENC_H264_CBR_S AX_VENC_H265_CBR_S;
- typedef struct axVENC_H264_VBR_S AX_VENC_H265_VBR_S;
- typedef struct axVENC_H264_AVBR_S AX_VENC_H265_AVBR_S;
- typedef struct axVENC_H264_FIXQP_S AX_VENC_H265_FIXQP_S;
- typedef struct axVENC_H264_QVBR_S AX_VENC_H265_QVBR_S;
- typedef struct axVENC_H264_CVBR_S AX_VENC_H265_CVBR_S;
- /* the attribute of mjpege fixqp*/
- typedef struct axVENC_MJPEG_FIXQP_S
- {
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_S32 s32FixedQp; /* Range:[-1, 51]; Fixed qp for every frame.
- -1 : disable fixed qp mode.
- 0~51 : value of fixed qp. */
- } AX_VENC_MJPEG_FIXQP_S;
- /* the attribute of mjpege cbr*/
- typedef struct axVENC_MJPEG_CBR_S
- {
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_U32 u32BitRate; /* RW; average bitrate ,the unit is kbps*/
- AX_U32 u32MaxQp; /* RW; Range:[0, 51]; the max Qfactor value*/
- AX_U32 u32MinQp; /* RW; Range:[0, 51]; the min Qfactor value ,can not be larger than u32MaxQfactor */
- } AX_VENC_MJPEG_CBR_S;
- /* the attribute of mjpege vbr*/
- typedef struct axVENC_MJPEG_VBR_S
- {
- AX_U32 u32StatTime; /* RW; Range:[1, 60]; the rate statistic time, the unit is senconds(s) */
- AX_U32 u32SrcFrameRate; /* RW; Range:[1, 240]; the input frame rate of the venc chnnel */
- AX_U32 fr32DstFrameRate; /* RW; Range:[0.015625, 240]; the target frame rate of the venc chnnel,can not be larger than u32SrcFrameRate */
- AX_U32 u32MaxBitRate; /* RW; the max bitrate ,the unit is kbps*/
- AX_U32 u32MaxQp; /* RW; Range:[0, 51]; max image quailty allowed */
- AX_U32 u32MinQp; /* RW; Range:[0, 51]; min image quality allowed ,can not be larger than u32MaxQfactor*/
- } AX_VENC_MJPEG_VBR_S;
- /* the attribute of rc*/
- typedef struct axVENC_RC_ATTR_S
- {
- AX_VENC_RC_MODE_E enRcMode; /* RW; the type of rc*/
- AX_S32 s32FirstFrameStartQp; /* RW; Range[-1, 51]; Start QP value of the first frame
- ** -1: Encoder calculates initial QP.
- */
- union
- {
- AX_VENC_H264_CBR_S stH264Cbr;
- AX_VENC_H264_VBR_S stH264Vbr;
- AX_VENC_H264_AVBR_S stH264AVbr;
- AX_VENC_H264_QVBR_S stH264QVbr;
- AX_VENC_H264_CVBR_S stH264CVbr;
- AX_VENC_H264_FIXQP_S stH264FixQp;
- AX_VENC_H264_QPMAP_S stH264QpMap;
- AX_VENC_H265_CBR_S stH265Cbr;
- AX_VENC_H265_VBR_S stH265Vbr;
- AX_VENC_H265_AVBR_S stH265AVbr;
- AX_VENC_H265_QVBR_S stH265QVbr;
- AX_VENC_H265_CVBR_S stH265CVbr;
- AX_VENC_H265_FIXQP_S stH265FixQp;
- AX_VENC_H265_QPMAP_S stH265QpMap;
- AX_VENC_MJPEG_CBR_S stMjpegCbr;
- AX_VENC_MJPEG_VBR_S stMjpegVbr;
- AX_VENC_MJPEG_FIXQP_S stMjpegFixQp;
- };
- } AX_VENC_RC_ATTR_S;
- typedef struct axVENC_SCENE_CHANGE_DETECT_S
- {
- AX_BOOL bDetectSceneChange; /* RW; Range:[0, 1]; enable detect scene change.*/
- AX_BOOL bAdaptiveInsertIDRFrame; /* RW; Range:[0, 1]; enable a daptive insertIDR frame.*/
- } AX_VENC_SCENE_CHANGE_DETECT_S;
- /* The param of rc*/
- typedef struct axVENC_RC_PARAM_S
- {
- AX_U32 u32RowQpDelta; /* RW; Range:[0, 10];the start QP value of each macroblock row relative to the start QP value */
- AX_S32 s32FirstFrameStartQp; /* RW; Range:[-1, 51];Start QP value of the first frame*/
- AX_VENC_SCENE_CHANGE_DETECT_S stSceneChangeDetect;/* RW;*/
- AX_VENC_RC_MODE_E enRcMode; /* RW; the type of rc*/
- union
- {
- AX_VENC_H264_CBR_S stH264Cbr;
- AX_VENC_H264_VBR_S stH264Vbr;
- AX_VENC_H264_AVBR_S stH264AVbr;
- AX_VENC_H264_QVBR_S stH264QVbr;
- AX_VENC_H264_CVBR_S stH264CVbr;
- AX_VENC_H264_FIXQP_S stH264FixQp;
- AX_VENC_H264_QPMAP_S stH264QpMap;
- AX_VENC_H265_CBR_S stH265Cbr;
- AX_VENC_H265_VBR_S stH265Vbr;
- AX_VENC_H265_AVBR_S stH265AVbr;
- AX_VENC_H265_QVBR_S stH265QVbr;
- AX_VENC_H265_CVBR_S stH265CVbr;
- AX_VENC_H265_FIXQP_S stH265FixQp;
- AX_VENC_H265_QPMAP_S stH265QpMap;
- AX_VENC_MJPEG_CBR_S stMjpegCbr;
- AX_VENC_MJPEG_VBR_S stMjpegVbr;
- AX_VENC_MJPEG_FIXQP_S stMjpegFixQp;
- };
- } AX_VENC_RC_PARAM_S;
- /* the frame lost mode*/
- typedef enum
- {
- DROPFRM_NORMAL=0, /*normal mode*/
- DROPFRM_PSKIP, /*pskip*/
- DROPFRM_BUTT,
- } AX_VENC_DROPFRAME_MODE_E;
- /* The param of the rate jam mode*/
- typedef struct axVENC_RATE_JAM_S
- {
- AX_BOOL bDropFrmEn; /* RW; Range:[0,1];Indicates whether to enable rate jam stragety */
- AX_U32 u32DropFrmThrBps; /* RW; Range:[64k, 163840k];the instant bit rate threshold */
- AX_VENC_DROPFRAME_MODE_E enDropFrmMode; /* RW; drop frame mode */
- AX_U32 u32MaxApplyCount; /* RW; Range:[0,65535]; the max frame number of apply this startegy */
- } AX_VENC_RATE_JAM_CFG_S;
- /* the rc priority*/
- typedef enum
- {
- VENC_RC_PRIORITY_BITRATE_FIRST = 1, /* bitrate first */
- VENC_RC_PRIORITY_FRAMEBITS_FIRST, /* framebits first*/
- VENC_RC_PRIORITY_BUTT,
- } AX_VENC_RC_PRIORITY_E;
- /* the config of the superframe */
- typedef struct axVENC_SUPERFRAME_CFG_S
- {
- AX_BOOL bStrategyEn; /* RW: super frame strategy enable */
- AX_U32 u32MaxReEncodeTimes; /* RW; Range:[0, 65535]; Indicate the max re-encode times */
- AX_U32 u32SuperIFrmBitsThr; /* RW; Range:[0, 4294967295];Indicate the threshold of the super I frame for enabling the super frame processing mode */
- AX_U32 u32SuperPFrmBitsThr; /* RW; Range:[0, 4294967295];Indicate the threshold of the super P frame for enabling the super frame processing mode */
- AX_U32 u32SuperBFrmBitsThr; /* RW; Range:[0, 4294967295];Indicate the threshold of the super B frame for enabling the super frame processing mode */
- } AX_VENC_SUPERFRAME_CFG_S;
- #ifdef __cplusplus
- #if __cplusplus
- }
- #endif
- #endif /* __cplusplus */
- #endif /* __AX_COMM_RC_H__ */
|