From f50741147ccac999a8a3e8a15244cbe525537622 Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Sat, 17 Feb 2018 19:31:33 +0100 Subject: [PATCH] avformat/mxfdec: always use a stream which matches the first index table when seeking Obviously this is still not perfect, but better then it was. Using the first index table and mxf->current_edit_unit is still hardcoded in many places, so this change has hopefully the less chance of breaking anything that works now. Signed-off-by: Marton Balint --- libavformat/mxfdec.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 21fd2a876be..e0a4b5bd11e 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -3451,6 +3451,20 @@ static int mxf_read_seek(AVFormatContext *s, int stream_index, int64_t sample_ti mxf->current_edit_unit = sample_time; } else { t = &mxf->index_tables[0]; + if (t->index_sid != source_track->index_sid) { + /* If the first index table does not belong to the stream, then find a stream which does belong to the index table */ + for (i = 0; i < s->nb_streams; i++) { + MXFTrack *new_source_track = s->streams[i]->priv_data; + if (new_source_track && new_source_track->index_sid == t->index_sid) { + sample_time = av_rescale_q(sample_time, new_source_track->edit_rate, source_track->edit_rate); + source_track = new_source_track; + st = s->streams[i]; + break; + } + } + if (i == s->nb_streams) + return AVERROR_INVALIDDATA; + } /* clamp above zero, else ff_index_search_timestamp() returns negative * this also means we allow seeking before the start */ -- 2.39.2