[FFmpeg-devel] [PATCH] fix av_url_read_fseek
Michael Niedermayer
michaelni
Sun Apr 11 14:06:27 CEST 2010
On Sat, Apr 10, 2010 at 06:57:09PM -0700, Howard Chu wrote:
> 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.
what you say sounds reasonable at first glance
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
If a bugfix only changes things apparently unrelated to the bug with no
further explanation, that is a good sign that the bugfix is wrong.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100411/20b55fd9/attachment.pgp>
More information about the ffmpeg-devel
mailing list