mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 01:02:39 +08:00
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:

committed by
Herman Chen

parent
a1a9422c26
commit
e03714e193
@@ -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;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -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__*/
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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 :
|
||||||
|
@@ -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:
|
||||||
|
@@ -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));
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user