diff options
author | wm4 <wm4@nowhere> | 2014-07-12 19:16:53 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-07-12 19:18:21 +0200 |
commit | 64e3b07a9d6cb3f089941f232a34943d93a7d289 (patch) | |
tree | 07af9996fbf4eaaef6dd5f26d878533fd1bd3184 | |
parent | 1e8b98af73ec100aea13006b8ef9df506366dcb0 (diff) | |
download | mpv-64e3b07a9d6cb3f089941f232a34943d93a7d289.tar.bz2 mpv-64e3b07a9d6cb3f089941f232a34943d93a7d289.tar.xz |
cache_file: fix operation if stream size is unknown
Happens when playing from a pipe.
Note that seeking forward doesn't work. It would be possible to create a
workaround for that by reading and skipping data until the target
position is reached (and writing the skipped data into the cache file),
but I'm not sure about that.
Fixes #928.
CC: @mpv-player/stable
-rw-r--r-- | stream/cache_file.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/stream/cache_file.c b/stream/cache_file.c index fc9b0e1a4b..af315b355a 100644 --- a/stream/cache_file.c +++ b/stream/cache_file.c @@ -68,7 +68,7 @@ static int fill_buffer(stream_t *s, char *buffer, int max_len) if (s->pos >= p->size - BLOCK_SIZE) { int64_t new_size = -1; stream_control(s, STREAM_CTRL_GET_SIZE, &new_size); - if (new_size != p->size) + if (p->size >= 0 && new_size != p->size) set_bit(p, BLOCK_ALIGN(p->size), 0); p->size = MPMIN(p->max_size, new_size); } @@ -96,7 +96,8 @@ static int fill_buffer(stream_t *s, char *buffer, int max_len) // align/limit to blocks max_len = MPMIN(max_len, BLOCK_SIZE - (s->pos % BLOCK_SIZE)); // Limit to max. known file size - max_len = MPMIN(max_len, p->size - s->pos); + if (p->size >= 0) + max_len = MPMIN(max_len, p->size - s->pos); return fread(buffer, 1, max_len, p->cache_file); } |