diff options
author | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2011-04-10 19:53:35 +0200 |
---|---|---|
committer | Stefan Kost <ensonic@users.sf.net> | 2011-04-11 10:38:09 +0300 |
commit | 824364d152dbac2039e2bf39bbcdb25434297fc7 (patch) | |
tree | 3c0f88f24045fd549f54d8faa76c066ac2400044 /gst/jpegformat | |
parent | 0e27f49dd42623fe4f987381005a681389fd04ca (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.c | 48 |
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; |