[FFmpeg-devel] [PATCH 2/3] lavc/mjpegdec: honor skip_frame option

Matthieu Bouron matthieu.bouron at gmail.com
Wed Oct 28 14:17:05 CET 2015


On Wed, Oct 28, 2015 at 02:57:14AM +0100, Michael Niedermayer wrote:
> On Tue, Oct 27, 2015 at 11:15:29PM +0100, Matthieu Bouron wrote:
> > On Sun, Oct 18, 2015 at 11:06:50AM +0200, Matthieu Bouron wrote:
> > [...]
> > > 
> > > Patch updated, the markers are now properly skipped (which also fixes a
> > > crash).
> > 
> > Patch updated. It fixes an issue with mjpeg streams (and in particular with
> > the fate sample ffmpeg-issue-897.avi) due to the EOI marker not handled when
> > skip_frame is set to AVDISCARD_ALL.
> > 
> > Matthieu
> 
> >  mjpegdec.c |   26 ++++++++++++++++++++++++++
> >  1 file changed, 26 insertions(+)
> > 36d41f1bded2f864394843c6a49d8cc24933688c  0002-lavc-mjpegdec-honor-skip_frame-option.patch
> > From 7325810d812c4182cd42946687a1f4abc04999d1 Mon Sep 17 00:00:00 2001
> > From: Matthieu Bouron <matthieu.bouron at stupeflix.com>
> > Date: Fri, 9 Oct 2015 15:15:15 +0200
> > Subject: [PATCH 2/3] lavc/mjpegdec: honor skip_frame option
> > 
> > ---
> >  libavcodec/mjpegdec.c | 26 ++++++++++++++++++++++++++
> >  1 file changed, 26 insertions(+)
> > 
> > diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
> > index 1a86b7b..b4ff83c 100644
> > --- a/libavcodec/mjpegdec.c
> > +++ b/libavcodec/mjpegdec.c
> > @@ -2038,6 +2038,22 @@ int ff_mjpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
> >              return AVERROR(ENOSYS);
> >          }
> >  
> > +        if (avctx->skip_frame == AVDISCARD_ALL) {
> > +            int i, found = 0;
> > +            static const int start_codes[] = { SOF0,
> > +                SOF1, SOF2, SOF3, SOF48, SOI, EOI };
> > +
> > +            for (i = 0; i < FF_ARRAY_ELEMS(start_codes); i++) {
> > +                if (start_code == start_codes[i]) {
> > +                    found = 1;
> > +                    break;
> > +                }
> > +            }
> > +            if (!found) {
> > +                goto skip;
> > +            }
> > +        }
> > +
> >          switch (start_code) {
> >          case SOI:
> >              s->restart_interval = 0;
> > @@ -2103,6 +2119,10 @@ eoi_parser:
> >                  if (s->bottom_field == !s->interlace_polarity)
> >                      break;
> >              }
> > +            if (avctx->skip_frame == AVDISCARD_ALL) {
> > +                s->got_picture = 0;
> 
> > +                goto the_end;
> 
> this would jump to all kinds of post scale and convert code
> that should probably be skiped over just to be sure it doesnt run
> otherwise patch LGTM and seems not breaking anything i tested
>

Patch updated, the post processing part is now skipped. The SOS marker is
now handled properly so the scan counter is incremented.
The decoder will also still error out if there is a SOF marker but no SOS
markers.

Thanks for all the feedback.

Matthieu
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-lavc-mjpegdec-honor-skip_frame-option.patch
Type: text/x-diff
Size: 2724 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151028/4d008c8e/attachment.patch>


More information about the ffmpeg-devel mailing list