[FFmpeg-devel] [PATCH] avcodec/mjpegdec: Try to continue decoding on zero quant matrix value

Andriy Gelman andriy.gelman at gmail.com
Sat Jul 3 19:25:28 EEST 2021


From: Andriy Gelman <andriy.gelman at gmail.com>

A zero value in the quantization matrix is invalid but in practice will
just set the transform coefficient to zero after inverse quantization.
Try to continue decoding if the AV_EF_EXPLODE flag is not set.

Fixes ticket #9287.

Signed-off-by: Andriy Gelman <andriy.gelman at gmail.com>
---

The last frame in the sample of the ticket does not decode because the
input file appears truncated.
Something like the following patch would still be needed to output the final
frame:
https://patchwork.ffmpeg.org/project/ffmpeg/patch/20210627135307.14008-1-michael@niedermayer.cc/

 libavcodec/mjpegdec.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
index 02a987fd0c..8172dca513 100644
--- a/libavcodec/mjpegdec.c
+++ b/libavcodec/mjpegdec.c
@@ -217,8 +217,10 @@ int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
         for (i = 0; i < 64; i++) {
             s->quant_matrixes[index][i] = get_bits(&s->gb, pr ? 16 : 8);
             if (s->quant_matrixes[index][i] == 0) {
-                av_log(s->avctx, AV_LOG_ERROR, "dqt: 0 quant value\n");
-                return AVERROR_INVALIDDATA;
+                int log_level = s->avctx->err_recognition & AV_EF_EXPLODE ? AV_LOG_ERROR : AV_LOG_WARNING;
+                av_log(s->avctx, log_level, "dqt: 0 quant value\n");
+                if (s->avctx->err_recognition & AV_EF_EXPLODE)
+                    return AVERROR_INVALIDDATA;
             }
         }
 
-- 
2.32.0



More information about the ffmpeg-devel mailing list