diff mbox series

[FFmpeg-devel] avformat/dashdec: The segments in dash file doesn't read completely when segment's size and duration is very small.

Message ID 20240902081605.75094-1-jiangjie618@gmail.com
State New
Headers show
Series [FFmpeg-devel] avformat/dashdec: The segments in dash file doesn't read completely when segment's size and duration is very small. | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

jiangjie Sept. 2, 2024, 8:16 a.m. UTC
If the segment is very small, avformat_find_stream_info will read all audio/video data in this segment. cur->is_restart_needed is set to 0 later in dash_read_packet function, and no chance to be set to 1 again in the read_data function.

Reproduction:
ffmpeg -f lavfi -i mandelbrot -f lavfi -i anullsrc -c:v vp8 -g 5 -r 5 -c:a libopus -use_template 0 -seg_duration 1 -t 15 -y test_720.mpd
ffprobe -show_packets test_720.mpd

The duration of the test_720.mpd file is 15 seconds, but the duration that ffprobe show is small than 15 second.
---
 libavformat/dashdec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c
index 63070b77be..12960d0312 100644
--- a/libavformat/dashdec.c
+++ b/libavformat/dashdec.c
@@ -2207,9 +2207,9 @@  static int dash_read_packet(AVFormatContext *s, AVPacket *pkt)
         if (cur->is_restart_needed) {
             cur->cur_seg_offset = 0;
             cur->init_sec_buf_read_offset = 0;
+            cur->is_restart_needed = 0;
             ff_format_io_close(cur->parent, &cur->input);
             ret = reopen_demux_for_component(s, cur);
-            cur->is_restart_needed = 0;
         }
     }
     return AVERROR_EOF;