Age | Commit message (Collapse) | Author |
|
Allow callers to create a libcamera source when available. libcamera
support is optional, so conditionally compile the new options
depending on whether libcamera is available.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
Provide the integration of a libcamera source within uvc-gadget.
This adds C++ support to the project and adds libcamera as an
optional external dependency.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
Use the option 'd' to specify a v4l2 capture device. This will free up
the use of option 'c' for 'camera' identifiers based on libcamera.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
This release extends UVC Gadget with the ability to provide a
'slideshow' source.
This can assist in the testing of performance and capabilities of a UVC
Gadget based device, by providing a known set of data frames and
configurations to stream to the host.
Further more this release contains:
- lib/timer: Add timer infrastructure
- lib/jpg-source: Constrain fps
These allow sources with out a controlling device to be configured to
deliver at the rate requested by the host.
Finally, the Makefile 'helper' is fixed to correctly call the install
target in ninja.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add facilities in main() to allow selection and usage of
slideshow_source.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
|
|
The slideshow_source class is an implementation of the video_source
class that streams a set of images as video.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
|
|
Lists are useful for more than just iteration! Add a macro to fetch
just the next item in the list.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
Fix the install target to supply the correct call to ninja, and ensure
that it is marked as a phony target to prevent conflicts with any local
files or directories of the same name.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
As written the fps output by the jpg-source is unconstrained; it will
simply fill buffers as quickly as the USB subsysem can handle them.
This is not particularly realistic and also means that the frame rates
configured (and thus expected) by the host are not being adhered to.
Use the new timer infrastructure to slow down the buffer fill operation
such that the frame rates seen match those configured by the host.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
Some sources simply fill the buffers passed by the USB subsystem and
return them as quickly as possible. Particularly with compressed
formats operating at superspeed this rapidly results in unrealistic
frame rates.
Add infrastructure that allows us to define a specific
framerate and introduce blocking calls that constrain those sources
to the framerates expected by the host.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
This release culminates being able to integrate many historical changes
and updates that we had pending for quite some time along with some
bugfixes and clean ups.
Key new features already added to this release include:
- SuperSpeed descriptor support
- MJPEG support fixes
- Update to support new gadget locations
- Conversion to Meson build infrastructure
- A new test pattern source generator
- Support for JPEG sources
- Improved logging
- Commencement of control support
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Support making releases of uvc-gadget by introducing a helper script
which will facilitate the increment of any release version, along with
generating an associated tag, derived from the equivalent implementation
in libcamera [0].
[0] https://git.libcamera.org/libcamera/libcamera.git/tree/utils/release.sh?h=v0.0.2
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Provide the semver utility (version 3.4.0) from [0] to make use of it
with our versioning and release scripts.
[0] https://raw.githubusercontent.com/fsaintjacques/semver-tool/3c76a6f9d113f4045f693845131185611a62162e/src/semver
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Without a response, the host will assume there has been an error and
throw a bunch of errors. The noise of those errors makes it difficult
to see what's going on properly, so return a dummy response that
silences the errors until the functionality is properly implemented.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
It's easier to see what's going on at a glance when the output is
human-readable, so replace the control codes with their names.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The maxsize field of struct uvc_device is probably unecessary even if
it weren't currently fixed at 0. It's used to set dwMaxVideoFrameSize
in addition to the sizeimage member of a struct v4l2_pix_fmt (multiplied
in the latter instance by 1.5x). The documentary definitions for those
two values are such that they should be identical though, so simply
set dwMaxVideoFrameSize to width*height*2 (to maintain commonality
with other UVC Video devices) and use that to set the sizeimage.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
For the UVC_EVENT_STREAMOFF event, the callback frees _other_ events
because it's closing down the pipe. The use of the _safe() version
of the list iterator results in a use-after-free of those events
because they're fetched before the callback that frees them. The
_safe() version is unecessary here; no other callback's behaviour
requires it.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add facilities in main() to allow selection and usage of jpg_source.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The jpg_source class is an implementation of the video_source class that
streams a still jpg image as video.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Now that we have test-source which provides video by generating a test
pattern in userspace, allow its selection in the command line options.
Since it isn't backed by anything, it is set as the default video source
if nothing else is specified.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The test_source class is an implementation of the video_source class
that generates a test pattern in userspace to provide video. We have
some operations which are implemented as no-ops. To quiet the
compiler warnings this causes, flag their arguments as unused.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
When we dequeue a buffer from a V4L2 device, it would be good to know
the size of the buffer. Save it to our struct video_buffer when
dequeueing.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Our v4l2_queue_buffer and v4l2_dequeue_buffer functions give us a
wrapper around the raw V4L2 ioctls with a wrapper struct video_buffer
around the raw struct v4l2_buffer. The problem is that the
video_buffer's mem field is never populated, so there's no way to access
the mem that the buffer refers to given only the buffer.
Populate the video_buffer's mem field at v4l2_dequeue_buffer based on
the dequeued v4l2 buf's index.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
We want to allow video sources whose data is generated in userspace.
Currently buffers are allocated on the V4L2-backed video source and
exported to the uvc-gadget's V4L2 device. Since a video source with
data generated in userspace will not be backed by a V4L2 device, we
allow a way for buffers to be allocated on uvc-gadget's V4L2 device.
As a corollary, the way the buffers are passed has to be changed as
well. Previously they were queued and dequeued between the V4L2 video
source and uvc and vice versa. To allow a video source not backed by
a V4L2 device, we allow an alternative flow where they are dequeued and
queued from and to uvc, and giving a chance to the video source to fill
the buffer in between.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
We are preparing to allow video sources whose data is generated in
userspace. To this end, add a fill_buffer function to video_source.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Provide a convenience wrapper around the build system to allow
auto-complete and simply targets.
'make help' will report the available options.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Provide infrastructure to be able to build the uvc-gadget library as a
shared object and an executable which links against this as a dependency
to implment the reference 'uvc-gadget' application.
All existing cmake infrastructure is removed. This removes custom glob
support that was previously used by an early development for Android,
which is expected to be re-added later when required.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Bringing in the meson infrastructure will enable extra warnings,
including -Wunused...
Directly reference the two locations that have known unused arguments.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Move the main uvc-gadget application to src/ to make it clear
there is a separation between library and application code.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Import the gen-version.sh helper script from libcamera [0]
[0] https://git.libcamera.org/libcamera/libcamera.git/tree/utils/gen-version.sh?h=v0.0.1
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Minor changes to the -h usage output. Reorder the input and the help
option printing, and make the example usages use argv0.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
|
|
Add a new frame describing a 640x480 frame size, and 640x360 frame size
for MJPEG format.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
At some point the kernel has been updated to include a .id descriptor
in the gadget directory name - add that to uvc_find_video_device() so
that the video node is located properly.
Rather than hardcode a specific gadget (for instance with device name
gadget.0) use a wildcard. This has the advantage of backwards
compatability with older kernels that did not use the ID as part of the
device name, though still limits us to supporting scenarios where only a
single gadget is bound to the UDC.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
videobuf2 relies on the sizeimage field to calculate buffer size
when the format is MJPEG, because the bytes-per-line calculation
is missing. Fill in that field as part of v4l2_set_format() so the
API works correctly.
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
Create Super speed streaming class descriptor during create_uvc()
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
|
|
Add MJPEG configfs setup to uvc-gadget.sh. In order to get it to work, I
had to add another two parameters to create_frame() to specify the
format (uncompressed vs mjpeg) and to specify the format descriptor
name.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The MJPEG descriptor does not have a guidFormat, and so configfs doesn't
have it either, but we currently error out if there is no guidFormat.
To fix this, extract the stream type part of the real path, and if it is
MJPEG then hardcode it, otherwise read the guid if it is uncompressed.
This does mean that in configfs the MJPEG format descriptor path must be
"mjpeg" for this to work, though this is already guranteed by configfs.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The official build instructions mandate usage of out-of-tree builds in
the build subdirectory. Replace the list of generated files in
.gitignore with just the build directory.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
[Remove all other .gitignore entries]
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The C flags for warning were present but commented out. Uncomment them
to enable them.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Previously, the interval rate that would be selected and replied to the
host in response to UVC_GET_MAX, UVC_GET_MIN, and UVC_GET_DEF were all
the same and were the first interval rate. Assuming the interval rates
are sorted in ascending order, this means that UVC_GET_MAX would always
yield the minimum interval rate.
Modify the call to uvc_fill_streaming_control such that UVC_GET_MAX will
yield the maximum interval rate.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
We would like to be able to set the frame rate of the video source of a
stream. This patch adds such a function to set the source's frame rate
from the stream. The frame rate is set right after the format is set.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Implement the video source op set_frame_rate for v4l2-source video
source.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
We would like to be able to set the frame rate for video sources. This
patch adds a set_frame_rate op for video sources, along with a wrapper
to call video sources' set_frame_rate functions.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
We would like to be able to set the frame rate of video sources. This
patch adds such a function for v4l2-based video sources to use.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
If the capture device fails to load the default cleanup path will be
taken. This error path relies on objects either existing or being set
to NULL.
Ensure that the stream pointer is initialised to prevent segfaults on
the error path.
Fixes: 1b8f9204db68 ("stream: Use abstract video sources")
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reiewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Parse /proc/mounts to identify the correct mount location of the
ConfigFS filesystem.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The Android C library doesn't provide the glob() function which we use
in the configfs code. Add conditional compilation to cmake such that a
local copy of glob is automatically compiled if glob isn't provided.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The glibc glob() implementation doesn't compile on Android due to
missing support for getlogin_r (before Android ABI 28) and to missing
__THROW, __THROWNL and __attribute_noinline__ macros.
getlogin_r is only used to implement support for the '~' path component
which we don't use in the uvc-gadget library, so we can compile it out.
The three macros can safely be defined as no-op.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The glibc glob() implementation seems to be meant to be compilable
outside of glibc, but that clearly hasn't been tested for some time. Fix
compilation.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The Android libc implementation (bionic) doesn't provide the glob()
function. To enable compilation of the UVC gadget library for Android,
import the glibc glob() implementation.
The glob.c and glob.h files are imported unmodified to ease copyright
management, even if they don't compile as-is. Compilation will be fixed
separately.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|