summaryrefslogtreecommitdiff
path: root/gst/jpegformat
diff options
context:
space:
mode:
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2011-04-10 19:53:35 +0200
committerStefan Kost <ensonic@users.sf.net>2011-04-11 10:38:09 +0300
commit824364d152dbac2039e2bf39bbcdb25434297fc7 (patch)
tree3c0f88f24045fd549f54d8faa76c066ac2400044 /gst/jpegformat
parent0e27f49dd42623fe4f987381005a681389fd04ca (diff)
jpegparse: add gst_jpeg_parse_remove_marker()
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
Diffstat (limited to 'gst/jpegformat')
-rw-r--r--gst/jpegformat/gstjpegparse.c48
1 files changed, 26 insertions, 22 deletions
diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c
index d9de45018..cfe5c2e6d 100644
--- a/gst/jpegformat/gstjpegparse.c
+++ b/gst/jpegformat/gstjpegparse.c
@@ -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;