V4L/DVB (9861): gspca - ov534: Accept many simultaneous webcams.
authorJean-Francois Moine <moinejf@free.fr>
Thu, 4 Dec 2008 08:06:08 +0000 (05:06 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 30 Dec 2008 11:38:55 +0000 (09:38 -0200)
This patch moves the last fid and pts from static to the sd structure.

Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/ov534.c

index e02c8f70f8140d78bacbb2928191af8eba9c4216..28a7982792b36619a8024417efc2c1521599d279 100644 (file)
@@ -48,6 +48,8 @@ static int frame_rate;
 /* specific webcam descriptor */
 struct sd {
        struct gspca_dev gspca_dev;     /* !! must be the first item */
+       __u32 last_fid;
+       __u32 last_pts;
 };
 
 /* V4L2 controls supported by the driver */
@@ -397,9 +399,8 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame,
                        __u8 *data, int len)
 {
-       static __u32 last_pts;
+       struct sd *sd = (struct sd *) gspca_dev;
        __u32 this_pts;
-       static int last_fid;
        int this_fid;
 
        /* Payloads are prefixed with a the UVC-style header.  We
@@ -428,10 +429,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame,
        this_fid = (data[1] & UVC_STREAM_FID) ? 1 : 0;
 
        /* If PTS or FID has changed, start a new frame. */
-       if (this_pts != last_pts || this_fid != last_fid) {
+       if (this_pts != sd->last_pts || this_fid != sd->last_fid) {
                gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0);
-               last_pts = this_pts;
-               last_fid = this_fid;
+               sd->last_pts = this_pts;
+               sd->last_fid = this_fid;
        }
 
        /* Add the data from this payload */
@@ -440,7 +441,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame,
 
        /* If this packet is marked as EOF, end the frame */
        if (data[1] & UVC_STREAM_EOF) {
-               last_pts = 0;
+               sd->last_pts = 0;
 
                if ((frame->data_end - frame->data) !=
                    (gspca_dev->width * gspca_dev->height * 2)) {