[FFmpeg-devel] [PATCH] Set the eof flag if a fskip call fails
Martin Storsjö
martin
Mon Jul 19 13:59:55 CEST 2010
On Mon, 19 Jul 2010, Michael Niedermayer wrote:
> On Mon, Jul 19, 2010 at 12:22:16PM +0300, Martin Storsj? wrote:
> > Hi,
> >
> > If the user called url_fskip and it failed, the read position of the
> > stream is not where the user intended it to be, and I think we can assume
> > that we hit eof. Thus, setting eof_reached = 1 seems logical to me.
>
> how is this differernt from url_fseek() ?
I'd say, with fseek, one may be ready to fallback to not doing something
if the seek failed, but if fskip failed, we're probably at the end of the
stream, and need to take some action (stop reading), otherwise we're not
at least reading at the position we think we are.
I guess I should explain the initial reason for this. I recently debugged
a case where the flv demuxer went out of sync with the data it read, since
one of the url_fseek()s (that at that point used an ordinary low-level
http seek, just for skipping 4 bytes ahead) spuriously failed. This lead
to the demuxer suddenly returning garbage packets since it wasn't reading
at the offset it thought it was, since the seek had failed, but we weren't
yet at eof.
So, I'm just trying to add proper error checking at each level so noone
else will need to go through the same debugging session as I did.
Now we at least can notice failures from url_fskip since it returns an
error code, but instead of checking each of them, having them set the eof
flag would make the error handling much leaner, and it would fit into how
at least I conceptually see fskip.
Also, the short seek fix for aviobuf makes this issue almost completely go
away (since a short seek done by a read will trigger the eof flag).
// Martin
More information about the ffmpeg-devel
mailing list