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 <bhupesh.sharma@xxxxxx> > --- > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html