summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-04-30 19:50:26 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-04-30 20:07:38 +0300
commit035611f0a773b1e8e8eb0f2ba8cf94933392605f (patch)
tree8d0e11b2d1bd44a93d32bfc1d144a483a1ec788e /libmpdemux
parentf38efd166e43f5cae783f38f9913d2859557143e (diff)
downloadmpv-035611f0a773b1e8e8eb0f2ba8cf94933392605f.tar.bz2
mpv-035611f0a773b1e8e8eb0f2ba8cf94933392605f.tar.xz
demux_y4m: fix failure with nonseekable input
Playback of nonseekable y4m streams was broken by a change merged from svn, r30970 which added support for multiple yuv4mpeg files concatenated together. The change included a stream_skip(stream, -1) call which only works for seekable files. Work around this by disabling the concatenated-file check for nonseekable streams. This means concatenated files are only supported if the stream is seekable, but this is an improvement compared to the svn commit which caused a regression making _all_ files fail in the nonseekable case. It would be reasonably easy to make the concatenation support work in all cases, either by modifying demux_y4m or (probably better) adding a general stream API to allow pushing back the read byte. However for now I'm only fixing the regression with the above trivial change.
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_y4m.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/libmpdemux/demux_y4m.c b/libmpdemux/demux_y4m.c
index 31dec39386..90a62b3891 100644
--- a/libmpdemux/demux_y4m.c
+++ b/libmpdemux/demux_y4m.c
@@ -31,7 +31,7 @@
#include "mp_msg.h"
#include "yuv4mpeg.h"
-//#include "stream/stream.h"
+#include "stream/stream.h"
#include "demuxer.h"
#include "stheader.h"
@@ -89,11 +89,14 @@ static int demux_y4m_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) {
int err, size;
int nextc;
- nextc = stream_read_char(demux->stream);
- stream_skip(demux->stream, -1);
- if (nextc == 'Y') {
- read_streaminfo(demux);
- demux->seekable = 0;
+ // Concatenated stream check; only done if seekable so skip(-1) works
+ if (demux->stream->flags & MP_STREAM_SEEK_BW) {
+ nextc = stream_read_char(demux->stream);
+ stream_skip(demux->stream, -1);
+ if (nextc == 'Y') {
+ read_streaminfo(demux);
+ demux->seekable = 0;
+ }
}
y4m_init_frame_info(&fi);