uvc-gadget.git
5 months agouvc-gadget: Correct spelling of necessary master
Kieran Bingham [Tue, 22 May 2018 13:10:55 +0000 (14:10 +0100)]
uvc-gadget: Correct spelling of necessary

Trivial spelling fix.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
5 months agouvc-gadget: Sort include headers
Kieran Bingham [Tue, 22 May 2018 09:44:39 +0000 (10:44 +0100)]
uvc-gadget: Sort include headers

Fix the sort order of the header include sections.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agov4l2: Replace USERPTR support with DMABUF support
Laurent Pinchart [Tue, 22 May 2018 08:43:37 +0000 (11:43 +0300)]
v4l2: Replace USERPTR support with DMABUF support

V4L2_MEMORY_USERPTR is deprecated, replace it with V4L2_MEMORY_DMABUF
support for buffer sharing. Two new functions are added,
v4l2_export_buffers() to export previously allocated buffers as dmabuf
objects, and v4l2_import_buffers() to import dmabuf objects as backing
store for V4L2 buffers.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agov4l2: Split buffer allocation and mapping
Laurent Pinchart [Tue, 22 May 2018 08:42:47 +0000 (11:42 +0300)]
v4l2: Split buffer allocation and mapping

Not all use cases of V4L2_MEMORY_MMAP require mapping buffers to
userspace. Separate the allocation and mapping to allow usage of
unmapped buffers.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agouvc-gadget: Use V4L2 helper functions
Laurent Pinchart [Tue, 22 May 2018 07:23:16 +0000 (10:23 +0300)]
uvc-gadget: Use V4L2 helper functions

Replace the manual implementation of the V4L2 ioctls with the V4L2
helper functions from v4l2.c. This cleans up the code and simplifies
handling of the V4L2 API.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agov4l2: Fail v4l2_alloc_buffers() when buffers are already allocated
Laurent Pinchart [Tue, 22 May 2018 07:20:35 +0000 (10:20 +0300)]
v4l2: Fail v4l2_alloc_buffers() when buffers are already allocated

Allocating buffers allocates resources that must be explicitly freed.
Calling v4l2_alloc_buffers() a second time without freeing the buffers
in between causes memory leaks and must not be allowed.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agov4l2: Free v4l2_device object when closing it
Laurent Pinchart [Tue, 22 May 2018 07:19:15 +0000 (10:19 +0300)]
v4l2: Free v4l2_device object when closing it

The v4l2_device object is allocated dynamically by v4l2_open(), free it
in v4l2_close() to make the API symmetrical.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agov4l2: Import V4L2 support code from omap3-isp-live
Laurent Pinchart [Mon, 21 May 2018 11:39:40 +0000 (14:39 +0300)]
v4l2: Import V4L2 support code from omap3-isp-live

The omap3-isp-live project [1] includes generic V4L2 support code that
implements the V4L2 API. Instead of reinventing the wheel, import the
code and use it.

The code has been modified to merge the V4L2 buffers pool implementation
in the V4L2 support code as the abstraction wasn't right for the
uvc-gadget project. Further refactoring will be performed separately.

The original license hasn't been modified from the original LGPL-2.1+.
The sole copyright owner is Laurent Pinchart.

[1] git://git.ideasonboard.org/omap3-isp-live.git

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agouvc-gadget: Use macros from tools.h
Laurent Pinchart [Mon, 21 May 2018 18:43:21 +0000 (21:43 +0300)]
uvc-gadget: Use macros from tools.h

The tools.h header defines clamp and ARRAY_SIZE macros. Use the header
to replace the private implementation.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agouvc-gadget: Dynamically watch/unwatch uvc device fd
Paul Elder [Mon, 21 May 2018 15:45:17 +0000 (23:45 +0800)]
uvc-gadget: Dynamically watch/unwatch uvc device fd

When the uvc device fd is put on the watch list statically, then there
are many "Unable to dequeue buffer: Invalid argument (22)." because the
V4L2 API returns write events immediately when the stream is off.

To fix this, add the fd to the watch list on streamon, and remove it on
streamoff.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agouvc-gadget: Use events library
Paul Elder [Mon, 21 May 2018 15:45:16 +0000 (23:45 +0800)]
uvc-gadget: Use events library

Replace the manual implementation of the select-based event loop with the
events library. This cleans up the code and simplifies event handling.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agoevents: Remove select timeout
Paul Elder [Mon, 21 May 2018 15:45:15 +0000 (23:45 +0800)]
events: Remove select timeout

The reason why no timeout is needed is twofold:

When the stream is off extensive periods of time can pass without an
event occurring if the host doesn't send any UVC request. As that period
of time is unbound, we can't set any meaningful timeout.

When the stream is on buffers are supposed to flow constantly. If
buffers stop flowing that would indicate a bug somewhere in the stack,
which could be caught by a timeout, but that we wouldn't be able to
recover from anyway.

The timeout is thus not needed and harmful when the stream is off.
Remove it.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agoevents: Switch to _DEFAULT_SOURCE
Paul Elder [Mon, 21 May 2018 15:45:14 +0000 (23:45 +0800)]
events: Switch to _DEFAULT_SOURCE

glibc version 2.27 warns that _BSD_SOURCE is deprecated in favour of _DEFAULT
_SOURCE:

 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use
_DEFAULT_SOURCE"

Fix the source code accordingly.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agoevents: Add a cleanup function
Laurent Pinchart [Mon, 21 May 2018 13:31:32 +0000 (16:31 +0300)]
events: Add a cleanup function

Add events to the watch list allocates memory. Add a cleanup function to
free all memory at cleanup time without having to remove all events
explicitly one by one.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agoevents: Extend the events_unwatch_fd() API with an event type
Laurent Pinchart [Mon, 21 May 2018 13:29:33 +0000 (16:29 +0300)]
events: Extend the events_unwatch_fd() API with an event type

If a single file descriptor is being watch for multiple event types, it
will be present in multiple entries in the watch list. The
events_unwatch_fd() function will remove the first entry regardless of
its type, not allowing removal of a particular event type.

Fix this by extending the events_unwatch_fd() API to take an event type,
and remove the corresponding entry.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agoevents: Import event handling library from omap3-isp-live
Laurent Pinchart [Mon, 21 May 2018 11:39:40 +0000 (14:39 +0300)]
events: Import event handling library from omap3-isp-live

The omap3-isp-live project [1] includes a generic event handling library
that implements a select-based loop. Instead of reinventing the wheel,
import the library and use it.

The original license hasn't been modified, and includes both GPL-2.0+
and LGPL-2.1+ code. The sole copyright owner is Laurent Pinchart.

[1] git://git.ideasonboard.org/omap3-isp-live.git

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agouvc-gadget: Add .gitignore file
Paul Elder [Mon, 12 Mar 2018 08:56:41 +0000 (04:56 -0400)]
uvc-gadget: Add .gitignore file

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
5 months agouvc-gadget: Use new kernel API header
Laurent Pinchart [Sun, 20 May 2018 18:59:10 +0000 (21:59 +0300)]
uvc-gadget: Use new kernel API header

The UVC gadget driver now defines its API in the linux/usb/g_uvc.h
public header, use it instead of including an internal kernel header
through a relative path.

The public API doesn't define the UVC_INTF_CONTROL and
UVC_INTF_STREAMING macros, define them locally until we can get rid of
them.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
20 months agouvc-gadget: Do not send Set Interface (alternate setting) response twice
Roger Quadros [Fri, 3 Mar 2017 11:17:15 +0000 (13:17 +0200)]
uvc-gadget: Do not send Set Interface (alternate setting) response twice

On alternate setting change, the webcam gadget sends us a
UVC_EVENT_STREAMON or UVC_EVENT_STREAMOFF event. In the first case, the
driver will issue a delayed status response automatically when we call
the VIDIOC_STREAMON ioctl. In the second case, the driver sends the
status response immediately. We must thus not send the status response
manually with UVCIOC_SEND_RESPONSE in any of those cases.

Without this, the ISO streaming doesn't work if host application
(e.g. luvcview) is closed and restarted.
On dwc3 gadget controller it was resulting in Buffer Expiry error on
the ISO endpoint.

Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
8 years agoInitial import
Laurent Pinchart [Mon, 7 Jun 2010 09:30:53 +0000 (11:30 +0200)]
Initial import

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>