Commit graph

1736 commits

Author SHA1 Message Date
Laurent Pinchart
0420a14d75 qcam: main_window: Don't print message when saving a picture
When saving a picture, the application prints a message on cout. This
isn't necessary and doesn't really help with debugging or diagnostics,
remove it.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:56 +02:00
Laurent Pinchart
7536d7d2f8 qcam: main_window: Add shortcuts for toolbar actions
Allow triggering toolbar actions with keyboard shortcuts.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:54 +02:00
Laurent Pinchart
e4c2c60b57 qcam: main_window: Use icons from system icon theme
Use the system icon theme by default, falling back to custom icons if no
theme is available.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:50 +02:00
Laurent Pinchart
15273b38df qcam: main_window: Replace start and stop actions with a toggle action
The main window toolbar contains a start button and a stop button. This
allows starting an already started camera (which is currently not
handled and results in an error) or stopping an already stopped camera.
Replace the two actions with a single start/stop toggle action,
preventing UI misuse and reducing confusion.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:47 +02:00
Laurent Pinchart
77ea51820a qcam: main_window: Move capture event processing to main thread
To avoid blocking the camera manager for a long amount of time, move
capture event processing to the main thread. Captured buffers are added
to a queue and an event is posted to the main window to signal
availability of a buffer.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:44 +02:00
Laurent Pinchart
8e7d1bbe9b qcam: main_window: Move request queuing to a separate function
Requests are requeued synchronously from the completion handler. To
prepare for delayed requeuing, move the queuing to a separate function.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:43 +02:00
Laurent Pinchart
acd02afab0 qcam: Use QSize through the code base
Qt has a QSize class to store sizes. Use it to replace width and height
where applicable.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:42 +02:00
Laurent Pinchart
ac02d741dc qcam: Ensure headers are self-contained
Include the headers corresponding to each compile unit at the very first
line to ensure they are self-contained.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:41 +02:00
Laurent Pinchart
01590c3f78 qcam: Remove custom event dispatcher
The qcam application installs a custom event dispatcher based on the Qt
event loop. As the camera manager now creates an internal thread, it
doesn't use that event dispatcher of the application thread at all.

Furthermore, the custom event dispatcher is buggy, as it doesn't
dispatch messages posted to the main thread's event loop. This isn't an
issue as no messages are posted there in the first place, but would
cause incorrect behaviour if we were to use that feature (for instance
to deliver signals from the camera manager thread to the application
thread).

Fixing the event dispatcher requires a change in the libcamera public
API, as there's currently no way to dispatch messages using the public
API (Thread::dispatchMessages() is not exposed). This isn't worth it at
the moment, so just remove the custom event dispatcher. If qcam later
needs the libcamera request and buffer completion signals to be
delivered in the application thread, it will need to handle that
internally, using Qt's cross-thread signal delivery.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-24 10:33:40 +02:00
Laurent Pinchart
45f248da7d libcamera: v4l2_videodevice: Add support for all 32-bit ARGB formats
The V4L2VideoDevice class implements conversion between PixelFormat and
V4L2PixelFormat for a single flavour of the 32-bit ARGB formats. Add the
three missing ones.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-24 10:33:37 +02:00
Laurent Pinchart
422e3e92ad cam: main: Cache lookup of role property
The code handling the stream role option retrieves the role property and
converts it to a string in every branch. Cache it and use the cached
value.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-24 01:38:25 +02:00
Jacopo Mondi
c153be4fec test: v4l2_videodevice: Test U8 array controls
Test V4L2 array control using vivid control VIVID_CID_U8_4D_ARRAY.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-23 16:45:31 +02:00
Jacopo Mondi
9b838b87c7 libcamera: v4l2_device: Enable enumeration of U8 controls
Enable the enumeration of V4L2 array controls with V4L2_CTRL_TYPE_U8
type.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-03-23 16:45:30 +02:00
Jacopo Mondi
55ead46477 libcamera: v4l2_controls: Support U8 array controls
Add support for array controls of type V4L2_CTRL_TYPE_U8.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-03-23 16:45:29 +02:00
Jacopo Mondi
3786b6c84b libcamera: v4l2_device: Support reading U8 array controls
Add support to retrieve the value of array controls of type
V4L2_CTRL_TYPE_U8.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-23 16:45:25 +02:00
Jacopo Mondi
0aa8e09775 libcamera: v4l2_device: Support writing array U8 controls
Add support to write array controls of type V4L2_CTRL_TYPE_U8.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-23 16:45:21 +02:00
Jacopo Mondi
2c6e6fbc96 libcamera: v4l2_controls: Cache query control information
Cache the V4L2 control info retrieved with VIDIOC_QUERY_EXT_CTRL
at control listing time for later use.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-23 16:45:18 +02:00
Laurent Pinchart
8daf20485b libcamera: controls: Add zero-copy set API for ControlValue
Extend the ControlValue class with a reserve() function to set the value
without actually copying data, and a non-const data() function that
allows writing data directly to the ControlValue storage. This allows
allocating memory directly in ControlValue, potentially removing a data
copy.

Note that this change was implemented before ByteStreamBuffer gained the
zero-copy read() variant, and doesn't actually save a copy in the
control serializer. It however still simplifies
ControlSerializer::loadControlValue().

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-23 16:45:16 +02:00
Laurent Pinchart
9ab024f7c2 libcamera: device_enumerator: Convey device ownership through unique_ptr
Replace usage of shared_ptr with unique_ptr to convey media device
ownership internally in the enumerators when creating the media device.
Once a media device has all its dependencies met, it is converted to a
shared_ptr to keep the external API unchanged.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-23 16:30:48 +02:00
Laurent Pinchart
e75ef59e02 libcamera: device_enumerator_udev: Update pending list in addUdevDevice
Media devices that have unmet dependencies are added to the pending list
in populateMediaDevice(). Move the code to the caller, addUdevDevice(),
as it logically belongs there.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-23 16:30:40 +02:00
Laurent Pinchart
74c99b41e7 libcamera: thread: Order headers alphabetically
No code change.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-23 13:51:10 +02:00
Laurent Pinchart
5849dd0b17 utils: checkstyle: Add formatter to sort #include statements
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-23 13:51:00 +02:00
Laurent Pinchart
3f97be923c libcamera: device_enumerator_udev: Don't add media device twice
Commit 68daa9302f ("libcamera: device_enumerator: Don't stop if one
device fails") introduced a bug in device enumeration. Previously, a
media device would only be added when all its dependencies were present,
as indicated by populateMediaDevice() returning 0. The commit changed
the logic to propagate the populateMediaDevice() return code up, but
mistakenly added the media device to the enumerator even when
dependencies were missing. This causes media devices enumerated with
missing dependencies to be added twice, once when enumerating the media
device itself, and a second time when all the dependencies are found.

Fix it by deferring addition of the media device when dependencies are
missing, and add debug messages to track this process.

Fixes: 68daa9302f ("libcamera: device_enumerator: Don't stop if one device fails")
Reported-by: Andrey Konovalov <andrey.konovalov@linaro.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-23 13:30:24 +02:00
Laurent Pinchart
d6f5621e15 Revert "libcamera: controls: Don't over-optimize ControlValue layout"
This is a partial revert of commit 0028536d70, removing a change that
was incorrectly squashed.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-23 13:14:02 +02:00
Kaaira Gupta
cb78b9e4c7 libcamera: device_enumerator: Remove '\todo' as it is completed
There is a todo written in the doxygen documentation of
device_enumerator which is already completed, hence remove it from the
documentation.

Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-03-21 18:39:28 +02:00
Laurent Pinchart
0028536d70 libcamera: controls: Don't over-optimize ControlValue layout
The ControlValue class size should be minimized to save space, as it can
be instantiated in large numbers. The current implementation does so by
specifying several members as bitfields, but does so too aggressively,
resulting in fields being packed in an inefficient to access way on some
platforms. For instance, on 32-bit x86, the numElements_ field is offset
by 7 bits in a 32-bit word. This additionally causes a static assert
that checks the size of the class to fail.

Relax the constraints on the isArray_ and numElements_ fields to avoid
inefficient access, and to ensure that the class size is identical
across all platforms. This will need to be revisited anyway when
stabilizing the ABI, so add a \todo comment as a reminder.

Fixes: 1fa4b43402 ("libcamera: controls: Support array controls in ControlValue")
Reported-by: Jan Engelhardt <jengelh@inai.de>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-20 16:47:45 +02:00
Laurent Pinchart
916df9e38d libcamera: controls: Move ControlValue size check to controls.cpp
The size of the ControlValue class is checked by a static_assert() to
avoid accidental ABI breakages. There's no need to perform the check
every time controls.h is included, move it to controls.cpp.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-20 16:47:45 +02:00
Laurent Pinchart
79fbecea45 test: controls: control_value: Test string control type
Add test cases for the string control type. As strings are implemented
as char arrays, arrays of strings are not supported.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-20 16:47:45 +02:00
Laurent Pinchart
4e3f835126 libcamera: controls: Add support for string controls
String controls are stored internally as an array of char, but the
ControlValue constructor, get() and set() functions operate on an
std::string for convenience. Array of strings are thus not supported.

Unlike for other control types, the ControlInfo range reports the
minimum and maximum allowed lengths of the string (the minimum will
usually be 0), not the minimum and maximum value of each element.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-20 16:47:45 +02:00
Laurent Pinchart
e5a9e6e9cd libcamera: controls: Rename ControlRange to ControlInfo
To prepare for storage of additional information in the ControlRange
structure, rename it to ControlInfo.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-20 16:47:45 +02:00
Laurent Pinchart
73b7ba9da5 libcamera: controls: Name all ControlInfoMap instance variables infoMap
To prepare for the rename of ControlRange to ControlInfo, rename all the
ControlInfoMap instance variables currently named info to infoMap. This
will help avoiding namespace clashes.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-20 16:47:45 +02:00
Jacopo Mondi
cf66c4406b cam: Print one property per line
When printing camera properties, print one property per line.

Fixes: a14b6baca9 ("cam: Add option to list camera properties")
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-20 15:13:04 +01:00
Jacopo Mondi
e0808528d8 libcamera: v4l2_controls: Fix usage of strerror()
On failure, the return code from V4L2Device::ioctl() is the negative error
code set by the failed ::ioctl() system call. When the return code of
V4L2Device::ioctl() is provided to strerror() it has to be negated again
to obtain the positive error code. Fix a few wrong usages of the return
code which provided to the strerror() function a negative error code.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-20 15:12:21 +01:00
Helen Koike
ad5d123578 libcamera: pipeline: rkisp1: Don't enable immutable link
Link between resizer and capture is immutable and doesn't need to be
enabled.

Signed-off-by: Helen Koike <helen.koike@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-20 01:44:57 +01:00
Helen Koike
700aba5f87 utils: rkisp1: Don't enable immutable link
Link between resizer and capture is immutable and doesn't need to be
enabled.

Signed-off-by: Helen Koike <helen.koike@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-20 01:44:57 +01:00
Niklas Söderlund
a118b1a491 libcamera: pipeline: rkisp1: Use correct buffer count when importing buffers
When folding buffer management with start/stop the wrong variable was
passed to importBuffers() resulting in only one buffer being imported
for the video node making capture impossible. Fix this by first renaming
the confusingly named variable 'count' to 'ipaBufferId'. And then
reusing the 'count' name for the buffer count.

While at it remove the loop to find the maximum value of buffers from
the single stream used by the pipeline. Once we add more stream this
needs to be reworked anyhow so keep it simple for now.

Fixes: 33fedea818 ("libcamera: pipeline_handler: Fold buffer management with start/stop")
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-03-20 01:44:45 +01:00
Kaaira Gupta
1b8ac8473c libcamera: utils: Adapt libcameraPath to match use cases
The two callers of functions libcameraPath() and isLibcameraInstalled()
end up using the same process and finally use the path with
libcamera.so. Hence write a function libcameraBuildPath() which
combines their functions and returns the root of the build sources
when the library has not been installed, but is running from the build
tree, thereby making call sites simpler.

When the library is installed, libcameraBuildPath() will return an empty
string.

Make changes in the call sites accordingly.

Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-03-19 19:04:32 +02:00
Laurent Pinchart
6c34a2d386 libcamera: v4l2_videodevice: Make V4L2PixelFormat constructor explicit
To achieve the goal of preventing unwanted conversion between a DRM and
a V4L2 FourCC, make the V4L2PixelFormat constructor that takes an
integer value explicit. All users of V4L2 pixel formats flagged by the
compiler are fixed.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-19 17:14:21 +02:00
Laurent Pinchart
6015d9702e libcamera: v4l2_videodevice: Rename toV4L2Fourcc to toV4L2PixelFormat
Now that the functions return a V4L2PixelFormat, adapt their name
accordingly.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-19 17:14:21 +02:00
Laurent Pinchart
a7f24a8d9a libcamera: v4l2_videodevice: Add V4L2PixelFormat class
The V4L2PixelFormat class describes the pixel format of a V4L2 buffer.
It wraps the V4L2 numerical FourCC, and shall be used in all APIs that
deal with V4L2 pixel formats. Its purpose is to prevent unintentional
confusion of V4L2 and DRM FourCCs in code by catching implicit
conversion attempts at compile time.

The constructor taking a V4L2 FourCC integer value will be made explicit
in a further commit to minimize the size of this change and keep it
reviewable.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-03-19 17:14:21 +02:00
Kieran Bingham
92c7b1cc1d qcam: saveImageAs: Set image quality explicitly
The QImageWriter defaults to an image quality value of 75 which can lead
to perceivable visual artefacts.

Improve the quality of the output by explicitly setting the image
quality to 95.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-19 13:22:41 +00:00
Laurent Pinchart
a69414529f libcamera: geometry: Construct SizeRange from Size
The SizeRange constructors take minimum and maximum width and height
values as separate arguments. We have a Size class to convey size
information, use it in the constructors, and update the callers.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-03-19 15:08:14 +02:00
Laurent Pinchart
4ff18e9506 libcamera: framebuffer_allocator: Lift camera restrictions on allocator
The Camera class currently requires the allocator to have no allocated
buffer before the camera is reconfigured, and the allocator to be
destroyed before the camera is released. There's no basis for these
restrictions anymore, remove them.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-18 19:15:18 +02:00
Laurent Pinchart
33fedea818 libcamera: pipeline_handler: Fold buffer management with start/stop
There's no need anymore to have the Camera object control how and when
pipeline handlers allocate and free the buffers for the
application-facing video devices. Fold those operations, currently
performed by importFrameBuffers() and freeFrameBuffers(), into the
start() and stop() functions. This simplifies the pipeline handler API,
its implementation, and the implementation of the Camera class.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-18 19:15:18 +02:00
Laurent Pinchart
9da27d5d84 libcamera: pipeline_handler: Decouple buffer import and export
Use the V4L2 buffer orphaning feature, exposed through
V4L2VideoDevice::exportBuffers(), to decouple buffer import and export.
The PipelineHandler::importFrameBuffers() function is now called for all
streams regardless of whether exportFrameBuffers() has been called or
not. This simplifies the Camera implementation slightly, and opens the
door to additional simplifications.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-18 19:15:18 +02:00
Laurent Pinchart
7d8604128a libcamera: camera: Propagate error value from importFrameBuffer
The PipelineHandler::importFrameBuffer() function, called by
Camera::start() may return an error, but its return value is ignored.
Propagate it to the caller to fix this.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-18 19:15:18 +02:00
Laurent Pinchart
1e6eb88048 libcamera: v4l2_videodevice: Add standalone buffer export support
Add a new exportBuffers() function that only performs buffer allocation
and export, but leaves the V4L2 buffer queue unallocated on return. This
function will be used to simplify buffer allocation for pipeline
handlers. This is made possible by the V4L2 buffer orphaning feature
introduced in Linux v5.0, so add a version check to catch and report
issues early.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-18 19:15:18 +02:00
Laurent Pinchart
4c82053d4a libcamera: v4l2_videodevice: Refactor allocateBuffers()
Move the buffer creation code out of allocateBuffers() to a
createBuffers() function. This prepare for the rework of buffer export
and will avoid code duplication.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-18 19:15:18 +02:00
Laurent Pinchart
92830a1d00 libcamera: v4l2_videodevice: Pass memory type to reqbufs()
To prepare for the rework of buffer export, pass the memory type
explicitly to the V4L2VideoDevice::reqbufs() function.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-18 19:15:18 +02:00
Laurent Pinchart
46011623bc libcamera: v4l2_videodevice: Rename exportBuffers() to allocateBuffers()
To prepare for the rework of buffer allocation that will differentiate
export and allocation, rename exportBuffers() to allocateBuffers().

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-03-18 19:15:18 +02:00