Commit 8c252050 authored by Jean-Francois Moine's avatar Jean-Francois Moine Committed by Mauro Carvalho Chehab

V4L/DVB (9861): gspca - ov534: Accept many simultaneous webcams.

This patch moves the last fid and pts from static to the sd structure.
Signed-off-by: default avatarJean-Francois Moine <moinejf@free.fr>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent fb139224
...@@ -48,6 +48,8 @@ static int frame_rate; ...@@ -48,6 +48,8 @@ static int frame_rate;
/* specific webcam descriptor */ /* specific webcam descriptor */
struct sd { struct sd {
struct gspca_dev gspca_dev; /* !! must be the first item */ struct gspca_dev gspca_dev; /* !! must be the first item */
__u32 last_fid;
__u32 last_pts;
}; };
/* V4L2 controls supported by the driver */ /* V4L2 controls supported by the driver */
...@@ -397,9 +399,8 @@ static void sd_stopN(struct gspca_dev *gspca_dev) ...@@ -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, static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame,
__u8 *data, int len) __u8 *data, int len)
{ {
static __u32 last_pts; struct sd *sd = (struct sd *) gspca_dev;
__u32 this_pts; __u32 this_pts;
static int last_fid;
int this_fid; int this_fid;
/* Payloads are prefixed with a the UVC-style header. We /* 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, ...@@ -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; this_fid = (data[1] & UVC_STREAM_FID) ? 1 : 0;
/* If PTS or FID has changed, start a new frame. */ /* 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); gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0);
last_pts = this_pts; sd->last_pts = this_pts;
last_fid = this_fid; sd->last_fid = this_fid;
} }
/* Add the data from this payload */ /* Add the data from this payload */
...@@ -440,7 +441,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, ...@@ -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 this packet is marked as EOF, end the frame */
if (data[1] & UVC_STREAM_EOF) { if (data[1] & UVC_STREAM_EOF) {
last_pts = 0; sd->last_pts = 0;
if ((frame->data_end - frame->data) != if ((frame->data_end - frame->data) !=
(gspca_dev->width * gspca_dev->height * 2)) { (gspca_dev->width * gspca_dev->height * 2)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment