diff options
35 files changed, 240 insertions, 287 deletions
diff --git a/drivers/media/video/gspca/conex.c b/drivers/media/video/gspca/conex.c index eca003566ae3..2f0b8d621e00 100644 --- a/drivers/media/video/gspca/conex.c +++ b/drivers/media/video/gspca/conex.c | |||
@@ -888,8 +888,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
888 | } | 888 | } |
889 | 889 | ||
890 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 890 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
891 | struct gspca_frame *frame, /* target */ | 891 | u8 *data, /* isoc packet */ |
892 | __u8 *data, /* isoc packet */ | ||
893 | int len) /* iso packet length */ | 892 | int len) /* iso packet length */ |
894 | { | 893 | { |
895 | struct sd *sd = (struct sd *) gspca_dev; | 894 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -897,16 +896,15 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
897 | if (data[0] == 0xff && data[1] == 0xd8) { | 896 | if (data[0] == 0xff && data[1] == 0xd8) { |
898 | 897 | ||
899 | /* start of frame */ | 898 | /* start of frame */ |
900 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 899 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
901 | data, 0); | ||
902 | 900 | ||
903 | /* put the JPEG header in the new frame */ | 901 | /* put the JPEG header in the new frame */ |
904 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 902 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
905 | sd->jpeg_hdr, JPEG_HDR_SZ); | 903 | sd->jpeg_hdr, JPEG_HDR_SZ); |
906 | data += 2; | 904 | data += 2; |
907 | len -= 2; | 905 | len -= 2; |
908 | } | 906 | } |
909 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 907 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
910 | } | 908 | } |
911 | 909 | ||
912 | static void setbrightness(struct gspca_dev*gspca_dev) | 910 | static void setbrightness(struct gspca_dev*gspca_dev) |
diff --git a/drivers/media/video/gspca/etoms.c b/drivers/media/video/gspca/etoms.c index c1461e63647f..9de86419ae1e 100644 --- a/drivers/media/video/gspca/etoms.c +++ b/drivers/media/video/gspca/etoms.c | |||
@@ -752,8 +752,7 @@ static void do_autogain(struct gspca_dev *gspca_dev) | |||
752 | #undef LIMIT | 752 | #undef LIMIT |
753 | 753 | ||
754 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 754 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
755 | struct gspca_frame *frame, /* target */ | 755 | u8 *data, /* isoc packet */ |
756 | __u8 *data, /* isoc packet */ | ||
757 | int len) /* iso packet length */ | 756 | int len) /* iso packet length */ |
758 | { | 757 | { |
759 | int seqframe; | 758 | int seqframe; |
@@ -767,14 +766,13 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
767 | data[2], data[3], data[4], data[5]); | 766 | data[2], data[3], data[4], data[5]); |
768 | data += 30; | 767 | data += 30; |
769 | /* don't change datalength as the chips provided it */ | 768 | /* don't change datalength as the chips provided it */ |
770 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 769 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
771 | data, 0); | 770 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
772 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len); | ||
773 | return; | 771 | return; |
774 | } | 772 | } |
775 | if (len) { | 773 | if (len) { |
776 | data += 8; | 774 | data += 8; |
777 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 775 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
778 | } else { /* Drop Packet */ | 776 | } else { /* Drop Packet */ |
779 | gspca_dev->last_packet_type = DISCARD_PACKET; | 777 | gspca_dev->last_packet_type = DISCARD_PACKET; |
780 | } | 778 | } |
diff --git a/drivers/media/video/gspca/finepix.c b/drivers/media/video/gspca/finepix.c index 480ec5c87d0e..5d90e7448579 100644 --- a/drivers/media/video/gspca/finepix.c +++ b/drivers/media/video/gspca/finepix.c | |||
@@ -82,7 +82,6 @@ static void dostream(struct work_struct *work) | |||
82 | struct gspca_dev *gspca_dev = &dev->gspca_dev; | 82 | struct gspca_dev *gspca_dev = &dev->gspca_dev; |
83 | struct urb *urb = gspca_dev->urb[0]; | 83 | struct urb *urb = gspca_dev->urb[0]; |
84 | u8 *data = urb->transfer_buffer; | 84 | u8 *data = urb->transfer_buffer; |
85 | struct gspca_frame *frame; | ||
86 | int ret = 0; | 85 | int ret = 0; |
87 | int len; | 86 | int len; |
88 | 87 | ||
@@ -118,10 +117,6 @@ again: | |||
118 | } | 117 | } |
119 | if (!gspca_dev->present || !gspca_dev->streaming) | 118 | if (!gspca_dev->present || !gspca_dev->streaming) |
120 | goto out; | 119 | goto out; |
121 | frame = gspca_get_i_frame(&dev->gspca_dev); | ||
122 | if (frame == NULL) | ||
123 | gspca_dev->last_packet_type = DISCARD_PACKET; | ||
124 | |||
125 | if (len < FPIX_MAX_TRANSFER || | 120 | if (len < FPIX_MAX_TRANSFER || |
126 | (data[len - 2] == 0xff && | 121 | (data[len - 2] == 0xff && |
127 | data[len - 1] == 0xd9)) { | 122 | data[len - 1] == 0xd9)) { |
@@ -132,21 +127,17 @@ again: | |||
132 | * but there's nothing we can do. We also end | 127 | * but there's nothing we can do. We also end |
133 | * here if the the jpeg ends right at the end | 128 | * here if the the jpeg ends right at the end |
134 | * of the frame. */ | 129 | * of the frame. */ |
135 | if (frame) | 130 | gspca_frame_add(gspca_dev, LAST_PACKET, |
136 | frame = gspca_frame_add(gspca_dev, | 131 | data, len); |
137 | LAST_PACKET, | ||
138 | frame, | ||
139 | data, len); | ||
140 | break; | 132 | break; |
141 | } | 133 | } |
142 | 134 | ||
143 | /* got a partial image */ | 135 | /* got a partial image */ |
144 | if (frame) | 136 | gspca_frame_add(gspca_dev, |
145 | gspca_frame_add(gspca_dev, | 137 | gspca_dev->last_packet_type |
146 | gspca_dev->last_packet_type | 138 | == LAST_PACKET |
147 | == LAST_PACKET | 139 | ? FIRST_PACKET : INTER_PACKET, |
148 | ? FIRST_PACKET : INTER_PACKET, | 140 | data, len); |
149 | frame, data, len); | ||
150 | } | 141 | } |
151 | 142 | ||
152 | /* We must wait before trying reading the next | 143 | /* We must wait before trying reading the next |
diff --git a/drivers/media/video/gspca/gl860/gl860.c b/drivers/media/video/gspca/gl860/gl860.c index a2108dd71053..a695e0ae13c2 100644 --- a/drivers/media/video/gspca/gl860/gl860.c +++ b/drivers/media/video/gspca/gl860/gl860.c | |||
@@ -36,7 +36,7 @@ static int sd_isoc_init(struct gspca_dev *gspca_dev); | |||
36 | static int sd_start(struct gspca_dev *gspca_dev); | 36 | static int sd_start(struct gspca_dev *gspca_dev); |
37 | static void sd_stop0(struct gspca_dev *gspca_dev); | 37 | static void sd_stop0(struct gspca_dev *gspca_dev); |
38 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 38 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
39 | struct gspca_frame *frame, u8 *data, s32 len); | 39 | u8 *data, int len); |
40 | static void sd_callback(struct gspca_dev *gspca_dev); | 40 | static void sd_callback(struct gspca_dev *gspca_dev); |
41 | 41 | ||
42 | static int gl860_guess_sensor(struct gspca_dev *gspca_dev, | 42 | static int gl860_guess_sensor(struct gspca_dev *gspca_dev, |
@@ -433,7 +433,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
433 | 433 | ||
434 | /* This function is called when an image is being received */ | 434 | /* This function is called when an image is being received */ |
435 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 435 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
436 | struct gspca_frame *frame, u8 *data, s32 len) | 436 | u8 *data, int len) |
437 | { | 437 | { |
438 | struct sd *sd = (struct sd *) gspca_dev; | 438 | struct sd *sd = (struct sd *) gspca_dev; |
439 | static s32 nSkipped; | 439 | static s32 nSkipped; |
@@ -445,11 +445,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
445 | /* Test only against 0202h, so endianess does not matter */ | 445 | /* Test only against 0202h, so endianess does not matter */ |
446 | switch (*(s16 *) data) { | 446 | switch (*(s16 *) data) { |
447 | case 0x0202: /* End of frame, start a new one */ | 447 | case 0x0202: /* End of frame, start a new one */ |
448 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0); | 448 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
449 | nSkipped = 0; | 449 | nSkipped = 0; |
450 | if (sd->nbIm >= 0 && sd->nbIm < 10) | 450 | if (sd->nbIm >= 0 && sd->nbIm < 10) |
451 | sd->nbIm++; | 451 | sd->nbIm++; |
452 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, 0); | 452 | gspca_frame_add(gspca_dev, FIRST_PACKET, NULL, 0); |
453 | break; | 453 | break; |
454 | 454 | ||
455 | default: | 455 | default: |
@@ -464,7 +464,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
464 | nSkipped = nToSkip + 1; | 464 | nSkipped = nToSkip + 1; |
465 | } | 465 | } |
466 | gspca_frame_add(gspca_dev, | 466 | gspca_frame_add(gspca_dev, |
467 | INTER_PACKET, frame, data, len); | 467 | INTER_PACKET, data, len); |
468 | } | 468 | } |
469 | break; | 469 | break; |
470 | } | 470 | } |
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index 68ba535300f7..4076f8e5a6fc 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c | |||
@@ -165,7 +165,7 @@ static void fill_frame(struct gspca_dev *gspca_dev, | |||
165 | i, urb->iso_frame_desc[i].offset, len); | 165 | i, urb->iso_frame_desc[i].offset, len); |
166 | data = (u8 *) urb->transfer_buffer | 166 | data = (u8 *) urb->transfer_buffer |
167 | + urb->iso_frame_desc[i].offset; | 167 | + urb->iso_frame_desc[i].offset; |
168 | pkt_scan(gspca_dev, gspca_dev->cur_frame, data, len); | 168 | pkt_scan(gspca_dev, data, len); |
169 | } | 169 | } |
170 | 170 | ||
171 | resubmit: | 171 | resubmit: |
@@ -218,7 +218,6 @@ static void bulk_irq(struct urb *urb) | |||
218 | 218 | ||
219 | PDEBUG(D_PACK, "packet l:%d", urb->actual_length); | 219 | PDEBUG(D_PACK, "packet l:%d", urb->actual_length); |
220 | gspca_dev->sd_desc->pkt_scan(gspca_dev, | 220 | gspca_dev->sd_desc->pkt_scan(gspca_dev, |
221 | gspca_dev->frame, | ||
222 | urb->transfer_buffer, | 221 | urb->transfer_buffer, |
223 | urb->actual_length); | 222 | urb->actual_length); |
224 | 223 | ||
@@ -243,11 +242,10 @@ resubmit: | |||
243 | * DISCARD_PACKET invalidates the whole frame. | 242 | * DISCARD_PACKET invalidates the whole frame. |
244 | * On LAST_PACKET, a new frame is returned. | 243 | * On LAST_PACKET, a new frame is returned. |
245 | */ | 244 | */ |
246 | struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev, | 245 | void gspca_frame_add(struct gspca_dev *gspca_dev, |
247 | enum gspca_packet_type packet_type, | 246 | enum gspca_packet_type packet_type, |
248 | struct gspca_frame *dummy, | 247 | const u8 *data, |
249 | const __u8 *data, | 248 | int len) |
250 | int len) | ||
251 | { | 249 | { |
252 | struct gspca_frame *frame; | 250 | struct gspca_frame *frame; |
253 | int i, j; | 251 | int i, j; |
@@ -259,7 +257,7 @@ struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev, | |||
259 | if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS) | 257 | if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS) |
260 | != V4L2_BUF_FLAG_QUEUED) { | 258 | != V4L2_BUF_FLAG_QUEUED) { |
261 | gspca_dev->last_packet_type = DISCARD_PACKET; | 259 | gspca_dev->last_packet_type = DISCARD_PACKET; |
262 | return frame; | 260 | return; |
263 | } | 261 | } |
264 | 262 | ||
265 | /* when start of a new frame, if the current frame buffer | 263 | /* 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, | |||
272 | } else if (gspca_dev->last_packet_type == DISCARD_PACKET) { | 270 | } else if (gspca_dev->last_packet_type == DISCARD_PACKET) { |
273 | if (packet_type == LAST_PACKET) | 271 | if (packet_type == LAST_PACKET) |
274 | gspca_dev->last_packet_type = packet_type; | 272 | gspca_dev->last_packet_type = packet_type; |
275 | return frame; | 273 | return; |
276 | } | 274 | } |
277 | 275 | ||
278 | /* append the packet to the frame buffer */ | 276 | /* append the packet to the frame buffer */ |
@@ -304,9 +302,9 @@ struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev, | |||
304 | i, | 302 | i, |
305 | gspca_dev->fr_o); | 303 | gspca_dev->fr_o); |
306 | j = gspca_dev->fr_queue[i]; | 304 | j = gspca_dev->fr_queue[i]; |
307 | gspca_dev->cur_frame = frame = &gspca_dev->frame[j]; | 305 | gspca_dev->cur_frame = &gspca_dev->frame[j]; |
308 | } | 306 | } |
309 | return frame; | 307 | return; |
310 | } | 308 | } |
311 | EXPORT_SYMBOL(gspca_frame_add); | 309 | EXPORT_SYMBOL(gspca_frame_add); |
312 | 310 | ||
diff --git a/drivers/media/video/gspca/gspca.h b/drivers/media/video/gspca/gspca.h index 59078bbf472c..181617355ec3 100644 --- a/drivers/media/video/gspca/gspca.h +++ b/drivers/media/video/gspca/gspca.h | |||
@@ -79,8 +79,7 @@ typedef int (*cam_streamparm_op) (struct gspca_dev *, | |||
79 | typedef int (*cam_qmnu_op) (struct gspca_dev *, | 79 | typedef int (*cam_qmnu_op) (struct gspca_dev *, |
80 | struct v4l2_querymenu *); | 80 | struct v4l2_querymenu *); |
81 | typedef void (*cam_pkt_op) (struct gspca_dev *gspca_dev, | 81 | typedef void (*cam_pkt_op) (struct gspca_dev *gspca_dev, |
82 | struct gspca_frame *frame, | 82 | u8 *data, |
83 | __u8 *data, | ||
84 | int len); | 83 | int len); |
85 | 84 | ||
86 | struct ctrl { | 85 | struct ctrl { |
@@ -192,11 +191,10 @@ int gspca_dev_probe(struct usb_interface *intf, | |||
192 | int dev_size, | 191 | int dev_size, |
193 | struct module *module); | 192 | struct module *module); |
194 | void gspca_disconnect(struct usb_interface *intf); | 193 | void gspca_disconnect(struct usb_interface *intf); |
195 | struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev, | 194 | void gspca_frame_add(struct gspca_dev *gspca_dev, |
196 | enum gspca_packet_type packet_type, | 195 | enum gspca_packet_type packet_type, |
197 | struct gspca_frame *frame, | 196 | const u8 *data, |
198 | const __u8 *data, | 197 | int len); |
199 | int len); | ||
200 | struct gspca_frame *gspca_get_i_frame(struct gspca_dev *gspca_dev); | 198 | struct gspca_frame *gspca_get_i_frame(struct gspca_dev *gspca_dev); |
201 | #ifdef CONFIG_PM | 199 | #ifdef CONFIG_PM |
202 | int gspca_suspend(struct usb_interface *intf, pm_message_t message); | 200 | int gspca_suspend(struct usb_interface *intf, pm_message_t message); |
diff --git a/drivers/media/video/gspca/jeilinj.c b/drivers/media/video/gspca/jeilinj.c index d679970d5b3e..2019b04f9235 100644 --- a/drivers/media/video/gspca/jeilinj.c +++ b/drivers/media/video/gspca/jeilinj.c | |||
@@ -181,7 +181,6 @@ static void jlj_dostream(struct work_struct *work) | |||
181 | { | 181 | { |
182 | struct sd *dev = container_of(work, struct sd, work_struct); | 182 | struct sd *dev = container_of(work, struct sd, work_struct); |
183 | struct gspca_dev *gspca_dev = &dev->gspca_dev; | 183 | struct gspca_dev *gspca_dev = &dev->gspca_dev; |
184 | struct gspca_frame *frame; | ||
185 | int blocks_left; /* 0x200-sized blocks remaining in current frame. */ | 184 | int blocks_left; /* 0x200-sized blocks remaining in current frame. */ |
186 | int size_in_blocks; | 185 | int size_in_blocks; |
187 | int act_len; | 186 | int act_len; |
@@ -214,15 +213,13 @@ static void jlj_dostream(struct work_struct *work) | |||
214 | PDEBUG(D_STREAM, "blocks_left = 0x%x", blocks_left); | 213 | PDEBUG(D_STREAM, "blocks_left = 0x%x", blocks_left); |
215 | 214 | ||
216 | /* Start a new frame, and add the JPEG header, first thing */ | 215 | /* Start a new frame, and add the JPEG header, first thing */ |
217 | frame = gspca_get_i_frame(gspca_dev); | 216 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
218 | if (frame) { | 217 | dev->jpeg_hdr, JPEG_HDR_SZ); |
219 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 218 | /* Toss line 0 of data block 0, keep the rest. */ |
220 | dev->jpeg_hdr, JPEG_HDR_SZ); | 219 | gspca_frame_add(gspca_dev, INTER_PACKET, |
221 | /* Toss line 0 of data block 0, keep the rest. */ | 220 | buffer + FRAME_HEADER_LEN, |
222 | gspca_frame_add(gspca_dev, INTER_PACKET, | ||
223 | frame, buffer + FRAME_HEADER_LEN, | ||
224 | JEILINJ_MAX_TRANSFER - FRAME_HEADER_LEN); | 221 | JEILINJ_MAX_TRANSFER - FRAME_HEADER_LEN); |
225 | } | 222 | |
226 | while (blocks_left > 0) { | 223 | while (blocks_left > 0) { |
227 | if (!gspca_dev->present) | 224 | if (!gspca_dev->present) |
228 | goto quit_stream; | 225 | goto quit_stream; |
@@ -239,10 +236,8 @@ static void jlj_dostream(struct work_struct *work) | |||
239 | packet_type = LAST_PACKET; | 236 | packet_type = LAST_PACKET; |
240 | else | 237 | else |
241 | packet_type = INTER_PACKET; | 238 | packet_type = INTER_PACKET; |
242 | if (frame) | 239 | gspca_frame_add(gspca_dev, packet_type, |
243 | gspca_frame_add(gspca_dev, packet_type, | 240 | buffer, JEILINJ_MAX_TRANSFER); |
244 | frame, buffer, | ||
245 | JEILINJ_MAX_TRANSFER); | ||
246 | } | 241 | } |
247 | } | 242 | } |
248 | quit_stream: | 243 | quit_stream: |
diff --git a/drivers/media/video/gspca/m5602/m5602_core.c b/drivers/media/video/gspca/m5602/m5602_core.c index 7f1e5415850b..844fc1d886d1 100644 --- a/drivers/media/video/gspca/m5602/m5602_core.c +++ b/drivers/media/video/gspca/m5602/m5602_core.c | |||
@@ -274,8 +274,7 @@ static int m5602_start_transfer(struct gspca_dev *gspca_dev) | |||
274 | } | 274 | } |
275 | 275 | ||
276 | static void m5602_urb_complete(struct gspca_dev *gspca_dev, | 276 | static void m5602_urb_complete(struct gspca_dev *gspca_dev, |
277 | struct gspca_frame *frame, | 277 | u8 *data, int len) |
278 | __u8 *data, int len) | ||
279 | { | 278 | { |
280 | struct sd *sd = (struct sd *) gspca_dev; | 279 | struct sd *sd = (struct sd *) gspca_dev; |
281 | 280 | ||
@@ -295,19 +294,27 @@ static void m5602_urb_complete(struct gspca_dev *gspca_dev, | |||
295 | len -= 6; | 294 | len -= 6; |
296 | 295 | ||
297 | /* Complete the last frame (if any) */ | 296 | /* Complete the last frame (if any) */ |
298 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, | 297 | gspca_frame_add(gspca_dev, LAST_PACKET, |
299 | frame, data, 0); | 298 | NULL, 0); |
300 | sd->frame_count++; | 299 | sd->frame_count++; |
301 | 300 | ||
302 | /* Create a new frame */ | 301 | /* Create a new frame */ |
303 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len); | 302 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
304 | 303 | ||
305 | PDEBUG(D_FRAM, "Starting new frame %d", | 304 | PDEBUG(D_FRAM, "Starting new frame %d", |
306 | sd->frame_count); | 305 | sd->frame_count); |
307 | 306 | ||
308 | } else { | 307 | } else { |
309 | int cur_frame_len = frame->data_end - frame->data; | 308 | struct gspca_frame *frame; |
309 | int cur_frame_len; | ||
310 | 310 | ||
311 | frame = gspca_get_i_frame(gspca_dev); | ||
312 | if (frame == NULL) { | ||
313 | gspca_dev->last_packet_type = DISCARD_PACKET; | ||
314 | return; | ||
315 | } | ||
316 | |||
317 | cur_frame_len = frame->data_end - frame->data; | ||
311 | /* Remove urb header */ | 318 | /* Remove urb header */ |
312 | data += 4; | 319 | data += 4; |
313 | len -= 4; | 320 | len -= 4; |
@@ -316,12 +323,12 @@ static void m5602_urb_complete(struct gspca_dev *gspca_dev, | |||
316 | PDEBUG(D_FRAM, "Continuing frame %d copying %d bytes", | 323 | PDEBUG(D_FRAM, "Continuing frame %d copying %d bytes", |
317 | sd->frame_count, len); | 324 | sd->frame_count, len); |
318 | 325 | ||
319 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 326 | gspca_frame_add(gspca_dev, INTER_PACKET, |
320 | data, len); | 327 | data, len); |
321 | } else if (frame->v4l2_buf.length - cur_frame_len > 0) { | 328 | } else if (frame->v4l2_buf.length - cur_frame_len > 0) { |
322 | /* Add the remaining data up to frame size */ | 329 | /* Add the remaining data up to frame size */ |
323 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, | 330 | gspca_frame_add(gspca_dev, INTER_PACKET, data, |
324 | frame->v4l2_buf.length - cur_frame_len); | 331 | frame->v4l2_buf.length - cur_frame_len); |
325 | } | 332 | } |
326 | } | 333 | } |
327 | } | 334 | } |
diff --git a/drivers/media/video/gspca/mars.c b/drivers/media/video/gspca/mars.c index de769caf013d..9cf8d68c71bf 100644 --- a/drivers/media/video/gspca/mars.c +++ b/drivers/media/video/gspca/mars.c | |||
@@ -325,8 +325,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
325 | } | 325 | } |
326 | 326 | ||
327 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 327 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
328 | struct gspca_frame *frame, /* target */ | 328 | u8 *data, /* isoc packet */ |
329 | __u8 *data, /* isoc packet */ | ||
330 | int len) /* iso packet length */ | 329 | int len) /* iso packet length */ |
331 | { | 330 | { |
332 | struct sd *sd = (struct sd *) gspca_dev; | 331 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -348,11 +347,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
348 | || data[5 + p] == 0x67) { | 347 | || data[5 + p] == 0x67) { |
349 | PDEBUG(D_PACK, "sof offset: %d len: %d", | 348 | PDEBUG(D_PACK, "sof offset: %d len: %d", |
350 | p, len); | 349 | p, len); |
351 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, | 350 | gspca_frame_add(gspca_dev, LAST_PACKET, |
352 | frame, data, p); | 351 | data, p); |
353 | 352 | ||
354 | /* put the JPEG header */ | 353 | /* put the JPEG header */ |
355 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 354 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
356 | sd->jpeg_hdr, JPEG_HDR_SZ); | 355 | sd->jpeg_hdr, JPEG_HDR_SZ); |
357 | data += p + 16; | 356 | data += p + 16; |
358 | len -= p + 16; | 357 | len -= p + 16; |
@@ -360,7 +359,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
360 | } | 359 | } |
361 | } | 360 | } |
362 | } | 361 | } |
363 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 362 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
364 | } | 363 | } |
365 | 364 | ||
366 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 365 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/mr97310a.c b/drivers/media/video/gspca/mr97310a.c index ffb5e6d62c0b..126d968dd9e0 100644 --- a/drivers/media/video/gspca/mr97310a.c +++ b/drivers/media/video/gspca/mr97310a.c | |||
@@ -1030,9 +1030,8 @@ static int sd_getmin_clockdiv(struct gspca_dev *gspca_dev, __s32 *val) | |||
1030 | #include "pac_common.h" | 1030 | #include "pac_common.h" |
1031 | 1031 | ||
1032 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 1032 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
1033 | struct gspca_frame *frame, /* target */ | 1033 | u8 *data, /* isoc packet */ |
1034 | __u8 *data, /* isoc packet */ | 1034 | int len) /* iso packet length */ |
1035 | int len) /* iso packet length */ | ||
1036 | { | 1035 | { |
1037 | struct sd *sd = (struct sd *) gspca_dev; | 1036 | struct sd *sd = (struct sd *) gspca_dev; |
1038 | unsigned char *sof; | 1037 | unsigned char *sof; |
@@ -1047,15 +1046,15 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
1047 | n -= sizeof pac_sof_marker; | 1046 | n -= sizeof pac_sof_marker; |
1048 | else | 1047 | else |
1049 | n = 0; | 1048 | n = 0; |
1050 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 1049 | gspca_frame_add(gspca_dev, LAST_PACKET, |
1051 | data, n); | 1050 | data, n); |
1052 | /* Start next frame. */ | 1051 | /* Start next frame. */ |
1053 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 1052 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
1054 | pac_sof_marker, sizeof pac_sof_marker); | 1053 | pac_sof_marker, sizeof pac_sof_marker); |
1055 | len -= sof - data; | 1054 | len -= sof - data; |
1056 | data = sof; | 1055 | data = sof; |
1057 | } | 1056 | } |
1058 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 1057 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
1059 | } | 1058 | } |
1060 | 1059 | ||
1061 | /* sub-driver description */ | 1060 | /* sub-driver description */ |
diff --git a/drivers/media/video/gspca/ov519.c b/drivers/media/video/gspca/ov519.c index f88a526e216f..ad9ec339981d 100644 --- a/drivers/media/video/gspca/ov519.c +++ b/drivers/media/video/gspca/ov519.c | |||
@@ -3920,9 +3920,8 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
3920 | } | 3920 | } |
3921 | 3921 | ||
3922 | static void ov511_pkt_scan(struct gspca_dev *gspca_dev, | 3922 | static void ov511_pkt_scan(struct gspca_dev *gspca_dev, |
3923 | struct gspca_frame *frame, /* target */ | 3923 | u8 *in, /* isoc packet */ |
3924 | __u8 *in, /* isoc packet */ | 3924 | int len) /* iso packet length */ |
3925 | int len) /* iso packet length */ | ||
3926 | { | 3925 | { |
3927 | struct sd *sd = (struct sd *) gspca_dev; | 3926 | struct sd *sd = (struct sd *) gspca_dev; |
3928 | 3927 | ||
@@ -3953,11 +3952,11 @@ static void ov511_pkt_scan(struct gspca_dev *gspca_dev, | |||
3953 | return; | 3952 | return; |
3954 | } | 3953 | } |
3955 | /* Add 11 byte footer to frame, might be usefull */ | 3954 | /* Add 11 byte footer to frame, might be usefull */ |
3956 | gspca_frame_add(gspca_dev, LAST_PACKET, frame, in, 11); | 3955 | gspca_frame_add(gspca_dev, LAST_PACKET, in, 11); |
3957 | return; | 3956 | return; |
3958 | } else { | 3957 | } else { |
3959 | /* Frame start */ | 3958 | /* Frame start */ |
3960 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, in, 0); | 3959 | gspca_frame_add(gspca_dev, FIRST_PACKET, in, 0); |
3961 | sd->packet_nr = 0; | 3960 | sd->packet_nr = 0; |
3962 | } | 3961 | } |
3963 | } | 3962 | } |
@@ -3966,12 +3965,11 @@ static void ov511_pkt_scan(struct gspca_dev *gspca_dev, | |||
3966 | len--; | 3965 | len--; |
3967 | 3966 | ||
3968 | /* intermediate packet */ | 3967 | /* intermediate packet */ |
3969 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, in, len); | 3968 | gspca_frame_add(gspca_dev, INTER_PACKET, in, len); |
3970 | } | 3969 | } |
3971 | 3970 | ||
3972 | static void ov518_pkt_scan(struct gspca_dev *gspca_dev, | 3971 | static void ov518_pkt_scan(struct gspca_dev *gspca_dev, |
3973 | struct gspca_frame *frame, /* target */ | 3972 | u8 *data, /* isoc packet */ |
3974 | __u8 *data, /* isoc packet */ | ||
3975 | int len) /* iso packet length */ | 3973 | int len) /* iso packet length */ |
3976 | { | 3974 | { |
3977 | struct sd *sd = (struct sd *) gspca_dev; | 3975 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -3979,8 +3977,8 @@ static void ov518_pkt_scan(struct gspca_dev *gspca_dev, | |||
3979 | /* A false positive here is likely, until OVT gives me | 3977 | /* A false positive here is likely, until OVT gives me |
3980 | * the definitive SOF/EOF format */ | 3978 | * the definitive SOF/EOF format */ |
3981 | if ((!(data[0] | data[1] | data[2] | data[3] | data[5])) && data[6]) { | 3979 | if ((!(data[0] | data[1] | data[2] | data[3] | data[5])) && data[6]) { |
3982 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0); | 3980 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
3983 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, 0); | 3981 | gspca_frame_add(gspca_dev, FIRST_PACKET, NULL, 0); |
3984 | sd->packet_nr = 0; | 3982 | sd->packet_nr = 0; |
3985 | } | 3983 | } |
3986 | 3984 | ||
@@ -4004,12 +4002,11 @@ static void ov518_pkt_scan(struct gspca_dev *gspca_dev, | |||
4004 | } | 4002 | } |
4005 | 4003 | ||
4006 | /* intermediate packet */ | 4004 | /* intermediate packet */ |
4007 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 4005 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
4008 | } | 4006 | } |
4009 | 4007 | ||
4010 | static void ov519_pkt_scan(struct gspca_dev *gspca_dev, | 4008 | static void ov519_pkt_scan(struct gspca_dev *gspca_dev, |
4011 | struct gspca_frame *frame, /* target */ | 4009 | u8 *data, /* isoc packet */ |
4012 | __u8 *data, /* isoc packet */ | ||
4013 | int len) /* iso packet length */ | 4010 | int len) /* iso packet length */ |
4014 | { | 4011 | { |
4015 | /* Header of ov519 is 16 bytes: | 4012 | /* Header of ov519 is 16 bytes: |
@@ -4032,7 +4029,7 @@ static void ov519_pkt_scan(struct gspca_dev *gspca_dev, | |||
4032 | len -= HDRSZ; | 4029 | len -= HDRSZ; |
4033 | #undef HDRSZ | 4030 | #undef HDRSZ |
4034 | if (data[0] == 0xff || data[1] == 0xd8) | 4031 | if (data[0] == 0xff || data[1] == 0xd8) |
4035 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 4032 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
4036 | data, len); | 4033 | data, len); |
4037 | else | 4034 | else |
4038 | gspca_dev->last_packet_type = DISCARD_PACKET; | 4035 | gspca_dev->last_packet_type = DISCARD_PACKET; |
@@ -4040,34 +4037,31 @@ static void ov519_pkt_scan(struct gspca_dev *gspca_dev, | |||
4040 | case 0x51: /* end of frame */ | 4037 | case 0x51: /* end of frame */ |
4041 | if (data[9] != 0) | 4038 | if (data[9] != 0) |
4042 | gspca_dev->last_packet_type = DISCARD_PACKET; | 4039 | gspca_dev->last_packet_type = DISCARD_PACKET; |
4043 | gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 4040 | gspca_frame_add(gspca_dev, LAST_PACKET, |
4044 | data, 0); | 4041 | NULL, 0); |
4045 | return; | 4042 | return; |
4046 | } | 4043 | } |
4047 | } | 4044 | } |
4048 | 4045 | ||
4049 | /* intermediate packet */ | 4046 | /* intermediate packet */ |
4050 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 4047 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
4051 | data, len); | ||
4052 | } | 4048 | } |
4053 | 4049 | ||
4054 | static void ovfx2_pkt_scan(struct gspca_dev *gspca_dev, | 4050 | static void ovfx2_pkt_scan(struct gspca_dev *gspca_dev, |
4055 | struct gspca_frame *frame, /* target */ | 4051 | u8 *data, /* isoc packet */ |
4056 | __u8 *data, /* isoc packet */ | ||
4057 | int len) /* iso packet length */ | 4052 | int len) /* iso packet length */ |
4058 | { | 4053 | { |
4059 | /* A short read signals EOF */ | 4054 | /* A short read signals EOF */ |
4060 | if (len < OVFX2_BULK_SIZE) { | 4055 | if (len < OVFX2_BULK_SIZE) { |
4061 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, len); | 4056 | gspca_frame_add(gspca_dev, LAST_PACKET, data, len); |
4062 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0); | 4057 | gspca_frame_add(gspca_dev, FIRST_PACKET, NULL, 0); |
4063 | return; | 4058 | return; |
4064 | } | 4059 | } |
4065 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 4060 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
4066 | } | 4061 | } |
4067 | 4062 | ||
4068 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 4063 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
4069 | struct gspca_frame *frame, /* target */ | 4064 | u8 *data, /* isoc packet */ |
4070 | __u8 *data, /* isoc packet */ | ||
4071 | int len) /* iso packet length */ | 4065 | int len) /* iso packet length */ |
4072 | { | 4066 | { |
4073 | struct sd *sd = (struct sd *) gspca_dev; | 4067 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -4075,20 +4069,20 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
4075 | switch (sd->bridge) { | 4069 | switch (sd->bridge) { |
4076 | case BRIDGE_OV511: | 4070 | case BRIDGE_OV511: |
4077 | case BRIDGE_OV511PLUS: | 4071 | case BRIDGE_OV511PLUS: |
4078 | ov511_pkt_scan(gspca_dev, frame, data, len); | 4072 | ov511_pkt_scan(gspca_dev, data, len); |
4079 | break; | 4073 | break; |
4080 | case BRIDGE_OV518: | 4074 | case BRIDGE_OV518: |
4081 | case BRIDGE_OV518PLUS: | 4075 | case BRIDGE_OV518PLUS: |
4082 | ov518_pkt_scan(gspca_dev, frame, data, len); | 4076 | ov518_pkt_scan(gspca_dev, data, len); |
4083 | break; | 4077 | break; |
4084 | case BRIDGE_OV519: | 4078 | case BRIDGE_OV519: |
4085 | ov519_pkt_scan(gspca_dev, frame, data, len); | 4079 | ov519_pkt_scan(gspca_dev, data, len); |
4086 | break; | 4080 | break; |
4087 | case BRIDGE_OVFX2: | 4081 | case BRIDGE_OVFX2: |
4088 | ovfx2_pkt_scan(gspca_dev, frame, data, len); | 4082 | ovfx2_pkt_scan(gspca_dev, data, len); |
4089 | break; | 4083 | break; |
4090 | case BRIDGE_W9968CF: | 4084 | case BRIDGE_W9968CF: |
4091 | w9968cf_pkt_scan(gspca_dev, frame, data, len); | 4085 | w9968cf_pkt_scan(gspca_dev, data, len); |
4092 | break; | 4086 | break; |
4093 | } | 4087 | } |
4094 | } | 4088 | } |
diff --git a/drivers/media/video/gspca/ov534.c b/drivers/media/video/gspca/ov534.c index 26d98b1312e0..193129a59ab7 100644 --- a/drivers/media/video/gspca/ov534.c +++ b/drivers/media/video/gspca/ov534.c | |||
@@ -1403,8 +1403,8 @@ static void sd_stopN_ov965x(struct gspca_dev *gspca_dev) | |||
1403 | #define UVC_STREAM_EOF (1 << 1) | 1403 | #define UVC_STREAM_EOF (1 << 1) |
1404 | #define UVC_STREAM_FID (1 << 0) | 1404 | #define UVC_STREAM_FID (1 << 0) |
1405 | 1405 | ||
1406 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, | 1406 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
1407 | __u8 *data, int len) | 1407 | u8 *data, int len) |
1408 | { | 1408 | { |
1409 | struct sd *sd = (struct sd *) gspca_dev; | 1409 | struct sd *sd = (struct sd *) gspca_dev; |
1410 | __u32 this_pts; | 1410 | __u32 this_pts; |
@@ -1445,23 +1445,22 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, | |||
1445 | /* If PTS or FID has changed, start a new frame. */ | 1445 | /* If PTS or FID has changed, start a new frame. */ |
1446 | if (this_pts != sd->last_pts || this_fid != sd->last_fid) { | 1446 | if (this_pts != sd->last_pts || this_fid != sd->last_fid) { |
1447 | if (gspca_dev->last_packet_type == INTER_PACKET) | 1447 | if (gspca_dev->last_packet_type == INTER_PACKET) |
1448 | frame = gspca_frame_add(gspca_dev, | 1448 | gspca_frame_add(gspca_dev, LAST_PACKET, |
1449 | LAST_PACKET, frame, | 1449 | NULL, 0); |
1450 | NULL, 0); | ||
1451 | sd->last_pts = this_pts; | 1450 | sd->last_pts = this_pts; |
1452 | sd->last_fid = this_fid; | 1451 | sd->last_fid = this_fid; |
1453 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 1452 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
1454 | data + 12, len - 12); | 1453 | data + 12, len - 12); |
1455 | /* If this packet is marked as EOF, end the frame */ | 1454 | /* If this packet is marked as EOF, end the frame */ |
1456 | } else if (data[1] & UVC_STREAM_EOF) { | 1455 | } else if (data[1] & UVC_STREAM_EOF) { |
1457 | sd->last_pts = 0; | 1456 | sd->last_pts = 0; |
1458 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 1457 | gspca_frame_add(gspca_dev, LAST_PACKET, |
1459 | data + 12, len - 12); | 1458 | data + 12, len - 12); |
1460 | } else { | 1459 | } else { |
1461 | 1460 | ||
1462 | /* Add the data from this payload */ | 1461 | /* Add the data from this payload */ |
1463 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 1462 | gspca_frame_add(gspca_dev, INTER_PACKET, |
1464 | data + 12, len - 12); | 1463 | data + 12, len - 12); |
1465 | } | 1464 | } |
1466 | 1465 | ||
1467 | /* Done this payload */ | 1466 | /* Done this payload */ |
@@ -1469,7 +1468,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, | |||
1469 | 1468 | ||
1470 | discard: | 1469 | discard: |
1471 | /* Discard data until a new frame starts. */ | 1470 | /* Discard data until a new frame starts. */ |
1472 | gspca_frame_add(gspca_dev, DISCARD_PACKET, frame, NULL, 0); | 1471 | gspca_dev->last_packet_type = DISCARD_PACKET; |
1473 | 1472 | ||
1474 | scan_next: | 1473 | scan_next: |
1475 | remaining_len -= len; | 1474 | remaining_len -= len; |
diff --git a/drivers/media/video/gspca/pac207.c b/drivers/media/video/gspca/pac207.c index 57e13e2d550c..4706a823add0 100644 --- a/drivers/media/video/gspca/pac207.c +++ b/drivers/media/video/gspca/pac207.c | |||
@@ -337,8 +337,7 @@ static void pac207_do_auto_gain(struct gspca_dev *gspca_dev) | |||
337 | } | 337 | } |
338 | 338 | ||
339 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 339 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
340 | struct gspca_frame *frame, | 340 | u8 *data, |
341 | __u8 *data, | ||
342 | int len) | 341 | int len) |
343 | { | 342 | { |
344 | struct sd *sd = (struct sd *) gspca_dev; | 343 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -354,10 +353,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
354 | n -= sizeof pac_sof_marker; | 353 | n -= sizeof pac_sof_marker; |
355 | else | 354 | else |
356 | n = 0; | 355 | n = 0; |
357 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 356 | gspca_frame_add(gspca_dev, LAST_PACKET, |
358 | data, n); | 357 | data, n); |
359 | sd->header_read = 0; | 358 | sd->header_read = 0; |
360 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0); | 359 | gspca_frame_add(gspca_dev, FIRST_PACKET, NULL, 0); |
361 | len -= sof - data; | 360 | len -= sof - data; |
362 | data = sof; | 361 | data = sof; |
363 | } | 362 | } |
@@ -381,7 +380,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
381 | sd->header_read = 11; | 380 | sd->header_read = 11; |
382 | } | 381 | } |
383 | 382 | ||
384 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 383 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
385 | } | 384 | } |
386 | 385 | ||
387 | static void setbrightness(struct gspca_dev *gspca_dev) | 386 | static void setbrightness(struct gspca_dev *gspca_dev) |
diff --git a/drivers/media/video/gspca/pac7302.c b/drivers/media/video/gspca/pac7302.c index e0fd767984b3..74acceea8094 100644 --- a/drivers/media/video/gspca/pac7302.c +++ b/drivers/media/video/gspca/pac7302.c | |||
@@ -855,7 +855,7 @@ static void pac_start_frame(struct gspca_dev *gspca_dev, | |||
855 | { | 855 | { |
856 | unsigned char tmpbuf[4]; | 856 | unsigned char tmpbuf[4]; |
857 | 857 | ||
858 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 858 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
859 | pac_jpeg_header1, sizeof(pac_jpeg_header1)); | 859 | pac_jpeg_header1, sizeof(pac_jpeg_header1)); |
860 | 860 | ||
861 | tmpbuf[0] = lines >> 8; | 861 | tmpbuf[0] = lines >> 8; |
@@ -863,25 +863,31 @@ static void pac_start_frame(struct gspca_dev *gspca_dev, | |||
863 | tmpbuf[2] = samples_per_line >> 8; | 863 | tmpbuf[2] = samples_per_line >> 8; |
864 | tmpbuf[3] = samples_per_line & 0xff; | 864 | tmpbuf[3] = samples_per_line & 0xff; |
865 | 865 | ||
866 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 866 | gspca_frame_add(gspca_dev, INTER_PACKET, |
867 | tmpbuf, sizeof(tmpbuf)); | 867 | tmpbuf, sizeof(tmpbuf)); |
868 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 868 | gspca_frame_add(gspca_dev, INTER_PACKET, |
869 | pac_jpeg_header2, sizeof(pac_jpeg_header2)); | 869 | pac_jpeg_header2, sizeof(pac_jpeg_header2)); |
870 | } | 870 | } |
871 | 871 | ||
872 | /* this function is run at interrupt level */ | 872 | /* this function is run at interrupt level */ |
873 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 873 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
874 | struct gspca_frame *frame, /* target */ | 874 | u8 *data, /* isoc packet */ |
875 | __u8 *data, /* isoc packet */ | ||
876 | int len) /* iso packet length */ | 875 | int len) /* iso packet length */ |
877 | { | 876 | { |
878 | struct sd *sd = (struct sd *) gspca_dev; | 877 | struct sd *sd = (struct sd *) gspca_dev; |
878 | struct gspca_frame *frame; | ||
879 | unsigned char *sof; | 879 | unsigned char *sof; |
880 | 880 | ||
881 | sof = pac_find_sof(&sd->sof_read, data, len); | 881 | sof = pac_find_sof(&sd->sof_read, data, len); |
882 | if (sof) { | 882 | if (sof) { |
883 | int n, lum_offset, footer_length; | 883 | int n, lum_offset, footer_length; |
884 | 884 | ||
885 | frame = gspca_get_i_frame(gspca_dev); | ||
886 | if (frame == NULL) { | ||
887 | gspca_dev->last_packet_type = DISCARD_PACKET; | ||
888 | return; | ||
889 | } | ||
890 | |||
885 | /* 6 bytes after the FF D9 EOF marker a number of lumination | 891 | /* 6 bytes after the FF D9 EOF marker a number of lumination |
886 | bytes are send corresponding to different parts of the | 892 | bytes are send corresponding to different parts of the |
887 | image, the 14th and 15th byte after the EOF seem to | 893 | 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, | |||
895 | frame->data_end += n; | 901 | frame->data_end += n; |
896 | n = 0; | 902 | n = 0; |
897 | } | 903 | } |
898 | frame = gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 904 | gspca_frame_add(gspca_dev, INTER_PACKET, |
899 | data, n); | 905 | data, n); |
900 | if (gspca_dev->last_packet_type != DISCARD_PACKET && | 906 | if (gspca_dev->last_packet_type != DISCARD_PACKET && |
901 | frame->data_end[-2] == 0xff && | 907 | frame->data_end[-2] == 0xff && |
902 | frame->data_end[-1] == 0xd9) | 908 | frame->data_end[-1] == 0xd9) |
903 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 909 | gspca_frame_add(gspca_dev, LAST_PACKET, |
904 | NULL, 0); | 910 | NULL, 0); |
905 | 911 | ||
906 | n = sof - data; | 912 | n = sof - data; |
@@ -920,7 +926,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
920 | pac_start_frame(gspca_dev, frame, | 926 | pac_start_frame(gspca_dev, frame, |
921 | gspca_dev->width, gspca_dev->height); | 927 | gspca_dev->width, gspca_dev->height); |
922 | } | 928 | } |
923 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 929 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
924 | } | 930 | } |
925 | 931 | ||
926 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 932 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/pac7311.c b/drivers/media/video/gspca/pac7311.c index 1a27da00ccc1..e5697a6345e8 100644 --- a/drivers/media/video/gspca/pac7311.c +++ b/drivers/media/video/gspca/pac7311.c | |||
@@ -653,7 +653,7 @@ static void pac_start_frame(struct gspca_dev *gspca_dev, | |||
653 | { | 653 | { |
654 | unsigned char tmpbuf[4]; | 654 | unsigned char tmpbuf[4]; |
655 | 655 | ||
656 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 656 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
657 | pac_jpeg_header1, sizeof(pac_jpeg_header1)); | 657 | pac_jpeg_header1, sizeof(pac_jpeg_header1)); |
658 | 658 | ||
659 | tmpbuf[0] = lines >> 8; | 659 | tmpbuf[0] = lines >> 8; |
@@ -661,25 +661,31 @@ static void pac_start_frame(struct gspca_dev *gspca_dev, | |||
661 | tmpbuf[2] = samples_per_line >> 8; | 661 | tmpbuf[2] = samples_per_line >> 8; |
662 | tmpbuf[3] = samples_per_line & 0xff; | 662 | tmpbuf[3] = samples_per_line & 0xff; |
663 | 663 | ||
664 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 664 | gspca_frame_add(gspca_dev, INTER_PACKET, |
665 | tmpbuf, sizeof(tmpbuf)); | 665 | tmpbuf, sizeof(tmpbuf)); |
666 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 666 | gspca_frame_add(gspca_dev, INTER_PACKET, |
667 | pac_jpeg_header2, sizeof(pac_jpeg_header2)); | 667 | pac_jpeg_header2, sizeof(pac_jpeg_header2)); |
668 | } | 668 | } |
669 | 669 | ||
670 | /* this function is run at interrupt level */ | 670 | /* this function is run at interrupt level */ |
671 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 671 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
672 | struct gspca_frame *frame, /* target */ | 672 | u8 *data, /* isoc packet */ |
673 | __u8 *data, /* isoc packet */ | ||
674 | int len) /* iso packet length */ | 673 | int len) /* iso packet length */ |
675 | { | 674 | { |
676 | struct sd *sd = (struct sd *) gspca_dev; | 675 | struct sd *sd = (struct sd *) gspca_dev; |
677 | unsigned char *sof; | 676 | unsigned char *sof; |
677 | struct gspca_frame *frame; | ||
678 | 678 | ||
679 | sof = pac_find_sof(&sd->sof_read, data, len); | 679 | sof = pac_find_sof(&sd->sof_read, data, len); |
680 | if (sof) { | 680 | if (sof) { |
681 | int n, lum_offset, footer_length; | 681 | int n, lum_offset, footer_length; |
682 | 682 | ||
683 | frame = gspca_get_i_frame(gspca_dev); | ||
684 | if (frame == NULL) { | ||
685 | gspca_dev->last_packet_type = DISCARD_PACKET; | ||
686 | return; | ||
687 | } | ||
688 | |||
683 | /* 6 bytes after the FF D9 EOF marker a number of lumination | 689 | /* 6 bytes after the FF D9 EOF marker a number of lumination |
684 | bytes are send corresponding to different parts of the | 690 | bytes are send corresponding to different parts of the |
685 | image, the 14th and 15th byte after the EOF seem to | 691 | 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, | |||
693 | frame->data_end += n; | 699 | frame->data_end += n; |
694 | n = 0; | 700 | n = 0; |
695 | } | 701 | } |
696 | frame = gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 702 | gspca_frame_add(gspca_dev, INTER_PACKET, |
697 | data, n); | 703 | data, n); |
698 | if (gspca_dev->last_packet_type != DISCARD_PACKET && | 704 | if (gspca_dev->last_packet_type != DISCARD_PACKET && |
699 | frame->data_end[-2] == 0xff && | 705 | frame->data_end[-2] == 0xff && |
700 | frame->data_end[-1] == 0xd9) | 706 | frame->data_end[-1] == 0xd9) |
701 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 707 | gspca_frame_add(gspca_dev, LAST_PACKET, |
702 | NULL, 0); | 708 | NULL, 0); |
703 | 709 | ||
704 | n = sof - data; | 710 | n = sof - data; |
@@ -717,7 +723,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
717 | pac_start_frame(gspca_dev, frame, | 723 | pac_start_frame(gspca_dev, frame, |
718 | gspca_dev->height, gspca_dev->width); | 724 | gspca_dev->height, gspca_dev->width); |
719 | } | 725 | } |
720 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 726 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
721 | } | 727 | } |
722 | 728 | ||
723 | static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val) | 729 | static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/sn9c20x.c b/drivers/media/video/gspca/sn9c20x.c index cdad3db33367..b1944a7cbb0f 100644 --- a/drivers/media/video/gspca/sn9c20x.c +++ b/drivers/media/video/gspca/sn9c20x.c | |||
@@ -2342,7 +2342,6 @@ static void sd_dqcallback(struct gspca_dev *gspca_dev) | |||
2342 | } | 2342 | } |
2343 | 2343 | ||
2344 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 2344 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
2345 | struct gspca_frame *frame, /* target */ | ||
2346 | u8 *data, /* isoc packet */ | 2345 | u8 *data, /* isoc packet */ |
2347 | int len) /* iso packet length */ | 2346 | int len) /* iso packet length */ |
2348 | { | 2347 | { |
@@ -2378,22 +2377,22 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
2378 | avg_lum >>= 9; | 2377 | avg_lum >>= 9; |
2379 | atomic_set(&sd->avg_lum, avg_lum); | 2378 | atomic_set(&sd->avg_lum, avg_lum); |
2380 | gspca_frame_add(gspca_dev, LAST_PACKET, | 2379 | gspca_frame_add(gspca_dev, LAST_PACKET, |
2381 | frame, data, len); | 2380 | data, len); |
2382 | return; | 2381 | return; |
2383 | } | 2382 | } |
2384 | if (gspca_dev->last_packet_type == LAST_PACKET) { | 2383 | if (gspca_dev->last_packet_type == LAST_PACKET) { |
2385 | if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv | 2384 | if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv |
2386 | & MODE_JPEG) { | 2385 | & MODE_JPEG) { |
2387 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 2386 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
2388 | sd->jpeg_hdr, JPEG_HDR_SZ); | 2387 | sd->jpeg_hdr, JPEG_HDR_SZ); |
2389 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 2388 | gspca_frame_add(gspca_dev, INTER_PACKET, |
2390 | data, len); | 2389 | data, len); |
2391 | } else { | 2390 | } else { |
2392 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 2391 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
2393 | data, len); | 2392 | data, len); |
2394 | } | 2393 | } |
2395 | } else { | 2394 | } else { |
2396 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 2395 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
2397 | } | 2396 | } |
2398 | } | 2397 | } |
2399 | 2398 | ||
diff --git a/drivers/media/video/gspca/sonixb.c b/drivers/media/video/gspca/sonixb.c index cf3af8de6e97..a9f061063b49 100644 --- a/drivers/media/video/gspca/sonixb.c +++ b/drivers/media/video/gspca/sonixb.c | |||
@@ -995,8 +995,7 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
995 | } | 995 | } |
996 | 996 | ||
997 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 997 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
998 | struct gspca_frame *frame, /* target */ | 998 | u8 *data, /* isoc packet */ |
999 | unsigned char *data, /* isoc packet */ | ||
1000 | int len) /* iso packet length */ | 999 | int len) /* iso packet length */ |
1001 | { | 1000 | { |
1002 | int i; | 1001 | int i; |
@@ -1054,12 +1053,12 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
1054 | pkt_type = DISCARD_PACKET; | 1053 | pkt_type = DISCARD_PACKET; |
1055 | } | 1054 | } |
1056 | 1055 | ||
1057 | frame = gspca_frame_add(gspca_dev, pkt_type, | 1056 | gspca_frame_add(gspca_dev, pkt_type, |
1058 | frame, data, 0); | 1057 | NULL, 0); |
1059 | data += i + fr_h_sz; | 1058 | data += i + fr_h_sz; |
1060 | len -= i + fr_h_sz; | 1059 | len -= i + fr_h_sz; |
1061 | gspca_frame_add(gspca_dev, FIRST_PACKET, | 1060 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
1062 | frame, data, len); | 1061 | data, len); |
1063 | return; | 1062 | return; |
1064 | } | 1063 | } |
1065 | } | 1064 | } |
@@ -1068,15 +1067,21 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
1068 | if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_RAW) { | 1067 | if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_RAW) { |
1069 | /* In raw mode we sometimes get some garbage after the frame | 1068 | /* In raw mode we sometimes get some garbage after the frame |
1070 | ignore this */ | 1069 | ignore this */ |
1071 | int used = frame->data_end - frame->data; | 1070 | struct gspca_frame *frame; |
1071 | int used; | ||
1072 | int size = cam->cam_mode[gspca_dev->curr_mode].sizeimage; | 1072 | int size = cam->cam_mode[gspca_dev->curr_mode].sizeimage; |
1073 | 1073 | ||
1074 | frame = gspca_get_i_frame(gspca_dev); | ||
1075 | if (frame == NULL) { | ||
1076 | gspca_dev->last_packet_type = DISCARD_PACKET; | ||
1077 | return; | ||
1078 | } | ||
1079 | used = frame->data_end - frame->data; | ||
1074 | if (used + len > size) | 1080 | if (used + len > size) |
1075 | len = size - used; | 1081 | len = size - used; |
1076 | } | 1082 | } |
1077 | 1083 | ||
1078 | gspca_frame_add(gspca_dev, INTER_PACKET, | 1084 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
1079 | frame, data, len); | ||
1080 | } | 1085 | } |
1081 | 1086 | ||
1082 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 1087 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c index 5f82efb93d9b..282c707e5e81 100644 --- a/drivers/media/video/gspca/sonixj.c +++ b/drivers/media/video/gspca/sonixj.c | |||
@@ -1993,7 +1993,6 @@ static void do_autogain(struct gspca_dev *gspca_dev) | |||
1993 | /* scan the URB packets */ | 1993 | /* scan the URB packets */ |
1994 | /* This function is run at interrupt level. */ | 1994 | /* This function is run at interrupt level. */ |
1995 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 1995 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
1996 | struct gspca_frame *frame, /* target */ | ||
1997 | u8 *data, /* isoc packet */ | 1996 | u8 *data, /* isoc packet */ |
1998 | int len) /* iso packet length */ | 1997 | int len) /* iso packet length */ |
1999 | { | 1998 | { |
@@ -2005,7 +2004,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
2005 | 2004 | ||
2006 | /* end of frame */ | 2005 | /* end of frame */ |
2007 | gspca_frame_add(gspca_dev, LAST_PACKET, | 2006 | gspca_frame_add(gspca_dev, LAST_PACKET, |
2008 | frame, data, sof + 2); | 2007 | data, sof + 2); |
2009 | if (sd->ag_cnt < 0) | 2008 | if (sd->ag_cnt < 0) |
2010 | return; | 2009 | return; |
2011 | /* w1 w2 w3 */ | 2010 | /* w1 w2 w3 */ |
@@ -2028,10 +2027,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
2028 | if (gspca_dev->last_packet_type == LAST_PACKET) { | 2027 | if (gspca_dev->last_packet_type == LAST_PACKET) { |
2029 | 2028 | ||
2030 | /* put the JPEG 422 header */ | 2029 | /* put the JPEG 422 header */ |
2031 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 2030 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
2032 | sd->jpeg_hdr, JPEG_HDR_SZ); | 2031 | sd->jpeg_hdr, JPEG_HDR_SZ); |
2033 | } | 2032 | } |
2034 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 2033 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
2035 | } | 2034 | } |
2036 | 2035 | ||
2037 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 2036 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/spca500.c b/drivers/media/video/gspca/spca500.c index fab7ef85a6c1..8bd844d319ea 100644 --- a/drivers/media/video/gspca/spca500.c +++ b/drivers/media/video/gspca/spca500.c | |||
@@ -899,8 +899,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
899 | } | 899 | } |
900 | 900 | ||
901 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 901 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
902 | struct gspca_frame *frame, /* target */ | 902 | u8 *data, /* isoc packet */ |
903 | __u8 *data, /* isoc packet */ | ||
904 | int len) /* iso packet length */ | 903 | int len) /* iso packet length */ |
905 | { | 904 | { |
906 | struct sd *sd = (struct sd *) gspca_dev; | 905 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -913,11 +912,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
913 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ | 912 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ |
914 | return; | 913 | return; |
915 | } | 914 | } |
916 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 915 | gspca_frame_add(gspca_dev, LAST_PACKET, |
917 | ffd9, 2); | 916 | ffd9, 2); |
918 | 917 | ||
919 | /* put the JPEG header in the new frame */ | 918 | /* put the JPEG header in the new frame */ |
920 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 919 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
921 | sd->jpeg_hdr, JPEG_HDR_SZ); | 920 | sd->jpeg_hdr, JPEG_HDR_SZ); |
922 | 921 | ||
923 | data += SPCA500_OFFSET_DATA; | 922 | data += SPCA500_OFFSET_DATA; |
@@ -931,7 +930,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
931 | i = 0; | 930 | i = 0; |
932 | do { | 931 | do { |
933 | if (data[i] == 0xff) { | 932 | if (data[i] == 0xff) { |
934 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 933 | gspca_frame_add(gspca_dev, INTER_PACKET, |
935 | data, i + 1); | 934 | data, i + 1); |
936 | len -= i; | 935 | len -= i; |
937 | data += i; | 936 | data += i; |
@@ -940,7 +939,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
940 | } | 939 | } |
941 | i++; | 940 | i++; |
942 | } while (i < len); | 941 | } while (i < len); |
943 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 942 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
944 | } | 943 | } |
945 | 944 | ||
946 | static void setbrightness(struct gspca_dev *gspca_dev) | 945 | static void setbrightness(struct gspca_dev *gspca_dev) |
diff --git a/drivers/media/video/gspca/spca501.c b/drivers/media/video/gspca/spca501.c index b74a34218da0..d251f145a751 100644 --- a/drivers/media/video/gspca/spca501.c +++ b/drivers/media/video/gspca/spca501.c | |||
@@ -2032,20 +2032,15 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
2032 | } | 2032 | } |
2033 | 2033 | ||
2034 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 2034 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
2035 | struct gspca_frame *frame, /* target */ | 2035 | u8 *data, /* isoc packet */ |
2036 | __u8 *data, /* isoc packet */ | ||
2037 | int len) /* iso packet length */ | 2036 | int len) /* iso packet length */ |
2038 | { | 2037 | { |
2039 | switch (data[0]) { | 2038 | switch (data[0]) { |
2040 | case 0: /* start of frame */ | 2039 | case 0: /* start of frame */ |
2041 | frame = gspca_frame_add(gspca_dev, | 2040 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
2042 | LAST_PACKET, | ||
2043 | frame, | ||
2044 | data, 0); | ||
2045 | data += SPCA501_OFFSET_DATA; | 2041 | data += SPCA501_OFFSET_DATA; |
2046 | len -= SPCA501_OFFSET_DATA; | 2042 | len -= SPCA501_OFFSET_DATA; |
2047 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 2043 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
2048 | data, len); | ||
2049 | return; | 2044 | return; |
2050 | case 0xff: /* drop */ | 2045 | case 0xff: /* drop */ |
2051 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ | 2046 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ |
@@ -2053,8 +2048,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
2053 | } | 2048 | } |
2054 | data++; | 2049 | data++; |
2055 | len--; | 2050 | len--; |
2056 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 2051 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
2057 | data, len); | ||
2058 | } | 2052 | } |
2059 | 2053 | ||
2060 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 2054 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/spca505.c b/drivers/media/video/gspca/spca505.c index ea8c9fe2e961..0f9232ff1281 100644 --- a/drivers/media/video/gspca/spca505.c +++ b/drivers/media/video/gspca/spca505.c | |||
@@ -739,26 +739,22 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
739 | } | 739 | } |
740 | 740 | ||
741 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 741 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
742 | struct gspca_frame *frame, /* target */ | ||
743 | u8 *data, /* isoc packet */ | 742 | u8 *data, /* isoc packet */ |
744 | int len) /* iso packet length */ | 743 | int len) /* iso packet length */ |
745 | { | 744 | { |
746 | switch (data[0]) { | 745 | switch (data[0]) { |
747 | case 0: /* start of frame */ | 746 | case 0: /* start of frame */ |
748 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 747 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
749 | data, 0); | ||
750 | data += SPCA50X_OFFSET_DATA; | 748 | data += SPCA50X_OFFSET_DATA; |
751 | len -= SPCA50X_OFFSET_DATA; | 749 | len -= SPCA50X_OFFSET_DATA; |
752 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 750 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
753 | data, len); | ||
754 | break; | 751 | break; |
755 | case 0xff: /* drop */ | 752 | case 0xff: /* drop */ |
756 | break; | 753 | break; |
757 | default: | 754 | default: |
758 | data += 1; | 755 | data += 1; |
759 | len -= 1; | 756 | len -= 1; |
760 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 757 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
761 | data, len); | ||
762 | break; | 758 | break; |
763 | } | 759 | } |
764 | } | 760 | } |
diff --git a/drivers/media/video/gspca/spca506.c b/drivers/media/video/gspca/spca506.c index a199298a6419..ab28cc23e415 100644 --- a/drivers/media/video/gspca/spca506.c +++ b/drivers/media/video/gspca/spca506.c | |||
@@ -543,18 +543,15 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
543 | } | 543 | } |
544 | 544 | ||
545 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 545 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
546 | struct gspca_frame *frame, /* target */ | 546 | u8 *data, /* isoc packet */ |
547 | __u8 *data, /* isoc packet */ | ||
548 | int len) /* iso packet length */ | 547 | int len) /* iso packet length */ |
549 | { | 548 | { |
550 | switch (data[0]) { | 549 | switch (data[0]) { |
551 | case 0: /* start of frame */ | 550 | case 0: /* start of frame */ |
552 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 551 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
553 | data, 0); | ||
554 | data += SPCA50X_OFFSET_DATA; | 552 | data += SPCA50X_OFFSET_DATA; |
555 | len -= SPCA50X_OFFSET_DATA; | 553 | len -= SPCA50X_OFFSET_DATA; |
556 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 554 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
557 | data, len); | ||
558 | break; | 555 | break; |
559 | case 0xff: /* drop */ | 556 | case 0xff: /* drop */ |
560 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ | 557 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ |
@@ -562,8 +559,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
562 | default: | 559 | default: |
563 | data += 1; | 560 | data += 1; |
564 | len -= 1; | 561 | len -= 1; |
565 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 562 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
566 | data, len); | ||
567 | break; | 563 | break; |
568 | } | 564 | } |
569 | } | 565 | } |
diff --git a/drivers/media/video/gspca/spca508.c b/drivers/media/video/gspca/spca508.c index 9696c4caf5c9..4d8e6cf75d55 100644 --- a/drivers/media/video/gspca/spca508.c +++ b/drivers/media/video/gspca/spca508.c | |||
@@ -1447,26 +1447,22 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
1447 | } | 1447 | } |
1448 | 1448 | ||
1449 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 1449 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
1450 | struct gspca_frame *frame, /* target */ | ||
1451 | u8 *data, /* isoc packet */ | 1450 | u8 *data, /* isoc packet */ |
1452 | int len) /* iso packet length */ | 1451 | int len) /* iso packet length */ |
1453 | { | 1452 | { |
1454 | switch (data[0]) { | 1453 | switch (data[0]) { |
1455 | case 0: /* start of frame */ | 1454 | case 0: /* start of frame */ |
1456 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 1455 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
1457 | data, 0); | ||
1458 | data += SPCA508_OFFSET_DATA; | 1456 | data += SPCA508_OFFSET_DATA; |
1459 | len -= SPCA508_OFFSET_DATA; | 1457 | len -= SPCA508_OFFSET_DATA; |
1460 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 1458 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
1461 | data, len); | ||
1462 | break; | 1459 | break; |
1463 | case 0xff: /* drop */ | 1460 | case 0xff: /* drop */ |
1464 | break; | 1461 | break; |
1465 | default: | 1462 | default: |
1466 | data += 1; | 1463 | data += 1; |
1467 | len -= 1; | 1464 | len -= 1; |
1468 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 1465 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
1469 | data, len); | ||
1470 | break; | 1466 | break; |
1471 | } | 1467 | } |
1472 | } | 1468 | } |
diff --git a/drivers/media/video/gspca/spca561.c b/drivers/media/video/gspca/spca561.c index 27e82b35f3e7..58c2f0039af1 100644 --- a/drivers/media/video/gspca/spca561.c +++ b/drivers/media/video/gspca/spca561.c | |||
@@ -779,8 +779,7 @@ static void do_autogain(struct gspca_dev *gspca_dev) | |||
779 | } | 779 | } |
780 | 780 | ||
781 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 781 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
782 | struct gspca_frame *frame, /* target */ | 782 | u8 *data, /* isoc packet */ |
783 | __u8 *data, /* isoc packet */ | ||
784 | int len) /* iso packet length */ | 783 | int len) /* iso packet length */ |
785 | { | 784 | { |
786 | struct sd *sd = (struct sd *) gspca_dev; | 785 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -788,12 +787,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
788 | len--; | 787 | len--; |
789 | switch (*data++) { /* sequence number */ | 788 | switch (*data++) { /* sequence number */ |
790 | case 0: /* start of frame */ | 789 | case 0: /* start of frame */ |
791 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 790 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
792 | data, 0); | ||
793 | if (data[1] & 0x10) { | 791 | if (data[1] & 0x10) { |
794 | /* compressed bayer */ | 792 | /* compressed bayer */ |
795 | gspca_frame_add(gspca_dev, FIRST_PACKET, | 793 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
796 | frame, data, len); | ||
797 | } else { | 794 | } else { |
798 | /* raw bayer (with a header, which we skip) */ | 795 | /* raw bayer (with a header, which we skip) */ |
799 | if (sd->chip_revision == Rev012A) { | 796 | if (sd->chip_revision == Rev012A) { |
@@ -803,14 +800,13 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
803 | data += 16; | 800 | data += 16; |
804 | len -= 16; | 801 | len -= 16; |
805 | } | 802 | } |
806 | gspca_frame_add(gspca_dev, FIRST_PACKET, | 803 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
807 | frame, data, len); | ||
808 | } | 804 | } |
809 | return; | 805 | return; |
810 | case 0xff: /* drop (empty mpackets) */ | 806 | case 0xff: /* drop (empty mpackets) */ |
811 | return; | 807 | return; |
812 | } | 808 | } |
813 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 809 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
814 | } | 810 | } |
815 | 811 | ||
816 | /* rev 72a only */ | 812 | /* rev 72a only */ |
diff --git a/drivers/media/video/gspca/sq905.c b/drivers/media/video/gspca/sq905.c index 547d1fd5191d..1fcaca6a87f7 100644 --- a/drivers/media/video/gspca/sq905.c +++ b/drivers/media/video/gspca/sq905.c | |||
@@ -214,7 +214,6 @@ static void sq905_dostream(struct work_struct *work) | |||
214 | { | 214 | { |
215 | struct sd *dev = container_of(work, struct sd, work_struct); | 215 | struct sd *dev = container_of(work, struct sd, work_struct); |
216 | struct gspca_dev *gspca_dev = &dev->gspca_dev; | 216 | struct gspca_dev *gspca_dev = &dev->gspca_dev; |
217 | struct gspca_frame *frame; | ||
218 | int bytes_left; /* bytes remaining in current frame. */ | 217 | int bytes_left; /* bytes remaining in current frame. */ |
219 | int data_len; /* size to use for the next read. */ | 218 | int data_len; /* size to use for the next read. */ |
220 | int header_read; /* true if we have already read the frame header. */ | 219 | int header_read; /* true if we have already read the frame header. */ |
@@ -266,18 +265,14 @@ static void sq905_dostream(struct work_struct *work) | |||
266 | } else { | 265 | } else { |
267 | packet_type = INTER_PACKET; | 266 | packet_type = INTER_PACKET; |
268 | } | 267 | } |
269 | frame = gspca_get_i_frame(gspca_dev); | 268 | gspca_frame_add(gspca_dev, packet_type, |
270 | if (frame) { | 269 | data, data_len); |
271 | frame = gspca_frame_add(gspca_dev, packet_type, | 270 | /* If entire frame fits in one packet we still |
272 | frame, data, data_len); | 271 | need to add a LAST_PACKET */ |
273 | /* If entire frame fits in one packet we still | 272 | if (packet_type == FIRST_PACKET && |
274 | need to add a LAST_PACKET */ | 273 | bytes_left == 0) |
275 | if (packet_type == FIRST_PACKET && | 274 | gspca_frame_add(gspca_dev, LAST_PACKET, |
276 | bytes_left == 0) | 275 | NULL, 0); |
277 | frame = gspca_frame_add(gspca_dev, | ||
278 | LAST_PACKET, | ||
279 | frame, data, 0); | ||
280 | } | ||
281 | } | 276 | } |
282 | if (gspca_dev->present) { | 277 | if (gspca_dev->present) { |
283 | /* acknowledge the frame */ | 278 | /* acknowledge the frame */ |
diff --git a/drivers/media/video/gspca/sq905c.c b/drivers/media/video/gspca/sq905c.c index 81020f6f739e..d70b156872d6 100644 --- a/drivers/media/video/gspca/sq905c.c +++ b/drivers/media/video/gspca/sq905c.c | |||
@@ -115,7 +115,6 @@ static void sq905c_dostream(struct work_struct *work) | |||
115 | { | 115 | { |
116 | struct sd *dev = container_of(work, struct sd, work_struct); | 116 | struct sd *dev = container_of(work, struct sd, work_struct); |
117 | struct gspca_dev *gspca_dev = &dev->gspca_dev; | 117 | struct gspca_dev *gspca_dev = &dev->gspca_dev; |
118 | struct gspca_frame *frame; | ||
119 | int bytes_left; /* bytes remaining in current frame. */ | 118 | int bytes_left; /* bytes remaining in current frame. */ |
120 | int data_len; /* size to use for the next read. */ | 119 | int data_len; /* size to use for the next read. */ |
121 | int act_len; | 120 | int act_len; |
@@ -146,10 +145,8 @@ static void sq905c_dostream(struct work_struct *work) | |||
146 | PDEBUG(D_STREAM, "bytes_left = 0x%x", bytes_left); | 145 | PDEBUG(D_STREAM, "bytes_left = 0x%x", bytes_left); |
147 | /* We keep the header. It has other information, too. */ | 146 | /* We keep the header. It has other information, too. */ |
148 | packet_type = FIRST_PACKET; | 147 | packet_type = FIRST_PACKET; |
149 | frame = gspca_get_i_frame(gspca_dev); | 148 | gspca_frame_add(gspca_dev, packet_type, |
150 | if (frame) | 149 | buffer, FRAME_HEADER_LEN); |
151 | gspca_frame_add(gspca_dev, packet_type, | ||
152 | frame, buffer, FRAME_HEADER_LEN); | ||
153 | while (bytes_left > 0 && gspca_dev->present) { | 150 | while (bytes_left > 0 && gspca_dev->present) { |
154 | data_len = bytes_left > SQ905C_MAX_TRANSFER ? | 151 | data_len = bytes_left > SQ905C_MAX_TRANSFER ? |
155 | SQ905C_MAX_TRANSFER : bytes_left; | 152 | SQ905C_MAX_TRANSFER : bytes_left; |
@@ -167,9 +164,8 @@ static void sq905c_dostream(struct work_struct *work) | |||
167 | packet_type = LAST_PACKET; | 164 | packet_type = LAST_PACKET; |
168 | else | 165 | else |
169 | packet_type = INTER_PACKET; | 166 | packet_type = INTER_PACKET; |
170 | if (frame) | 167 | gspca_frame_add(gspca_dev, packet_type, |
171 | gspca_frame_add(gspca_dev, packet_type, | 168 | buffer, data_len); |
172 | frame, buffer, data_len); | ||
173 | } | 169 | } |
174 | } | 170 | } |
175 | quit_stream: | 171 | quit_stream: |
diff --git a/drivers/media/video/gspca/stk014.c b/drivers/media/video/gspca/stk014.c index 47628964801e..8e23320d7ab7 100644 --- a/drivers/media/video/gspca/stk014.c +++ b/drivers/media/video/gspca/stk014.c | |||
@@ -418,8 +418,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
418 | } | 418 | } |
419 | 419 | ||
420 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 420 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
421 | struct gspca_frame *frame, /* target */ | 421 | u8 *data, /* isoc packet */ |
422 | __u8 *data, /* isoc packet */ | ||
423 | int len) /* iso packet length */ | 422 | int len) /* iso packet length */ |
424 | { | 423 | { |
425 | struct sd *sd = (struct sd *) gspca_dev; | 424 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -435,11 +434,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
435 | * (without ending - ff d9) | 434 | * (without ending - ff d9) |
436 | */ | 435 | */ |
437 | if (data[0] == 0xff && data[1] == 0xfe) { | 436 | if (data[0] == 0xff && data[1] == 0xfe) { |
438 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 437 | gspca_frame_add(gspca_dev, LAST_PACKET, |
439 | ffd9, 2); | 438 | ffd9, 2); |
440 | 439 | ||
441 | /* put the JPEG 411 header */ | 440 | /* put the JPEG 411 header */ |
442 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 441 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
443 | sd->jpeg_hdr, JPEG_HDR_SZ); | 442 | sd->jpeg_hdr, JPEG_HDR_SZ); |
444 | 443 | ||
445 | /* beginning of the frame */ | 444 | /* beginning of the frame */ |
@@ -447,7 +446,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
447 | data += STKHDRSZ; | 446 | data += STKHDRSZ; |
448 | len -= STKHDRSZ; | 447 | len -= STKHDRSZ; |
449 | } | 448 | } |
450 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 449 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
451 | } | 450 | } |
452 | 451 | ||
453 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 452 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/stv0680.c b/drivers/media/video/gspca/stv0680.c index 0981ce14235d..2a69d7ccb50d 100644 --- a/drivers/media/video/gspca/stv0680.c +++ b/drivers/media/video/gspca/stv0680.c | |||
@@ -281,8 +281,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
281 | } | 281 | } |
282 | 282 | ||
283 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 283 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
284 | struct gspca_frame *frame, | 284 | u8 *data, |
285 | __u8 *data, | ||
286 | int len) | 285 | int len) |
287 | { | 286 | { |
288 | struct sd *sd = (struct sd *) gspca_dev; | 287 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -299,10 +298,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
299 | /* Finish the previous frame, we do this upon reception of the next | 298 | /* Finish the previous frame, we do this upon reception of the next |
300 | packet, even though it is already complete so that the strange 16 | 299 | packet, even though it is already complete so that the strange 16 |
301 | byte packets send after a corrupt frame can discard it. */ | 300 | byte packets send after a corrupt frame can discard it. */ |
302 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, NULL, 0); | 301 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
303 | 302 | ||
304 | /* Store the just received frame */ | 303 | /* Store the just received frame */ |
305 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len); | 304 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
306 | } | 305 | } |
307 | 306 | ||
308 | /* sub-driver description */ | 307 | /* sub-driver description */ |
diff --git a/drivers/media/video/gspca/stv06xx/stv06xx.c b/drivers/media/video/gspca/stv06xx/stv06xx.c index bfae63f5584c..5d0241bb1611 100644 --- a/drivers/media/video/gspca/stv06xx/stv06xx.c +++ b/drivers/media/video/gspca/stv06xx/stv06xx.c | |||
@@ -312,8 +312,7 @@ out: | |||
312 | * The 0005 and 0100 chunks seem to appear only in compressed stream. | 312 | * The 0005 and 0100 chunks seem to appear only in compressed stream. |
313 | */ | 313 | */ |
314 | static void stv06xx_pkt_scan(struct gspca_dev *gspca_dev, | 314 | static void stv06xx_pkt_scan(struct gspca_dev *gspca_dev, |
315 | struct gspca_frame *frame, /* target */ | 315 | u8 *data, /* isoc packet */ |
316 | __u8 *data, /* isoc packet */ | ||
317 | int len) /* iso packet length */ | 316 | int len) /* iso packet length */ |
318 | { | 317 | { |
319 | struct sd *sd = (struct sd *) gspca_dev; | 318 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -366,7 +365,7 @@ frame_data: | |||
366 | sd->to_skip -= skip; | 365 | sd->to_skip -= skip; |
367 | } | 366 | } |
368 | 367 | ||
369 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 368 | gspca_frame_add(gspca_dev, INTER_PACKET, |
370 | data, chunk_len); | 369 | data, chunk_len); |
371 | break; | 370 | break; |
372 | 371 | ||
@@ -378,7 +377,7 @@ frame_data: | |||
378 | 377 | ||
379 | /* Create a new frame, chunk length should be zero */ | 378 | /* Create a new frame, chunk length should be zero */ |
380 | gspca_frame_add(gspca_dev, FIRST_PACKET, | 379 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
381 | frame, data, 0); | 380 | NULL, 0); |
382 | 381 | ||
383 | if (sd->bridge == BRIDGE_ST6422) | 382 | if (sd->bridge == BRIDGE_ST6422) |
384 | sd->to_skip = gspca_dev->width * 4; | 383 | sd->to_skip = gspca_dev->width * 4; |
@@ -394,8 +393,8 @@ frame_data: | |||
394 | PDEBUG(D_PACK, "End of frame detected"); | 393 | PDEBUG(D_PACK, "End of frame detected"); |
395 | 394 | ||
396 | /* Complete the last frame (if any) */ | 395 | /* Complete the last frame (if any) */ |
397 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, | 396 | gspca_frame_add(gspca_dev, LAST_PACKET, |
398 | frame, data, 0); | 397 | NULL, 0); |
399 | 398 | ||
400 | if (chunk_len) | 399 | if (chunk_len) |
401 | PDEBUG(D_ERR, "Chunk length is " | 400 | PDEBUG(D_ERR, "Chunk length is " |
diff --git a/drivers/media/video/gspca/sunplus.c b/drivers/media/video/gspca/sunplus.c index aa8f995ce04e..682652cb7fe1 100644 --- a/drivers/media/video/gspca/sunplus.c +++ b/drivers/media/video/gspca/sunplus.c | |||
@@ -1116,7 +1116,6 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
1116 | } | 1116 | } |
1117 | 1117 | ||
1118 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 1118 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
1119 | struct gspca_frame *frame, /* target */ | ||
1120 | u8 *data, /* isoc packet */ | 1119 | u8 *data, /* isoc packet */ |
1121 | int len) /* iso packet length */ | 1120 | int len) /* iso packet length */ |
1122 | { | 1121 | { |
@@ -1186,11 +1185,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
1186 | break; | 1185 | break; |
1187 | } | 1186 | } |
1188 | if (sof) { /* start of frame */ | 1187 | if (sof) { /* start of frame */ |
1189 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 1188 | gspca_frame_add(gspca_dev, LAST_PACKET, |
1190 | ffd9, 2); | 1189 | ffd9, 2); |
1191 | 1190 | ||
1192 | /* put the JPEG header in the new frame */ | 1191 | /* put the JPEG header in the new frame */ |
1193 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 1192 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
1194 | sd->jpeg_hdr, JPEG_HDR_SZ); | 1193 | sd->jpeg_hdr, JPEG_HDR_SZ); |
1195 | } | 1194 | } |
1196 | 1195 | ||
@@ -1198,7 +1197,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
1198 | i = 0; | 1197 | i = 0; |
1199 | do { | 1198 | do { |
1200 | if (data[i] == 0xff) { | 1199 | if (data[i] == 0xff) { |
1201 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 1200 | gspca_frame_add(gspca_dev, INTER_PACKET, |
1202 | data, i + 1); | 1201 | data, i + 1); |
1203 | len -= i; | 1202 | len -= i; |
1204 | data += i; | 1203 | data += i; |
@@ -1207,7 +1206,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
1207 | } | 1206 | } |
1208 | i++; | 1207 | i++; |
1209 | } while (i < len); | 1208 | } while (i < len); |
1210 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 1209 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
1211 | } | 1210 | } |
1212 | 1211 | ||
1213 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 1212 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/t613.c b/drivers/media/video/gspca/t613.c index 1d321c30d22f..55ef6a744427 100644 --- a/drivers/media/video/gspca/t613.c +++ b/drivers/media/video/gspca/t613.c | |||
@@ -938,7 +938,6 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
938 | } | 938 | } |
939 | 939 | ||
940 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 940 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
941 | struct gspca_frame *frame, /* target */ | ||
942 | u8 *data, /* isoc packet */ | 941 | u8 *data, /* isoc packet */ |
943 | int len) /* iso packet length */ | 942 | int len) /* iso packet length */ |
944 | { | 943 | { |
@@ -956,9 +955,9 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
956 | /* extra bytes....., could be processed too but would be | 955 | /* extra bytes....., could be processed too but would be |
957 | * a waste of time, right now leave the application and | 956 | * a waste of time, right now leave the application and |
958 | * libjpeg do it for ourserlves.. */ | 957 | * libjpeg do it for ourserlves.. */ |
959 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 958 | gspca_frame_add(gspca_dev, LAST_PACKET, |
960 | ffd9, 2); | 959 | ffd9, 2); |
961 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len); | 960 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
962 | return; | 961 | return; |
963 | } | 962 | } |
964 | 963 | ||
@@ -967,7 +966,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
967 | * other's do not include it... */ | 966 | * other's do not include it... */ |
968 | len -= 2; | 967 | len -= 2; |
969 | } | 968 | } |
970 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 969 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
971 | } | 970 | } |
972 | 971 | ||
973 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 972 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/tv8532.c b/drivers/media/video/gspca/tv8532.c index 4b44dde9f8b8..b74a3b6489c7 100644 --- a/drivers/media/video/gspca/tv8532.c +++ b/drivers/media/video/gspca/tv8532.c | |||
@@ -398,8 +398,7 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
398 | } | 398 | } |
399 | 399 | ||
400 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 400 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
401 | struct gspca_frame *frame, /* target */ | 401 | u8 *data, /* isoc packet */ |
402 | __u8 *data, /* isoc packet */ | ||
403 | int len) /* iso packet length */ | 402 | int len) /* iso packet length */ |
404 | { | 403 | { |
405 | struct sd *sd = (struct sd *) gspca_dev; | 404 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -424,9 +423,9 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
424 | * - 4 bytes | 423 | * - 4 bytes |
425 | */ | 424 | */ |
426 | gspca_frame_add(gspca_dev, packet_type0, | 425 | gspca_frame_add(gspca_dev, packet_type0, |
427 | frame, data + 2, gspca_dev->width); | 426 | data + 2, gspca_dev->width); |
428 | gspca_frame_add(gspca_dev, packet_type1, | 427 | gspca_frame_add(gspca_dev, packet_type1, |
429 | frame, data + gspca_dev->width + 5, gspca_dev->width); | 428 | data + gspca_dev->width + 5, gspca_dev->width); |
430 | } | 429 | } |
431 | 430 | ||
432 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 431 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/vc032x.c b/drivers/media/video/gspca/vc032x.c index 589042f6adbe..26675236fbd2 100644 --- a/drivers/media/video/gspca/vc032x.c +++ b/drivers/media/video/gspca/vc032x.c | |||
@@ -2987,7 +2987,6 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
2987 | } | 2987 | } |
2988 | 2988 | ||
2989 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 2989 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
2990 | struct gspca_frame *frame, /* target */ | ||
2991 | u8 *data, /* isoc packet */ | 2990 | u8 *data, /* isoc packet */ |
2992 | int len) /* iso pkt length */ | 2991 | int len) /* iso pkt length */ |
2993 | { | 2992 | { |
@@ -2996,21 +2995,25 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
2996 | if (data[0] == 0xff && data[1] == 0xd8) { | 2995 | if (data[0] == 0xff && data[1] == 0xd8) { |
2997 | PDEBUG(D_PACK, | 2996 | PDEBUG(D_PACK, |
2998 | "vc032x header packet found len %d", len); | 2997 | "vc032x header packet found len %d", len); |
2999 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 2998 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
3000 | data, 0); | ||
3001 | data += sd->image_offset; | 2999 | data += sd->image_offset; |
3002 | len -= sd->image_offset; | 3000 | len -= sd->image_offset; |
3003 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 3001 | gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); |
3004 | data, len); | ||
3005 | return; | 3002 | return; |
3006 | } | 3003 | } |
3007 | 3004 | ||
3008 | /* The vc0321 sends some additional data after sending the complete | 3005 | /* The vc0321 sends some additional data after sending the complete |
3009 | * frame, we ignore this. */ | 3006 | * frame, we ignore this. */ |
3010 | if (sd->bridge == BRIDGE_VC0321 | 3007 | if (sd->bridge == BRIDGE_VC0321) { |
3011 | && len > frame->v4l2_buf.length - (frame->data_end - frame->data)) | 3008 | struct gspca_frame *frame; |
3012 | len = frame->v4l2_buf.length - (frame->data_end - frame->data); | 3009 | int l; |
3013 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 3010 | |
3011 | frame = gspca_get_i_frame(gspca_dev); | ||
3012 | l = frame->data_end - frame->data; | ||
3013 | if (len > frame->v4l2_buf.length - l) | ||
3014 | len = frame->v4l2_buf.length - l; | ||
3015 | } | ||
3016 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); | ||
3014 | } | 3017 | } |
3015 | 3018 | ||
3016 | static int sd_sethflip(struct gspca_dev *gspca_dev, __s32 val) | 3019 | static int sd_sethflip(struct gspca_dev *gspca_dev, __s32 val) |
diff --git a/drivers/media/video/gspca/w996Xcf.c b/drivers/media/video/gspca/w996Xcf.c index 4f9add79ce13..2fffe203bed8 100644 --- a/drivers/media/video/gspca/w996Xcf.c +++ b/drivers/media/video/gspca/w996Xcf.c | |||
@@ -576,8 +576,7 @@ static void w9968cf_stop0(struct sd *sd) | |||
576 | to be precise it sends: SOI, SOF, DRI, SOS, Y-data, SOS, U-data, SOS, | 576 | to be precise it sends: SOI, SOF, DRI, SOS, Y-data, SOS, U-data, SOS, |
577 | V-data, EOI. */ | 577 | V-data, EOI. */ |
578 | static void w9968cf_pkt_scan(struct gspca_dev *gspca_dev, | 578 | static void w9968cf_pkt_scan(struct gspca_dev *gspca_dev, |
579 | struct gspca_frame *frame, /* target */ | 579 | u8 *data, /* isoc packet */ |
580 | __u8 *data, /* isoc packet */ | ||
581 | int len) /* iso packet length */ | 580 | int len) /* iso packet length */ |
582 | { | 581 | { |
583 | struct sd *sd = (struct sd *) gspca_dev; | 582 | struct sd *sd = (struct sd *) gspca_dev; |
@@ -587,9 +586,9 @@ static void w9968cf_pkt_scan(struct gspca_dev *gspca_dev, | |||
587 | if (len >= 2 && | 586 | if (len >= 2 && |
588 | data[0] == 0xff && | 587 | data[0] == 0xff && |
589 | data[1] == 0xd8) { | 588 | data[1] == 0xd8) { |
590 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 589 | gspca_frame_add(gspca_dev, LAST_PACKET, |
591 | NULL, 0); | 590 | NULL, 0); |
592 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 591 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
593 | sd->jpeg_hdr, JPEG_HDR_SZ); | 592 | sd->jpeg_hdr, JPEG_HDR_SZ); |
594 | /* Strip the ff d8, our own header (which adds | 593 | /* Strip the ff d8, our own header (which adds |
595 | huffman and quantization tables) already has this */ | 594 | huffman and quantization tables) already has this */ |
@@ -599,12 +598,12 @@ static void w9968cf_pkt_scan(struct gspca_dev *gspca_dev, | |||
599 | } else { | 598 | } else { |
600 | /* In UYVY mode an empty packet signals EOF */ | 599 | /* In UYVY mode an empty packet signals EOF */ |
601 | if (gspca_dev->empty_packet) { | 600 | if (gspca_dev->empty_packet) { |
602 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 601 | gspca_frame_add(gspca_dev, LAST_PACKET, |
603 | NULL, 0); | 602 | NULL, 0); |
604 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 603 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
605 | NULL, 0); | 604 | NULL, 0); |
606 | gspca_dev->empty_packet = 0; | 605 | gspca_dev->empty_packet = 0; |
607 | } | 606 | } |
608 | } | 607 | } |
609 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 608 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
610 | } | 609 | } |
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c index 113050792246..864974b61145 100644 --- a/drivers/media/video/gspca/zc3xx.c +++ b/drivers/media/video/gspca/zc3xx.c | |||
@@ -6974,17 +6974,16 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
6974 | } | 6974 | } |
6975 | 6975 | ||
6976 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 6976 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
6977 | struct gspca_frame *frame, | 6977 | u8 *data, |
6978 | __u8 *data, | ||
6979 | int len) | 6978 | int len) |
6980 | { | 6979 | { |
6981 | struct sd *sd = (struct sd *) gspca_dev; | 6980 | struct sd *sd = (struct sd *) gspca_dev; |
6982 | 6981 | ||
6983 | if (data[0] == 0xff && data[1] == 0xd8) { /* start of frame */ | 6982 | if (data[0] == 0xff && data[1] == 0xd8) { /* start of frame */ |
6984 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, | 6983 | gspca_frame_add(gspca_dev, LAST_PACKET, |
6985 | data, 0); | 6984 | NULL, 0); |
6986 | /* put the JPEG header in the new frame */ | 6985 | /* put the JPEG header in the new frame */ |
6987 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 6986 | gspca_frame_add(gspca_dev, FIRST_PACKET, |
6988 | sd->jpeg_hdr, JPEG_HDR_SZ); | 6987 | sd->jpeg_hdr, JPEG_HDR_SZ); |
6989 | 6988 | ||
6990 | /* remove the webcam's header: | 6989 | /* remove the webcam's header: |
@@ -6996,7 +6995,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
6996 | data += 18; | 6995 | data += 18; |
6997 | len -= 18; | 6996 | len -= 18; |
6998 | } | 6997 | } |
6999 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); | 6998 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
7000 | } | 6999 | } |
7001 | 7000 | ||
7002 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 7001 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) |