mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-14 21:25:42 +08:00
[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:
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user