V4L/DVB (9090): gspca: Restart the state machine when no frame buffer in finepix.
authorFrank Zago <frank@zago.net>
Tue, 30 Sep 2008 06:55:33 +0000 (03:55 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 12 Oct 2008 11:37:13 +0000 (09:37 -0200)
Signed-off-by: Frank Zago <frank@zago.net>
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/finepix.c

index f75db9585f07387b048206ec9c0a85cdc74a79f2..65d3cbfe6b278e7446038696a2eaa8172d1695f5 100644 (file)
@@ -135,10 +135,8 @@ static void urb_callback(struct urb *urb)
                struct gspca_frame *frame;
 
                frame = gspca_get_i_frame(&dev->gspca_dev);
-               if (frame == NULL) {
+               if (frame == NULL)
                        gspca_dev->last_packet_type = DISCARD_PACKET;
-                       break;
-               }
                if (urb->actual_length < FPIX_MAX_TRANSFER ||
                        (data[urb->actual_length-2] == 0xff &&
                                data[urb->actual_length-1] == 0xd9)) {
@@ -149,18 +147,21 @@ static void urb_callback(struct urb *urb)
                         * but there's nothing we can do. We also end
                         * here if the the jpeg ends right at the end
                         * of the frame. */
-                       gspca_frame_add(gspca_dev, LAST_PACKET,
-                                       frame,
-                                       data, urb->actual_length);
+                       if (frame)
+                               gspca_frame_add(gspca_dev, LAST_PACKET,
+                                               frame,
+                                               data, urb->actual_length);
                        dev_new_state(FPIX_REQ_FRAME);
                        schedule_delayed_work(&dev->wqe, NEXT_FRAME_DELAY);
                } else {
 
                        /* got a partial image */
-                       gspca_frame_add(gspca_dev,
-                                   gspca_dev->last_packet_type == LAST_PACKET
-                                           ? FIRST_PACKET : INTER_PACKET,
-                                       frame,
+                       if (frame)
+                               gspca_frame_add(gspca_dev,
+                                               gspca_dev->last_packet_type
+                                                               == LAST_PACKET
+                                               ? FIRST_PACKET : INTER_PACKET,
+                                               frame,
                                        data, urb->actual_length);
                        read_frame_part(dev);
                }