[mpp_enc_v2]: Fix hw_length update error

1. hw_length should be only updated by hardware real stream length.
2. hw_length can be updated multi-times by slice encoding.
3. When reenc found the hw_length should be subtracted from total task
stream length.

Change-Id: I1c3f6affcc5dc90ad548a42efed0237c60b98f08
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
Herman Chen
2020-05-25 09:43:43 +08:00
parent 0c5dc02ebd
commit 463ae89b6e
3 changed files with 14 additions and 6 deletions

View File

@@ -766,13 +766,19 @@ void *mpp_enc_thread(void *data)
frm->reencode = 0;
// check for header adding
mpp_assert(hal_task->length == mpp_packet_get_length(packet));
if (hal_task->length != mpp_packet_get_length(packet)) {
mpp_err_f("header adding check failed: task length is not match to packet length %d vs %d\n",
hal_task->length, mpp_packet_get_length(packet));
}
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);
// check for user data adding
mpp_assert(hal_task->length == mpp_packet_get_length(packet));
if (hal_task->length != mpp_packet_get_length(packet)) {
mpp_err_f("user data adding check failed: task length is not match to packet length %d vs %d\n",
hal_task->length, mpp_packet_get_length(packet));
}
enc_dbg_detail("task %d hal get task\n", frm->seq_idx);
RUN_ENC_HAL_FUNC(mpp_enc_hal_get_task, hal, hal_task, mpp, ret);

View File

@@ -760,6 +760,7 @@ static MPP_RET hal_h264e_vepu1_wait_v2(void *hal, HalEncTask *task)
hw_mbrc->out_strm_size = len;
}
task->hw_length += ctx->hw_mbrc.out_strm_size;
hal_h264e_dbg_func("leave %p\n", hal);
@@ -776,9 +777,9 @@ static MPP_RET hal_h264e_vepu1_ret_task_v2(void *hal, HalEncTask *task)
hal_h264e_dbg_func("enter %p\n", hal);
task->length += ctx->hw_mbrc.out_strm_size;
task->length += task->hw_length;
rc_info->bit_real = task->length * 8;
rc_info->bit_real = task->hw_length * 8;
rc_info->quality_real = ctx->hw_mbrc.qp_sum / mbs;
hal_h264e_dbg_rc("real bit %d quality %d\n", rc_info->bit_real, rc_info->quality_real);

View File

@@ -787,6 +787,7 @@ static MPP_RET hal_h264e_vepu2_wait_v2(void *hal, HalEncTask *task)
hw_mbrc->out_strm_size = len;
}
task->hw_length += ctx->hw_mbrc.out_strm_size;
hal_h264e_dbg_func("leave %p\n", hal);
@@ -803,9 +804,9 @@ static MPP_RET hal_h264e_vepu2_ret_task_v2(void *hal, HalEncTask *task)
hal_h264e_dbg_func("enter %p\n", hal);
task->length += ctx->hw_mbrc.out_strm_size;
task->length += task->hw_length;
rc_info->bit_real = task->length * 8;
rc_info->bit_real = task->hw_length * 8;
rc_info->quality_real = ctx->hw_mbrc.qp_sum / mbs;
hal_h264e_dbg_rc("real bit %d quality %d\n", rc_info->bit_real, rc_info->quality_real);