summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2012-02-26 05:53:13 +0200
committerUoti Urpala <uau@mplayer2.org>2012-02-26 05:53:13 +0200
commit9f9bbb3c8b0cce1d148f3f6046ec8deb636577ff (patch)
tree58f5fa2bfeda1b5131360badbe82073e88e6c131
parentd0bae74702bf74a38ec36abd267efa0b070fc943 (diff)
downloadmpv-9f9bbb3c8b0cce1d148f3f6046ec8deb636577ff.tar.bz2
mpv-9f9bbb3c8b0cce1d148f3f6046ec8deb636577ff.tar.xz
demux_lavf: update growing file size info for AVSEEK_SIZE
demux_lavf was returning a static size value when libavformat queried file size with AVSEEK_SIZE. Add code to query the stream for possibly changed value first. This at least improves seeking with growing MPEG files; before seeks would never go beyond the part of the file that existed when the stream was first opened.
-rw-r--r--libmpdemux/demux_lavf.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c
index 02eff0d4b8..5fb66adb9d 100644
--- a/libmpdemux/demux_lavf.c
+++ b/libmpdemux/demux_lavf.c
@@ -109,9 +109,12 @@ static int64_t mp_seek(void *opaque, int64_t pos, int whence)
pos += stream->end_pos;
else if (whence == SEEK_SET)
pos += stream->start_pos;
- else if (whence == AVSEEK_SIZE && stream->end_pos > 0)
+ else if (whence == AVSEEK_SIZE && stream->end_pos > 0) {
+ off_t size;
+ if (stream_control(stream, STREAM_CTRL_GET_SIZE, &size) == STREAM_OK)
+ return size;
return stream->end_pos - stream->start_pos;
- else
+ } else
return -1;
if (pos < 0)