feat[vepu580]: Add qpmap and rc container interface

Signed-off-by: Tingjin Huang <timkingh.huang@rock-chips.com>
Change-Id: I9fb0683008880a2e025664052a64d290730e6b49
This commit is contained in:
Tingjin Huang
2024-08-13 12:00:10 +08:00
committed by Herman Chen
parent a1a9422c26
commit e03714e193
9 changed files with 74 additions and 9 deletions

View File

@@ -187,6 +187,8 @@ typedef struct RcCfg_s {
RK_U32 refresh_len; RK_U32 refresh_len;
RK_S32 scene_mode; RK_S32 scene_mode;
RK_U32 fps_chg_prop; RK_U32 fps_chg_prop;
RK_S32 rc_container;
} RcCfg; } RcCfg;
/* /*

View File

@@ -1438,7 +1438,9 @@ typedef enum MppEncFineTuneCfgChange_e {
MPP_ENC_TUNE_CFG_CHANGE_ATR_STR_P = (1 << 8), MPP_ENC_TUNE_CFG_CHANGE_ATR_STR_P = (1 << 8),
MPP_ENC_TUNE_CFG_CHANGE_ATL_STR = (1 << 9), MPP_ENC_TUNE_CFG_CHANGE_ATL_STR = (1 << 9),
MPP_ENC_TUNE_CFG_CHANGE_SAO_STR_I = (1 << 10), MPP_ENC_TUNE_CFG_CHANGE_SAO_STR_I = (1 << 10),
MPP_ENC_TUNE_CFG_CHANGE_SAO_STR_P = (1 << 11) MPP_ENC_TUNE_CFG_CHANGE_SAO_STR_P = (1 << 11),
MPP_ENC_TUNE_CFG_CHANGE_QPMAP_EN = (1 << 12),
MPP_ENC_TUNE_CFG_CHANGE_RC_CONTAINER = (1 << 13)
} MppEncFineTuneCfgChange; } MppEncFineTuneCfgChange;
typedef struct MppEncFineTuneCfg_t { typedef struct MppEncFineTuneCfg_t {
@@ -1450,11 +1452,13 @@ typedef struct MppEncFineTuneCfg_t {
RK_S32 anti_flicker_str; RK_S32 anti_flicker_str;
RK_S32 lambda_idx_i; RK_S32 lambda_idx_i;
RK_S32 lambda_idx_p; RK_S32 lambda_idx_p;
RK_S32 atr_str_i;/* line_en */ RK_S32 atr_str_i; /* line_en */
RK_S32 atr_str_p;/* line_en */ RK_S32 atr_str_p; /* line_en */
RK_S32 atl_str;/* anti_stripe */ RK_S32 atl_str; /* anti_stripe */
RK_S32 sao_str_i;/* anti blur */ RK_S32 sao_str_i; /* anti blur */
RK_S32 sao_str_p;/* anti blur */ RK_S32 sao_str_p; /* anti blur */
RK_S32 qpmap_en;
RK_S32 rc_container;
} MppEncFineTuneCfg; } MppEncFineTuneCfg;
#endif /*__RK_VENC_CMD_H__*/ #endif /*__RK_VENC_CMD_H__*/

View File

@@ -266,7 +266,9 @@ public:
ENTRY(tune, atr_str_p, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_ATR_STR_P, tune, atr_str_p) \ ENTRY(tune, atr_str_p, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_ATR_STR_P, tune, atr_str_p) \
ENTRY(tune, atl_str, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_ATL_STR, tune, atl_str) \ ENTRY(tune, atl_str, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_ATL_STR, tune, atl_str) \
ENTRY(tune, sao_str_i, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_SAO_STR_I, tune, sao_str_i) \ ENTRY(tune, sao_str_i, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_SAO_STR_I, tune, sao_str_i) \
ENTRY(tune, sao_str_p, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_SAO_STR_P, tune, sao_str_p) ENTRY(tune, sao_str_p, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_SAO_STR_P, tune, sao_str_p) \
ENTRY(tune, qpmap_en, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_QPMAP_EN, tune, qpmap_en) \
ENTRY(tune, rc_container, S32, RK_S32, MPP_ENC_TUNE_CFG_CHANGE_RC_CONTAINER, tune, rc_container)
static void mpp_enc_cfg_fill(MppTrie trie, MppCfgApi **cfgs) static void mpp_enc_cfg_fill(MppTrie trie, MppCfgApi **cfgs)
{ {

View File

@@ -101,6 +101,8 @@ static void init_h264e_cfg_set(MppEncCfgSet *cfg, MppClientType type)
memset(h264, 0, sizeof(*h264)); memset(h264, 0, sizeof(*h264));
h264->profile = H264_PROFILE_BASELINE; h264->profile = H264_PROFILE_BASELINE;
h264->level = H264_LEVEL_3_1; h264->level = H264_LEVEL_3_1;
cfg->tune.scene_mode = MPP_ENC_SCENE_MODE_DEFAULT;
cfg->tune.qpmap_en = 0;
switch (type) { switch (type) {
case VPU_CLIENT_VEPU1 : case VPU_CLIENT_VEPU1 :

View File

@@ -119,6 +119,8 @@ static MPP_RET h265e_init(void *ctx, EncImplCfg *ctrlCfg)
p->cfg->tune.sao_str_i = 0; p->cfg->tune.sao_str_i = 0;
p->cfg->tune.sao_str_p = 1; p->cfg->tune.sao_str_p = 1;
p->cfg->tune.deblur_str = 3; p->cfg->tune.deblur_str = 3;
p->cfg->tune.qpmap_en = 0;
p->cfg->tune.rc_container = 0;
/* /*
* default prep: * default prep:

View File

@@ -942,6 +942,22 @@ MPP_RET mpp_enc_proc_tune_cfg(MppEncFineTuneCfg *dst, MppEncFineTuneCfg *src)
ret = MPP_ERR_VALUE; ret = MPP_ERR_VALUE;
} }
if (change & MPP_ENC_TUNE_CFG_CHANGE_QPMAP_EN)
dst->qpmap_en = src->qpmap_en;
if (dst->qpmap_en < 0 || dst->qpmap_en > 1) {
mpp_err("invalid qpmap_en %d not in range [0, 1]\n", dst->qpmap_en);
ret = MPP_ERR_VALUE;
}
if (change & MPP_ENC_TUNE_CFG_CHANGE_RC_CONTAINER)
dst->rc_container = src->rc_container;
if (dst->rc_container < 0 || dst->rc_container > 2) {
mpp_err("invalid rc_container %d not in range [0, 2]\n", dst->rc_container);
ret = MPP_ERR_VALUE;
}
dst->change |= change; dst->change |= change;
if (ret) { if (ret) {
@@ -1320,6 +1336,7 @@ static void set_rc_cfg(RcCfg *cfg, MppEncCfgSet *cfg_set)
cfg->bps_max = rc->bps_max; cfg->bps_max = rc->bps_max;
cfg->bps_min = rc->bps_min; cfg->bps_min = rc->bps_min;
cfg->scene_mode = cfg_set->tune.scene_mode; cfg->scene_mode = cfg_set->tune.scene_mode;
cfg->rc_container = cfg_set->tune.rc_container;
cfg->hier_qp_cfg.hier_qp_en = rc->hier_qp_en; cfg->hier_qp_cfg.hier_qp_en = rc->hier_qp_en;
memcpy(cfg->hier_qp_cfg.hier_frame_num, rc->hier_frame_num, sizeof(rc->hier_frame_num)); memcpy(cfg->hier_qp_cfg.hier_frame_num, rc->hier_frame_num, sizeof(rc->hier_frame_num));

View File

@@ -416,9 +416,9 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncMultiCtxInfo *info)
mpp_enc_cfg_set_s32(cfg, "rc:qp_min_i", cmd->qp_min_i ? cmd->qp_min_i : 10); mpp_enc_cfg_set_s32(cfg, "rc:qp_min_i", cmd->qp_min_i ? cmd->qp_min_i : 10);
mpp_enc_cfg_set_s32(cfg, "rc:qp_ip", 2); mpp_enc_cfg_set_s32(cfg, "rc:qp_ip", 2);
mpp_enc_cfg_set_s32(cfg, "rc:fqp_min_i", cmd->fqp_min_i ? cmd->fqp_min_i : 10); mpp_enc_cfg_set_s32(cfg, "rc:fqp_min_i", cmd->fqp_min_i ? cmd->fqp_min_i : 10);
mpp_enc_cfg_set_s32(cfg, "rc:fqp_max_i", cmd->fqp_max_i ? cmd->fqp_max_i : 51); mpp_enc_cfg_set_s32(cfg, "rc:fqp_max_i", cmd->fqp_max_i ? cmd->fqp_max_i : 45);
mpp_enc_cfg_set_s32(cfg, "rc:fqp_min_p", cmd->fqp_min_p ? cmd->fqp_min_p : 10); mpp_enc_cfg_set_s32(cfg, "rc:fqp_min_p", cmd->fqp_min_p ? cmd->fqp_min_p : 10);
mpp_enc_cfg_set_s32(cfg, "rc:fqp_max_p", cmd->fqp_max_p ? cmd->fqp_max_p : 51); mpp_enc_cfg_set_s32(cfg, "rc:fqp_max_p", cmd->fqp_max_p ? cmd->fqp_max_p : 45);
} break; } break;
default : { default : {
mpp_err_f("unsupport encoder rc mode %d\n", p->rc_mode); mpp_err_f("unsupport encoder rc mode %d\n", p->rc_mode);
@@ -545,6 +545,26 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncMultiCtxInfo *info)
if (ref) if (ref)
mpp_enc_ref_cfg_deinit(&ref); mpp_enc_ref_cfg_deinit(&ref);
{
RcApiBrief rcApiBrief;
ret = mpi->control(ctx, MPP_ENC_GET_RC_API_CURRENT, &rcApiBrief);
if (ret) {
mpp_err("mpi control enc get rc api failed ret %d\n", ret);
goto RET;
}
if (MPP_ENC_RC_MODE_SMTRC == info->cmd->rc_mode)
rcApiBrief.name = "smart";
else
rcApiBrief.name = "default";
ret = mpi->control(ctx, MPP_ENC_SET_RC_API_CURRENT, &rcApiBrief);
if (ret) {
mpp_err("mpi control enc set rc api failed ret %d\n", ret);
goto RET;
}
}
/* optional */ /* optional */
{ {
RK_U32 sei_mode; RK_U32 sei_mode;

View File

@@ -524,6 +524,7 @@ RK_S32 mpi_enc_opt_dbs(void *ctx, const char *next)
} }
mpp_err("invalid deblur str\n"); mpp_err("invalid deblur str\n");
return 0; return 0;
} }
@@ -612,6 +613,19 @@ RK_S32 mpi_enc_opt_sao_p(void *ctx, const char *next)
return 0; return 0;
} }
RK_S32 mpi_enc_opt_bc(void *ctx, const char *next)
{
MpiEncTestArgs *cmd = (MpiEncTestArgs *)ctx;
if (next) {
cmd->rc_container = atoi(next);
return 1;
}
mpp_err("invalid bitrate container\n");
return 0;
}
static MppOptInfo enc_opts[] = { static MppOptInfo enc_opts[] = {
{"i", "input_file", "input frame file", mpi_enc_opt_i}, {"i", "input_file", "input frame file", mpi_enc_opt_i},
{"o", "output_file", "output encoded bitstream file", mpi_enc_opt_o}, {"o", "output_file", "output encoded bitstream file", mpi_enc_opt_o},
@@ -644,6 +658,7 @@ static MppOptInfo enc_opts[] = {
{"atr_p", "atr_str_p", "atr_str_p, 0:off 1 2 3", mpi_enc_opt_atr_p}, {"atr_p", "atr_str_p", "atr_str_p, 0:off 1 2 3", mpi_enc_opt_atr_p},
{"sao_i", "sao_str_i", "sao_str_i, 0:off 1 2 3", mpi_enc_opt_sao_i}, {"sao_i", "sao_str_i", "sao_str_i, 0:off 1 2 3", mpi_enc_opt_sao_i},
{"sao_p", "sao_str_p", "sao_str_p, 0:off 1 2 3", mpi_enc_opt_sao_p}, {"sao_p", "sao_str_p", "sao_str_p, 0:off 1 2 3", mpi_enc_opt_sao_p},
{"bc", "bitrate container", "rc_container, 0:off 1:weak 2:strong", mpi_enc_opt_bc}
}; };
static RK_U32 enc_opt_cnt = MPP_ARRAY_ELEMS(enc_opts); static RK_U32 enc_opt_cnt = MPP_ARRAY_ELEMS(enc_opts);

View File

@@ -76,6 +76,7 @@ typedef struct MpiEncTestArgs_t {
/* -sm scene_mode */ /* -sm scene_mode */
RK_S32 scene_mode; RK_S32 scene_mode;
RK_S32 rc_container;
/* -qpdd cu_qp_delta_depth */ /* -qpdd cu_qp_delta_depth */
RK_S32 cu_qp_delta_depth; RK_S32 cu_qp_delta_depth;