libcamera: base: shared_fd: Add comparison operators

Add == and != comparison operators between two SharedFD instances, and
use them to replace manuel get() calls.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Laurent Pinchart
2021-11-29 21:01:55 +02:00
parent 560f5cf998
commit f8d2f17a3d
3 changed files with 37 additions and 1 deletions

View File

@@ -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 */

View File

@@ -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] rhs 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] rhs 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
*

View File

@@ -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) {