diff options
author | wm4 <wm4@nowhere> | 2019-11-14 12:59:14 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2019-11-14 12:59:14 +0100 |
commit | ac7f67b3f23a63e463fb881d960bc8f31a230292 (patch) | |
tree | 5d40b4c6a9df371dde1317b2a758b50f7df68439 /stream/stream_libarchive.c | |
parent | dcc3c2eb3877f9876cc218b1e5f1187b81036c49 (diff) | |
download | mpv-ac7f67b3f23a63e463fb881d960bc8f31a230292.tar.bz2 mpv-ac7f67b3f23a63e463fb881d960bc8f31a230292.tar.xz |
demux_mkv, stream: attempt to improve behavior in unseekable streams
stream_skip() semantics were kind of bad, especially after the recent
change to the stream code. Forward stream_skip() calls could still
trigger a seek and fail, even if it was supposed to actually skip data.
(Maybe the idea that stream_skip() should try to seek is worthless in
the first place.)
Rename it to stream_seek_skip() (takes absolute position now because I
think that's better), and make it always skip if the stream is marked as
forward.
While we're at it, make EOF detection more robust. I guess s->eof
shouldn't exist at all, since it's valid only "sometimes". It should be
removed... but not today. A 1-byte stream_read_peek() call is good to
get the s->eof flag set to a correct value.
Diffstat (limited to 'stream/stream_libarchive.c')
-rw-r--r-- | stream/stream_libarchive.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/stream/stream_libarchive.c b/stream/stream_libarchive.c index ab8fda0f34..e3109dfb0a 100644 --- a/stream/stream_libarchive.c +++ b/stream/stream_libarchive.c @@ -84,7 +84,7 @@ static int64_t skip_cb(struct archive *arch, void *priv, int64_t request) if (!volume_seek(vol)) return -1; int64_t old = stream_tell(vol->src); - stream_skip(vol->src, request); + stream_seek_skip(vol->src, old + request); return stream_tell(vol->src) - old; } |