From 39451732e905e5884a04e040a9d47d8f4a47025c Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 29 Sep 2014 17:49:26 +0200 Subject: demux_disc: bluray: potentially fix some aspects of seeking When flushing the AVIOContext, make sure it can't seek back to discarded data. buf_ptr is just the current read position, while buf_end - buffer is the actual buffer size. Since mpegts.c is littered with seek calls, it might be that the ability to seek could read Mark the stream (which the demuxer uses) as not seekable. The cache can enable seeking again (this behavior is sometimes useful for other things). I think this should have had no bad influence in theory, since seeking BD/DVD first does the "real" seek, then flushes libavformat and reads new packets. --- demux/demux_disc.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'demux/demux_disc.c') diff --git a/demux/demux_disc.c b/demux/demux_disc.c index 5175f89e01..f0ddc1e827 100644 --- a/demux/demux_disc.c +++ b/demux/demux_disc.c @@ -310,6 +310,12 @@ static int d_open(demuxer_t *demuxer, enum demux_check check) // Can be seekable even if the stream isn't. demuxer->seekable = true; + // With cache enabled, the stream can be seekable. This causes demux_lavf.c + // (actually libavformat/mpegts.c) to seek sometimes when reading a packet. + // It does this to seek back a bit in case the current file position points + // into the middle of a packet. + demuxer->stream->seekable = false; + add_dvd_streams(demuxer); add_streams(demuxer); add_stream_chapters(demuxer); -- cgit v1.2.3