aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/stk-webcam.c
diff options
context:
space:
mode:
authorJaime Velasco Juan <jsagarribay@gmail.com>2008-07-22 11:28:36 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-07-26 12:18:15 -0400
commitb18559076a31ab0be2d980ce2beff8e32504e080 (patch)
tree755a4c6265baab9a7873a552e75d18cfe6671324 /drivers/media/video/stk-webcam.c
parentf78d92c9ffcda7451b5943ab491c087f1ec7e08d (diff)
V4L/DVB (8491): stkwebcam: Always reuse last queued buffer
This change keeps the video stream going on when the application is slow queuing buffers, instead of spamming dmesg and hanging. Fixes a problem with aMSN reported by Samed Beyribey <beyribey@gmail.com> Signed-off-by: Jaime Velasco Juan <jsagarribay@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/stk-webcam.c')
-rw-r--r--drivers/media/video/stk-webcam.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/media/video/stk-webcam.c b/drivers/media/video/stk-webcam.c
index 8aa56fe02546..a8a72768ca91 100644
--- a/drivers/media/video/stk-webcam.c
+++ b/drivers/media/video/stk-webcam.c
@@ -445,18 +445,19 @@ static void stk_isoc_handler(struct urb *urb)
445 fb->v4lbuf.bytesused = 0; 445 fb->v4lbuf.bytesused = 0;
446 fill = fb->buffer; 446 fill = fb->buffer;
447 } else if (fb->v4lbuf.bytesused == dev->frame_size) { 447 } else if (fb->v4lbuf.bytesused == dev->frame_size) {
448 list_move_tail(dev->sio_avail.next, 448 if (list_is_singular(&dev->sio_avail)) {
449 &dev->sio_full); 449 /* Always reuse the last buffer */
450 wake_up(&dev->wait_frame); 450 fb->v4lbuf.bytesused = 0;
451 if (list_empty(&dev->sio_avail)) { 451 fill = fb->buffer;
452 (void) (printk_ratelimit() && 452 } else {
453 STK_ERROR("No buffer available\n")); 453 list_move_tail(dev->sio_avail.next,
454 goto resubmit; 454 &dev->sio_full);
455 wake_up(&dev->wait_frame);
456 fb = list_first_entry(&dev->sio_avail,
457 struct stk_sio_buffer, list);
458 fb->v4lbuf.bytesused = 0;
459 fill = fb->buffer;
455 } 460 }
456 fb = list_first_entry(&dev->sio_avail,
457 struct stk_sio_buffer, list);
458 fb->v4lbuf.bytesused = 0;
459 fill = fb->buffer;
460 } 461 }
461 } else { 462 } else {
462 framelen -= 4; 463 framelen -= 4;