From fad0314bc909cf74444ef97b74b2a933a194e986 Mon Sep 17 00:00:00 2001 From: Paul Elder Date: Mon, 29 Jun 2020 22:27:05 +0900 Subject: libcamera: formats: PixelFormatInfo: Add v4l2 lookup function Add a lookup function for PixelFormatInfo that takes a V4L2PixelFormat. Signed-off-by: Paul Elder Reviewed-by: Laurent Pinchart --- src/libcamera/formats.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/libcamera/formats.cpp') 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 #include #include @@ -228,6 +229,8 @@ const std::map> &ImageFormats::data() const namespace { +const PixelFormatInfo pixelFormatInfoInvalid{}; + const std::map pixelFormatInfo{ /* RGB formats. */ { formats::BGR888, { @@ -699,17 +702,33 @@ const std::map 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 */ -- cgit v1.2.1