mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-19 15:34:32 +08:00
feat[rc_smt]: Add rc container for smart mode
Change-Id: I4e6b2317c8fe71236b3e6c14ffb9ead7af4530ec Signed-off-by: Tingjin Huang <timkingh.huang@rock-chips.com>
This commit is contained in:

committed by
Herman Chen

parent
01dee1b7d4
commit
1984930917
@@ -86,11 +86,11 @@ typedef struct RcModelV2SmtCtx_t {
|
||||
RK_S32 on_pskip;
|
||||
} RcModelV2SmtCtx;
|
||||
|
||||
//rc_container_bitrate_thd2
|
||||
// static RK_S32 rc_ctnr_qp_thd1[6] = {51, 42, 42, 51, 38, 38};
|
||||
// static RK_S32 rc_ctnr_qp_thd2[6] = {51, 44, 44, 51, 40, 40};
|
||||
// static RK_S32 rc_ctnr_br_thd1[6] = {100, 110, 110, 100, 110, 110};
|
||||
// static RK_S32 rc_ctnr_br_thd2[6] = {100, 120, 120, 100, 125, 125};
|
||||
// rc_container_bitrate_thd2
|
||||
static RK_S32 rc_ctnr_qp_thd1[6] = { 51, 42, 42, 51, 38, 38 };
|
||||
static RK_S32 rc_ctnr_qp_thd2[6] = { 51, 44, 44, 51, 40, 40 };
|
||||
static RK_S32 rc_ctnr_br_thd1[6] = { 100, 110, 110, 100, 110, 110 };
|
||||
static RK_S32 rc_ctnr_br_thd2[6] = { 100, 120, 120, 100, 125, 125 };
|
||||
|
||||
MPP_RET bits_model_smt_deinit(RcModelV2SmtCtx *ctx)
|
||||
{
|
||||
@@ -581,11 +581,11 @@ static MPP_RET smt_start_prepare(void *ctx, EncRcTask *task)
|
||||
RK_S32 bits_prev_i = p->pre_real_bit_i;
|
||||
|
||||
bits_lower = p->bits_per_lower_p
|
||||
= (b_min * p->igop / fps_out - bits_prev_i +
|
||||
= ((RK_S64)b_min * p->igop / fps_out - bits_prev_i +
|
||||
p->pre_gop_left_bit) / (p->igop - 1);
|
||||
|
||||
bits_upper = p->bits_per_upper_p
|
||||
= (b_max * p->igop / fps_out - bits_prev_i +
|
||||
= ((RK_S64)b_max * p->igop / fps_out - bits_prev_i +
|
||||
p->pre_gop_left_bit) / (p->igop - 1);
|
||||
|
||||
} else {
|
||||
@@ -747,7 +747,7 @@ MPP_RET rc_model_v2_smt_start(void *ctx, EncRcTask * task)
|
||||
} else
|
||||
qp_out_f0 = p->usr_cfg.init_quality;
|
||||
|
||||
p->qp_out = qp_out_f0;
|
||||
p->qp_out = p->usr_cfg.scene_mode ? qp_out_f0 + 2 : qp_out_f0 + 6; //TODO: ok ??
|
||||
p->count_real_bit = 0;
|
||||
p->count_pred_bit = 0;
|
||||
p->count_frame = 0;
|
||||
@@ -863,22 +863,23 @@ MPP_RET rc_model_v2_smt_start(void *ctx, EncRcTask * task)
|
||||
}
|
||||
}
|
||||
qp_out = mpp_clip(qp_out, p->qp_min, p->qp_max);
|
||||
//TODO: Add rc_container(20240516)
|
||||
// if (p->usr_cfg.rc_container) {
|
||||
// RK_S32 cnt = p->usr_cfg.scene_mode * 3 + p->usr_cfg.rc_container;
|
||||
// if (p->count_real_bit < p->count_pred_bit * rc_ctnr_br_thd1[cnt] / 100) {
|
||||
// if (qp_out > rc_ctnr_qp_thd1[cnt]) {
|
||||
// p->change_bit_flag = 1;
|
||||
// }
|
||||
|
||||
// qp_out = mpp_clip(qp_out, 10, rc_ctnr_qp_thd1[cnt]);
|
||||
// } else if (p->count_real_bit < p->count_pred_bit * rc_ctnr_br_thd2[cnt] / 100) {
|
||||
// if (qp_out > rc_ctnr_qp_thd2[cnt]) {
|
||||
// p->change_bit_flag = 1;
|
||||
// }
|
||||
// qp_out = mpp_clip(qp_out, 10, rc_ctnr_qp_thd2[cnt]);
|
||||
// }
|
||||
// }
|
||||
//Add rc_container
|
||||
if (p->usr_cfg.rc_container) {
|
||||
RK_S32 cnt = p->usr_cfg.scene_mode * 3 + p->usr_cfg.rc_container;
|
||||
if (p->count_real_bit < p->count_pred_bit * rc_ctnr_br_thd1[cnt] / 100) {
|
||||
if (qp_out > rc_ctnr_qp_thd1[cnt]) {
|
||||
p->change_bit_flag = 1;
|
||||
}
|
||||
|
||||
qp_out = mpp_clip(qp_out, 10, rc_ctnr_qp_thd1[cnt]);
|
||||
} else if (p->count_real_bit < p->count_pred_bit * rc_ctnr_br_thd2[cnt] / 100) {
|
||||
if (qp_out > rc_ctnr_qp_thd2[cnt]) {
|
||||
p->change_bit_flag = 1;
|
||||
}
|
||||
qp_out = mpp_clip(qp_out, 10, rc_ctnr_qp_thd2[cnt]);
|
||||
}
|
||||
}
|
||||
|
||||
qp_add = qp_out > 36 ? 1 : (qp_out > 33 ? 2 : (qp_out > 30 ? 3 : 4));
|
||||
qp_minus = qp_out > 40 ? 4 : (qp_out > 36 ? 3 : (qp_out > 33 ? 2 : 1));
|
||||
|
Reference in New Issue
Block a user