Commitf25ad4a2b1("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 commitf25ad4a2b1and returns an invalid PixelFormatInfo without outputting any unnecessary warning message. Fixes:f25ad4a2b1("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>
71 lines
1.3 KiB
C++
71 lines
1.3 KiB
C++
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2019, Google Inc.
|
|
* Copyright (C) 2020, Raspberry Pi Ltd
|
|
*
|
|
* v4l2_pixelformat.h - V4L2 Pixel Format
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <functional>
|
|
#include <ostream>
|
|
#include <stdint.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <linux/videodev2.h>
|
|
|
|
#include <libcamera/pixel_format.h>
|
|
|
|
namespace libcamera {
|
|
|
|
class V4L2PixelFormat
|
|
{
|
|
public:
|
|
struct Info {
|
|
PixelFormat format;
|
|
const char *description;
|
|
};
|
|
|
|
V4L2PixelFormat()
|
|
: fourcc_(0)
|
|
{
|
|
}
|
|
|
|
explicit V4L2PixelFormat(uint32_t fourcc)
|
|
: fourcc_(fourcc)
|
|
{
|
|
}
|
|
|
|
bool isValid() const { return fourcc_ != 0; }
|
|
uint32_t fourcc() const { return fourcc_; }
|
|
operator uint32_t() const { return fourcc_; }
|
|
|
|
std::string toString() const;
|
|
const char *description() const;
|
|
|
|
PixelFormat toPixelFormat(bool warn = true) const;
|
|
static const std::vector<V4L2PixelFormat> &
|
|
fromPixelFormat(const PixelFormat &pixelFormat);
|
|
|
|
private:
|
|
uint32_t fourcc_;
|
|
};
|
|
|
|
std::ostream &operator<<(std::ostream &out, const V4L2PixelFormat &f);
|
|
|
|
} /* namespace libcamera */
|
|
|
|
namespace std {
|
|
|
|
template<>
|
|
struct hash<libcamera::V4L2PixelFormat> {
|
|
size_t operator()(libcamera::V4L2PixelFormat const &format) const noexcept
|
|
{
|
|
return format.fourcc();
|
|
}
|
|
};
|
|
|
|
} /* namespace std */
|