From 298808cddc40b66dde9578ec8abb71094357c3ce Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Mon, 25 Jan 2010 13:27:35 +0200 Subject: 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. --- libmpdemux/demux_mkv.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'libmpdemux/demux_mkv.c') 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); } -- cgit v1.2.3