Files
external_libcamera/include/libcamera/internal/v4l2_pixelformat.h
Jacopo Mondi 434edb7b44 libcamera: formats: Fix warning for unknown V4L2 pixfmt
Commit f25ad4a2b1 ("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 f25ad4a2b1 and 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>
2022-08-10 09:33:30 +02:00

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 */