author | Hui Zhang <hui.zhang@amlogic.com> | 2020-03-24 05:37:50 (GMT) |
---|---|---|
committer | Hui Zhang <hui.zhang@amlogic.com> | 2020-03-24 05:42:51 (GMT) |
commit | f62b1ae65ba62fdae52696a446982c7c745fcd89 (patch) | |
tree | 1ff32575ac0adc009a030be78fa5b7ca727bd36c | |
parent | 593bd81e42d5ef1a73ab82fc55acc10d0d88706a (diff) | |
download | media_modules-f62b1ae65ba62fdae52696a446982c7c745fcd89.zip media_modules-f62b1ae65ba62fdae52696a446982c7c745fcd89.tar.gz media_modules-f62b1ae65ba62fdae52696a446982c7c745fcd89.tar.bz2 |
vav1: add stream offset for pts lookup [1/1]
PD#SWPL-18751
Problem:
duration is not correct and AV not sync
Solution:
add stream offset for pts lookup
Verify:
AB311
Signed-off-by: Hui Zhang <hui.zhang@amlogic.com>
Change-Id: I71f3274b6d855744135588af7754c6721f5bf24b
-rwxr-xr-x[-rw-r--r--] | drivers/frame_provider/decoder/vav1/av1_global.h | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | drivers/frame_provider/decoder/vav1/vav1.c | 13 |
2 files changed, 6 insertions, 8 deletions
diff --git a/drivers/frame_provider/decoder/vav1/av1_global.h b/drivers/frame_provider/decoder/vav1/av1_global.h index b8c59cc..e192091 100644..100755 --- a/drivers/frame_provider/decoder/vav1/av1_global.h +++ b/drivers/frame_provider/decoder/vav1/av1_global.h @@ -2112,6 +2112,7 @@ typedef struct AV1Decoder { buff_t* mc_buf; //unsigned short *rpm_ptr; void *private_data; + u32 pre_stream_offset; #endif } AV1Decoder; diff --git a/drivers/frame_provider/decoder/vav1/vav1.c b/drivers/frame_provider/decoder/vav1/vav1.c index f1210de..466103f 100644..100755 --- a/drivers/frame_provider/decoder/vav1/vav1.c +++ b/drivers/frame_provider/decoder/vav1/vav1.c @@ -775,6 +775,7 @@ struct AV1HW_s { #endif }; +static void av1_dump_state(struct vdec_s *vdec); int av1_print(struct AV1HW_s *hw, int flag, const char *fmt, ...) @@ -1217,7 +1218,6 @@ static int get_mv_buf(struct AV1HW_s *hw, } return ret; } - static void put_mv_buf(struct AV1HW_s *hw, int *mv_buf_index) { @@ -1240,7 +1240,6 @@ static void put_mv_buf(struct AV1HW_s *hw, hw->m_mv_BUF[i].used_flag) hw->m_mv_BUF[i].used_flag = 0; } - static void put_un_used_mv_bufs(struct AV1HW_s *hw) { struct AV1_Common_s *const cm = &hw->pbi->common; @@ -1254,7 +1253,6 @@ static void put_un_used_mv_bufs(struct AV1HW_s *hw) put_mv_buf(hw, &frame_bufs[i].buf.mv_buf_index); } } - #endif @@ -1273,8 +1271,6 @@ static int get_free_buf_count(struct AV1HW_s *hw) return free_buf_count; } - - int aom_bufmgr_init(struct AV1HW_s *hw, struct BuffInfo_s *buf_spec_i, struct buff_s *mc_buf_i) { struct AV1_Common_s *cm = &hw->pbi->common; @@ -4600,7 +4596,6 @@ static int av1_local_init(struct AV1HW_s *hw) hw->used_buf_num = MAX_BUF_NUM_SAVE_BUF; else hw->used_buf_num = max_buf_num; - if (hw->used_buf_num > MAX_BUF_NUM) hw->used_buf_num = MAX_BUF_NUM; if (hw->used_buf_num > FRAME_BUFFERS) @@ -5396,7 +5391,9 @@ static int prepare_display_buf(struct AV1HW_s *hw, void av1_raw_write_image(AV1Decoder *pbi, PIC_BUFFER_CONFIG *sd) { + sd->stream_offset = pbi->pre_stream_offset; prepare_display_buf((struct AV1HW_s *)(pbi->private_data), sd); + pbi->pre_stream_offset = READ_VREG(HEVC_SHIFT_BYTE_COUNT); } static int notify_v4l_eos(struct vdec_s *vdec) @@ -6959,7 +6956,8 @@ static void vav1_put_timer_func(unsigned long arg) } #endif if (debug & VP9_DEBUG_DUMP_PIC_LIST) { - dump_pic_list(hw); + /*dump_pic_list(hw);*/ + av1_dump_state(hw_to_vdec(hw)); debug &= ~VP9_DEBUG_DUMP_PIC_LIST; } if (debug & VP9_DEBUG_TRIG_SLICE_SEGMENT_PROC) { @@ -7630,7 +7628,6 @@ static int amvdec_av1_probe(struct platform_device *pdev) aom_workbuff_spec[i].start_adr = pdata->mem_start; #endif - if (debug) { av1_print(hw, AOM_DEBUG_HW_MORE, "===AV1 decoder mem resource 0x%lx size 0x%x\n", pdata->mem_start, hw->buf_size); |