diff options
author | Jacopo Mondi <jacopo@jmondi.org> | 2022-08-08 14:36:19 +0200 |
---|---|---|
committer | Jacopo Mondi <jacopo@jmondi.org> | 2022-08-10 09:33:30 +0200 |
commit | 434edb7b4480a34521aa8741dea02615e9dd714d (patch) | |
tree | 2b8fc0ac47cc39a79e36b31e02ac8ad00212df92 | |
parent | e1ca213609abb99cc1b6e6f16214bf5a0936f3b7 (diff) |
libcamera: formats: Fix warning for unknown V4L2 pixfmt
Commit f25ad4a2b16b ("libcamera: formats: Reimplement V4L2
PixelFormatInfo::info()") changed the PixelFormatInfo::info(const
V4L2PixelFormat &format) function overload to:
return info(format.toPixelFormat());
As part of the series that contains such commit, the PixelFormatInfo for the
pixel format applied to a video device is now retrieved at
V4L2VideoDevice::open() time. Some video devices register formats not
available to applications, for example metadata formats or, in the case
of ISP devices, formats to describe the ISP statistics and parameters.
This causes the
format.toPixelFormat()
call to output a WARN message, which spams the log and unnecessarily alerts
the users.
Augment V4L2PixelFormat::toPixelFormat() with an optional argument to
suppress warnings in the case a V4L2 pixel format is not known, to
restore the behaviour preceding commit f25ad4a2b16b and returns an
invalid PixelFormatInfo without outputting any unnecessary warning
message.
Fixes: f25ad4a2b16b ("libcamera: formats: Reimplement V4L2 PixelFormatInfo::info()")
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
-rw-r--r-- | include/libcamera/internal/v4l2_pixelformat.h | 2 | ||||
-rw-r--r-- | src/libcamera/formats.cpp | 10 | ||||
-rw-r--r-- | src/libcamera/v4l2_pixelformat.cpp | 16 |
3 files changed, 22 insertions, 6 deletions
diff --git a/include/libcamera/internal/v4l2_pixelformat.h b/include/libcamera/internal/v4l2_pixelformat.h index 34d283db..44439fff 100644 --- a/include/libcamera/internal/v4l2_pixelformat.h +++ b/include/libcamera/internal/v4l2_pixelformat.h @@ -45,7 +45,7 @@ public: std::string toString() const; const char *description() const; - PixelFormat toPixelFormat() const; + PixelFormat toPixelFormat(bool warn = true) const; static const std::vector<V4L2PixelFormat> & fromPixelFormat(const PixelFormat &pixelFormat); diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp index 0bd0e09a..f5769c48 100644 --- a/src/libcamera/formats.cpp +++ b/src/libcamera/formats.cpp @@ -852,7 +852,15 @@ const PixelFormatInfo &PixelFormatInfo::info(const PixelFormat &format) */ const PixelFormatInfo &PixelFormatInfo::info(const V4L2PixelFormat &format) { - return info(format.toPixelFormat()); + PixelFormat pixelFormat = format.toPixelFormat(false); + if (!pixelFormat.isValid()) + return pixelFormatInfoInvalid; + + const auto iter = pixelFormatInfo.find(pixelFormat); + if (iter == pixelFormatInfo.end()) + return pixelFormatInfoInvalid; + + return iter->second; } /** diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp index 3590fb73..d87665a4 100644 --- a/src/libcamera/v4l2_pixelformat.cpp +++ b/src/libcamera/v4l2_pixelformat.cpp @@ -294,15 +294,23 @@ const char *V4L2PixelFormat::description() const /** * \brief Convert the V4L2 pixel format to the corresponding PixelFormat + * \param[in] warn When true, log a warning message if the V4L2 pixel format + * isn't known + * + * Users of this function might try to convert a V4L2PixelFormat to a + * PixelFormat just to check if the format is supported or not. In that case, + * they can suppress the warning message by setting the \a warn argument to + * false to not pollute the log with unnecessary messages. + * * \return The PixelFormat corresponding to the V4L2 pixel format */ -PixelFormat V4L2PixelFormat::toPixelFormat() const +PixelFormat V4L2PixelFormat::toPixelFormat(bool warn) const { const auto iter = vpf2pf.find(*this); if (iter == vpf2pf.end()) { - LOG(V4L2, Warning) - << "Unsupported V4L2 pixel format " - << toString(); + if (warn) + LOG(V4L2, Warning) << "Unsupported V4L2 pixel format " + << toString(); return PixelFormat(); } |