summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-11-28 05:20:14 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-12-03 19:20:32 +0200
commit1546a74e6484bcf44b4a2883510418d14c6db54f (patch)
tree4390a5d1d944f9fe640a9ddc33bd6eab9d121785
parent6c6acaa7ea1893b99adbf2becc46238e4a5c78b2 (diff)
libcamera: base: file_descriptor: Move inode() function to frame_buffer.cpp
The inode() function has always been a bit of an outcast in the FileDescriptor class, as it's not related to the core feature provided by FileDescriptor, a shared ownership wrapper around file descriptors. As it's only used in the FrameBuffer implementation, move it to frame_buffer.cpp as a static function. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--include/libcamera/base/file_descriptor.h3
-rw-r--r--src/libcamera/base/file_descriptor.cpp25
-rw-r--r--src/libcamera/framebuffer.cpp28
3 files changed, 26 insertions, 30 deletions
diff --git a/include/libcamera/base/file_descriptor.h b/include/libcamera/base/file_descriptor.h
index 8d764f8b..5d1594e8 100644
--- a/include/libcamera/base/file_descriptor.h
+++ b/include/libcamera/base/file_descriptor.h
@@ -8,7 +8,6 @@
#pragma once
#include <memory>
-#include <sys/types.h>
namespace libcamera {
@@ -28,8 +27,6 @@ public:
int fd() const { return fd_ ? fd_->fd() : -1; }
FileDescriptor dup() const;
- ino_t inode() const;
-
private:
class Descriptor
{
diff --git a/src/libcamera/base/file_descriptor.cpp b/src/libcamera/base/file_descriptor.cpp
index f5f87c56..98d4b4bf 100644
--- a/src/libcamera/base/file_descriptor.cpp
+++ b/src/libcamera/base/file_descriptor.cpp
@@ -8,7 +8,6 @@
#include <libcamera/base/file_descriptor.h>
#include <string.h>
-#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <utility>
@@ -223,30 +222,6 @@ FileDescriptor FileDescriptor::dup() const
return FileDescriptor(fd());
}
-/**
- * \brief Retrieve the file descriptor inode
- *
- * \todo Should this move to the File class ?
- *
- * \return The file descriptor inode on success, or 0 on error
- */
-ino_t FileDescriptor::inode() const
-{
- if (!isValid())
- return 0;
-
- struct stat st;
- int ret = fstat(fd_->fd(), &st);
- if (ret < 0) {
- ret = -errno;
- LOG(FileDescriptor, Fatal)
- << "Failed to fstat() fd: " << strerror(-ret);
- return 0;
- }
-
- return st.st_ino;
-}
-
FileDescriptor::Descriptor::Descriptor(int fd, bool duplicate)
{
if (!duplicate) {
diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
index 337ea115..fcb475c2 100644
--- a/src/libcamera/framebuffer.cpp
+++ b/src/libcamera/framebuffer.cpp
@@ -8,6 +8,9 @@
#include <libcamera/framebuffer.h>
#include "libcamera/internal/framebuffer.h"
+#include <sys/stat.h>
+
+#include <libcamera/base/file_descriptor.h>
#include <libcamera/base/log.h>
/**
@@ -207,6 +210,27 @@ FrameBuffer::Private::Private()
* \brief The plane length in bytes
*/
+namespace {
+
+ino_t fileDescriptorInode(const FileDescriptor &fd)
+{
+ if (!fd.isValid())
+ return 0;
+
+ struct stat st;
+ int ret = fstat(fd.fd(), &st);
+ if (ret < 0) {
+ ret = -errno;
+ LOG(Buffer, Fatal)
+ << "Failed to fstat() fd: " << strerror(-ret);
+ return 0;
+ }
+
+ return st.st_ino;
+}
+
+} /* namespace */
+
/**
* \brief Construct a FrameBuffer with an array of planes
* \param[in] planes The frame memory planes
@@ -236,8 +260,8 @@ FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
*/
if (plane.fd.fd() != planes_[0].fd.fd()) {
if (!inode)
- inode = planes_[0].fd.inode();
- if (plane.fd.inode() != inode) {
+ inode = fileDescriptorInode(planes_[0].fd);
+ if (fileDescriptorInode(plane.fd) != inode) {
isContiguous = false;
break;
}