diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-01-25 13:27:35 +0200 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-01-27 14:26:48 +0200 |
commit | 298808cddc40b66dde9578ec8abb71094357c3ce (patch) | |
tree | 4201f7d7844faaad10dfea68ea60b0d2ab013d8e /libmpdemux/demux_mkv.c | |
parent | d8a6af2980e7ecfee0a3e53896f4617d981ce56c (diff) | |
download | mpv-298808cddc40b66dde9578ec8abb71094357c3ce.tar.bz2 mpv-298808cddc40b66dde9578ec8abb71094357c3ce.tar.xz |
demux_mkv: don't stop playback on non-Cluster elements
The main demuxing code signaled EOF and stopped playback if it hit a
top-level element other than Cluster. There are files with other
elements between Cluster ones, at least repeated copies of Track
headers. Change the code to skip any non-Cluster element and only stop
searching on real file EOF.
Diffstat (limited to 'libmpdemux/demux_mkv.c')
-rw-r--r-- | libmpdemux/demux_mkv.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 8a60da0836..6b7ed5a7b4 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -2771,8 +2771,11 @@ static int demux_mkv_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds) } } - if (ebml_read_id(s, &il) != MATROSKA_ID_CLUSTER) - return 0; + while (ebml_read_id(s, &il) != MATROSKA_ID_CLUSTER) { + ebml_read_skip(s, NULL); + if (s->eof) + return 0; + } mkv_d->cluster_start = stream_tell(s) - il; mkv_d->cluster_size = ebml_read_length(s, NULL); } |