aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/ov534.c
diff options
context:
space:
mode:
authorJim Paris <jim@jtan.com>2008-12-04 02:36:14 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-12-30 06:38:54 -0500
commit5ea9c4def8154a5be836dd31cbd97f49fd34ea8f (patch)
tree7e30ff4d8284dde1526570ce9b815473e959934b /drivers/media/video/gspca/ov534.c
parent47dfd21fbf4ba303b5fdfad6f4e110e57990803c (diff)
V4L/DVB (9859): gspca - ov534: Fix frame size so we don't miss the last pixel.
The frame size is too small, so we lose the last YUYV pixel. Fix the setup and remove the last_pixel hack. Signed-off-by: Jim Paris <jim@jtan.com> 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/ov534.c')
-rw-r--r--drivers/media/video/gspca/ov534.c28
1 files changed, 9 insertions, 19 deletions
diff --git a/drivers/media/video/gspca/ov534.c b/drivers/media/video/gspca/ov534.c
index ee08e30e23cc..79bb6241d27f 100644
--- a/drivers/media/video/gspca/ov534.c
+++ b/drivers/media/video/gspca/ov534.c
@@ -197,9 +197,9 @@ static const __u8 ov534_reg_initdata[][2] = {
197 { 0x1d, 0x40 }, 197 { 0x1d, 0x40 },
198 { 0x1d, 0x02 }, 198 { 0x1d, 0x02 },
199 { 0x1d, 0x00 }, 199 { 0x1d, 0x00 },
200 { 0x1d, 0x02 }, 200 { 0x1d, 0x02 }, /* frame size 0x025800 * 4 = 614400 */
201 { 0x1d, 0x57 }, 201 { 0x1d, 0x58 }, /* frame size */
202 { 0x1d, 0xff }, 202 { 0x1d, 0x00 }, /* frame size */
203 203
204 { 0x8d, 0x1c }, 204 { 0x8d, 0x1c },
205 { 0x8e, 0x80 }, 205 { 0x8e, 0x80 },
@@ -409,25 +409,15 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
409static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, 409static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame,
410 __u8 *data, int len) 410 __u8 *data, int len)
411{ 411{
412 /*
413 * The current camera setup doesn't stream the last pixel, so we set it
414 * to a dummy value
415 */
416 __u8 last[4] = { 0, 0, 0, 0 };
417 int framesize = frame->v4l2_buf.length; 412 int framesize = frame->v4l2_buf.length;
418 413
419 PDEBUG(D_PACK, ""); 414 if (len == framesize) {
420 PDEBUG(D_PACK, "** packet len = %d, framesize = %d", len, framesize); 415 frame = gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
421 PDEBUG(D_PACK, "** frame->data_end - frame->data + len = %d", 416 data, len);
422 frame->data_end - frame->data + len); 417 frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0);
423
424 if (frame->data_end - frame->data + len == framesize - 4) {
425 PDEBUG(D_PACK, " end of frame!");
426 gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
427 frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, last, 4);
428 gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, 0);
429 } else 418 } else
430 gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); 419 PDEBUG(D_PACK, "packet len = %d, framesize = %d", len,
420 framesize);
431} 421}
432 422
433/* sub-driver description */ 423/* sub-driver description */