[FFmpeg-devel] [PATCH] avformat/matroskadec: Fix cluster parsing loop which gathers seek information

Rodger Combs rodger.combs at gmail.com
Wed Oct 22 17:40:52 CEST 2014


> On Oct 22, 2014, at 08:01, wm4 <nfxjfg at googlemail.com> wrote:
> 
> On Wed, 22 Oct 2014 06:09:10 -0500
> Rodger Combs <rodger.combs at gmail.com> wrote:
> 
>> 
>>> On Oct 21, 2014, at 21:38, Michael Niedermayer <michaelni at gmx.at> wrote:
>>> 
>>> Fixes Ticket2263
>>> Fixes Ticket3934
>>> 
>>> Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
>>> ---
>>> libavformat/matroskadec.c |    4 ++--
>>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>> 
>>> diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
>>> index b742319..2ef3222 100644
>>> --- a/libavformat/matroskadec.c
>>> +++ b/libavformat/matroskadec.c
>>> @@ -2921,11 +2921,11 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
>>>        goto err;
>>>    timestamp = FFMAX(timestamp, st->index_entries[0].timestamp);
>>> 
>>> -    if ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
>>> +    if ((index = av_index_search_timestamp(st, timestamp, flags)) < 0 || index == st->nb_index_entries - 1) {
>>>        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) {
>>> +        while ((index = av_index_search_timestamp(st, timestamp, flags)) < 0 || index == st->nb_index_entries - 1) {
>>>            matroska_clear_queue(matroska);
>>>            if (matroska_parse_cluster(matroska) < 0)
>>>                break;
>>> -- 
>>> 1.7.9.5
>>> 
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> 
>> 
>> Looks good to me, and does fix the problem for my files.
> 
> But it's not a complete fix, or is it?
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Right; this solves the failure-to-seek problem, but seeking in these files is still slow because we don't read the later SeekHead.



More information about the ffmpeg-devel mailing list