Commit cdc2c1c5 authored by John Stebbins's avatar John Stebbins Committed by Ronald S. Bultje

matroskadec: matroska_read_seek after after EBML_STOP leads to failure.

EBML_STOP leaves matroska->current_id set. Then matroska_read_seek changes
the stream position without resetting current_id.  The next
matroska_parse_cluster  fails due to calculation of incorrect pos.  So clear
current_id when avio_seek happens in matroska_read_seek.
Signed-off-by: 's avatarRonald S. Bultje <rsbultje@gmail.com>
parent 134557f3
......@@ -1904,6 +1904,7 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
if ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
avio_seek(s->pb, st->index_entries[st->nb_index_entries-1].pos, SEEK_SET);
matroska->current_id = 0;
while ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
matroska_clear_queue(matroska);
if (matroska_parse_cluster(matroska) < 0)
......@@ -1932,6 +1933,7 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
}
avio_seek(s->pb, st->index_entries[index_min].pos, SEEK_SET);
matroska->current_id = 0;
matroska->skip_to_keyframe = !(flags & AVSEEK_FLAG_ANY);
matroska->skip_to_timecode = st->index_entries[index].timestamp;
matroska->done = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment