From: Arnout Vandecappelle Date: Wed, 6 May 2009 11:11:53 +0000 (+0200) Subject: jpegdec: support additional 0xff before end marker. X-Git-Tag: 1.19.3~509^2~10530 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=788986e26987634c924263d280cd8fa4f8eb4990;p=platform%2Fupstream%2Fgstreamer.git 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 --- diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c index a0391cc..b64486e 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)