From 40a6547a0f93f571772672fed2de8de17e02d1bb Mon Sep 17 00:00:00 2001 From: Hans de Goede <hdegoede@redhat.com> Date: Mon, 23 Apr 2012 19:43:07 +0200 Subject: [PATCH 02/12] libv4lconvert: Fix decoding of 160x120 Pixart JPEG images Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- lib/libv4lconvert/tinyjpeg.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/libv4lconvert/tinyjpeg.c b/lib/libv4lconvert/tinyjpeg.c index 2c2d4af..d2a7d3f 100644 --- a/lib/libv4lconvert/tinyjpeg.c +++ b/lib/libv4lconvert/tinyjpeg.c @@ -2101,7 +2101,17 @@ static int pixart_filter(struct jdec_private *priv, unsigned char *dest, { int chunksize, copied = 0; - /* Skip mysterious first data byte */ + /* The first data bytes encodes the image size: + 0x60: 160x120 + 0x61: 320x240 + 0x62: 640x480 + 160x120 images are not chunked due to their small size! + */ + if (src[0] == 0x60) { + memcpy(dest, src + 1, n - 1); + return n - 1; + } + src++; n--; @@ -2124,8 +2134,8 @@ kernel: 0xff 0xff 0x00 0xff 0x96, and we skip one unknown byte */ if (src[0] != 0xff || src[1] != 0xff || src[2] != 0xff) error("Missing Pixart ff ff ff xx header, " - "got: %02x %02x %02x %02x\n", - src[0], src[1], src[2], src[3]); + "got: %02x %02x %02x %02x, copied sofar: %d\n", + src[0], src[1], src[2], src[3], copied); if (src[3] > 6) error("Unexpected Pixart chunk size: %d\n", src[3]); -- 1.7.10