summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-04-29 04:31:48 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-05-04 14:11:31 +0300
commit08d613311371ef26da7b6c226d1e35d12be0ca32 (patch)
tree68f27d73b327f486f601b973936e16419d432aa6
parent2efd8ab36ae3cde16d772a7f6285b592662e8630 (diff)
libcamera: bayer_format: Add operator<<()
Implement the stream output operator<<() for the BayerFormat class to simplify printing them. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--include/libcamera/internal/bayer_format.h3
-rw-r--r--src/libcamera/bayer_format.cpp57
2 files changed, 39 insertions, 21 deletions
diff --git a/include/libcamera/internal/bayer_format.h b/include/libcamera/internal/bayer_format.h
index cb20bf9b..7d3e37c6 100644
--- a/include/libcamera/internal/bayer_format.h
+++ b/include/libcamera/internal/bayer_format.h
@@ -7,6 +7,7 @@
#pragma once
+#include <ostream>
#include <stdint.h>
#include <string>
@@ -68,4 +69,6 @@ static inline bool operator!=(const BayerFormat &lhs, const BayerFormat &rhs)
return !(lhs == rhs);
}
+std::ostream &operator<<(std::ostream &out, const BayerFormat &f);
+
} /* namespace libcamera */
diff --git a/src/libcamera/bayer_format.cpp b/src/libcamera/bayer_format.cpp
index 9aaec0bc..4882707e 100644
--- a/src/libcamera/bayer_format.cpp
+++ b/src/libcamera/bayer_format.cpp
@@ -9,6 +9,7 @@
#include <algorithm>
#include <map>
+#include <sstream>
#include <unordered_map>
#include <linux/media-bus-format.h>
@@ -236,28 +237,10 @@ const BayerFormat &BayerFormat::fromMbusCode(unsigned int mbusCode)
*/
std::string BayerFormat::toString() const
{
- std::string result;
+ std::stringstream ss;
+ ss << *this;
- static const char *orderStrings[] = {
- "BGGR",
- "GBRG",
- "GRBG",
- "RGGB",
- "MONO"
- };
- if (isValid() && order <= MONO)
- result = orderStrings[order];
- else
- return "INVALID";
-
- result += "-" + std::to_string(bitDepth);
-
- if (packing == Packing::CSI2)
- result += "-CSI2P";
- else if (packing == Packing::IPU3)
- result += "-IPU3P";
-
- return result;
+ return ss.str();
}
/**
@@ -271,6 +254,38 @@ bool operator==(const BayerFormat &lhs, const BayerFormat &rhs)
}
/**
+ * \brief Insert a text representation of a BayerFormats into an output stream
+ * \param[in] out The output stream
+ * \param[in] f The BayerFormat
+ * \return The output stream \a out
+ */
+std::ostream &operator<<(std::ostream &out, const BayerFormat &f)
+{
+ static const char *orderStrings[] = {
+ "BGGR-",
+ "GBRG-",
+ "GRBG-",
+ "RGGB-",
+ "MONO-"
+ };
+
+ if (!f.isValid() || f.order > BayerFormat::MONO) {
+ out << "INVALID";
+ return out;
+ }
+
+ /* The cast is required to avoid bitDepth being interpreted as a char. */
+ out << orderStrings[f.order] << static_cast<unsigned int>(f.bitDepth);
+
+ if (f.packing == BayerFormat::Packing::CSI2)
+ out << "-CSI2P";
+ else if (f.packing == BayerFormat::Packing::IPU3)
+ out << "-IPU3P";
+
+ return out;
+}
+
+/**
* \fn bool operator!=(const BayerFormat &lhs, const BayerFormat &rhs)
* \brief Compare two BayerFormats for inequality
* \return True if either order, bitdepth or packing are not equal, or false