[FFmpeg-devel] [PATCH] lavf/utils: add error check in av_read_frame()

Stefano Sabatini stefasab at gmail.com
Mon Sep 24 19:44:28 CEST 2012


On date Monday 2012-09-24 17:38:39 +0200, Michael Niedermayer encoded:
> On Mon, Sep 24, 2012 at 12:43:36AM +0200, Stefano Sabatini wrote:
> > In particular, fix crash when the input file contains no packets (e.g. an
> > ffmeta input).
> > ---
> >  libavformat/utils.c |   17 ++++++++++++-----
> >  1 files changed, 12 insertions(+), 5 deletions(-)
> > 
> > diff --git a/libavformat/utils.c b/libavformat/utils.c
> > index 6603483..4f3529a 100644
> > --- a/libavformat/utils.c
> > +++ b/libavformat/utils.c
> > @@ -1409,11 +1409,18 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt)
> >      AVStream *st;
> >  
> >      if (!genpts) {
> > -        ret = s->packet_buffer ? read_from_packet_buffer(&s->packet_buffer,
> > -                                                          &s->packet_buffer_end,
> > -                                                          pkt) :
> > -                                  read_frame_internal(s, pkt);
> > -        goto return_packet;
> > +        while (1) {
> > +            ret = s->packet_buffer ?
> > +                read_from_packet_buffer(&s->packet_buffer, &s->packet_buffer_end, pkt) :
> > +                read_frame_internal(s, pkt);
> > +            if (ret < 0) {
> > +                if (ret == AVERROR(EAGAIN))
> > +                    continue;
> > +                else
> > +                    return ret;
> > +            }
> > +            goto return_packet;
> > +        }
> >      }
> 
> this looks very wrong
> and likely totally breaks non blocking reads as it busy loops

So please suggest what to do. Indeed I'm not sure about the EAGAIN
check (would dropping the EAGAIN check be enough?).
-- 
FFmpeg = Fantastic and Frenzy Most Portentous Elastic Guru


More information about the ffmpeg-devel mailing list