[mpp_enc_v2]: Fix reencode path dead loop

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I9adc1accfd10361e4901aaeb5abde9e09bb2a7bd
This commit is contained in:
Herman Chen
2020-03-28 15:16:25 +08:00
parent 28bc434e72
commit 75431ca4ae
3 changed files with 12 additions and 15 deletions

View File

@@ -247,11 +247,6 @@ static MPP_RET h265e_proc_dpb(void *ctx, HalEncTask *task)
h265e_dbg_func("enter\n"); h265e_dbg_func("enter\n");
if (rc_task->frm.reencode) {
return MPP_OK;
}
mb_wd64 = (p->cfg->prep.width + 63) / 64; mb_wd64 = (p->cfg->prep.width + 63) / 64;
mb_h64 = (p->cfg->prep.height + 63) / 64; mb_h64 = (p->cfg->prep.height + 63) / 64;

View File

@@ -640,13 +640,18 @@ void *mpp_enc_thread(void *data)
TASK_REENCODE: TASK_REENCODE:
// 14. restore and process dpb // 14. restore and process dpb
enc_dbg_detail("task %d enc proc dpb\n", frm->seq_idx); if (!frm->reencode || frm->re_dpb_proc) {
RUN_ENC_IMPL_FUNC(enc_impl_proc_dpb, impl, hal_task, mpp, ret); enc_dbg_detail("task %d enc proc dpb\n", frm->seq_idx);
RUN_ENC_IMPL_FUNC(enc_impl_proc_dpb, impl, hal_task, mpp, ret);
}
enc_dbg_detail("task %d rc frame start\n", frm->seq_idx); if (!frm->reencode) {
RUN_ENC_RC_FUNC(rc_frm_start, enc->rc_ctx, rc_task, mpp, ret); enc_dbg_detail("task %d rc frame start\n", frm->seq_idx);
if (frm->re_dpb_proc) RUN_ENC_RC_FUNC(rc_frm_start, enc->rc_ctx, rc_task, mpp, ret);
goto TASK_REENCODE; if (frm->re_dpb_proc)
goto TASK_REENCODE;
}
frm->reencode = 0;
enc_dbg_detail("task %d enc proc hal\n", frm->seq_idx); enc_dbg_detail("task %d enc proc hal\n", frm->seq_idx);
RUN_ENC_IMPL_FUNC(enc_impl_proc_hal, impl, hal_task, mpp, ret); RUN_ENC_IMPL_FUNC(enc_impl_proc_hal, impl, hal_task, mpp, ret);

View File

@@ -665,11 +665,8 @@ MPP_RET rc_model_v2_start(void *ctx, EncRcTask *task)
rc_dbg_func("enter %p\n", ctx); rc_dbg_func("enter %p\n", ctx);
if (p->usr_cfg.mode == RC_FIXQP)
if (frm->reencode || p->usr_cfg.mode == RC_FIXQP) {
frm->reencode = 0;
return MPP_OK; return MPP_OK;
}
p->frame_type = (frm->is_intra) ? (INTRA_FRAME) : (INTER_P_FRAME); p->frame_type = (frm->is_intra) ? (INTRA_FRAME) : (INTER_P_FRAME);