Hi Michael,

On Monday 04 February 2013 19:03:56 Michael Grzeschik wrote:
> 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.sha...@st.com>
> > ---
> > 
> >  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;

You can also remove the local mask variable and return uvc_queue_poll() 
directly.

Bhupesh, could you please post a v4 of this patch with these modifications 
integrated, and rebased on top of my latest uvc-gadget branch ?

> -       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.

-- 
Regards,

Laurent Pinchart

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to