diff options
author | Jean-François Moine <moinejf@free.fr> | 2010-06-27 02:08:19 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-02 14:31:10 -0400 |
commit | b192ca983746585e807259414f8d6f58cb28311f (patch) | |
tree | 8c95bdcebcf4217e3813d803ecf281af2d431e5f /drivers/media/video/gspca/m5602 | |
parent | c6dc725c8e0c3438587e18f918f6da16e7a23539 (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.c | 12 |
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 | } |