From 9ec098a9819ca13e1ff245d4f7cb945c6c06a276 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Sat, 27 Feb 2021 12:56:59 +0800 Subject: [PATCH] [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 --- mpp/codec/enc/h264/h264e_api_v2.c | 2 +- mpp/codec/enc/h265/h265e_api.c | 2 +- mpp/codec/rc/rc_model_v2.c | 2 +- test/mpi_enc_test.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mpp/codec/enc/h264/h264e_api_v2.c b/mpp/codec/enc/h264/h264e_api_v2.c index a980a6d8..49e9d5ca 100644 --- a/mpp/codec/enc/h264/h264e_api_v2.c +++ b/mpp/codec/enc/h264/h264e_api_v2.c @@ -166,7 +166,7 @@ static void init_h264e_cfg_set(MppEncCfgSet *cfg, MppClientType type) /* default max/min intra qp is not set */ rc_cfg->qp_max_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) diff --git a/mpp/codec/enc/h265/h265e_api.c b/mpp/codec/enc/h265/h265e_api.c index 23791722..909f9f1e 100644 --- a/mpp/codec/enc/h265/h265e_api.c +++ b/mpp/codec/enc/h265/h265e_api.c @@ -150,7 +150,7 @@ static MPP_RET h265e_init(void *ctx, EncImplCfg *ctrlCfg) rc_cfg->qp_min = 10; rc_cfg->qp_max_i = 51; rc_cfg->qp_min_i = 15; - rc_cfg->qp_delta_ip = 6; + rc_cfg->qp_delta_ip = 4; rc_cfg->qp_delta_vi = 2; INIT_LIST_HEAD(&p->rc_list); diff --git a/mpp/codec/rc/rc_model_v2.c b/mpp/codec/rc/rc_model_v2.c index 6fef1c60..97964ac6 100644 --- a/mpp/codec/rc/rc_model_v2.c +++ b/mpp/codec/rc/rc_model_v2.c @@ -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); if (frm->is_intra) - p->pre_i_qp = p->start_qp; + p->pre_i_qp = p->cur_scale_qp >> 6; else p->pre_p_qp = p->cur_scale_qp >> 6; diff --git a/test/mpi_enc_test.c b/test/mpi_enc_test.c index 88f44110..a6643b87 100644 --- a/test/mpi_enc_test.c +++ b/test/mpi_enc_test.c @@ -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_max_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; case MPP_ENC_RC_MODE_CBR : 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_max_i", 51); 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; default : { mpp_err_f("unsupport encoder rc mode %d\n", p->rc_mode);