From 7ae2f73bcac0675c4d0b5ed5b21c30beaae78f39 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Mon, 23 Nov 2020 19:43:06 +0800 Subject: [PATCH] [mpp_enc_cfg]: Add super frame config Change-Id: I0df2db8fd7c5e10412584ded557da3962b77f882 Signed-off-by: Herman Chen --- inc/rk_venc_cmd.h | 14 +++++++++++--- inc/rk_venc_rc.h | 13 +++++++++++++ mpp/base/mpp_enc_cfg.cpp | 6 +++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/inc/rk_venc_cmd.h b/inc/rk_venc_cmd.h index f7458add..251c055a 100644 --- a/inc/rk_venc_cmd.h +++ b/inc/rk_venc_cmd.h @@ -165,6 +165,8 @@ typedef enum MppEncRcCfgChange_e { MPP_ENC_RC_CFG_CHANGE_MAX_I_PROP = (1 << 11), MPP_ENC_RC_CFG_CHANGE_MIN_I_PROP = (1 << 12), MPP_ENC_RC_CFG_CHANGE_INIT_IP_RATIO = (1 << 13), + MPP_ENC_RC_CFG_CHANGE_PRIORITY = (1 << 14), + MPP_ENC_RC_CFG_CHANGE_SUPER_FRM = (1 << 15), MPP_ENC_RC_CFG_CHANGE_ALL = (0xFFFFFFFF), } MppEncRcCfgChange; @@ -306,9 +308,15 @@ typedef struct MppEncRcCfg_t { * drop_gap * The max continuous frame drop number */ - MppEncRcDropFrmMode drop_mode; - RK_U32 drop_threshold; - RK_U32 drop_gap; + MppEncRcDropFrmMode drop_mode; + RK_U32 drop_threshold; + RK_U32 drop_gap; + + MppEncRcSuperFrameMode super_mode; + RK_U32 super_i_thd; + RK_U32 super_p_thd; + + MppEncRcPriority rc_priority; RK_S32 max_i_prop; RK_S32 min_i_prop; diff --git a/inc/rk_venc_rc.h b/inc/rk_venc_rc.h index 2017d66f..9655d661 100644 --- a/inc/rk_venc_rc.h +++ b/inc/rk_venc_rc.h @@ -28,6 +28,12 @@ typedef enum MppEncRcMode_e { MPP_ENC_RC_MODE_BUTT } MppEncRcMode; +typedef enum MppEncRcPriority_e { + MPP_ENC_RC_BY_BITRATE_FIRST, + MPP_ENC_RC_BY_FRM_SIZE_FIRST, + MPP_ENC_RC_PRIORITY_BUTT +} MppEncRcPriority; + typedef enum MppEncRcDropFrmMode_e { MPP_ENC_RC_DROP_FRM_DISABLED, MPP_ENC_RC_DROP_FRM_NORMAL, @@ -35,4 +41,11 @@ typedef enum MppEncRcDropFrmMode_e { MPP_ENC_RC_DROP_FRM_BUTT } MppEncRcDropFrmMode; +typedef enum MppEncRcSuperFrameMode_t { + MPP_ENC_RC_SUPER_FRM_NONE, + MPP_ENC_RC_SUPER_FRM_DROP, + MPP_ENC_RC_SUPER_FRM_REENC, + MPP_ENC_RC_SUPER_FRM_BUTT +} MppEncRcSuperFrameMode; + #endif /*__RK_VENC_RC_H__*/ diff --git a/mpp/base/mpp_enc_cfg.cpp b/mpp/base/mpp_enc_cfg.cpp index 3e766bb9..015470ee 100644 --- a/mpp/base/mpp_enc_cfg.cpp +++ b/mpp/base/mpp_enc_cfg.cpp @@ -162,12 +162,16 @@ static const char *cfg_func_names[] = { ENTRY(rc, fps_out_denorm, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_FPS_OUT, rc, fps_out_denorm) \ ENTRY(rc, gop, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_GOP, rc, gop) \ ENTRY(rc, max_reenc_times,U32, RK_U32, MPP_ENC_RC_CFG_CHANGE_MAX_REENC, rc, max_reenc_times) \ + ENTRY(rc, priority, U32, MppEncRcPriority, MPP_ENC_RC_CFG_CHANGE_PRIORITY, rc, rc_priority) \ ENTRY(rc, drop_mode, U32, MppEncRcDropFrmMode, MPP_ENC_RC_CFG_CHANGE_DROP_FRM, rc, drop_mode) \ ENTRY(rc, drop_thd, U32, RK_U32, MPP_ENC_RC_CFG_CHANGE_DROP_FRM, rc, drop_threshold) \ ENTRY(rc, drop_gap, U32, RK_U32, MPP_ENC_RC_CFG_CHANGE_DROP_FRM, rc, drop_gap) \ ENTRY(rc, max_i_prop, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_MAX_I_PROP, rc, max_i_prop) \ ENTRY(rc, min_i_prop, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_MIN_I_PROP, rc, min_i_prop) \ ENTRY(rc, init_ip_ratio, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_INIT_IP_RATIO, rc, init_ip_ratio) \ + ENTRY(rc, super_mode, U32, MppEncRcSuperFrameMode, MPP_ENC_RC_CFG_CHANGE_SUPER_FRM, rc, super_mode) \ + ENTRY(rc, super_i_thd, U32, RK_U32, MPP_ENC_RC_CFG_CHANGE_SUPER_FRM, rc, super_i_thd) \ + ENTRY(rc, super_p_thd, U32, RK_U32, MPP_ENC_RC_CFG_CHANGE_SUPER_FRM, rc, super_p_thd) \ /* prep config */ \ ENTRY(prep, width, S32, RK_S32, MPP_ENC_PREP_CFG_CHANGE_INPUT, prep, width) \ ENTRY(prep, height, S32, RK_S32, MPP_ENC_PREP_CFG_CHANGE_INPUT, prep, height) \ @@ -259,7 +263,7 @@ RK_S32 const_strlen(const char* str) return *str ? 1 + const_strlen(str + 1) : 0; } -static RK_S32 node_len = ENTRY_TABLE(EXPAND_AS_STRLEN) - 55; +static RK_S32 node_len = ENTRY_TABLE(EXPAND_AS_STRLEN) - 50; class MppEncCfgService {