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>
This commit is contained in:
Laurent Pinchart 2022-04-29 04:31:48 +03:00
parent 2efd8ab36a
commit 08d6133113
2 changed files with 39 additions and 21 deletions

View file

@ -7,6 +7,7 @@
#pragma once #pragma once
#include <ostream>
#include <stdint.h> #include <stdint.h>
#include <string> #include <string>
@ -68,4 +69,6 @@ static inline bool operator!=(const BayerFormat &lhs, const BayerFormat &rhs)
return !(lhs == rhs); return !(lhs == rhs);
} }
std::ostream &operator<<(std::ostream &out, const BayerFormat &f);
} /* namespace libcamera */ } /* namespace libcamera */

View file

@ -9,6 +9,7 @@
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <sstream>
#include <unordered_map> #include <unordered_map>
#include <linux/media-bus-format.h> #include <linux/media-bus-format.h>
@ -236,28 +237,10 @@ const BayerFormat &BayerFormat::fromMbusCode(unsigned int mbusCode)
*/ */
std::string BayerFormat::toString() const std::string BayerFormat::toString() const
{ {
std::string result; std::stringstream ss;
ss << *this;
static const char *orderStrings[] = { return ss.str();
"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;
} }
/** /**
@ -270,6 +253,38 @@ bool operator==(const BayerFormat &lhs, const BayerFormat &rhs)
lhs.packing == rhs.packing; lhs.packing == rhs.packing;
} }
/**
* \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) * \fn bool operator!=(const BayerFormat &lhs, const BayerFormat &rhs)
* \brief Compare two BayerFormats for inequality * \brief Compare two BayerFormats for inequality