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
>From 7325810d812c4182cd42946687a1f4abc04999d1 Mon Sep 17 00:00:00 2001 From: Matthieu Bouron <matthieu.bou...@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; + } if ((ret = av_frame_ref(frame, s->picture_ptr)) < 0) return ret; *got_frame = 1; @@ -2148,6 +2168,7 @@ eoi_parser: break; } +skip: /* eof process start code */ buf_ptr += (get_bits_count(&s->gb) + 7) / 8; av_log(avctx, AV_LOG_DEBUG, @@ -2158,6 +2179,11 @@ eoi_parser: av_log(avctx, AV_LOG_WARNING, "EOI missing, emulating\n"); goto eoi_parser; } + + if (avctx->skip_frame == AVDISCARD_ALL) { + return buf_ptr - buf; + } + av_log(avctx, AV_LOG_FATAL, "No JPEG data found in image\n"); return AVERROR_INVALIDDATA; fail: -- 2.6.2
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel