Hi Bhupesh,
On Thu, Jan 17, 2013 at 04:23:51PM +0530, Bhupesh Sharma wrote:
> This patch reworks the videobuffer management logic present in the UVC
> webcam gadget and ports it to use the "more apt" videobuf2 framework for
> video buffer management.
>
> To support routing video data captured from a real V4L2 video capture
> device with a "zero copy" operation on videobuffers (as they pass from
> the V4L2 domain to UVC domain via a user-space application), we need to
> support USER_PTR IO method at the UVC gadget side.
>
> So the V4L2 capture device driver can still continue to use MMAP IO
> method and now the user-space application can just pass a pointer to the
> video buffers being dequeued from the V4L2 device side while queueing
> them at the UVC gadget end. This ensures that we have a "zero-copy"
> design as the videobuffers pass from the V4L2 capture device to the UVC
> gadget.
>
> Note that there will still be a need to apply UVC specific payload
> headers on top of each UVC payload data, which will still require a copy
> operation to be performed in the 'encode' routines of the UVC gadget.
>
> This patch also addresses one issue found out while porting the UVC
> gadget to videobuf2 framework:
> - In case the usb requests queued by the gadget get completed
> with a status of -ESHUTDOWN (disconnected from host),
> the queue of videobuf2 should be cancelled to ensure that the
> application space daemon is not left in a state waiting for
> a vb2 to be successfully absorbed at the USB side.
>
> Signed-off-by: Bhupesh Sharma <[email protected]>
> ---
> drivers/usb/gadget/Kconfig | 1 +
> drivers/usb/gadget/uvc_queue.c | 537
> ++++++++++++----------------------------
> drivers/usb/gadget/uvc_queue.h | 25 +--
> drivers/usb/gadget/uvc_v4l2.c | 27 +--
With this Patch you could add this hunk:
drivers/usb/gadget/uvc_v4l2.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/drivers/usb/gadget/uvc_v4l2.c b/drivers/usb/gadget/uvc_v4l2.c
index b47e0f7..fa445d9 100644
--- a/drivers/usb/gadget/uvc_v4l2.c
+++ b/drivers/usb/gadget/uvc_v4l2.c
@@ -337,13 +337,8 @@ uvc_v4l2_poll(struct file *file, poll_table *wait)
{
struct video_device *vdev = video_devdata(file);
struct uvc_device *uvc = video_get_drvdata(vdev);
- struct uvc_file_handle *handle = to_uvc_file_handle(file->private_data);
unsigned int mask = 0;
- poll_wait(file, &handle->vfh.wait, wait);
- if (v4l2_event_pending(&handle->vfh))
- mask |= POLLPRI;
-
mask |= uvc_queue_poll(&uvc->video.queue, file, wait);
return mask;
The current implementation of vb2_poll already
checks for pending events if the fh has the v4l2_fh type.
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html