[libcamera-devel] [PATCH 02/14] libcamera: v4l2_device: Overload open() to duplicate File descriptor
Xavier Roumegue
xavier.roumegue at oss.nxp.com
Thu Sep 8 20:48:38 CEST 2022
Signed-off-by: Xavier Roumegue <xavier.roumegue at oss.nxp.com>
---
include/libcamera/internal/v4l2_device.h | 2 ++
src/libcamera/v4l2_device.cpp | 33 ++++++++++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h
index 75304be1..8b759311 100644
--- a/include/libcamera/internal/v4l2_device.h
+++ b/include/libcamera/internal/v4l2_device.h
@@ -15,6 +15,7 @@
#include <linux/videodev2.h>
#include <libcamera/base/log.h>
+#include <libcamera/base/shared_fd.h>
#include <libcamera/base/signal.h>
#include <libcamera/base/span.h>
#include <libcamera/base/unique_fd.h>
@@ -54,6 +55,7 @@ protected:
~V4L2Device();
int open(unsigned int flags);
+ int open(SharedFD handle);
int setFd(UniqueFD fd);
int ioctl(unsigned long request, void *argp);
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 756188ea..67847bb0 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -102,6 +102,39 @@ int V4L2Device::open(unsigned int flags)
return 0;
}
+/**
+ * \brief Open a V4L2 device node
+ * \param[in] Shared File descriptor Handle
+ *
+ * Duplicate a shared file descriptor handle and use it for further device
+ * syscalls
+ *
+ * \return 0 on success or a negative error code otherwise
+ */
+int V4L2Device::open(SharedFD handle)
+{
+ int ret;
+
+ UniqueFD newFd = handle.dup();
+ if (!newFd.isValid()) {
+ ret = -errno;
+ LOG(V4L2, Error) << "Failed to duplicate file handle: "
+ << strerror(-ret);
+ return ret;
+ }
+
+ ret = setFd(std::move(newFd));
+ if (ret < 0) {
+ LOG(V4L2, Error) << "Failed to set file handle: "
+ << strerror(-ret);
+ return ret;
+ }
+
+ listControls();
+
+ return 0;
+}
+
/**
* \brief Set the file descriptor of a V4L2 device
* \param[in] fd The file descriptor handle
--
2.37.3
More information about the libcamera-devel
mailing list