[libcamera-devel] [PATCH] libcamera: v4l2device: Obtain device capabilities
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Jan 22 20:20:40 CET 2019
The capabilities structure from the kernel can return capabilities of the
device, or potentially more specific device capabilities.
Handle this with an inline function to return the correct value.
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
Jacopo,
Sending this now to see what you think, as it might be useful to consider this
while you're making adjustments in the area.
Because this code will be inlined, I expect the compiler to optimise sequential
uses of this operation where the underlying capabilities is not modified.
Kieran
src/libcamera/include/v4l2_device.h | 10 +++++++---
src/libcamera/v4l2_device.cpp | 7 +++++++
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h
index b92e1f1c96c3..90d18b9f2260 100644
--- a/src/libcamera/include/v4l2_device.h
+++ b/src/libcamera/include/v4l2_device.h
@@ -26,10 +26,14 @@ struct V4L2Capability final : v4l2_capability {
{
return reinterpret_cast<const char *>(v4l2_capability::bus_info);
}
+ unsigned int caps() const
+ {
+ return capabilities & V4L2_CAP_DEVICE_CAPS ? device_caps : capabilities;
+ }
- bool isCapture() const { return capabilities & V4L2_CAP_VIDEO_CAPTURE; }
- bool isOutput() const { return capabilities & V4L2_CAP_VIDEO_OUTPUT; }
- bool hasStreaming() const { return capabilities & V4L2_CAP_STREAMING; }
+ bool isCapture() const { return caps() & V4L2_CAP_VIDEO_CAPTURE; }
+ bool isOutput() const { return caps() & V4L2_CAP_VIDEO_OUTPUT; }
+ bool hasStreaming() const { return caps() & V4L2_CAP_STREAMING; }
};
class MediaEntity;
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 2b17fa1eb0e8..4d1cc5b6070f 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -49,6 +49,13 @@ LOG_DEFINE_CATEGORY(V4L2)
* \return The string containing the device location
*/
+/**
+ * \fn unsigned int V4L2Capability::caps()
+ * \brief Retrieve the capabilities of the device
+ * \return The device specific capabilities if V4L2_CAP_DEVICE_CAPS is set or
+ * driver capabilities otherwise
+ */
+
/**
* \fn bool V4L2Capability::isCapture()
* \brief Identify if the device is capable of capturing video
--
2.17.1
More information about the libcamera-devel
mailing list