[vlc-commits] add exif jpeg detection to the image demuxer

Sébastien Escudier git at videolan.org
Thu Feb 16 10:48:28 CET 2012


vlc/vlc-2.0 | branch: master | Sébastien Escudier <sebastien-devel at celeos.eu> | Wed Feb 15 11:37:58 2012 +0100| [0d86ae71dd516af1242011509fca9c357a6ea0dc] | committer: Sébastien Escudier

add exif jpeg detection to the image demuxer
(cherry picked from commit 212e7579d65364ed3e749594052b028db8ccf2cb)

Signed-off-by: Sébastien Escudier <sebastien-devel at celeos.eu>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=0d86ae71dd516af1242011509fca9c357a6ea0dc
---

 modules/demux/image.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/modules/demux/image.c b/modules/demux/image.c
index 8921404..f2fb8ac 100644
--- a/modules/demux/image.c
+++ b/modules/demux/image.c
@@ -404,6 +404,24 @@ static bool IsSpiff(stream_t *s)
     return true;
 }
 
+static bool IsExif(stream_t *s)
+{
+    const uint8_t *header;
+    int size = stream_Peek(s, &header, 256);
+    int position = 0;
+
+    if (FindJpegMarker(&position, header, size) != 0xd8)
+        return false;
+    if (FindJpegMarker(&position, header, size) != 0xe1)
+        return false;
+    position += 2;  /* Skip size */
+    if (position + 5 > size)
+        return false;
+    if (memcmp(&header[position], "Exif\0", 5))
+        return false;
+    return true;
+}
+
 static bool IsTarga(stream_t *s)
 {
     /* The header is not enough to ensure proper detection, we need
@@ -513,6 +531,9 @@ static const image_format_t formats[] = {
     { .codec = VLC_CODEC_JPEG,
       .detect = IsSpiff,
     },
+    { .codec = VLC_CODEC_JPEG,
+      .detect = IsExif,
+    },
     { .codec = VLC_CODEC_TARGA,
       .detect = IsTarga,
     },



More information about the vlc-commits mailing list