[rc]: Fix pre_i_qp update error

1. The pre_i_qp should use scale_qp to update rather then the start_qp
which has substracted by ip_qp_delta.
2. Reduce default ip_qp_delta to 2 for H.264 and 4 for H.265.

Change-Id: Ie43ba15c8bd524bd10aac6053306f72e8759370c
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
Herman Chen
2021-02-27 12:56:59 +08:00
parent da2745f829
commit 9ec098a981
4 changed files with 5 additions and 5 deletions

View File

@@ -166,7 +166,7 @@ static void init_h264e_cfg_set(MppEncCfgSet *cfg, MppClientType type)
/* default max/min intra qp is not set */ /* default max/min intra qp is not set */
rc_cfg->qp_max_i = 0; rc_cfg->qp_max_i = 0;
rc_cfg->qp_min_i = 0; rc_cfg->qp_min_i = 0;
rc_cfg->qp_delta_ip = 4; rc_cfg->qp_delta_ip = 2;
} }
static void h264e_add_syntax(H264eCtx *ctx, H264eSyntaxType type, void *p) static void h264e_add_syntax(H264eCtx *ctx, H264eSyntaxType type, void *p)

View File

@@ -150,7 +150,7 @@ static MPP_RET h265e_init(void *ctx, EncImplCfg *ctrlCfg)
rc_cfg->qp_min = 10; rc_cfg->qp_min = 10;
rc_cfg->qp_max_i = 51; rc_cfg->qp_max_i = 51;
rc_cfg->qp_min_i = 15; rc_cfg->qp_min_i = 15;
rc_cfg->qp_delta_ip = 6; rc_cfg->qp_delta_ip = 4;
rc_cfg->qp_delta_vi = 2; rc_cfg->qp_delta_vi = 2;
INIT_LIST_HEAD(&p->rc_list); INIT_LIST_HEAD(&p->rc_list);

View File

@@ -1398,7 +1398,7 @@ MPP_RET rc_model_v2_hal_end(void *ctx, EncRcTask *task)
rc_dbg_func("enter ctx %p task %p\n", ctx, task); rc_dbg_func("enter ctx %p task %p\n", ctx, task);
if (frm->is_intra) if (frm->is_intra)
p->pre_i_qp = p->start_qp; p->pre_i_qp = p->cur_scale_qp >> 6;
else else
p->pre_p_qp = p->cur_scale_qp >> 6; p->pre_p_qp = p->cur_scale_qp >> 6;

View File

@@ -327,7 +327,7 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncTestData *p)
mpp_enc_cfg_set_s32(cfg, "rc:qp_min", 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_max_i", 20);
mpp_enc_cfg_set_s32(cfg, "rc:qp_min_i", 20); mpp_enc_cfg_set_s32(cfg, "rc:qp_min_i", 20);
mpp_enc_cfg_set_s32(cfg, "rc:qp_ip", 4); mpp_enc_cfg_set_s32(cfg, "rc:qp_ip", 2);
} break; } break;
case MPP_ENC_RC_MODE_CBR : case MPP_ENC_RC_MODE_CBR :
case MPP_ENC_RC_MODE_VBR : case MPP_ENC_RC_MODE_VBR :
@@ -337,7 +337,7 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncTestData *p)
mpp_enc_cfg_set_s32(cfg, "rc:qp_min", 10); mpp_enc_cfg_set_s32(cfg, "rc:qp_min", 10);
mpp_enc_cfg_set_s32(cfg, "rc:qp_max_i", 51); mpp_enc_cfg_set_s32(cfg, "rc:qp_max_i", 51);
mpp_enc_cfg_set_s32(cfg, "rc:qp_min_i", 10); mpp_enc_cfg_set_s32(cfg, "rc:qp_min_i", 10);
mpp_enc_cfg_set_s32(cfg, "rc:qp_ip", 4); mpp_enc_cfg_set_s32(cfg, "rc:qp_ip", 2);
} 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);