diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libcamera/formats.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp index 4a03a7e3..48aa2454 100644 --- a/src/libcamera/formats.cpp +++ b/src/libcamera/formats.cpp @@ -7,6 +7,7 @@ #include "libcamera/internal/formats.h" +#include <algorithm> #include <errno.h> #include <libcamera/formats.h> @@ -228,6 +229,8 @@ const std::map<unsigned int, std::vector<SizeRange>> &ImageFormats::data() const namespace { +const PixelFormatInfo pixelFormatInfoInvalid{}; + const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ /* RGB formats. */ { formats::BGR888, { @@ -699,17 +702,33 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ */ const PixelFormatInfo &PixelFormatInfo::info(const PixelFormat &format) { - static const PixelFormatInfo invalid{}; - const auto iter = pixelFormatInfo.find(format); if (iter == pixelFormatInfo.end()) { LOG(Formats, Warning) << "Unsupported pixel format 0x" << utils::hex(format.fourcc()); - return invalid; + return pixelFormatInfoInvalid; } return iter->second; } +/** + * \brief Retrieve information about a pixel format + * \param[in] format The V4L2 pixel format + * \return The PixelFormatInfo describing the V4L2 \a format if known, or an + * invalid PixelFormatInfo otherwise + */ +const PixelFormatInfo &PixelFormatInfo::info(const V4L2PixelFormat &format) +{ + const auto &info = std::find_if(pixelFormatInfo.begin(), pixelFormatInfo.end(), + [format](auto pair) { + return pair.second.v4l2Format == format; + }); + if (info == pixelFormatInfo.end()) + return pixelFormatInfoInvalid; + + return info->second; +} + } /* namespace libcamera */ |