mjpegb: don't return 0 at the end of frame decoding.

Return 0 indicates "please return the same data again", i.e. it causes
an infinite loop. Instead, return that we consumed the buffer if we
finished decoding succesfully, or return an error if an error occurred.

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
(cherry picked from commit 74699ac8c8)

Signed-off-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Reinhard Tartler <siretart@tauware.de>
This commit is contained in:
Ronald S. Bultje
2012-02-17 16:27:36 -08:00
committed by Reinhard Tartler
parent 9a331217b0
commit 33149928ed

View File

@@ -66,7 +66,7 @@ read_header:
if (get_bits_long(&hgb, 32) != MKBETAG('m','j','p','g')) if (get_bits_long(&hgb, 32) != MKBETAG('m','j','p','g'))
{ {
av_log(avctx, AV_LOG_WARNING, "not mjpeg-b (bad fourcc)\n"); av_log(avctx, AV_LOG_WARNING, "not mjpeg-b (bad fourcc)\n");
return 0; return AVERROR_INVALIDDATA;
} }
field_size = get_bits_long(&hgb, 32); /* field size */ field_size = get_bits_long(&hgb, 32); /* field size */
@@ -142,7 +142,7 @@ read_header:
picture->quality*= FF_QP2LAMBDA; picture->quality*= FF_QP2LAMBDA;
} }
return buf_ptr - buf; return buf_size;
} }
AVCodec ff_mjpegb_decoder = { AVCodec ff_mjpegb_decoder = {