summaryrefslogtreecommitdiff
path: root/src/libcamera
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera')
-rw-r--r--src/libcamera/include/meson.build1
-rw-r--r--src/libcamera/include/v4l2_pixelformat.h45
-rw-r--r--src/libcamera/include/v4l2_videodevice.h24
-rw-r--r--src/libcamera/meson.build1
-rw-r--r--src/libcamera/v4l2_pixelformat.cpp106
-rw-r--r--src/libcamera/v4l2_videodevice.cpp77
6 files changed, 154 insertions, 100 deletions
diff --git a/src/libcamera/include/meson.build b/src/libcamera/include/meson.build
index 5aaa9947..683d0613 100644
--- a/src/libcamera/include/meson.build
+++ b/src/libcamera/include/meson.build
@@ -27,6 +27,7 @@ libcamera_headers = files([
'utils.h',
'v4l2_controls.h',
'v4l2_device.h',
+ 'v4l2_pixelformat.h',
'v4l2_subdevice.h',
'v4l2_videodevice.h',
])
diff --git a/src/libcamera/include/v4l2_pixelformat.h b/src/libcamera/include/v4l2_pixelformat.h
new file mode 100644
index 00000000..4d277569
--- /dev/null
+++ b/src/libcamera/include/v4l2_pixelformat.h
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ * Copyright (C) 2020, Raspberry Pi (Trading) Ltd.
+ *
+ * v4l2_pixelformat.h - V4L2 Pixel Format
+ */
+#ifndef __LIBCAMERA_V4L2_PIXELFORMAT_H__
+#define __LIBCAMERA_V4L2_PIXELFORMAT_H__
+
+#include <stdint.h>
+#include <string>
+
+#include <linux/videodev2.h>
+
+#include <libcamera/pixelformats.h>
+
+namespace libcamera {
+
+class V4L2PixelFormat
+{
+public:
+ V4L2PixelFormat()
+ : fourcc_(0)
+ {
+ }
+
+ explicit V4L2PixelFormat(uint32_t fourcc)
+ : fourcc_(fourcc)
+ {
+ }
+
+ bool isValid() const { return fourcc_ != 0; }
+ uint32_t fourcc() const { return fourcc_; }
+ operator uint32_t() const { return fourcc_; }
+
+ std::string toString() const;
+
+private:
+ uint32_t fourcc_;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_V4L2_PIXELFORMAT_H__ */
diff --git a/src/libcamera/include/v4l2_videodevice.h b/src/libcamera/include/v4l2_videodevice.h
index 976ef9b6..ff64bb35 100644
--- a/src/libcamera/include/v4l2_videodevice.h
+++ b/src/libcamera/include/v4l2_videodevice.h
@@ -23,6 +23,7 @@
#include "formats.h"
#include "log.h"
#include "v4l2_device.h"
+#include "v4l2_pixelformat.h"
namespace libcamera {
@@ -149,29 +150,6 @@ private:
unsigned int missCounter_;
};
-class V4L2PixelFormat
-{
-public:
- V4L2PixelFormat()
- : fourcc_(0)
- {
- }
-
- explicit V4L2PixelFormat(uint32_t fourcc)
- : fourcc_(fourcc)
- {
- }
-
- bool isValid() const { return fourcc_ != 0; }
- uint32_t fourcc() const { return fourcc_; }
- operator uint32_t() const { return fourcc_; }
-
- std::string toString() const;
-
-private:
- uint32_t fourcc_;
-};
-
class V4L2DeviceFormat
{
public:
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index 874d2590..d8b4d720 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -44,6 +44,7 @@ libcamera_sources = files([
'utils.cpp',
'v4l2_controls.cpp',
'v4l2_device.cpp',
+ 'v4l2_pixelformat.cpp',
'v4l2_subdevice.cpp',
'v4l2_videodevice.cpp',
])
diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp
new file mode 100644
index 00000000..57d65c38
--- /dev/null
+++ b/src/libcamera/v4l2_pixelformat.cpp
@@ -0,0 +1,106 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ * Copyright (C) 2020, Raspberry Pi (Trading) Ltd.
+ *
+ * v4l2_pixelformat.cpp - V4L2 Pixel Format
+ */
+
+#include "v4l2_pixelformat.h"
+
+#include <ctype.h>
+#include <map>
+#include <string.h>
+
+#include <linux/drm_fourcc.h>
+
+#include <libcamera/pixelformats.h>
+
+#include "log.h"
+
+/**
+ * \file v4l2_pixelformat.h
+ * \brief V4L2 Pixel Format
+ */
+namespace libcamera {
+
+LOG_DECLARE_CATEGORY(V4L2)
+
+/**
+ * \class V4L2PixelFormat
+ * \brief V4L2 pixel format FourCC wrapper
+ *
+ * The V4L2PixelFormat class describes the pixel format of a V4L2 buffer. It
+ * wraps the V4L2 numerical FourCC, and shall be used in all APIs that deal with
+ * V4L2 pixel formats. Its purpose is to prevent unintentional confusion of
+ * V4L2 and DRM FourCCs in code by catching implicit conversion attempts at
+ * compile time.
+ *
+ * To achieve this goal, construction of a V4L2PixelFormat from an integer value
+ * is explicit. To retrieve the integer value of a V4L2PixelFormat, both the
+ * explicit value() and implicit uint32_t conversion operators may be used.
+ */
+
+/**
+ * \fn V4L2PixelFormat::V4L2PixelFormat()
+ * \brief Construct a V4L2PixelFormat with an invalid format
+ *
+ * V4L2PixelFormat instances constructed with the default constructor are
+ * invalid, calling the isValid() function returns false.
+ */
+
+/**
+ * \fn V4L2PixelFormat::V4L2PixelFormat(uint32_t fourcc)
+ * \brief Construct a V4L2PixelFormat from a FourCC value
+ * \param[in] fourcc The pixel format FourCC numerical value
+ */
+
+/**
+ * \fn bool V4L2PixelFormat::isValid() const
+ * \brief Check if the pixel format is valid
+ *
+ * V4L2PixelFormat instances constructed with the default constructor are
+ * invalid. Instances constructed with a FourCC defined in the V4L2 API are
+ * valid. The behaviour is undefined otherwise.
+ *
+ * \return True if the pixel format is valid, false otherwise
+ */
+
+/**
+ * \fn uint32_t V4L2PixelFormat::fourcc() const
+ * \brief Retrieve the pixel format FourCC numerical value
+ * \return The pixel format FourCC numerical value
+ */
+
+/**
+ * \fn V4L2PixelFormat::operator uint32_t() const
+ * \brief Convert to the pixel format FourCC numerical value
+ * \return The pixel format FourCC numerical value
+ */
+
+/**
+ * \brief Assemble and return a string describing the pixel format
+ * \return A string describing the pixel format
+ */
+std::string V4L2PixelFormat::toString() const
+{
+ if (fourcc_ == 0)
+ return "<INVALID>";
+
+ char ss[8] = { static_cast<char>(fourcc_ & 0x7f),
+ static_cast<char>((fourcc_ >> 8) & 0x7f),
+ static_cast<char>((fourcc_ >> 16) & 0x7f),
+ static_cast<char>((fourcc_ >> 24) & 0x7f) };
+
+ for (unsigned int i = 0; i < 4; i++) {
+ if (!isprint(ss[i]))
+ ss[i] = '.';
+ }
+
+ if (fourcc_ & (1 << 31))
+ strcat(ss, "-BE");
+
+ return ss;
+}
+
+} /* namespace libcamera */
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index e8d4f17d..21df4f52 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -279,83 +279,6 @@ bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const
}
/**
- * \class V4L2PixelFormat
- * \brief V4L2 pixel format FourCC wrapper
- *
- * The V4L2PixelFormat class describes the pixel format of a V4L2 buffer. It
- * wraps the V4L2 numerical FourCC, and shall be used in all APIs that deal with
- * V4L2 pixel formats. Its purpose is to prevent unintentional confusion of
- * V4L2 and DRM FourCCs in code by catching implicit conversion attempts at
- * compile time.
- *
- * To achieve this goal, construction of a V4L2PixelFormat from an integer value
- * is explicit. To retrieve the integer value of a V4L2PixelFormat, both the
- * explicit value() and implicit uint32_t conversion operators may be used.
- */
-
-/**
- * \fn V4L2PixelFormat::V4L2PixelFormat()
- * \brief Construct a V4L2PixelFormat with an invalid format
- *
- * V4L2PixelFormat instances constructed with the default constructor are
- * invalid, calling the isValid() function returns false.
- */
-
-/**
- * \fn V4L2PixelFormat::V4L2PixelFormat(uint32_t fourcc)
- * \brief Construct a V4L2PixelFormat from a FourCC value
- * \param[in] fourcc The pixel format FourCC numerical value
- */
-
-/**
- * \fn bool V4L2PixelFormat::isValid() const
- * \brief Check if the pixel format is valid
- *
- * V4L2PixelFormat instances constructed with the default constructor are
- * invalid. Instances constructed with a FourCC defined in the V4L2 API are
- * valid. The behaviour is undefined otherwise.
- *
- * \return True if the pixel format is valid, false otherwise
- */
-
-/**
- * \fn uint32_t V4L2PixelFormat::fourcc() const
- * \brief Retrieve the pixel format FourCC numerical value
- * \return The pixel format FourCC numerical value
- */
-
-/**
- * \fn V4L2PixelFormat::operator uint32_t() const
- * \brief Convert to the pixel format FourCC numerical value
- * \return The pixel format FourCC numerical value
- */
-
-/**
- * \brief Assemble and return a string describing the pixel format
- * \return A string describing the pixel format
- */
-std::string V4L2PixelFormat::toString() const
-{
- if (fourcc_ == 0)
- return "<INVALID>";
-
- char ss[8] = { static_cast<char>(fourcc_ & 0x7f),
- static_cast<char>((fourcc_ >> 8) & 0x7f),
- static_cast<char>((fourcc_ >> 16) & 0x7f),
- static_cast<char>((fourcc_ >> 24) & 0x7f) };
-
- for (unsigned int i = 0; i < 4; i++) {
- if (!isprint(ss[i]))
- ss[i] = '.';
- }
-
- if (fourcc_ & (1 << 31))
- strcat(ss, "-BE");
-
- return ss;
-}
-
-/**
* \class V4L2DeviceFormat
* \brief The V4L2 video device image format and sizes
*