summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnout Vandecappelle <arnout@mind.be>2009-05-06 13:11:53 +0200
committerWim Taymans <wim.taymans@collabora.co.uk>2009-05-06 13:11:53 +0200
commit788986e26987634c924263d280cd8fa4f8eb4990 (patch)
tree86279da72ebc12d4642fead7c0217eb98ee26dd1
parentb7c5847dbdab1907852c8cf0744461df3f879af3 (diff)
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
-rw-r--r--ext/jpeg/gstjpegdec.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c
index a0391cc86..b64486ed6 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)