]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
V4L/DVB (13452): gspca - main: Let the driver scan URB packets when no frame buffer.
authorJean-Francois Moine <moinejf@free.fr>
Fri, 13 Nov 2009 11:16:02 +0000 (08:16 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 5 Dec 2009 20:41:59 +0000 (18:41 -0200)
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/gspca.c

index 31ec5aa449103fc00f8c2c6379eb8631b949d1f7..68ba535300f72a9f5a0fb84225edfe4e39f8a6f0 100644 (file)
@@ -144,13 +144,6 @@ static void fill_frame(struct gspca_dev *gspca_dev,
        pkt_scan = gspca_dev->sd_desc->pkt_scan;
        for (i = 0; i < urb->number_of_packets; i++) {
 
-               /* check the availability of the frame buffer */
-               if ((gspca_dev->cur_frame->v4l2_buf.flags & BUF_ALL_FLAGS)
-                                       != V4L2_BUF_FLAG_QUEUED) {
-                       gspca_dev->last_packet_type = DISCARD_PACKET;
-                       break;
-               }
-
                /* check the packet status and length */
                len = urb->iso_frame_desc[i].actual_length;
                if (len == 0) {
@@ -223,17 +216,11 @@ static void bulk_irq(struct urb *urb)
                goto resubmit;
        }
 
-       /* check the availability of the frame buffer */
-       if ((gspca_dev->cur_frame->v4l2_buf.flags & BUF_ALL_FLAGS)
-                               != V4L2_BUF_FLAG_QUEUED) {
-               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,
-                                       gspca_dev->frame,
-                                       urb->transfer_buffer,
-                                       urb->actual_length);
-       }
+       PDEBUG(D_PACK, "packet l:%d", urb->actual_length);
+       gspca_dev->sd_desc->pkt_scan(gspca_dev,
+                               gspca_dev->frame,
+                               urb->transfer_buffer,
+                               urb->actual_length);
 
 resubmit:
        /* resubmit the URB */
@@ -266,16 +253,18 @@ struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev,
        int i, j;
 
        PDEBUG(D_PACK, "add t:%d l:%d", packet_type, len);
+
+       /* check the availability of the frame buffer */
        frame = gspca_dev->cur_frame;
+       if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS)
+                                       != V4L2_BUF_FLAG_QUEUED) {
+               gspca_dev->last_packet_type = DISCARD_PACKET;
+               return frame;
+       }
 
        /* when start of a new frame, if the current frame buffer
         * is not queued, discard the whole frame */
        if (packet_type == FIRST_PACKET) {
-               if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS)
-                                               != V4L2_BUF_FLAG_QUEUED) {
-                       gspca_dev->last_packet_type = DISCARD_PACKET;
-                       return frame;
-               }
                frame->data_end = frame->data;
                jiffies_to_timeval(get_jiffies_64(),
                                   &frame->v4l2_buf.timestamp);