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

Michael Niedermayer michael at niedermayer.cc
Wed Oct 28 02:57:14 CET 2015


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

thanks

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Rewriting code that is poorly written but fully understood is good.
Rewriting code that one doesnt understand is a sign that one is less smart
then the original author, trying to rewrite it will not make it better.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151028/8df15fa9/attachment.sig>


More information about the ffmpeg-devel mailing list