mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-08 10:30:04 +08:00
[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:
@@ -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 :
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user