From 788986e26987634c924263d280cd8fa4f8eb4990 Mon Sep 17 00:00:00 2001 From: Arnout Vandecappelle Date: Wed, 6 May 2009 13:11:53 +0200 Subject: jpegdec: support additional 0xff before end marker. JPEG markers may be preceded by additional 0xff. jpegdec should skip over these, even before the end marker. See #579808 --- ext/jpeg/gstjpegdec.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'ext/jpeg') diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c index a0391cc8..b64486ed 100644 --- a/ext/jpeg/gstjpegdec.c +++ b/ext/jpeg/gstjpegdec.c @@ -446,17 +446,6 @@ gst_jpeg_dec_parse_image_data (GstJpegDec * dec) while (1) { guint frame_len; - /* enough bytes left for EOI marker? (we need 0xff 0xNN, thus end-1) */ - if (data >= end - 1) { - GST_DEBUG ("at end of input and no EOI marker found, need more data"); - return 0; - } - - if (is_jpeg_end_marker (data)) { - GST_DEBUG ("0x%08x: end marker", data - start); - goto found_eoi; - } - /* do we need to resync? */ if (*data != 0xff) { GST_DEBUG ("Lost sync at 0x%08x, resyncing", data - start); @@ -485,8 +474,21 @@ gst_jpeg_dec_parse_image_data (GstJpegDec * dec) } GST_DEBUG ("found sync at %p", data - size); } - while (*data == 0xff) + + while (*data == 0xff && data < end) ++data; + /* enough bytes left for EOI marker? (we need 0xNN after the 0xff) */ + if (data >= end) { + GST_DEBUG ("at end of input and no EOI marker found, need more data"); + return 0; + } + + if (is_jpeg_end_marker (data - 1)) { + data--; + GST_DEBUG ("0x%08x: end marker", data - start); + goto found_eoi; + } + if (data + 2 >= end) return 0; if (*data >= 0xd0 && *data <= 0xd7) -- cgit