[mpi_enc_test]: Add fix qp encoder mode

Change-Id: Ia749c9eb5d2a25b87e64215aa184301baf9fa6b5
Signed-off-by: toby.zhang <toby.zhang@rock-chips.com>
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
toby.zhang
2022-02-14 14:53:15 +08:00
committed by Herman Chen
parent 481763d6a1
commit 407fce1272
3 changed files with 63 additions and 12 deletions

View File

@@ -342,12 +342,14 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncMultiCtxInfo *info)
case MPP_VIDEO_CodingHEVC : {
switch (p->rc_mode) {
case MPP_ENC_RC_MODE_FIXQP : {
mpp_enc_cfg_set_s32(cfg, "rc:qp_init", 20);
mpp_enc_cfg_set_s32(cfg, "rc:qp_max", 20);
mpp_enc_cfg_set_s32(cfg, "rc:qp_min", 20);
mpp_enc_cfg_set_s32(cfg, "rc:qp_max_i", 20);
mpp_enc_cfg_set_s32(cfg, "rc:qp_min_i", 20);
mpp_enc_cfg_set_s32(cfg, "rc:qp_ip", 2);
RK_S32 fix_qp = cmd->qp_init;
mpp_enc_cfg_set_s32(cfg, "rc:qp_init", fix_qp);
mpp_enc_cfg_set_s32(cfg, "rc:qp_max", fix_qp);
mpp_enc_cfg_set_s32(cfg, "rc:qp_min", fix_qp);
mpp_enc_cfg_set_s32(cfg, "rc:qp_max_i", fix_qp);
mpp_enc_cfg_set_s32(cfg, "rc:qp_min_i", fix_qp);
mpp_enc_cfg_set_s32(cfg, "rc:qp_ip", 0);
} break;
case MPP_ENC_RC_MODE_CBR :
case MPP_ENC_RC_MODE_VBR :

View File

@@ -287,21 +287,35 @@ RK_S32 mpi_enc_opt_g(void *ctx, const char *next)
return 0;
}
RK_S32 mpi_enc_opt_rc(void *ctx, const char *next)
{
MpiEncTestArgs *cmd = (MpiEncTestArgs *)ctx;
RK_S32 cnt = 0;
if (next) {
cnt = sscanf(next, "%d", &cmd->rc_mode);
if (cnt)
return 1;
}
mpp_err("invalid rate control usage -rc rc_mode\n");
mpp_err("rc_mode 0:vbr 1:cbr 2:avbr 3:cvbr 4:fixqp\n");
return 0;
}
RK_S32 mpi_enc_opt_bps(void *ctx, const char *next)
{
MpiEncTestArgs *cmd = (MpiEncTestArgs *)ctx;
RK_S32 cnt = 0;
if (next) {
cnt = sscanf(next, "%d:%d:%d:%d",
&cmd->bps_target, &cmd->bps_min, &cmd->bps_max,
&cmd->rc_mode);
cnt = sscanf(next, "%d:%d:%d",
&cmd->bps_target, &cmd->bps_min, &cmd->bps_max);
if (cnt)
return 1;
}
mpp_err("invalid bit rate usage -b bps_target:bps_min:bps_max:rc_mode\n");
mpp_err("rc_mode 0:vbr 1:cbr 2:avbr 3:cvbr 4:fixqp\n");
mpp_err("invalid bit rate usage -bps bps_target:bps_min:bps_max\n");
return 0;
}
@@ -354,6 +368,22 @@ RK_S32 mpi_enc_opt_fps(void *ctx, const char *next)
return 0;
}
RK_S32 mpi_enc_opt_qc(void *ctx, const char *next)
{
MpiEncTestArgs *cmd = (MpiEncTestArgs *)ctx;
RK_S32 cnt = 0;
if (next) {
cnt = sscanf(next, "%d:%d:%d:%d:%d", &cmd->qp_init,
&cmd->qp_min, &cmd->qp_max, &cmd->qp_min_i, &cmd->qp_max_i);
if (cnt)
return 1;
}
mpp_err("invalid quality control usage -qc qp_init/min/max/min_i/max_i\n");
return 0;
}
RK_S32 mpi_enc_opt_s(void *ctx, const char *next)
{
MpiEncTestArgs *cmd = (MpiEncTestArgs *)ctx;
@@ -455,8 +485,10 @@ static MppOptInfo enc_opts[] = {
{"tsrc", "source type", "input file source coding type", mpi_enc_opt_tsrc},
{"n", "max frame number", "max encoding frame number", mpi_enc_opt_n},
{"g", "gop reference mode", "gop_mode:gop_len:vi_len", mpi_enc_opt_g},
{"rc", "rate control mode", "set rc_mode", mpi_enc_opt_rc},
{"bps", "bps target:min:max", "set tareget/min/max bps and rc_mode", mpi_enc_opt_bps},
{"fps", "in/output fps", "set input and output frame rate", mpi_enc_opt_fps},
{"qc", "quality control", "set qp_init/min/max/min_i/max_i", mpi_enc_opt_qc},
{"s", "instance_nb", "number of instances", mpi_enc_opt_s},
{"v", "trace option", "q - quiet f - show fps", mpi_enc_opt_v},
{"l", "loop count", "loop encoding times for each frame", mpi_enc_opt_l},
@@ -562,6 +594,14 @@ MPP_RET mpi_enc_test_cmd_update_by_args(MpiEncTestArgs* cmd, int argc, char **ar
}
}
if (cmd->rc_mode == MPP_ENC_RC_MODE_FIXQP) {
if (!cmd->qp_init) {
if (cmd->type == MPP_VIDEO_CodingAVC ||
cmd->type == MPP_VIDEO_CodingHEVC)
cmd->qp_init = 26;
}
}
if (cmd->trace_fps) {
fps_calc_init(&cmd->fps);
mpp_assert(cmd->fps);

View File

@@ -40,11 +40,13 @@ typedef struct MpiEncTestArgs_t {
RK_S32 hor_stride;
RK_S32 ver_stride;
/* -rc */
RK_S32 rc_mode;
/* -bps */
RK_S32 bps_target;
RK_S32 bps_max;
RK_S32 bps_min;
RK_S32 rc_mode;
/* -fps */
RK_S32 fps_in_flex;
@@ -54,6 +56,13 @@ typedef struct MpiEncTestArgs_t {
RK_S32 fps_out_num;
RK_S32 fps_out_den;
/* -qc */
RK_S32 qp_init;
RK_S32 qp_min;
RK_S32 qp_max;
RK_S32 qp_min_i;
RK_S32 qp_max_i;
/* -g gop mode */
RK_S32 gop_mode;
RK_S32 gop_len;