diff -r d23374509b5b linux/drivers/media/video/gspca/gspca.c --- a/linux/drivers/media/video/gspca/gspca.c Wed Dec 03 18:10:01 2008 +0100 +++ b/linux/drivers/media/video/gspca/gspca.c Wed Dec 03 20:11:23 2008 +0100 @@ -211,6 +211,7 @@ { struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; struct gspca_frame *frame; + int i; int st; PDEBUG(D_PACK, "bulk irq"); @@ -231,16 +232,14 @@ } /* check the availability of the frame buffer */ - frame = gspca_get_i_frame(gspca_dev); - if (!frame) { - gspca_dev->last_packet_type = DISCARD_PACKET; - } else { - PDEBUG(D_PACK, "packet l:%d", urb->actual_length); - gspca_dev->sd_desc->pkt_scan(gspca_dev, - frame, - urb->transfer_buffer, - urb->actual_length); - } + i = gspca_dev->fr_i; + i = gspca_dev->fr_queue[i]; + frame = &gspca_dev->frame[i]; + PDEBUG(D_PACK, "packet l:%d", urb->actual_length); + gspca_dev->sd_desc->pkt_scan(gspca_dev, + frame, + urb->transfer_buffer, + urb->actual_length); /* resubmit the URB */ if (gspca_dev->cam.bulk_nurbs != 0) {