aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/m5602
diff options
context:
space:
mode:
authorJean-François Moine <moinejf@free.fr>2010-06-27 02:08:19 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-08-02 14:31:10 -0400
commitb192ca983746585e807259414f8d6f58cb28311f (patch)
tree8c95bdcebcf4217e3813d803ecf281af2d431e5f /drivers/media/video/gspca/m5602
parentc6dc725c8e0c3438587e18f918f6da16e7a23539 (diff)
V4L/DVB: gspca - main: Simplify image building
The image pointer and its length are now in the main structure instead of in the frame buffer. They are updated on application vidioc_qbuf and in the URB interrupt function when ending an image. Signed-off-by: Jean-François Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/m5602')
-rw-r--r--drivers/media/video/gspca/m5602/m5602_core.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/media/video/gspca/m5602/m5602_core.c b/drivers/media/video/gspca/m5602/m5602_core.c
index 4294c75e3b11..0c4ad5a5642a 100644
--- a/drivers/media/video/gspca/m5602/m5602_core.c
+++ b/drivers/media/video/gspca/m5602/m5602_core.c
@@ -305,30 +305,28 @@ static void m5602_urb_complete(struct gspca_dev *gspca_dev,
305 sd->frame_count); 305 sd->frame_count);
306 306
307 } else { 307 } else {
308 struct gspca_frame *frame;
309 int cur_frame_len; 308 int cur_frame_len;
310 309
311 frame = gspca_get_i_frame(gspca_dev); 310 if (gspca_dev->image == NULL) {
312 if (frame == NULL) {
313 gspca_dev->last_packet_type = DISCARD_PACKET; 311 gspca_dev->last_packet_type = DISCARD_PACKET;
314 return; 312 return;
315 } 313 }
316 314
317 cur_frame_len = frame->data_end - frame->data; 315 cur_frame_len = gspca_dev->image_len;
318 /* Remove urb header */ 316 /* Remove urb header */
319 data += 4; 317 data += 4;
320 len -= 4; 318 len -= 4;
321 319
322 if (cur_frame_len + len <= frame->v4l2_buf.length) { 320 if (cur_frame_len + len <= gspca_dev->frsz) {
323 PDEBUG(D_FRAM, "Continuing frame %d copying %d bytes", 321 PDEBUG(D_FRAM, "Continuing frame %d copying %d bytes",
324 sd->frame_count, len); 322 sd->frame_count, len);
325 323
326 gspca_frame_add(gspca_dev, INTER_PACKET, 324 gspca_frame_add(gspca_dev, INTER_PACKET,
327 data, len); 325 data, len);
328 } else if (frame->v4l2_buf.length - cur_frame_len > 0) { 326 } else {
329 /* Add the remaining data up to frame size */ 327 /* Add the remaining data up to frame size */
330 gspca_frame_add(gspca_dev, INTER_PACKET, data, 328 gspca_frame_add(gspca_dev, INTER_PACKET, data,
331 frame->v4l2_buf.length - cur_frame_len); 329 gspca_dev->frsz - cur_frame_len);
332 } 330 }
333 } 331 }
334} 332}