mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
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: Ronald S. Bultje <rsbultje@gmail.com>
This commit is contained in:
parent
134557f3a4
commit
cdc2c1c576
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user