[FFmpeg-devel] [PATCH] fix av_url_read_fseek

Howard Chu hyc
Sun Apr 11 03:57:09 CEST 2010


Michael Niedermayer wrote:
> On Sat, Apr 10, 2010 at 04:37:36PM -0700, Howard Chu wrote:
>> Michael Niedermayer wrote:
>>> On Sat, Apr 10, 2010 at 09:26:31AM -0700, Howard Chu wrote:
>>>> Index: libavformat/aviobuf.c
>>>> ===================================================================
>>>> --- libavformat/aviobuf.c	(revision 22813)
>>>> +++ libavformat/aviobuf.c	(working copy)
>>>> @@ -698,8 +698,11 @@
>>>>            return AVERROR(ENOSYS);
>>>>        ret = s->read_seek(h, stream_index, timestamp, flags);
>>>>        if(ret>= 0) {
>>>> +        int64_t pos;
>>>>            s->buf_ptr = s->buf_end; // Flush buffer
>>>> -        s->pos = s->seek(h, 0, SEEK_CUR);
>>>> +        pos = s->seek(h, 0, SEEK_CUR);
>>>> +        if (pos != AVERROR(ENOSYS))
>>>> +            s->pos = pos;
>>>>        }
>>>>        return ret;
>>>>    }
>>>
>>> this should be a seperate patch
>>
>> Protocols that implement read_seek are unlikely to also implement seek, so
>> this patch is needed to prevent the pos from getting set to a negative
>> value. Possibly it should just check for pos<= 0 instead of checking for
>> any specific error code. It's not clear that there's any real point to
>> calling seek here anyway, any stream that knows the value of SEEK_CUR would
>> have already updated itself while executing the read_seek.

> should that check not be<0 ?

Probably. As I already noted above, I have a lot of doubts about this chunk of 
code. Maybe better would be something like:

   if (pos >= 0)
      s->pos = pos
   else if (pos != AVERROR(ENOSYS))
      ret = pos;

I.e., if seek is actually implemented and fails, that probably should be 
reported to the caller.

-- 
   -- Howard Chu
   CTO, Symas Corp.           http://www.symas.com
   Director, Highland Sun     http://highlandsun.com/hyc/
   Chief Architect, OpenLDAP  http://www.openldap.org/project/



More information about the ffmpeg-devel mailing list