summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mkv.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-01-25 13:27:35 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-01-27 14:26:48 +0200
commit298808cddc40b66dde9578ec8abb71094357c3ce (patch)
tree4201f7d7844faaad10dfea68ea60b0d2ab013d8e /libmpdemux/demux_mkv.c
parentd8a6af2980e7ecfee0a3e53896f4617d981ce56c (diff)
downloadmpv-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.c7
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);
}