aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/mars.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-03-03 03:33:41 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 11:43:22 -0400
commit71cb2764fcc51bd9e1b95be5b0f2da6f026634c7 (patch)
treecad0450231d5b4e7db071396ea5a33dabd3e314e /drivers/media/video/gspca/mars.c
parentc98afbfc20355dd04a7b817b232e06a4c3e73bac (diff)
V4L/DVB (11039): gspca - most jpeg subdrivers: Change the JPEG header creation.
Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/mars.c')
-rw-r--r--drivers/media/video/gspca/mars.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/drivers/media/video/gspca/mars.c b/drivers/media/video/gspca/mars.c
index ce065d363e8..6eb813e7b71 100644
--- a/drivers/media/video/gspca/mars.c
+++ b/drivers/media/video/gspca/mars.c
@@ -22,7 +22,6 @@
22#define MODULE_NAME "mars" 22#define MODULE_NAME "mars"
23 23
24#include "gspca.h" 24#include "gspca.h"
25#define QUANT_VAL 1 /* quantization table */
26#include "jpeg.h" 25#include "jpeg.h"
27 26
28MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); 27MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>");
@@ -37,6 +36,9 @@ struct sd {
37 u8 colors; 36 u8 colors;
38 u8 gamma; 37 u8 gamma;
39 u8 sharpness; 38 u8 sharpness;
39 u8 quality;
40
41 u8 *jpeg_hdr;
40}; 42};
41 43
42/* V4L2 controls supported by the driver */ 44/* V4L2 controls supported by the driver */
@@ -176,6 +178,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
176 sd->colors = COLOR_DEF; 178 sd->colors = COLOR_DEF;
177 sd->gamma = GAMMA_DEF; 179 sd->gamma = GAMMA_DEF;
178 sd->sharpness = SHARPNESS_DEF; 180 sd->sharpness = SHARPNESS_DEF;
181 sd->quality = 50;
179 gspca_dev->nbalt = 9; /* use the altsetting 08 */ 182 gspca_dev->nbalt = 9; /* use the altsetting 08 */
180 return 0; 183 return 0;
181} 184}
@@ -193,6 +196,12 @@ static int sd_start(struct gspca_dev *gspca_dev)
193 u8 *data; 196 u8 *data;
194 int i; 197 int i;
195 198
199 /* create the JPEG header */
200 sd->jpeg_hdr = kmalloc(JPEG_HDR_SZ, GFP_KERNEL);
201 jpeg_define(sd->jpeg_hdr, gspca_dev->height, gspca_dev->width,
202 0x21); /* JPEG 422 */
203 jpeg_set_qual(sd->jpeg_hdr, sd->quality);
204
196 data = gspca_dev->usb_buf; 205 data = gspca_dev->usb_buf;
197 206
198 data[0] = 0x01; /* address */ 207 data[0] = 0x01; /* address */
@@ -303,11 +312,19 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
303 PDEBUG(D_ERR, "Camera Stop failed"); 312 PDEBUG(D_ERR, "Camera Stop failed");
304} 313}
305 314
315static void sd_stop0(struct gspca_dev *gspca_dev)
316{
317 struct sd *sd = (struct sd *) gspca_dev;
318
319 kfree(sd->jpeg_hdr);
320}
321
306static void sd_pkt_scan(struct gspca_dev *gspca_dev, 322static void sd_pkt_scan(struct gspca_dev *gspca_dev,
307 struct gspca_frame *frame, /* target */ 323 struct gspca_frame *frame, /* target */
308 __u8 *data, /* isoc packet */ 324 __u8 *data, /* isoc packet */
309 int len) /* iso packet length */ 325 int len) /* iso packet length */
310{ 326{
327 struct sd *sd = (struct sd *) gspca_dev;
311 int p; 328 int p;
312 329
313 if (len < 6) { 330 if (len < 6) {
@@ -330,7 +347,8 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
330 frame, data, p); 347 frame, data, p);
331 348
332 /* put the JPEG header */ 349 /* put the JPEG header */
333 jpeg_put_header(gspca_dev, frame, 0x21); 350 gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
351 sd->jpeg_hdr, JPEG_HDR_SZ);
334 data += p + 16; 352 data += p + 16;
335 len -= p + 16; 353 len -= p + 16;
336 break; 354 break;
@@ -436,6 +454,7 @@ static const struct sd_desc sd_desc = {
436 .init = sd_init, 454 .init = sd_init,
437 .start = sd_start, 455 .start = sd_start,
438 .stopN = sd_stopN, 456 .stopN = sd_stopN,
457 .stop0 = sd_stop0,
439 .pkt_scan = sd_pkt_scan, 458 .pkt_scan = sd_pkt_scan,
440}; 459};
441 460