Project import generated by Copybara.
GitOrigin-RevId: 9a8f48e904d2d8e81fafc4ef146826aca9541b3a
Change-Id: I4ad8b1ef175e8d5b79008e437263ac972c62b334
diff --git a/drivers/frame_provider/decoder/vp9/vvp9.c b/drivers/frame_provider/decoder/vp9/vvp9.c
index 2111c6a..ce4c496 100644
--- a/drivers/frame_provider/decoder/vp9/vvp9.c
+++ b/drivers/frame_provider/decoder/vp9/vvp9.c
@@ -9546,17 +9546,10 @@
if (!vdec_frame_based(hw_to_vdec(pbi)))
dec_again_process(pbi);
else {
- if (pbi->common.show_existing_frame) {
pbi->dec_result = DEC_RESULT_DONE;
amhevc_stop();
vdec_schedule_work(&pbi->work);
}
- else {
- pbi->dec_result = DEC_RESULT_ERROR;
- amhevc_stop();
- vdec_schedule_work(&pbi->work);
- }
- }
}
pbi->process_busy = 0;
return IRQ_HANDLED;
@@ -11189,9 +11182,13 @@
pbi->process_state = PROC_STATE_INIT;
decode_frame_count[pbi->index] = pbi->frame_count;
- if (pbi->mmu_enable)
+ if (pbi->mmu_enable) {
pbi->used_4k_num =
(READ_VREG(HEVC_SAO_MMU_STATUS) >> 16);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_START);
+ vp9_recycle_mmu_buf_tail(pbi);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_END);
+ }
vp9_print(pbi, PRINT_FLAG_VDEC_STATUS,
"%s (===> %d) dec_result %d %x %x %x shiftbytes 0x%x decbytes 0x%x\n",
__func__,
@@ -11247,9 +11244,13 @@
pbi->frame_count++;
pbi->process_state = PROC_STATE_INIT;
- if (pbi->mmu_enable)
+ if (pbi->mmu_enable) {
pbi->used_4k_num =
(READ_VREG(HEVC_SAO_MMU_STATUS) >> 16);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_START);
+ vp9_recycle_mmu_buf_tail(pbi);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_END);
+ }
vp9_print(pbi, PRINT_FLAG_VDEC_STATUS,
"%s (===> %d) dec_result %d %x %x %x shiftbytes 0x%x decbytes 0x%x\n",
__func__,
@@ -11262,8 +11263,6 @@
READ_VREG(HEVC_SHIFT_BYTE_COUNT) -
pbi->start_shift_bytes);
amhevc_stop();
- } else if (pbi->dec_result == DEC_RESULT_ERROR) {
- vdec_vframe_dirty(hw_to_vdec(pbi), pbi->chunk);
}
if (pbi->stat & STAT_VDEC_RUN) {
amhevc_stop();
diff --git a/drivers/frame_provider/decoder/vp9_fb/vvp9_fb.c b/drivers/frame_provider/decoder/vp9_fb/vvp9_fb.c
index d16436d..f7c42bb 100644
--- a/drivers/frame_provider/decoder/vp9_fb/vvp9_fb.c
+++ b/drivers/frame_provider/decoder/vp9_fb/vvp9_fb.c
@@ -12776,7 +12776,6 @@
if (!vdec_frame_based(hw_to_vdec(pbi)))
dec_again_process(pbi);
else {
- if (pbi->common.show_existing_frame) {
pbi->dec_result = DEC_RESULT_DONE;
#ifdef NEW_FB_CODE
if (pbi->front_back_mode == 1) {
@@ -12789,11 +12788,6 @@
}
vdec_schedule_work(&pbi->work);
}
- else {
- pbi->dec_result = DEC_RESULT_GET_DATA;
- vdec_schedule_work(&pbi->work);
- }
- }
}
pbi->process_busy = 0;
return IRQ_HANDLED;
@@ -14776,9 +14770,15 @@
pbi->process_state = PROC_STATE_INIT;
decode_frame_count[pbi->index] = pbi->frame_count;
- if (pbi->mmu_enable)
+ if (pbi->mmu_enable) {
pbi->used_4k_num =
(READ_VREG(HEVC_SAO_MMU_STATUS) >> 16);
+ if (pbi->front_back_mode == 0) {
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_START);
+ vp9_recycle_mmu_buf_tail(pbi);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_END);
+ }
+ }
vp9_print(pbi, PRINT_FLAG_VDEC_STATUS,
"%s (===> %d) dec_result %d %x %x %x shiftbytes 0x%x decbytes 0x%x\n",
__func__,
@@ -14838,9 +14838,15 @@
pbi->frame_count++;
pbi->process_state = PROC_STATE_INIT;
- if (pbi->mmu_enable)
+ if (pbi->mmu_enable) {
pbi->used_4k_num =
(READ_VREG(HEVC_SAO_MMU_STATUS) >> 16);
+ if (pbi->front_back_mode == 0) {
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_START);
+ vp9_recycle_mmu_buf_tail(pbi);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_END);
+ }
+ }
vp9_print(pbi, PRINT_FLAG_VDEC_STATUS,
"%s (===> %d) dec_result %d %x %x %x shiftbytes 0x%x decbytes 0x%x\n",
__func__,
diff --git a/drivers/frame_provider/decoder_v4l/vp9/vvp9.c b/drivers/frame_provider/decoder_v4l/vp9/vvp9.c
index ce5d86c..0d93ba8 100644
--- a/drivers/frame_provider/decoder_v4l/vp9/vvp9.c
+++ b/drivers/frame_provider/decoder_v4l/vp9/vvp9.c
@@ -1255,6 +1255,7 @@
ulong rdma_mem_handle;
bool timeout;
int v4l_duration;
+ bool has_unfinish;
};
static int vp9_print(struct VP9Decoder_s *pbi,
@@ -8539,20 +8540,14 @@
vp9_buf_ref_process_for_exception(pbi);
dec_again_process(pbi);
} else {
- if (pbi->common.show_existing_frame) {
+ if (!pbi->common.show_existing_frame) {
+ if (pbi->has_unfinish != true)
+ vdec_v4l_post_error_frame_event(ctx);
+ }
pbi->dec_result = DEC_RESULT_DONE;
amhevc_stop();
vdec_schedule_work(&pbi->work);
}
- else {
- if (vdec_frame_based(hw_to_vdec(pbi)))
- if (pbi->dec_result != DEC_RESULT_UNFINISH)
- vdec_v4l_post_error_frame_event(ctx);
- pbi->dec_result = DEC_RESULT_ERROR;
- amhevc_stop();
- vdec_schedule_work(&pbi->work);
- }
- }
}
pbi->process_busy = 0;
return IRQ_HANDLED;
@@ -9851,9 +9846,13 @@
decode_frame_count[pbi->index] = pbi->frame_count;
ctx->decoder_status_info.decoder_count++;
- if (pbi->mmu_enable)
+ if (pbi->mmu_enable) {
pbi->used_4k_num =
(READ_VREG(HEVC_SAO_MMU_STATUS) >> 16);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_START);
+ vp9_recycle_mmu_buf_tail(pbi);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_END);
+ }
vp9_print(pbi, PRINT_FLAG_VDEC_STATUS,
"%s (===> %d) dec_result %d %x %x %x shiftbytes 0x%x decbytes 0x%x\n",
__func__,
@@ -9909,9 +9908,13 @@
pbi->frame_count++;
pbi->process_state = PROC_STATE_INIT;
- if (pbi->mmu_enable)
+ if (pbi->mmu_enable) {
pbi->used_4k_num =
(READ_VREG(HEVC_SAO_MMU_STATUS) >> 16);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_START);
+ vp9_recycle_mmu_buf_tail(pbi);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_END);
+ }
vp9_print(pbi, PRINT_FLAG_VDEC_STATUS,
"%s (===> %d) dec_result %d %x %x %x shiftbytes 0x%x decbytes 0x%x\n",
__func__,
@@ -9924,8 +9927,6 @@
READ_VREG(HEVC_SHIFT_BYTE_COUNT) -
pbi->start_shift_bytes);
amhevc_stop();
- } else if (pbi->dec_result == DEC_RESULT_ERROR) {
- vdec_vframe_dirty(hw_to_vdec(pbi), pbi->chunk);
}
if (pbi->stat & STAT_VDEC_RUN) {
amhevc_stop();
@@ -10289,6 +10290,8 @@
(pbi->dec_result == DEC_RESULT_UNFINISH)) {
u32 res_byte = pbi->data_size - pbi->consume_byte;
+ pbi->has_unfinish = true;
+
vp9_print(pbi, VP9_DEBUG_BUFMGR,
"%s before, consume 0x%x, size 0x%x, offset 0x%x, res 0x%x\n", __func__,
pbi->consume_byte, pbi->data_size, pbi->data_offset + pbi->consume_byte, res_byte);
@@ -10320,13 +10323,13 @@
pbi->data_offset = pbi->chunk->offset;
pbi->data_size = size;
}
+ pbi->has_unfinish = false;
WRITE_VREG(HEVC_ASSIST_SCRATCH_C, 0);
}
vdec_tracing(&ctx->vtr, VTRACE_DEC_ST_0, size);
input_empty[pbi->index] = 0;
- if (pbi->dec_result != DEC_RESULT_UNFINISH)
pbi->dec_result = DEC_RESULT_NONE;
pbi->start_shift_bytes = READ_VREG(HEVC_SHIFT_BYTE_COUNT);
diff --git a/drivers/frame_provider/decoder_v4l/vp9_fb/vvp9_fb_v4l.c b/drivers/frame_provider/decoder_v4l/vp9_fb/vvp9_fb_v4l.c
index f872f54..29da897 100644
--- a/drivers/frame_provider/decoder_v4l/vp9_fb/vvp9_fb_v4l.c
+++ b/drivers/frame_provider/decoder_v4l/vp9_fb/vvp9_fb_v4l.c
@@ -1592,6 +1592,7 @@
int triple_write_mode;
int start_decoder_flag;
int v4l_duration;
+ bool has_unfinish;
};
#ifdef NEW_FRONT_BACK_CODE
@@ -11647,7 +11648,10 @@
vp9_buf_ref_process_for_exception(pbi);
dec_again_process(pbi);
} else {
- if (pbi->common.show_existing_frame) {
+ if (!pbi->common.show_existing_frame) {
+ if (pbi->has_unfinish != true)
+ vdec_v4l_post_error_frame_event(ctx);
+ }
pbi->dec_result = DEC_RESULT_DONE;
#ifdef NEW_FB_CODE
if (pbi->front_back_mode == 1)
@@ -11657,13 +11661,6 @@
amhevc_stop();
vdec_schedule_work(&pbi->work);
}
- else {
- pbi->dec_result = DEC_RESULT_GET_DATA;
- if (vdec_frame_based(hw_to_vdec(pbi)))
- vdec_v4l_post_error_frame_event(ctx);
- vdec_schedule_work(&pbi->work);
- }
- }
}
pbi->process_busy = 0;
return IRQ_HANDLED;
@@ -13275,9 +13272,15 @@
pbi->process_state = PROC_STATE_INIT;
decode_frame_count[pbi->index] = pbi->frame_count;
- if (pbi->mmu_enable)
+ if (pbi->mmu_enable) {
pbi->used_4k_num =
(READ_VREG(HEVC_SAO_MMU_STATUS) >> 16);
+ if (pbi->front_back_mode == 0) {
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_START);
+ vp9_recycle_mmu_buf_tail(pbi);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_END);
+ }
+ }
vp9_print(pbi, PRINT_FLAG_VDEC_STATUS,
"%s (===> %d) dec_result %d %x %x %x shiftbytes 0x%x decbytes 0x%x\n",
__func__,
@@ -13338,9 +13341,15 @@
pbi->frame_count++;
pbi->process_state = PROC_STATE_INIT;
- if (pbi->mmu_enable)
+ if (pbi->mmu_enable) {
pbi->used_4k_num =
(READ_VREG(HEVC_SAO_MMU_STATUS) >> 16);
+ if (pbi->front_back_mode == 0) {
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_START);
+ vp9_recycle_mmu_buf_tail(pbi);
+ ATRACE_COUNTER(pbi->trace.decode_header_memory_time_name, TRACE_HEADER_MEMORY_END);
+ }
+ }
vp9_print(pbi, PRINT_FLAG_VDEC_STATUS,
"%s (===> %d) dec_result %d %x %x %x shiftbytes 0x%x decbytes 0x%x\n",
__func__,
@@ -13790,6 +13799,8 @@
(pbi->dec_result == DEC_RESULT_UNFINISH)) {
u32 res_byte = pbi->data_size - pbi->consume_byte;
+ pbi->has_unfinish = true;
+
vp9_print(pbi, VP9_DEBUG_BUFMGR,
"%s before, consume 0x%x, size 0x%x, offset 0x%x, res 0x%x\n", __func__,
pbi->consume_byte, pbi->data_size, pbi->data_offset + pbi->consume_byte, res_byte);
@@ -13821,6 +13832,7 @@
pbi->data_offset = pbi->chunk->offset;
pbi->data_size = size;
}
+ pbi->has_unfinish = false;
WRITE_VREG(HEVC_ASSIST_SCRATCH_C, 0);
}
diff --git a/firmware/A311D2/video_ucode.bin b/firmware/A311D2/video_ucode.bin
index 914b08a..c47f429 100644
--- a/firmware/A311D2/video_ucode.bin
+++ b/firmware/A311D2/video_ucode.bin
Binary files differ
diff --git a/firmware/A311D2J/video_ucode.bin b/firmware/A311D2J/video_ucode.bin
index a2e2b39..58af456 100644
--- a/firmware/A311D2J/video_ucode.bin
+++ b/firmware/A311D2J/video_ucode.bin
Binary files differ
diff --git a/firmware/POP1/video_ucode.bin b/firmware/POP1/video_ucode.bin
index 7f3a33a..a6de262 100644
--- a/firmware/POP1/video_ucode.bin
+++ b/firmware/POP1/video_ucode.bin
Binary files differ
diff --git a/firmware/S805C1/video_ucode.bin b/firmware/S805C1/video_ucode.bin
index 3eb4c8b..642bef0 100644
--- a/firmware/S805C1/video_ucode.bin
+++ b/firmware/S805C1/video_ucode.bin
Binary files differ
diff --git a/firmware/S805C1A/video_ucode.bin b/firmware/S805C1A/video_ucode.bin
index 89e8b47..07cda83 100644
--- a/firmware/S805C1A/video_ucode.bin
+++ b/firmware/S805C1A/video_ucode.bin
Binary files differ
diff --git a/firmware/S805C1ENG/video_ucode.bin b/firmware/S805C1ENG/video_ucode.bin
index 3eb4c8b..642bef0 100644
--- a/firmware/S805C1ENG/video_ucode.bin
+++ b/firmware/S805C1ENG/video_ucode.bin
Binary files differ
diff --git a/firmware/S805C3/video_ucode.bin b/firmware/S805C3/video_ucode.bin
index 551aa68..c7f5235 100644
--- a/firmware/S805C3/video_ucode.bin
+++ b/firmware/S805C3/video_ucode.bin
Binary files differ
diff --git a/firmware/S805C3L/video_ucode.bin b/firmware/S805C3L/video_ucode.bin
index d7e0762..a9a217d 100644
--- a/firmware/S805C3L/video_ucode.bin
+++ b/firmware/S805C3L/video_ucode.bin
Binary files differ
diff --git a/firmware/S805X2/video_ucode.bin b/firmware/S805X2/video_ucode.bin
index 819a181..f5bd077 100644
--- a/firmware/S805X2/video_ucode.bin
+++ b/firmware/S805X2/video_ucode.bin
Binary files differ
diff --git a/firmware/S805X2G/video_ucode.bin b/firmware/S805X2G/video_ucode.bin
index 4a5fa04..764f178 100644
--- a/firmware/S805X2G/video_ucode.bin
+++ b/firmware/S805X2G/video_ucode.bin
Binary files differ
diff --git a/firmware/S905C2/video_ucode.bin b/firmware/S905C2/video_ucode.bin
index b9ba336..7db09de 100644
--- a/firmware/S905C2/video_ucode.bin
+++ b/firmware/S905C2/video_ucode.bin
Binary files differ
diff --git a/firmware/S905C2ENG/video_ucode.bin b/firmware/S905C2ENG/video_ucode.bin
index 7722877..09e8986 100644
--- a/firmware/S905C2ENG/video_ucode.bin
+++ b/firmware/S905C2ENG/video_ucode.bin
Binary files differ
diff --git a/firmware/S905C2L/video_ucode.bin b/firmware/S905C2L/video_ucode.bin
index 9b1d19d..ba9f09d 100644
--- a/firmware/S905C2L/video_ucode.bin
+++ b/firmware/S905C2L/video_ucode.bin
Binary files differ
diff --git a/firmware/S905C3/video_ucode.bin b/firmware/S905C3/video_ucode.bin
index c3c81f2..e38e06e 100644
--- a/firmware/S905C3/video_ucode.bin
+++ b/firmware/S905C3/video_ucode.bin
Binary files differ
diff --git a/firmware/S905C3ENG/video_ucode.bin b/firmware/S905C3ENG/video_ucode.bin
index a3cb0b0..0fc001e 100644
--- a/firmware/S905C3ENG/video_ucode.bin
+++ b/firmware/S905C3ENG/video_ucode.bin
Binary files differ
diff --git a/firmware/S905C3NMA/video_ucode.bin b/firmware/S905C3NMA/video_ucode.bin
index f4ad452..4d79de7 100644
--- a/firmware/S905C3NMA/video_ucode.bin
+++ b/firmware/S905C3NMA/video_ucode.bin
Binary files differ
diff --git a/firmware/S905W2/video_ucode.bin b/firmware/S905W2/video_ucode.bin
index 6f6f983..068b2f3 100644
--- a/firmware/S905W2/video_ucode.bin
+++ b/firmware/S905W2/video_ucode.bin
Binary files differ
diff --git a/firmware/S905X4/video_ucode.bin b/firmware/S905X4/video_ucode.bin
index 694ad26..cb7dc26 100644
--- a/firmware/S905X4/video_ucode.bin
+++ b/firmware/S905X4/video_ucode.bin
Binary files differ
diff --git a/firmware/S905Y4/video_ucode.bin b/firmware/S905Y4/video_ucode.bin
index 3604eb8..28da452 100644
--- a/firmware/S905Y4/video_ucode.bin
+++ b/firmware/S905Y4/video_ucode.bin
Binary files differ
diff --git a/firmware/S928X/video_ucode.bin b/firmware/S928X/video_ucode.bin
index ec5b898..0ec91de 100644
--- a/firmware/S928X/video_ucode.bin
+++ b/firmware/S928X/video_ucode.bin
Binary files differ
diff --git a/firmware/S928XENG/video_ucode.bin b/firmware/S928XENG/video_ucode.bin
index e729152..75c302f 100644
--- a/firmware/S928XENG/video_ucode.bin
+++ b/firmware/S928XENG/video_ucode.bin
Binary files differ
diff --git a/firmware/T950S/video_ucode.bin b/firmware/T950S/video_ucode.bin
index 8158f4f..577f8cf 100644
--- a/firmware/T950S/video_ucode.bin
+++ b/firmware/T950S/video_ucode.bin
Binary files differ
diff --git a/firmware/T962D4/video_ucode.bin b/firmware/T962D4/video_ucode.bin
index a1c8bb1..ec4899c 100644
--- a/firmware/T962D4/video_ucode.bin
+++ b/firmware/T962D4/video_ucode.bin
Binary files differ
diff --git a/firmware/T963D4/video_ucode.bin b/firmware/T963D4/video_ucode.bin
index 7f39de0..ab01b1e 100644
--- a/firmware/T963D4/video_ucode.bin
+++ b/firmware/T963D4/video_ucode.bin
Binary files differ
diff --git a/firmware/T963D4ENG/video_ucode.bin b/firmware/T963D4ENG/video_ucode.bin
index daabb78..9c71083 100644
--- a/firmware/T963D4ENG/video_ucode.bin
+++ b/firmware/T963D4ENG/video_ucode.bin
Binary files differ
diff --git a/firmware/T965D4/video_ucode.bin b/firmware/T965D4/video_ucode.bin
index d0a5151..85ea9fa 100644
--- a/firmware/T965D4/video_ucode.bin
+++ b/firmware/T965D4/video_ucode.bin
Binary files differ
diff --git a/firmware/T968D4/video_ucode.bin b/firmware/T968D4/video_ucode.bin
index 8d13140..9adbede 100644
--- a/firmware/T968D4/video_ucode.bin
+++ b/firmware/T968D4/video_ucode.bin
Binary files differ
diff --git a/firmware/T982/video_ucode.bin b/firmware/T982/video_ucode.bin
index 67d7fca..512a8eb 100644
--- a/firmware/T982/video_ucode.bin
+++ b/firmware/T982/video_ucode.bin
Binary files differ
diff --git a/firmware/V918D/video_ucode.bin b/firmware/V918D/video_ucode.bin
index 87e74df..beeb17c 100644
--- a/firmware/V918D/video_ucode.bin
+++ b/firmware/V918D/video_ucode.bin
Binary files differ
diff --git a/firmware/video_ucode.bin b/firmware/video_ucode.bin
index a1c8bb1..ec4899c 100755
--- a/firmware/video_ucode.bin
+++ b/firmware/video_ucode.bin
Binary files differ