Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d131c3c9 authored by Jean-Francois Moine's avatar Jean-Francois Moine Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (13452): gspca - main: Let the driver scan URB packets when no frame buffer.

parent 3ec342f2
Loading
Loading
Loading
Loading
+12 −23
Original line number Diff line number Diff line
@@ -144,13 +144,6 @@ static void fill_frame(struct gspca_dev *gspca_dev,
	pkt_scan = gspca_dev->sd_desc->pkt_scan;
	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 */
		len = urb->iso_frame_desc[i].actual_length;
		if (len == 0) {
@@ -223,17 +216,11 @@ static void bulk_irq(struct urb *urb)
		goto resubmit;
	}

	/* 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;
	} else {
	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 the URB */
@@ -266,16 +253,18 @@ struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev,
	int i, j;

	PDEBUG(D_PACK, "add t:%d l:%d",	packet_type, len);
	frame = gspca_dev->cur_frame;

	/* when start of a new frame, if the current frame buffer
	 * is not queued, discard the whole frame */
	if (packet_type == FIRST_PACKET) {
	/* check the availability of the frame buffer */
	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
	 * is not queued, discard the whole frame */
	if (packet_type == FIRST_PACKET) {
		frame->data_end = frame->data;
		jiffies_to_timeval(get_jiffies_64(),
				   &frame->v4l2_buf.timestamp);