jpegparse: add gst_jpeg_parse_remove_marker()
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Sun, 10 Apr 2011 17:53:35 +0000 (19:53 +0200)
committerStefan Kost <ensonic@users.sf.net>
Mon, 11 Apr 2011 07:38:09 +0000 (10:38 +0300)
This function will remove the whole marker from the buffer.

Also we set it as the default behavior for marker JPG{0-13}? in order to avoid
a useless #if

https://bugzilla.gnome.org/show_bug.cgi?id=626618

gst/jpegformat/gstjpegparse.c

index d9de450..cfe5c2e 100644 (file)
@@ -512,6 +512,31 @@ gst_jpeg_parse_sof (GstJpegParse * parse, GstByteReader * reader)
 }
 
 static inline gboolean
+gst_jpeg_parse_remove_marker (GstJpegParse * parse,
+    GstByteReader * reader, guint8 marker, GstBuffer * buffer)
+{
+  guint16 size = 0;
+  guint pos = gst_byte_reader_get_pos (reader);
+  guint8 *data = GST_BUFFER_DATA (buffer);
+
+  if (!gst_byte_reader_peek_uint16_be (reader, &size))
+    return FALSE;
+  if (gst_byte_reader_get_remaining (reader) < size)
+    return FALSE;
+
+  GST_LOG_OBJECT (parse, "unhandled marker %x removing %u bytes", marker, size);
+
+  memmove (&data[pos], &data[pos + size],
+      GST_BUFFER_SIZE (buffer) - (pos + size));
+  GST_BUFFER_SIZE (buffer) -= size;
+
+  if (!gst_byte_reader_set_pos (reader, pos - size))
+    return FALSE;
+
+  return TRUE;
+}
+
+static inline gboolean
 gst_jpeg_parse_skip_marker (GstJpegParse * parse,
     GstByteReader * reader, guint8 marker)
 {
@@ -671,7 +696,6 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
 {
   GstByteReader reader = GST_BYTE_READER_INIT_FROM_BUFFER (buffer);
   guint8 marker = 0;
-  guint16 size = 0;
   gboolean foundSOF = FALSE;
 
   if (!gst_byte_reader_peek_uint8 (&reader, &marker))
@@ -729,28 +753,8 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
       default:
         if (marker == JPG || (marker >= JPG0 && marker <= JPG13)) {
           /* we'd like to remove them from the buffer */
-#if 1
-          guint pos = gst_byte_reader_get_pos (&reader);
-          guint8 *data = GST_BUFFER_DATA (buffer);
-
-          if (!gst_byte_reader_peek_uint16_be (&reader, &size))
-            goto error;
-          if (gst_byte_reader_get_remaining (&reader) < size)
-            goto error;
-
-          GST_LOG_OBJECT (parse, "unhandled marker %x removing %u bytes",
-              marker, size);
-
-          memmove (&data[pos], &data[pos + size],
-              GST_BUFFER_SIZE (buffer) - (pos + size));
-          GST_BUFFER_SIZE (buffer) -= size;
-
-          if (!gst_byte_reader_set_pos (&reader, pos - size))
-            goto error;
-#else
-          if (!gst_jpeg_parse_skip_marker (parse, &reader, marker))
+          if (!gst_jpeg_parse_remove_marker (parse, &reader, marker, buffer))
             goto error;
-#endif
         } else if (marker >= APP0 && marker <= APP15) {
           if (!gst_jpeg_parse_skip_marker (parse, &reader, marker))
             goto error;