V4L/DVB (11714): gspca - spca500 and sunplus: Change the 0x00 insertion mechanism.
The new mechanism does not use any temporary buffer. Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
ed47119fb7
commit
59746e1390
2 changed files with 26 additions and 40 deletions
|
@ -32,9 +32,6 @@ MODULE_LICENSE("GPL");
|
||||||
struct sd {
|
struct sd {
|
||||||
struct gspca_dev gspca_dev; /* !! must be the first item */
|
struct gspca_dev gspca_dev; /* !! must be the first item */
|
||||||
|
|
||||||
__u8 packet[ISO_MAX_SIZE + 128];
|
|
||||||
/* !! no more than 128 ff in an ISO packet */
|
|
||||||
|
|
||||||
unsigned char brightness;
|
unsigned char brightness;
|
||||||
unsigned char contrast;
|
unsigned char contrast;
|
||||||
unsigned char colors;
|
unsigned char colors;
|
||||||
|
@ -906,7 +903,6 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
|
||||||
{
|
{
|
||||||
struct sd *sd = (struct sd *) gspca_dev;
|
struct sd *sd = (struct sd *) gspca_dev;
|
||||||
int i;
|
int i;
|
||||||
__u8 *s, *d;
|
|
||||||
static __u8 ffd9[] = {0xff, 0xd9};
|
static __u8 ffd9[] = {0xff, 0xd9};
|
||||||
|
|
||||||
/* frames are jpeg 4.1.1 without 0xff escape */
|
/* frames are jpeg 4.1.1 without 0xff escape */
|
||||||
|
@ -930,22 +926,19 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add 0x00 after 0xff */
|
/* add 0x00 after 0xff */
|
||||||
for (i = len; --i >= 0; )
|
i = 0;
|
||||||
if (data[i] == 0xff)
|
do {
|
||||||
break;
|
if (data[i] == 0xff) {
|
||||||
if (i < 0) { /* no 0xff */
|
gspca_frame_add(gspca_dev, INTER_PACKET, frame,
|
||||||
gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
|
data, i + 1);
|
||||||
return;
|
len -= i;
|
||||||
}
|
data += i;
|
||||||
s = data;
|
*data = 0x00;
|
||||||
d = sd->packet;
|
i = 0;
|
||||||
for (i = 0; i < len; i++) {
|
}
|
||||||
*d++ = *s++;
|
i++;
|
||||||
if (s[-1] == 0xff)
|
} while (i < len);
|
||||||
*d++ = 0x00;
|
gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
|
||||||
}
|
|
||||||
gspca_frame_add(gspca_dev, INTER_PACKET, frame,
|
|
||||||
sd->packet, d - sd->packet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setbrightness(struct gspca_dev *gspca_dev)
|
static void setbrightness(struct gspca_dev *gspca_dev)
|
||||||
|
|
|
@ -32,9 +32,6 @@ MODULE_LICENSE("GPL");
|
||||||
struct sd {
|
struct sd {
|
||||||
struct gspca_dev gspca_dev; /* !! must be the first item */
|
struct gspca_dev gspca_dev; /* !! must be the first item */
|
||||||
|
|
||||||
__u8 packet[ISO_MAX_SIZE + 128];
|
|
||||||
/* !! no more than 128 ff in an ISO packet */
|
|
||||||
|
|
||||||
unsigned char brightness;
|
unsigned char brightness;
|
||||||
unsigned char contrast;
|
unsigned char contrast;
|
||||||
unsigned char colors;
|
unsigned char colors;
|
||||||
|
@ -1103,7 +1100,6 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
|
||||||
{
|
{
|
||||||
struct sd *sd = (struct sd *) gspca_dev;
|
struct sd *sd = (struct sd *) gspca_dev;
|
||||||
int i, sof = 0;
|
int i, sof = 0;
|
||||||
unsigned char *s, *d;
|
|
||||||
static unsigned char ffd9[] = {0xff, 0xd9};
|
static unsigned char ffd9[] = {0xff, 0xd9};
|
||||||
|
|
||||||
/* frames are jpeg 4.1.1 without 0xff escape */
|
/* frames are jpeg 4.1.1 without 0xff escape */
|
||||||
|
@ -1177,22 +1173,19 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add 0x00 after 0xff */
|
/* add 0x00 after 0xff */
|
||||||
for (i = len; --i >= 0; )
|
i = 0;
|
||||||
if (data[i] == 0xff)
|
do {
|
||||||
break;
|
if (data[i] == 0xff) {
|
||||||
if (i < 0) { /* no 0xff */
|
gspca_frame_add(gspca_dev, INTER_PACKET, frame,
|
||||||
gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
|
data, i + 1);
|
||||||
return;
|
len -= i;
|
||||||
}
|
data += i;
|
||||||
s = data;
|
*data = 0x00;
|
||||||
d = sd->packet;
|
i = 0;
|
||||||
for (i = 0; i < len; i++) {
|
}
|
||||||
*d++ = *s++;
|
i++;
|
||||||
if (s[-1] == 0xff)
|
} while (i < len);
|
||||||
*d++ = 0x00;
|
gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
|
||||||
}
|
|
||||||
gspca_frame_add(gspca_dev, INTER_PACKET, frame,
|
|
||||||
sd->packet, d - sd->packet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setbrightness(struct gspca_dev *gspca_dev)
|
static void setbrightness(struct gspca_dev *gspca_dev)
|
||||||
|
|
Loading…
Add table
Reference in a new issue