diff --git a/inc/rk_venc_cmd.h b/inc/rk_venc_cmd.h index 251c055a..2d102433 100644 --- a/inc/rk_venc_cmd.h +++ b/inc/rk_venc_cmd.h @@ -149,6 +149,20 @@ * + + + + */ +/* + * base working mode parameter + */ +typedef enum MppEncBaseCfgChange_e { + MPP_ENC_BASE_CFG_CHANGE_LOW_DELAY = (1 << 0), + MPP_ENC_BASE_CFG_CHANGE_ALL = (0xFFFFFFFF), +} MppEncBaseCfgChange; + +typedef struct MppEncBaseCfg_t { + RK_U32 change; + + RK_S32 low_delay; +} MppEncBaseCfg; + /* * Rate control parameter */ diff --git a/mpp/base/mpp_enc_cfg.cpp b/mpp/base/mpp_enc_cfg.cpp index 015470ee..a048ab65 100644 --- a/mpp/base/mpp_enc_cfg.cpp +++ b/mpp/base/mpp_enc_cfg.cpp @@ -149,6 +149,8 @@ static const char *cfg_func_names[] = { const_strlen( #base":"#name ) + #define ENTRY_TABLE(ENTRY) \ + /* base config */ \ + ENTRY(base, low_delay, S32, RK_S32, MPP_ENC_BASE_CFG_CHANGE_LOW_DELAY, base, low_delay) \ /* rc config */ \ ENTRY(rc, mode, S32, MppEncRcMode, MPP_ENC_RC_CFG_CHANGE_RC_MODE, rc, rc_mode) \ ENTRY(rc, bps_target, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_BPS, rc, bps_target) \ @@ -263,7 +265,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) - 50; +static RK_S32 node_len = ENTRY_TABLE(EXPAND_AS_STRLEN) - 40; class MppEncCfgService { diff --git a/mpp/codec/mpp_enc_v2.cpp b/mpp/codec/mpp_enc_v2.cpp index 40be6d96..0e384695 100644 --- a/mpp/codec/mpp_enc_v2.cpp +++ b/mpp/codec/mpp_enc_v2.cpp @@ -519,6 +519,23 @@ MPP_RET mpp_enc_proc_cfg(MppEncImpl *enc, MpiCmd cmd, void *param) MPP_RET ret = MPP_OK; switch (cmd) { + case MPP_ENC_SET_CFG : { + MppEncCfgImpl *impl = (MppEncCfgImpl *)param; + MppEncCfgSet *src = &impl->cfg; + RK_U32 change = src->base.change; + + /* get base cfg here */ + if (change) { + MppEncCfgSet *dst = &enc->cfg; + + if (change & MPP_ENC_BASE_CFG_CHANGE_LOW_DELAY) + dst->base.low_delay = src->base.low_delay; + + src->base.change = 0; + } + + ret = enc_impl_proc_cfg(enc->impl, cmd, param); + } break; case MPP_ENC_GET_HDR_SYNC : case MPP_ENC_GET_EXTRA_INFO : { /* diff --git a/mpp/inc/mpp_enc_cfg.h b/mpp/inc/mpp_enc_cfg.h index 6642109d..14a15efd 100644 --- a/mpp/inc/mpp_enc_cfg.h +++ b/mpp/inc/mpp_enc_cfg.h @@ -29,6 +29,8 @@ * For normal user rc and prep config are enough. */ typedef struct MppEncCfgSet_t { + MppEncBaseCfg base; + // esential config MppEncPrepCfg prep; MppEncRcCfg rc;