[libcamera-devel] [PATCH v4 20/22] libcamera: base: shared_fd: Add comparison operators
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Nov 30 04:38:18 CET 2021
Add == and != comparison operators between two SharedFD instances, and
use them to replace manuel get() calls.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
include/libcamera/base/shared_fd.h | 10 ++++++++++
src/libcamera/base/shared_fd.cpp | 26 ++++++++++++++++++++++++++
src/libcamera/framebuffer.cpp | 2 +-
3 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/include/libcamera/base/shared_fd.h b/include/libcamera/base/shared_fd.h
index a786885ceb32..1dd51a7f046b 100644
--- a/include/libcamera/base/shared_fd.h
+++ b/include/libcamera/base/shared_fd.h
@@ -46,4 +46,14 @@ private:
std::shared_ptr<Descriptor> fd_;
};
+static inline bool operator==(const SharedFD &lhs, const SharedFD &rhs)
+{
+ return lhs.get() == rhs.get();
+}
+
+static inline bool operator!=(const SharedFD &lhs, const SharedFD &rhs)
+{
+ return !(lhs == rhs);
+}
+
} /* namespace libcamera */
diff --git a/src/libcamera/base/shared_fd.cpp b/src/libcamera/base/shared_fd.cpp
index 05b6892f7e19..56dc579258c7 100644
--- a/src/libcamera/base/shared_fd.cpp
+++ b/src/libcamera/base/shared_fd.cpp
@@ -214,6 +214,32 @@ SharedFD &SharedFD::operator=(SharedFD &&other)
* instance is invalid
*/
+/**
+ * \fn bool operator==(const SharedFD &lhs, const SharedFD &rhs)
+ * \brief Compare the owned file descriptors of two SharedFD for equality
+ * \param[in] lhs The first SharedFD
+ * \param[in] lhs The second SharedFD
+ *
+ * Two file descriptors are considered equal if they have the same numerical
+ * value. File descriptors with different values that both reference the same
+ * file (for instance obtained using dup()) are considered not equal.
+ *
+ * \return True if the two file descriptors are equal, false otherwise
+ */
+
+/**
+ * \fn bool operator!=(const SharedFD &lhs, const SharedFD &rhs)
+ * \brief Compare the owned file descriptors of two SharedFD for equality
+ * \param[in] lhs The first SharedFD
+ * \param[in] lhs The second SharedFD
+ *
+ * Two file descriptors are considered equal if they have the same numerical
+ * value. File descriptors with different values that both reference the same
+ * file (for instance obtained using dup()) are considered not equal.
+ *
+ * \return True if the two file descriptors are not equal, false otherwise
+ */
+
/**
* \brief Duplicate a SharedFD
*
diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
index f035e16859f8..f313566c5561 100644
--- a/src/libcamera/framebuffer.cpp
+++ b/src/libcamera/framebuffer.cpp
@@ -258,7 +258,7 @@ FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
* Two different dmabuf file descriptors may still refer to the
* same dmabuf instance. Check this using inodes.
*/
- if (plane.fd.fd() != planes_[0].fd.fd()) {
+ if (plane.fd != planes_[0].fd) {
if (!inode)
inode = fileDescriptorInode(planes_[0].fd);
if (fileDescriptorInode(plane.fd) != inode) {
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list