V4L/DVB (13453): gspca - all subdrivers: Remove the unused frame ptr from pkt_scan().
authorJean-Francois Moine <moinejf@free.fr>
Fri, 13 Nov 2009 12:21:03 +0000 (09:21 -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>
35 files changed:
drivers/media/video/gspca/conex.c
drivers/media/video/gspca/etoms.c
drivers/media/video/gspca/finepix.c
drivers/media/video/gspca/gl860/gl860.c
drivers/media/video/gspca/gspca.c
drivers/media/video/gspca/gspca.h
drivers/media/video/gspca/jeilinj.c
drivers/media/video/gspca/m5602/m5602_core.c
drivers/media/video/gspca/mars.c
drivers/media/video/gspca/mr97310a.c
drivers/media/video/gspca/ov519.c
drivers/media/video/gspca/ov534.c
drivers/media/video/gspca/pac207.c
drivers/media/video/gspca/pac7302.c
drivers/media/video/gspca/pac7311.c
drivers/media/video/gspca/sn9c20x.c
drivers/media/video/gspca/sonixb.c
drivers/media/video/gspca/sonixj.c
drivers/media/video/gspca/spca500.c
drivers/media/video/gspca/spca501.c
drivers/media/video/gspca/spca505.c
drivers/media/video/gspca/spca506.c
drivers/media/video/gspca/spca508.c
drivers/media/video/gspca/spca561.c
drivers/media/video/gspca/sq905.c
drivers/media/video/gspca/sq905c.c
drivers/media/video/gspca/stk014.c
drivers/media/video/gspca/stv0680.c
drivers/media/video/gspca/stv06xx/stv06xx.c
drivers/media/video/gspca/sunplus.c
drivers/media/video/gspca/t613.c
drivers/media/video/gspca/tv8532.c
drivers/media/video/gspca/vc032x.c
drivers/media/video/gspca/w996Xcf.c
drivers/media/video/gspca/zc3xx.c

index eca0035..2f0b8d6 100644 (file)
@@ -888,8 +888,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -897,16 +896,15 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        if (data[0] == 0xff && data[1] == 0xd8) {
 
                /* start of frame */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
 
                /* put the JPEG header in the new frame */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
-                       sd->jpeg_hdr, JPEG_HDR_SZ);
+               gspca_frame_add(gspca_dev, FIRST_PACKET,
+                               sd->jpeg_hdr, JPEG_HDR_SZ);
                data += 2;
                len -= 2;
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static void setbrightness(struct gspca_dev*gspca_dev)
index c1461e6..9de8641 100644 (file)
@@ -752,8 +752,7 @@ static void do_autogain(struct gspca_dev *gspca_dev)
 #undef LIMIT
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        int seqframe;
@@ -767,14 +766,13 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                       data[2], data[3], data[4], data[5]);
                data += 30;
                /* don't change datalength as the chips provided it */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, 0);
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                return;
        }
        if (len) {
                data += 8;
-               gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+               gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
        } else {                        /* Drop Packet */
                gspca_dev->last_packet_type = DISCARD_PACKET;
        }
index 480ec5c..5d90e74 100644 (file)
@@ -82,7 +82,6 @@ static void dostream(struct work_struct *work)
        struct gspca_dev *gspca_dev = &dev->gspca_dev;
        struct urb *urb = gspca_dev->urb[0];
        u8 *data = urb->transfer_buffer;
-       struct gspca_frame *frame;
        int ret = 0;
        int len;
 
@@ -118,10 +117,6 @@ again:
                        }
                        if (!gspca_dev->present || !gspca_dev->streaming)
                                goto out;
-                       frame = gspca_get_i_frame(&dev->gspca_dev);
-                       if (frame == NULL)
-                               gspca_dev->last_packet_type = DISCARD_PACKET;
-
                        if (len < FPIX_MAX_TRANSFER ||
                                (data[len - 2] == 0xff &&
                                        data[len - 1] == 0xd9)) {
@@ -132,21 +127,17 @@ again:
                                 * but there's nothing we can do. We also end
                                 * here if the the jpeg ends right at the end
                                 * of the frame. */
-                               if (frame)
-                                       frame = gspca_frame_add(gspca_dev,
-                                                       LAST_PACKET,
-                                                       frame,
-                                                       data, len);
+                               gspca_frame_add(gspca_dev, LAST_PACKET,
+                                               data, len);
                                break;
                        }
 
                        /* got a partial image */
-                       if (frame)
-                               gspca_frame_add(gspca_dev,
-                                               gspca_dev->last_packet_type
-                                                       == LAST_PACKET
-                                               ? FIRST_PACKET : INTER_PACKET,
-                                               frame, data, len);
+                       gspca_frame_add(gspca_dev,
+                                       gspca_dev->last_packet_type
+                                               == LAST_PACKET
+                                       ? FIRST_PACKET : INTER_PACKET,
+                                       data, len);
                }
 
                /* We must wait before trying reading the next
index a2108dd..a695e0a 100644 (file)
@@ -36,7 +36,7 @@ static int  sd_isoc_init(struct gspca_dev *gspca_dev);
 static int  sd_start(struct gspca_dev *gspca_dev);
 static void sd_stop0(struct gspca_dev *gspca_dev);
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame, u8 *data, s32 len);
+                       u8 *data, int len);
 static void sd_callback(struct gspca_dev *gspca_dev);
 
 static int gl860_guess_sensor(struct gspca_dev *gspca_dev,
@@ -433,7 +433,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 
 /* This function is called when an image is being received */
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame, u8 *data, s32 len)
+                       u8 *data, int len)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        static s32 nSkipped;
@@ -445,11 +445,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        /* Test only against 0202h, so endianess does not matter */
        switch (*(s16 *) data) {
        case 0x0202:            /* End of frame, start a new one */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
                nSkipped = 0;
                if (sd->nbIm >= 0 && sd->nbIm < 10)
                        sd->nbIm++;
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, 0);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, NULL, 0);
                break;
 
        default:
@@ -464,7 +464,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                                nSkipped = nToSkip + 1;
                        }
                        gspca_frame_add(gspca_dev,
-                               INTER_PACKET, frame, data, len);
+                               INTER_PACKET, data, len);
                }
                break;
        }
index 68ba535..4076f8e 100644 (file)
@@ -165,7 +165,7 @@ static void fill_frame(struct gspca_dev *gspca_dev,
                        i, urb->iso_frame_desc[i].offset, len);
                data = (u8 *) urb->transfer_buffer
                                        + urb->iso_frame_desc[i].offset;
-               pkt_scan(gspca_dev, gspca_dev->cur_frame, data, len);
+               pkt_scan(gspca_dev, data, len);
        }
 
 resubmit:
@@ -218,7 +218,6 @@ static void bulk_irq(struct urb *urb)
 
        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);
 
@@ -243,11 +242,10 @@ resubmit:
  * DISCARD_PACKET invalidates the whole frame.
  * On LAST_PACKET, a new frame is returned.
  */
-struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev,
-                                   enum gspca_packet_type packet_type,
-                                   struct gspca_frame *dummy,
-                                   const __u8 *data,
-                                   int len)
+void gspca_frame_add(struct gspca_dev *gspca_dev,
+                       enum gspca_packet_type packet_type,
+                       const u8 *data,
+                       int len)
 {
        struct gspca_frame *frame;
        int i, j;
@@ -259,7 +257,7 @@ struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev,
        if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS)
                                        != V4L2_BUF_FLAG_QUEUED) {
                gspca_dev->last_packet_type = DISCARD_PACKET;
-               return frame;
+               return;
        }
 
        /* when start of a new frame, if the current frame buffer
@@ -272,7 +270,7 @@ struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev,
        } else if (gspca_dev->last_packet_type == DISCARD_PACKET) {
                if (packet_type == LAST_PACKET)
                        gspca_dev->last_packet_type = packet_type;
-               return frame;
+               return;
        }
 
        /* append the packet to the frame buffer */
@@ -304,9 +302,9 @@ struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev,
                        i,
                        gspca_dev->fr_o);
                j = gspca_dev->fr_queue[i];
-               gspca_dev->cur_frame = frame = &gspca_dev->frame[j];
+               gspca_dev->cur_frame = &gspca_dev->frame[j];
        }
-       return frame;
+       return;
 }
 EXPORT_SYMBOL(gspca_frame_add);
 
index 59078bb..1816173 100644 (file)
@@ -79,8 +79,7 @@ typedef int (*cam_streamparm_op) (struct gspca_dev *,
 typedef int (*cam_qmnu_op) (struct gspca_dev *,
                        struct v4l2_querymenu *);
 typedef void (*cam_pkt_op) (struct gspca_dev *gspca_dev,
-                               struct gspca_frame *frame,
-                               __u8 *data,
+                               u8 *data,
                                int len);
 
 struct ctrl {
@@ -192,11 +191,10 @@ int gspca_dev_probe(struct usb_interface *intf,
                int dev_size,
                struct module *module);
 void gspca_disconnect(struct usb_interface *intf);
-struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev,
-                                   enum gspca_packet_type packet_type,
-                                   struct gspca_frame *frame,
-                                   const __u8 *data,
-                                   int len);
+void gspca_frame_add(struct gspca_dev *gspca_dev,
+                       enum gspca_packet_type packet_type,
+                       const u8 *data,
+                       int len);
 struct gspca_frame *gspca_get_i_frame(struct gspca_dev *gspca_dev);
 #ifdef CONFIG_PM
 int gspca_suspend(struct usb_interface *intf, pm_message_t message);
index d679970..2019b04 100644 (file)
@@ -181,7 +181,6 @@ static void jlj_dostream(struct work_struct *work)
 {
        struct sd *dev = container_of(work, struct sd, work_struct);
        struct gspca_dev *gspca_dev = &dev->gspca_dev;
-       struct gspca_frame *frame;
        int blocks_left; /* 0x200-sized blocks remaining in current frame. */
        int size_in_blocks;
        int act_len;
@@ -214,15 +213,13 @@ static void jlj_dostream(struct work_struct *work)
                PDEBUG(D_STREAM, "blocks_left = 0x%x", blocks_left);
 
                /* Start a new frame, and add the JPEG header, first thing */
-               frame = gspca_get_i_frame(gspca_dev);
-               if (frame) {
-                       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
-                                       dev->jpeg_hdr, JPEG_HDR_SZ);
-                       /* Toss line 0 of data block 0, keep the rest. */
-                       gspca_frame_add(gspca_dev, INTER_PACKET,
-                               frame, buffer + FRAME_HEADER_LEN,
+               gspca_frame_add(gspca_dev, FIRST_PACKET,
+                               dev->jpeg_hdr, JPEG_HDR_SZ);
+               /* Toss line 0 of data block 0, keep the rest. */
+               gspca_frame_add(gspca_dev, INTER_PACKET,
+                               buffer + FRAME_HEADER_LEN,
                                JEILINJ_MAX_TRANSFER - FRAME_HEADER_LEN);
-               }
+
                while (blocks_left > 0) {
                        if (!gspca_dev->present)
                                goto quit_stream;
@@ -239,10 +236,8 @@ static void jlj_dostream(struct work_struct *work)
                                packet_type = LAST_PACKET;
                        else
                                packet_type = INTER_PACKET;
-                       if (frame)
-                               gspca_frame_add(gspca_dev, packet_type,
-                                               frame, buffer,
-                                               JEILINJ_MAX_TRANSFER);
+                       gspca_frame_add(gspca_dev, packet_type,
+                                       buffer, JEILINJ_MAX_TRANSFER);
                }
        }
 quit_stream:
index 7f1e541..844fc1d 100644 (file)
@@ -274,8 +274,7 @@ static int m5602_start_transfer(struct gspca_dev *gspca_dev)
 }
 
 static void m5602_urb_complete(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,
-                       __u8 *data, int len)
+                               u8 *data, int len)
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
@@ -295,19 +294,27 @@ static void m5602_urb_complete(struct gspca_dev *gspca_dev,
                len -= 6;
 
                /* Complete the last frame (if any) */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET,
-                                       frame, data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET,
+                               NULL, 0);
                sd->frame_count++;
 
                /* Create a new frame */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
 
                PDEBUG(D_FRAM, "Starting new frame %d",
                       sd->frame_count);
 
        } else {
-               int cur_frame_len = frame->data_end - frame->data;
+               struct gspca_frame *frame;
+               int cur_frame_len;
 
+               frame = gspca_get_i_frame(gspca_dev);
+               if (frame == NULL) {
+                       gspca_dev->last_packet_type = DISCARD_PACKET;
+                       return;
+               }
+
+               cur_frame_len = frame->data_end - frame->data;
                /* Remove urb header */
                data += 4;
                len -= 4;
@@ -316,12 +323,12 @@ static void m5602_urb_complete(struct gspca_dev *gspca_dev,
                        PDEBUG(D_FRAM, "Continuing frame %d copying %d bytes",
                               sd->frame_count, len);
 
-                       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+                       gspca_frame_add(gspca_dev, INTER_PACKET,
                                        data, len);
                } else if (frame->v4l2_buf.length - cur_frame_len > 0) {
                        /* Add the remaining data up to frame size */
-                       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data,
-                                       frame->v4l2_buf.length - cur_frame_len);
+                       gspca_frame_add(gspca_dev, INTER_PACKET, data,
+                                   frame->v4l2_buf.length - cur_frame_len);
                }
        }
 }
index de769ca..9cf8d68 100644 (file)
@@ -325,8 +325,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -348,11 +347,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                            || data[5 + p] == 0x67) {
                                PDEBUG(D_PACK, "sof offset: %d len: %d",
                                        p, len);
-                               frame = gspca_frame_add(gspca_dev, LAST_PACKET,
-                                                       frame, data, p);
+                               gspca_frame_add(gspca_dev, LAST_PACKET,
+                                               data, p);
 
                                /* put the JPEG header */
-                               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+                               gspca_frame_add(gspca_dev, FIRST_PACKET,
                                        sd->jpeg_hdr, JPEG_HDR_SZ);
                                data += p + 16;
                                len -= p + 16;
@@ -360,7 +359,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                        }
                }
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index ffb5e6d..126d968 100644 (file)
@@ -1030,9 +1030,8 @@ static int sd_getmin_clockdiv(struct gspca_dev *gspca_dev, __s32 *val)
 #include "pac_common.h"
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,    /* target */
-                       __u8 *data,                   /* isoc packet */
-                       int len)                      /* iso packet length */
+                       u8 *data,               /* isoc packet */
+                       int len)                /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
        unsigned char *sof;
@@ -1047,15 +1046,15 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                        n -= sizeof pac_sof_marker;
                else
                        n = 0;
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
+               gspca_frame_add(gspca_dev, LAST_PACKET,
                                        data, n);
                /* Start next frame. */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+               gspca_frame_add(gspca_dev, FIRST_PACKET,
                        pac_sof_marker, sizeof pac_sof_marker);
                len -= sof - data;
                data = sof;
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 /* sub-driver description */
index f88a526..ad9ec33 100644 (file)
@@ -3920,9 +3920,8 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void ov511_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *in,                       /* isoc packet */
-                       int len)                        /* iso packet length */
+                       u8 *in,                 /* isoc packet */
+                       int len)                /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
@@ -3953,11 +3952,11 @@ static void ov511_pkt_scan(struct gspca_dev *gspca_dev,
                                return;
                        }
                        /* Add 11 byte footer to frame, might be usefull */
-                       gspca_frame_add(gspca_dev, LAST_PACKET, frame, in, 11);
+                       gspca_frame_add(gspca_dev, LAST_PACKET, in, 11);
                        return;
                } else {
                        /* Frame start */
-                       gspca_frame_add(gspca_dev, FIRST_PACKET, frame, in, 0);
+                       gspca_frame_add(gspca_dev, FIRST_PACKET, in, 0);
                        sd->packet_nr = 0;
                }
        }
@@ -3966,12 +3965,11 @@ static void ov511_pkt_scan(struct gspca_dev *gspca_dev,
        len--;
 
        /* intermediate packet */
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, in, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, in, len);
 }
 
 static void ov518_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -3979,8 +3977,8 @@ static void ov518_pkt_scan(struct gspca_dev *gspca_dev,
        /* A false positive here is likely, until OVT gives me
         * the definitive SOF/EOF format */
        if ((!(data[0] | data[1] | data[2] | data[3] | data[5])) && data[6]) {
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0);
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, NULL, 0);
                sd->packet_nr = 0;
        }
 
@@ -4004,12 +4002,11 @@ static void ov518_pkt_scan(struct gspca_dev *gspca_dev,
        }
 
        /* intermediate packet */
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static void ov519_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        /* Header of ov519 is 16 bytes:
@@ -4032,7 +4029,7 @@ static void ov519_pkt_scan(struct gspca_dev *gspca_dev,
                        len -= HDRSZ;
 #undef HDRSZ
                        if (data[0] == 0xff || data[1] == 0xd8)
-                               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+                               gspca_frame_add(gspca_dev, FIRST_PACKET,
                                                data, len);
                        else
                                gspca_dev->last_packet_type = DISCARD_PACKET;
@@ -4040,34 +4037,31 @@ static void ov519_pkt_scan(struct gspca_dev *gspca_dev,
                case 0x51:              /* end of frame */
                        if (data[9] != 0)
                                gspca_dev->last_packet_type = DISCARD_PACKET;
-                       gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, 0);
+                       gspca_frame_add(gspca_dev, LAST_PACKET,
+                                       NULL, 0);
                        return;
                }
        }
 
        /* intermediate packet */
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
-                       data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static void ovfx2_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        /* A short read signals EOF */
        if (len < OVFX2_BULK_SIZE) {
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, len);
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, data, len);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, NULL, 0);
                return;
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -4075,20 +4069,20 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        switch (sd->bridge) {
        case BRIDGE_OV511:
        case BRIDGE_OV511PLUS:
-               ov511_pkt_scan(gspca_dev, frame, data, len);
+               ov511_pkt_scan(gspca_dev, data, len);
                break;
        case BRIDGE_OV518:
        case BRIDGE_OV518PLUS:
-               ov518_pkt_scan(gspca_dev, frame, data, len);
+               ov518_pkt_scan(gspca_dev, data, len);
                break;
        case BRIDGE_OV519:
-               ov519_pkt_scan(gspca_dev, frame, data, len);
+               ov519_pkt_scan(gspca_dev, data, len);
                break;
        case BRIDGE_OVFX2:
-               ovfx2_pkt_scan(gspca_dev, frame, data, len);
+               ovfx2_pkt_scan(gspca_dev, data, len);
                break;
        case BRIDGE_W9968CF:
-               w9968cf_pkt_scan(gspca_dev, frame, data, len);
+               w9968cf_pkt_scan(gspca_dev, data, len);
                break;
        }
 }
index 26d98b1..193129a 100644 (file)
@@ -1403,8 +1403,8 @@ static void sd_stopN_ov965x(struct gspca_dev *gspca_dev)
 #define UVC_STREAM_EOF (1 << 1)
 #define UVC_STREAM_FID (1 << 0)
 
-static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame,
-                       __u8 *data, int len)
+static void sd_pkt_scan(struct gspca_dev *gspca_dev,
+                       u8 *data, int len)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        __u32 this_pts;
@@ -1445,23 +1445,22 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame,
                /* If PTS or FID has changed, start a new frame. */
                if (this_pts != sd->last_pts || this_fid != sd->last_fid) {
                        if (gspca_dev->last_packet_type == INTER_PACKET)
-                               frame = gspca_frame_add(gspca_dev,
-                                                       LAST_PACKET, frame,
-                                                       NULL, 0);
+                               gspca_frame_add(gspca_dev, LAST_PACKET,
+                                               NULL, 0);
                        sd->last_pts = this_pts;
                        sd->last_fid = this_fid;
-                       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, FIRST_PACKET,
                                        data + 12, len - 12);
                /* If this packet is marked as EOF, end the frame */
                } else if (data[1] & UVC_STREAM_EOF) {
                        sd->last_pts = 0;
-                       frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                               data + 12, len - 12);
+                       gspca_frame_add(gspca_dev, LAST_PACKET,
+                                       data + 12, len - 12);
                } else {
 
                        /* Add the data from this payload */
-                       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
-                                               data + 12, len - 12);
+                       gspca_frame_add(gspca_dev, INTER_PACKET,
+                                       data + 12, len - 12);
                }
 
                /* Done this payload */
@@ -1469,7 +1468,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame,
 
 discard:
                /* Discard data until a new frame starts. */
-               gspca_frame_add(gspca_dev, DISCARD_PACKET, frame, NULL, 0);
+               gspca_dev->last_packet_type = DISCARD_PACKET;
 
 scan_next:
                remaining_len -= len;
index 57e13e2..4706a82 100644 (file)
@@ -337,8 +337,7 @@ static void pac207_do_auto_gain(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,
-                       __u8 *data,
+                       u8 *data,
                        int len)
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -354,10 +353,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                        n -= sizeof pac_sof_marker;
                else
                        n = 0;
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, n);
+               gspca_frame_add(gspca_dev, LAST_PACKET,
+                               data, n);
                sd->header_read = 0;
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, NULL, 0);
                len -= sof - data;
                data = sof;
        }
@@ -381,7 +380,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                sd->header_read = 11;
        }
 
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static void setbrightness(struct gspca_dev *gspca_dev)
index e0fd767..74accee 100644 (file)
@@ -855,7 +855,7 @@ static void pac_start_frame(struct gspca_dev *gspca_dev,
 {
        unsigned char tmpbuf[4];
 
-       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+       gspca_frame_add(gspca_dev, FIRST_PACKET,
                pac_jpeg_header1, sizeof(pac_jpeg_header1));
 
        tmpbuf[0] = lines >> 8;
@@ -863,25 +863,31 @@ static void pac_start_frame(struct gspca_dev *gspca_dev,
        tmpbuf[2] = samples_per_line >> 8;
        tmpbuf[3] = samples_per_line & 0xff;
 
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+       gspca_frame_add(gspca_dev, INTER_PACKET,
                tmpbuf, sizeof(tmpbuf));
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+       gspca_frame_add(gspca_dev, INTER_PACKET,
                pac_jpeg_header2, sizeof(pac_jpeg_header2));
 }
 
 /* this function is run at interrupt level */
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
+       struct gspca_frame *frame;
        unsigned char *sof;
 
        sof = pac_find_sof(&sd->sof_read, data, len);
        if (sof) {
                int n, lum_offset, footer_length;
 
+               frame = gspca_get_i_frame(gspca_dev);
+               if (frame == NULL) {
+                       gspca_dev->last_packet_type = DISCARD_PACKET;
+                       return;
+               }
+
                /* 6 bytes after the FF D9 EOF marker a number of lumination
                   bytes are send corresponding to different parts of the
                   image, the 14th and 15th byte after the EOF seem to
@@ -895,12 +901,12 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                        frame->data_end += n;
                        n = 0;
                }
-               frame = gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+               gspca_frame_add(gspca_dev, INTER_PACKET,
                                        data, n);
                if (gspca_dev->last_packet_type != DISCARD_PACKET &&
                                frame->data_end[-2] == 0xff &&
                                frame->data_end[-1] == 0xd9)
-                       frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, LAST_PACKET,
                                                NULL, 0);
 
                n = sof - data;
@@ -920,7 +926,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                pac_start_frame(gspca_dev, frame,
                        gspca_dev->width, gspca_dev->height);
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index 1a27da0..e5697a6 100644 (file)
@@ -653,7 +653,7 @@ static void pac_start_frame(struct gspca_dev *gspca_dev,
 {
        unsigned char tmpbuf[4];
 
-       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+       gspca_frame_add(gspca_dev, FIRST_PACKET,
                pac_jpeg_header1, sizeof(pac_jpeg_header1));
 
        tmpbuf[0] = lines >> 8;
@@ -661,25 +661,31 @@ static void pac_start_frame(struct gspca_dev *gspca_dev,
        tmpbuf[2] = samples_per_line >> 8;
        tmpbuf[3] = samples_per_line & 0xff;
 
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+       gspca_frame_add(gspca_dev, INTER_PACKET,
                tmpbuf, sizeof(tmpbuf));
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+       gspca_frame_add(gspca_dev, INTER_PACKET,
                pac_jpeg_header2, sizeof(pac_jpeg_header2));
 }
 
 /* this function is run at interrupt level */
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
        unsigned char *sof;
+       struct gspca_frame *frame;
 
        sof = pac_find_sof(&sd->sof_read, data, len);
        if (sof) {
                int n, lum_offset, footer_length;
 
+               frame = gspca_get_i_frame(gspca_dev);
+               if (frame == NULL) {
+                       gspca_dev->last_packet_type = DISCARD_PACKET;
+                       return;
+               }
+
                /* 6 bytes after the FF D9 EOF marker a number of lumination
                   bytes are send corresponding to different parts of the
                   image, the 14th and 15th byte after the EOF seem to
@@ -693,12 +699,12 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                        frame->data_end += n;
                        n = 0;
                }
-               frame = gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+               gspca_frame_add(gspca_dev, INTER_PACKET,
                                        data, n);
                if (gspca_dev->last_packet_type != DISCARD_PACKET &&
                                frame->data_end[-2] == 0xff &&
                                frame->data_end[-1] == 0xd9)
-                       frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, LAST_PACKET,
                                                NULL, 0);
 
                n = sof - data;
@@ -717,7 +723,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                pac_start_frame(gspca_dev, frame,
                        gspca_dev->height, gspca_dev->width);
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val)
index cdad3db..b1944a7 100644 (file)
@@ -2342,7 +2342,6 @@ static void sd_dqcallback(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
                        u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
@@ -2378,22 +2377,22 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                avg_lum >>= 9;
                atomic_set(&sd->avg_lum, avg_lum);
                gspca_frame_add(gspca_dev, LAST_PACKET,
-                               frame, data, len);
+                               data, len);
                return;
        }
        if (gspca_dev->last_packet_type == LAST_PACKET) {
                if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv
                                & MODE_JPEG) {
-                       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, FIRST_PACKET,
                                sd->jpeg_hdr, JPEG_HDR_SZ);
-                       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+                       gspca_frame_add(gspca_dev, INTER_PACKET,
                                data, len);
                } else {
-                       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, FIRST_PACKET,
                                data, len);
                }
        } else {
-               gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+               gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
        }
 }
 
index cf3af8d..a9f0610 100644 (file)
@@ -995,8 +995,7 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       unsigned char *data,            /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        int i;
@@ -1054,12 +1053,12 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                                        pkt_type = DISCARD_PACKET;
                                }
 
-                               frame = gspca_frame_add(gspca_dev, pkt_type,
-                                                       frame, data, 0);
+                               gspca_frame_add(gspca_dev, pkt_type,
+                                               NULL, 0);
                                data += i + fr_h_sz;
                                len -= i + fr_h_sz;
                                gspca_frame_add(gspca_dev, FIRST_PACKET,
-                                               frame, data, len);
+                                               data, len);
                                return;
                        }
                }
@@ -1068,15 +1067,21 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_RAW) {
                /* In raw mode we sometimes get some garbage after the frame
                   ignore this */
-               int used = frame->data_end - frame->data;
+               struct gspca_frame *frame;
+               int used;
                int size = cam->cam_mode[gspca_dev->curr_mode].sizeimage;
 
+               frame = gspca_get_i_frame(gspca_dev);
+               if (frame == NULL) {
+                       gspca_dev->last_packet_type = DISCARD_PACKET;
+                       return;
+               }
+               used = frame->data_end - frame->data;
                if (used + len > size)
                        len = size - used;
        }
 
-       gspca_frame_add(gspca_dev, INTER_PACKET,
-                       frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index 5f82efb..282c707 100644 (file)
@@ -1993,7 +1993,6 @@ static void do_autogain(struct gspca_dev *gspca_dev)
 /* scan the URB packets */
 /* This function is run at interrupt level. */
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
                        u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
@@ -2005,7 +2004,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
 
                /* end of frame */
                gspca_frame_add(gspca_dev, LAST_PACKET,
-                               frame, data, sof + 2);
+                               data, sof + 2);
                if (sd->ag_cnt < 0)
                        return;
 /* w1 w2 w3 */
@@ -2028,10 +2027,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        if (gspca_dev->last_packet_type == LAST_PACKET) {
 
                /* put the JPEG 422 header */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+               gspca_frame_add(gspca_dev, FIRST_PACKET,
                        sd->jpeg_hdr, JPEG_HDR_SZ);
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index fab7ef8..8bd844d 100644 (file)
@@ -899,8 +899,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -913,11 +912,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
 /*                     gspca_dev->last_packet_type = DISCARD_PACKET; */
                        return;
                }
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
+               gspca_frame_add(gspca_dev, LAST_PACKET,
                                        ffd9, 2);
 
                /* put the JPEG header in the new frame */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+               gspca_frame_add(gspca_dev, FIRST_PACKET,
                        sd->jpeg_hdr, JPEG_HDR_SZ);
 
                data += SPCA500_OFFSET_DATA;
@@ -931,7 +930,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        i = 0;
        do {
                if (data[i] == 0xff) {
-                       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+                       gspca_frame_add(gspca_dev, INTER_PACKET,
                                        data, i + 1);
                        len -= i;
                        data += i;
@@ -940,7 +939,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                }
                i++;
        } while (i < len);
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static void setbrightness(struct gspca_dev *gspca_dev)
index b74a342..d251f14 100644 (file)
@@ -2032,20 +2032,15 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        switch (data[0]) {
        case 0:                         /* start of frame */
-               frame = gspca_frame_add(gspca_dev,
-                                       LAST_PACKET,
-                                       frame,
-                                       data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
                data += SPCA501_OFFSET_DATA;
                len -= SPCA501_OFFSET_DATA;
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
-                               data, len);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                return;
        case 0xff:                      /* drop */
 /*             gspca_dev->last_packet_type = DISCARD_PACKET; */
@@ -2053,8 +2048,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        }
        data++;
        len--;
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
-                       data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index ea8c9fe..0f9232f 100644 (file)
@@ -739,26 +739,22 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
                        u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        switch (data[0]) {
        case 0:                         /* start of frame */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
                data += SPCA50X_OFFSET_DATA;
                len -= SPCA50X_OFFSET_DATA;
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
-                               data, len);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                break;
        case 0xff:                      /* drop */
                break;
        default:
                data += 1;
                len -= 1;
-               gspca_frame_add(gspca_dev, INTER_PACKET, frame,
-                               data, len);
+               gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
                break;
        }
 }
index a199298..ab28cc2 100644 (file)
@@ -543,18 +543,15 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        switch (data[0]) {
        case 0:                         /* start of frame */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
                data += SPCA50X_OFFSET_DATA;
                len -= SPCA50X_OFFSET_DATA;
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
-                               data, len);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                break;
        case 0xff:                      /* drop */
 /*             gspca_dev->last_packet_type = DISCARD_PACKET; */
@@ -562,8 +559,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        default:
                data += 1;
                len -= 1;
-               gspca_frame_add(gspca_dev, INTER_PACKET, frame,
-                               data, len);
+               gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
                break;
        }
 }
index 9696c4c..4d8e6cf 100644 (file)
@@ -1447,26 +1447,22 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
                        u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        switch (data[0]) {
        case 0:                         /* start of frame */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
                data += SPCA508_OFFSET_DATA;
                len -= SPCA508_OFFSET_DATA;
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
-                               data, len);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                break;
        case 0xff:                      /* drop */
                break;
        default:
                data += 1;
                len -= 1;
-               gspca_frame_add(gspca_dev, INTER_PACKET, frame,
-                               data, len);
+               gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
                break;
        }
 }
index 27e82b3..58c2f00 100644 (file)
@@ -779,8 +779,7 @@ static void do_autogain(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame, /* target */
-                       __u8 *data,             /* isoc packet */
+                       u8 *data,               /* isoc packet */
                        int len)                /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -788,12 +787,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        len--;
        switch (*data++) {                      /* sequence number */
        case 0:                                 /* start of frame */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
                if (data[1] & 0x10) {
                        /* compressed bayer */
-                       gspca_frame_add(gspca_dev, FIRST_PACKET,
-                                       frame, data, len);
+                       gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                } else {
                        /* raw bayer (with a header, which we skip) */
                        if (sd->chip_revision == Rev012A) {
@@ -803,14 +800,13 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                                data += 16;
                                len -= 16;
                        }
-                       gspca_frame_add(gspca_dev, FIRST_PACKET,
-                                               frame, data, len);
+                       gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                }
                return;
        case 0xff:                      /* drop (empty mpackets) */
                return;
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 /* rev 72a only */
index 547d1fd..1fcaca6 100644 (file)
@@ -214,7 +214,6 @@ static void sq905_dostream(struct work_struct *work)
 {
        struct sd *dev = container_of(work, struct sd, work_struct);
        struct gspca_dev *gspca_dev = &dev->gspca_dev;
-       struct gspca_frame *frame;
        int bytes_left; /* bytes remaining in current frame. */
        int data_len;   /* size to use for the next read. */
        int header_read; /* true if we have already read the frame header. */
@@ -266,18 +265,14 @@ static void sq905_dostream(struct work_struct *work)
                        } else {
                                packet_type = INTER_PACKET;
                        }
-                       frame = gspca_get_i_frame(gspca_dev);
-                       if (frame) {
-                               frame = gspca_frame_add(gspca_dev, packet_type,
-                                               frame, data, data_len);
-                               /* If entire frame fits in one packet we still
-                                  need to add a LAST_PACKET */
-                               if (packet_type == FIRST_PACKET &&
-                                   bytes_left == 0)
-                                       frame = gspca_frame_add(gspca_dev,
-                                                       LAST_PACKET,
-                                                       frame, data, 0);
-                       }
+                       gspca_frame_add(gspca_dev, packet_type,
+                                       data, data_len);
+                       /* If entire frame fits in one packet we still
+                          need to add a LAST_PACKET */
+                       if (packet_type == FIRST_PACKET &&
+                           bytes_left == 0)
+                               gspca_frame_add(gspca_dev, LAST_PACKET,
+                                               NULL, 0);
                }
                if (gspca_dev->present) {
                        /* acknowledge the frame */
index 81020f6..d70b156 100644 (file)
@@ -115,7 +115,6 @@ static void sq905c_dostream(struct work_struct *work)
 {
        struct sd *dev = container_of(work, struct sd, work_struct);
        struct gspca_dev *gspca_dev = &dev->gspca_dev;
-       struct gspca_frame *frame;
        int bytes_left; /* bytes remaining in current frame. */
        int data_len;   /* size to use for the next read. */
        int act_len;
@@ -146,10 +145,8 @@ static void sq905c_dostream(struct work_struct *work)
                PDEBUG(D_STREAM, "bytes_left = 0x%x", bytes_left);
                /* We keep the header. It has other information, too. */
                packet_type = FIRST_PACKET;
-               frame = gspca_get_i_frame(gspca_dev);
-               if (frame)
-                       gspca_frame_add(gspca_dev, packet_type,
-                               frame, buffer, FRAME_HEADER_LEN);
+               gspca_frame_add(gspca_dev, packet_type,
+                               buffer, FRAME_HEADER_LEN);
                while (bytes_left > 0 && gspca_dev->present) {
                        data_len = bytes_left > SQ905C_MAX_TRANSFER ?
                                SQ905C_MAX_TRANSFER : bytes_left;
@@ -167,9 +164,8 @@ static void sq905c_dostream(struct work_struct *work)
                                packet_type = LAST_PACKET;
                        else
                                packet_type = INTER_PACKET;
-                       if (frame)
-                               gspca_frame_add(gspca_dev, packet_type,
-                                               frame, buffer, data_len);
+                       gspca_frame_add(gspca_dev, packet_type,
+                                       buffer, data_len);
                }
        }
 quit_stream:
index 4762896..8e23320 100644 (file)
@@ -418,8 +418,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -435,11 +434,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
         *              (without ending - ff d9)
         */
        if (data[0] == 0xff && data[1] == 0xfe) {
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       ffd9, 2);
+               gspca_frame_add(gspca_dev, LAST_PACKET,
+                               ffd9, 2);
 
                /* put the JPEG 411 header */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+               gspca_frame_add(gspca_dev, FIRST_PACKET,
                        sd->jpeg_hdr, JPEG_HDR_SZ);
 
                /* beginning of the frame */
@@ -447,7 +446,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                data += STKHDRSZ;
                len -= STKHDRSZ;
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index 0981ce1..2a69d7c 100644 (file)
@@ -281,8 +281,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,
-                       __u8 *data,
+                       u8 *data,
                        int len)
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -299,10 +298,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        /* Finish the previous frame, we do this upon reception of the next
           packet, even though it is already complete so that the strange 16
           byte packets send after a corrupt frame can discard it. */
-       frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, NULL, 0);
+       gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
 
        /* Store the just received frame */
-       gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
 }
 
 /* sub-driver description */
index bfae63f..5d0241b 100644 (file)
@@ -312,8 +312,7 @@ out:
  * The 0005 and 0100 chunks seem to appear only in compressed stream.
  */
 static void stv06xx_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -366,7 +365,7 @@ frame_data:
                                sd->to_skip -= skip;
                        }
 
-                       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+                       gspca_frame_add(gspca_dev, INTER_PACKET,
                                        data, chunk_len);
                        break;
 
@@ -378,7 +377,7 @@ frame_data:
 
                        /* Create a new frame, chunk length should be zero */
                        gspca_frame_add(gspca_dev, FIRST_PACKET,
-                                       frame, data, 0);
+                                       NULL, 0);
 
                        if (sd->bridge == BRIDGE_ST6422)
                                sd->to_skip = gspca_dev->width * 4;
@@ -394,8 +393,8 @@ frame_data:
                        PDEBUG(D_PACK, "End of frame detected");
 
                        /* Complete the last frame (if any) */
-                       frame = gspca_frame_add(gspca_dev, LAST_PACKET,
-                                               frame, data, 0);
+                       gspca_frame_add(gspca_dev, LAST_PACKET,
+                                       NULL, 0);
 
                        if (chunk_len)
                                PDEBUG(D_ERR, "Chunk length is "
index aa8f995..682652c 100644 (file)
@@ -1116,7 +1116,6 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
                        u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
@@ -1186,11 +1185,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                break;
        }
        if (sof) {              /* start of frame */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       ffd9, 2);
+               gspca_frame_add(gspca_dev, LAST_PACKET,
+                               ffd9, 2);
 
                /* put the JPEG header in the new frame */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+               gspca_frame_add(gspca_dev, FIRST_PACKET,
                        sd->jpeg_hdr, JPEG_HDR_SZ);
        }
 
@@ -1198,7 +1197,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        i = 0;
        do {
                if (data[i] == 0xff) {
-                       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+                       gspca_frame_add(gspca_dev, INTER_PACKET,
                                        data, i + 1);
                        len -= i;
                        data += i;
@@ -1207,7 +1206,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                }
                i++;
        } while (i < len);
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index 1d321c3..55ef6a7 100644 (file)
@@ -938,7 +938,6 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
                        u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
@@ -956,9 +955,9 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                /* extra bytes....., could be processed too but would be
                 * a waste of time, right now leave the application and
                 * libjpeg do it for ourserlves.. */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
+               gspca_frame_add(gspca_dev, LAST_PACKET,
                                        ffd9, 2);
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                return;
        }
 
@@ -967,7 +966,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                 * other's do not include it... */
                len -= 2;
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index 4b44dde..b74a3b6 100644 (file)
@@ -398,8 +398,7 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -424,9 +423,9 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
         * - 4 bytes
         */
        gspca_frame_add(gspca_dev, packet_type0,
-                       frame, data + 2, gspca_dev->width);
+                       data + 2, gspca_dev->width);
        gspca_frame_add(gspca_dev, packet_type1,
-                       frame, data + gspca_dev->width + 5, gspca_dev->width);
+                       data + gspca_dev->width + 5, gspca_dev->width);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
index 589042f..2667523 100644 (file)
@@ -2987,7 +2987,6 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
                        u8 *data,                       /* isoc packet */
                        int len)                        /* iso pkt length */
 {
@@ -2996,21 +2995,25 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
        if (data[0] == 0xff && data[1] == 0xd8) {
                PDEBUG(D_PACK,
                        "vc032x header packet found len %d", len);
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                               data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
                data += sd->image_offset;
                len -= sd->image_offset;
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
-                               data, len);
+               gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
                return;
        }
 
        /* The vc0321 sends some additional data after sending the complete
         * frame, we ignore this. */
-       if (sd->bridge == BRIDGE_VC0321
-           && len > frame->v4l2_buf.length - (frame->data_end - frame->data))
-               len = frame->v4l2_buf.length - (frame->data_end - frame->data);
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       if (sd->bridge == BRIDGE_VC0321) {
+               struct gspca_frame *frame;
+               int l;
+
+               frame = gspca_get_i_frame(gspca_dev);
+               l = frame->data_end - frame->data;
+               if (len > frame->v4l2_buf.length - l)
+                       len = frame->v4l2_buf.length - l;
+       }
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_sethflip(struct gspca_dev *gspca_dev, __s32 val)
index 4f9add7..2fffe20 100644 (file)
@@ -576,8 +576,7 @@ static void w9968cf_stop0(struct sd *sd)
    to be precise it sends: SOI, SOF, DRI, SOS, Y-data, SOS, U-data, SOS,
    V-data, EOI. */
 static void w9968cf_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,      /* target */
-                       __u8 *data,                     /* isoc packet */
+                       u8 *data,                       /* isoc packet */
                        int len)                        /* iso packet length */
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -587,9 +586,9 @@ static void w9968cf_pkt_scan(struct gspca_dev *gspca_dev,
                if (len >= 2 &&
                    data[0] == 0xff &&
                    data[1] == 0xd8) {
-                       frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, LAST_PACKET,
                                        NULL, 0);
-                       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, FIRST_PACKET,
                                        sd->jpeg_hdr, JPEG_HDR_SZ);
                        /* Strip the ff d8, our own header (which adds
                           huffman and quantization tables) already has this */
@@ -599,12 +598,12 @@ static void w9968cf_pkt_scan(struct gspca_dev *gspca_dev,
        } else {
                /* In UYVY mode an empty packet signals EOF */
                if (gspca_dev->empty_packet) {
-                       frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, LAST_PACKET,
                                                NULL, 0);
-                       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+                       gspca_frame_add(gspca_dev, FIRST_PACKET,
                                        NULL, 0);
                        gspca_dev->empty_packet = 0;
                }
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
index 1130507..864974b 100644 (file)
@@ -6974,17 +6974,16 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
-                       struct gspca_frame *frame,
-                       __u8 *data,
+                       u8 *data,
                        int len)
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
        if (data[0] == 0xff && data[1] == 0xd8) {       /* start of frame */
-               frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
-                                       data, 0);
+               gspca_frame_add(gspca_dev, LAST_PACKET,
+                                       NULL, 0);
                /* put the JPEG header in the new frame */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+               gspca_frame_add(gspca_dev, FIRST_PACKET,
                        sd->jpeg_hdr, JPEG_HDR_SZ);
 
                /* remove the webcam's header:
@@ -6996,7 +6995,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                data += 18;
                len -= 18;
        }
-       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
+       gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
 }
 
 static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)