diff options
author | Jacopo Mondi <jacopo@jmondi.org> | 2019-05-24 08:47:51 +0200 |
---|---|---|
committer | Jacopo Mondi <jacopo@jmondi.org> | 2019-06-02 14:31:30 +0200 |
commit | 81e004e0ffa41ad595c65d9ebad2a1fdf729117b (patch) | |
tree | 9e023f96d8a2beb293eb3b322d2e59bb62c58fec | |
parent | 74a56fe51a2ab2e506f27f586ab5400a8a4f2c4f (diff) |
libcamera: v4l2_device: Add support for META_OUTPUT
Add support for output devices that expose the META_OUTPUT capabilities.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r-- | src/libcamera/include/v4l2_device.h | 10 | ||||
-rw-r--r-- | src/libcamera/v4l2_device.cpp | 9 |
2 files changed, 17 insertions, 2 deletions
diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h index 2e7bd1e7..cecafa15 100644 --- a/src/libcamera/include/v4l2_device.h +++ b/src/libcamera/include/v4l2_device.h @@ -59,7 +59,8 @@ struct V4L2Capability final : v4l2_capability { bool isOutput() const { return device_caps() & (V4L2_CAP_VIDEO_OUTPUT | - V4L2_CAP_VIDEO_OUTPUT_MPLANE); + V4L2_CAP_VIDEO_OUTPUT_MPLANE | + V4L2_CAP_META_OUTPUT); } bool isVideo() const { @@ -70,7 +71,8 @@ struct V4L2Capability final : v4l2_capability { } bool isMeta() const { - return device_caps() & V4L2_CAP_META_CAPTURE; + return device_caps() & (V4L2_CAP_META_CAPTURE | + V4L2_CAP_META_OUTPUT); } bool isVideoCapture() const { @@ -84,6 +86,10 @@ struct V4L2Capability final : v4l2_capability { { return isMeta() && isCapture(); } + bool isMetaOutput() const + { + return isMeta() && isOutput(); + } bool hasStreaming() const { return device_caps() & V4L2_CAP_STREAMING; diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp index 8366ffc4..e42f6ef0 100644 --- a/src/libcamera/v4l2_device.cpp +++ b/src/libcamera/v4l2_device.cpp @@ -117,6 +117,12 @@ LOG_DEFINE_CATEGORY(V4L2) */ /** + * \fn V4L2Capability::isMetaOutput() + * \brief Identify if the device outputs image meta-data + * \return True if the device can output image meta-data + */ + +/** * \fn V4L2Capability::hasStreaming() * \brief Determine if the device can perform Streaming I/O * \return True if the device provides Streaming I/O IOCTLs @@ -348,6 +354,9 @@ int V4L2Device::open() } else if (caps_.isMetaCapture()) { fdEvent_ = new EventNotifier(fd_, EventNotifier::Read); bufferType_ = V4L2_BUF_TYPE_META_CAPTURE; + } else if (caps_.isMetaOutput()) { + fdEvent_ = new EventNotifier(fd_, EventNotifier::Write); + bufferType_ = V4L2_BUF_TYPE_META_OUTPUT; } else { LOG(V4L2, Error) << "Device is not a supported type"; return -EINVAL; |