summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-07-18 16:16:05 +0200
committerAlessandro Ghedini <alessandro@ghedini.me>2014-07-20 21:56:46 +0200
commit5a5b219853520fac3ac7809c12e3e62f2471e321 (patch)
treec0754df6ac7273e42d7ffcec311b15caed8ad4d6
parent608bed1aed622780333b9fafb4b568f2f0a91c2d (diff)
downloadmpv-5a5b219853520fac3ac7809c12e3e62f2471e321.tar.bz2
mpv-5a5b219853520fac3ac7809c12e3e62f2471e321.tar.xz
demux: fix opening pipes with demux_lavf
We told the demuxer that a pipe (if stream cache is enabled) is seekable. This is because the stream cache is technically seekable, it's just that seeking may fail at runtime if a non-cached byte range is requested. This caused libavformat to issue seeks on initialization (at least when piping mp4 youtube videos). Initialization failed completely after spamming tons of error messages. So, if an unseekable stream is cached, tell the demuxer that the file is not seekable. This gets reversed later (when printing a message about caching an unseekable stream), so the user can still try his luck by issuing a seek command. The important part is that libavformat initialization will not take code paths that will unnecessarily seek for whatever reasons. CC: @mpv-player/stable: regression from 0.3.x Conflicts: demux/demux.c
-rw-r--r--demux/demux.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 05073a4728..51a5f4dc01 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -583,6 +583,11 @@ static struct demuxer *open_given_type(struct mpv_global *global,
.filename = talloc_strdup(demuxer, stream->url),
.metadata = talloc_zero(demuxer, struct mp_tags),
};
+ demuxer->seekable = stream->seekable;
+ if (demuxer->stream->uncached_stream &&
+ !demuxer->stream->uncached_stream->seekable)
+ demuxer->seekable = false;
+
demuxer->params = params; // temporary during open()
int64_t start_pos = stream_tell(stream);