V4L/DVB (13452): gspca - main: Let the driver scan URB packets when no frame 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
3ec342f250
commit
d131c3c9e1
1 changed files with 12 additions and 23 deletions
|
@ -144,13 +144,6 @@ static void fill_frame(struct gspca_dev *gspca_dev,
|
||||||
pkt_scan = gspca_dev->sd_desc->pkt_scan;
|
pkt_scan = gspca_dev->sd_desc->pkt_scan;
|
||||||
for (i = 0; i < urb->number_of_packets; i++) {
|
for (i = 0; i < urb->number_of_packets; i++) {
|
||||||
|
|
||||||
/* check the availability of the frame buffer */
|
|
||||||
if ((gspca_dev->cur_frame->v4l2_buf.flags & BUF_ALL_FLAGS)
|
|
||||||
!= V4L2_BUF_FLAG_QUEUED) {
|
|
||||||
gspca_dev->last_packet_type = DISCARD_PACKET;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check the packet status and length */
|
/* check the packet status and length */
|
||||||
len = urb->iso_frame_desc[i].actual_length;
|
len = urb->iso_frame_desc[i].actual_length;
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
|
@ -223,17 +216,11 @@ static void bulk_irq(struct urb *urb)
|
||||||
goto resubmit;
|
goto resubmit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check the availability of the frame buffer */
|
PDEBUG(D_PACK, "packet l:%d", urb->actual_length);
|
||||||
if ((gspca_dev->cur_frame->v4l2_buf.flags & BUF_ALL_FLAGS)
|
gspca_dev->sd_desc->pkt_scan(gspca_dev,
|
||||||
!= V4L2_BUF_FLAG_QUEUED) {
|
gspca_dev->frame,
|
||||||
gspca_dev->last_packet_type = DISCARD_PACKET;
|
urb->transfer_buffer,
|
||||||
} else {
|
urb->actual_length);
|
||||||
PDEBUG(D_PACK, "packet l:%d", urb->actual_length);
|
|
||||||
gspca_dev->sd_desc->pkt_scan(gspca_dev,
|
|
||||||
gspca_dev->frame,
|
|
||||||
urb->transfer_buffer,
|
|
||||||
urb->actual_length);
|
|
||||||
}
|
|
||||||
|
|
||||||
resubmit:
|
resubmit:
|
||||||
/* resubmit the URB */
|
/* resubmit the URB */
|
||||||
|
@ -266,16 +253,18 @@ struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev,
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
PDEBUG(D_PACK, "add t:%d l:%d", packet_type, len);
|
PDEBUG(D_PACK, "add t:%d l:%d", packet_type, len);
|
||||||
|
|
||||||
|
/* check the availability of the frame buffer */
|
||||||
frame = gspca_dev->cur_frame;
|
frame = gspca_dev->cur_frame;
|
||||||
|
if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS)
|
||||||
|
!= V4L2_BUF_FLAG_QUEUED) {
|
||||||
|
gspca_dev->last_packet_type = DISCARD_PACKET;
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
/* when start of a new frame, if the current frame buffer
|
/* when start of a new frame, if the current frame buffer
|
||||||
* is not queued, discard the whole frame */
|
* is not queued, discard the whole frame */
|
||||||
if (packet_type == FIRST_PACKET) {
|
if (packet_type == FIRST_PACKET) {
|
||||||
if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS)
|
|
||||||
!= V4L2_BUF_FLAG_QUEUED) {
|
|
||||||
gspca_dev->last_packet_type = DISCARD_PACKET;
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
frame->data_end = frame->data;
|
frame->data_end = frame->data;
|
||||||
jiffies_to_timeval(get_jiffies_64(),
|
jiffies_to_timeval(get_jiffies_64(),
|
||||||
&frame->v4l2_buf.timestamp);
|
&frame->v4l2_buf.timestamp);
|
||||||
|
|
Loading…
Reference in a new issue