[libcamera-devel] [PATCH v2 7/8] libcamera: PixelFormat: Make constructor explicit
Niklas Söderlund
niklas.soderlund at ragnatech.se
Tue Mar 17 11:15:14 CET 2020
Hi Laurent,
Thanks for your feedback.
On 2020-03-17 11:16:03 +0200, Laurent Pinchart wrote:
> Hi Niklas,
>
> Thank you for the patch.
>
> On Tue, Mar 17, 2020 at 04:52:38AM +0100, Niklas Söderlund wrote:
> > From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >
> > To achieve the goal of preventing unwanted conversion between a DRM and
> > a V4L2 FourCC, make the PixelFormat constructor that takes an integer
> > value explicit. All users of V4L2 pixel formats flagged by the compiler
> > are fixed.
> >
> > While at it make the compare operations part of PixelFormat class.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > [Niklas: Make the compare operations part of PixelFormat]
>
> I'd move this to the patch that introduces the operators. When I
> mentioned they can be made member functions because the constructor is
> explicit, it wasn't that they couldn't with an implicit constructor, but
> that it's a good practice to have non-member operators in that case to
> avoid the two following operations to have different behaviours:
>
> PixelFormat format;
> uint32_t fourcc;
>
> if (format == fourcc) { ... } /* Compiles */
> if (fourcc == format) { ... } /* Doesn't compile */
>
> Unless we have occurrences of the second in the code, I would make the
> operators member functions in patch 6/8 to avoid the churn.
I know, and unfortunately we do, in the rkisp1 and vimc pipeline
handlers :-(
But they really highlight an issue for s/unsigned int/PixelFormat/ which
can be made earlier in the series and the comparison operators can be
folded into the patch that makes a class out of PixelFormat :-)
>
> > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > ---
> > include/libcamera/pixelformats.h | 10 ++---
> > src/gstreamer/gstlibcamera-utils.cpp | 4 +-
> > src/libcamera/pipeline/ipu3/ipu3.cpp | 6 +--
> > src/libcamera/pipeline/rkisp1/rkisp1.cpp | 20 ++++-----
> > src/libcamera/pipeline/vimc.cpp | 12 ++---
> > src/libcamera/pixelformats.cpp | 57 ++++++++++++------------
> > src/libcamera/v4l2_videodevice.cpp | 26 +++++------
> > src/v4l2/v4l2_camera_proxy.cpp | 28 ++++++------
> > test/stream/stream_formats.cpp | 24 +++++-----
> > test/v4l2_videodevice/buffer_cache.cpp | 2 +-
> > 10 files changed, 94 insertions(+), 95 deletions(-)
> >
> > diff --git a/include/libcamera/pixelformats.h b/include/libcamera/pixelformats.h
> > index 5ba1ba1b324272b9..3285941382ccdd96 100644
> > --- a/include/libcamera/pixelformats.h
> > +++ b/include/libcamera/pixelformats.h
> > @@ -17,7 +17,11 @@ class PixelFormat
> > {
> > public:
> > PixelFormat();
> > - PixelFormat(uint32_t fourcc, const std::set<uint64_t> &modifiers = {});
> > + explicit PixelFormat(uint32_t fourcc, const std::set<uint64_t> &modifiers = {});
> > +
> > + bool operator==(const PixelFormat &other) const;
> > + bool operator!=(const PixelFormat &other) const;
> > + bool operator<(const PixelFormat &other) const;
> >
> > uint32_t fourcc() const { return fourcc_; }
> > const std::set<uint64_t> &modifiers() const { return modifiers_; }
> > @@ -28,10 +32,6 @@ private:
> > std::set<uint64_t> modifiers_;
> > };
> >
> > -bool operator==(const PixelFormat &lhs, const PixelFormat &rhs);
> > -bool operator!=(const PixelFormat &lhs, const PixelFormat &rhs);
> > -bool operator<(const PixelFormat &lhs, const PixelFormat &rhs);
> > -
> > } /* namespace libcamera */
> >
> > #endif /* __LIBCAMERA_PIXEL_FORMATS_H__ */
> > diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp
> > index f21e94c3eef92737..c13b0ca245386168 100644
> > --- a/src/gstreamer/gstlibcamera-utils.cpp
> > +++ b/src/gstreamer/gstlibcamera-utils.cpp
> > @@ -154,9 +154,9 @@ gst_libcamera_configure_stream_from_caps(StreamConfiguration &stream_cfg,
> > if (gst_structure_has_name(s, "video/x-raw")) {
> > const gchar *format = gst_structure_get_string(s, "format");
> > gst_format = gst_video_format_from_string(format);
> > - stream_cfg.pixelFormat = gst_format_to_drm(gst_format);
> > + stream_cfg.pixelFormat = PixelFormat(gst_format_to_drm(gst_format));
> > } else if (gst_structure_has_name(s, "image/jpeg")) {
> > - stream_cfg.pixelFormat = DRM_FORMAT_MJPEG;
> > + stream_cfg.pixelFormat = PixelFormat(DRM_FORMAT_MJPEG);
> > } else {
> > g_critical("Unsupported media type: %s", gst_structure_get_name(s));
> > }
> > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > index 0c2a217c9ea8f6ba..52b6d48aca4394c6 100644
> > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > @@ -246,7 +246,7 @@ IPU3CameraConfiguration::IPU3CameraConfiguration(Camera *camera,
> > void IPU3CameraConfiguration::adjustStream(StreamConfiguration &cfg, bool scale)
> > {
> > /* The only pixel format the driver supports is NV12. */
> > - cfg.pixelFormat = DRM_FORMAT_NV12;
> > + cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
> >
> > if (scale) {
> > /*
> > @@ -401,7 +401,7 @@ CameraConfiguration *PipelineHandlerIPU3::generateConfiguration(Camera *camera,
> > StreamConfiguration cfg = {};
> > IPU3Stream *stream = nullptr;
> >
> > - cfg.pixelFormat = DRM_FORMAT_NV12;
> > + cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
> >
> > switch (role) {
> > case StreamRole::StillCapture:
> > @@ -1079,7 +1079,7 @@ int ImgUDevice::configureOutput(ImgUOutput *output,
> > return 0;
> >
> > V4L2DeviceFormat outputFormat = {};
> > - outputFormat.fourcc = dev->toV4L2Fourcc(DRM_FORMAT_NV12);
> > + outputFormat.fourcc = dev->toV4L2Fourcc(PixelFormat(DRM_FORMAT_NV12));
> > outputFormat.size = cfg.size;
> > outputFormat.planesCount = 2;
> >
> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > index 8223b82c4a9c773c..3bbe73c3abd9d75e 100644
> > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > @@ -431,14 +431,14 @@ RkISP1CameraConfiguration::RkISP1CameraConfiguration(Camera *camera,
> >
> > CameraConfiguration::Status RkISP1CameraConfiguration::validate()
> > {
> > - static const std::array<unsigned int, 8> formats{
> > - DRM_FORMAT_YUYV,
> > - DRM_FORMAT_YVYU,
> > - DRM_FORMAT_VYUY,
> > - DRM_FORMAT_NV16,
> > - DRM_FORMAT_NV61,
> > - DRM_FORMAT_NV21,
> > - DRM_FORMAT_NV12,
> > + static const std::array<PixelFormat, 8> formats{
> > + PixelFormat(DRM_FORMAT_YUYV),
> > + PixelFormat(DRM_FORMAT_YVYU),
> > + PixelFormat(DRM_FORMAT_VYUY),
> > + PixelFormat(DRM_FORMAT_NV16),
> > + PixelFormat(DRM_FORMAT_NV61),
> > + PixelFormat(DRM_FORMAT_NV21),
> > + PixelFormat(DRM_FORMAT_NV12),
> > /* \todo Add support for 8-bit greyscale to DRM formats */
> > };
> >
> > @@ -460,7 +460,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
> > if (std::find(formats.begin(), formats.end(), cfg.pixelFormat) ==
> > formats.end()) {
> > LOG(RkISP1, Debug) << "Adjusting format to NV12";
> > - cfg.pixelFormat = DRM_FORMAT_NV12,
> > + cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12),
> > status = Adjusted;
> > }
> >
> > @@ -539,7 +539,7 @@ CameraConfiguration *PipelineHandlerRkISP1::generateConfiguration(Camera *camera
> > return config;
> >
> > StreamConfiguration cfg{};
> > - cfg.pixelFormat = DRM_FORMAT_NV12;
> > + cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
> > cfg.size = data->sensor_->resolution();
> >
> > config->addConfiguration(cfg);
> > diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
> > index 72924bf2f55d0021..8dad2b40ed4fbb2c 100644
> > --- a/src/libcamera/pipeline/vimc.cpp
> > +++ b/src/libcamera/pipeline/vimc.cpp
> > @@ -104,10 +104,10 @@ private:
> >
> > namespace {
> >
> > -constexpr std::array<unsigned int, 3> pixelformats{
> > - DRM_FORMAT_RGB888,
> > - DRM_FORMAT_BGR888,
> > - DRM_FORMAT_BGRA8888,
> > +const std::array<PixelFormat, 3> pixelformats{
> > + PixelFormat(DRM_FORMAT_RGB888),
> > + PixelFormat(DRM_FORMAT_BGR888),
> > + PixelFormat(DRM_FORMAT_BGRA8888),
> > };
> >
> > } /* namespace */
> > @@ -136,7 +136,7 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()
> > if (std::find(pixelformats.begin(), pixelformats.end(), cfg.pixelFormat) ==
> > pixelformats.end()) {
> > LOG(VIMC, Debug) << "Adjusting format to RGB24";
> > - cfg.pixelFormat = DRM_FORMAT_BGR888;
> > + cfg.pixelFormat = PixelFormat(DRM_FORMAT_BGR888);
> > status = Adjusted;
> > }
> >
> > @@ -185,7 +185,7 @@ CameraConfiguration *PipelineHandlerVimc::generateConfiguration(Camera *camera,
> >
> > StreamConfiguration cfg(formats);
> >
> > - cfg.pixelFormat = DRM_FORMAT_BGR888;
> > + cfg.pixelFormat = PixelFormat(DRM_FORMAT_BGR888);
> > cfg.size = { 1920, 1080 };
> > cfg.bufferCount = 4;
> >
> > diff --git a/src/libcamera/pixelformats.cpp b/src/libcamera/pixelformats.cpp
> > index fe9a6a2576978647..1c559fe46d406826 100644
> > --- a/src/libcamera/pixelformats.cpp
> > +++ b/src/libcamera/pixelformats.cpp
> > @@ -41,6 +41,34 @@ PixelFormat::PixelFormat(uint32_t fourcc, const std::set<uint64_t> &modifiers)
> > {
> > }
> >
> > +/**
> > + * \brief Compare pixel formats for equality
> > + * \return True if the two pixel formats are equal, false otherwise
> > + */
> > +bool PixelFormat::operator==(const PixelFormat &other) const
> > +{
> > + return fourcc_ == other.fourcc() && modifiers_ == other.modifiers_;
> > +}
> > +
> > +/**
> > + * \brief Compare pixel formats for inequality
> > + * \return True if the two pixel formats are not equal, false otherwise
> > + */
> > +bool PixelFormat::operator!=(const PixelFormat &other) const
> > +{
> > + return !(*this == other);
> > +}
> > +
> > +/**
> > + * \brief Compare pixel formats for smaller than order
> > + * \todo Take modifiers into account if FourCC are equal
> > + * \return True if \a this is smaller than \a other, false otherwise
> > + */
> > +bool PixelFormat::operator<(const PixelFormat &other) const
> > +{
> > + return fourcc_ < other.fourcc_;
> > +}
> > +
> > /**
> > * \fn PixelFormat::fourcc() const
> > * \brief Retrieve the pixel format FourCC
> > @@ -64,33 +92,4 @@ std::string PixelFormat::toString() const
> > return str;
> > }
> >
> > -/**
> > - * \brief Compare pixel formats for equality
> > - * \return True if the two pixel formats are equal, false otherwise
> > - */
> > -bool operator==(const PixelFormat &lhs, const PixelFormat &rhs)
> > -{
> > - return lhs.fourcc() == rhs.fourcc() &&
> > - lhs.modifiers() == rhs.modifiers();
> > -}
> > -
> > -/**
> > - * \brief Compare pixel formats for inequality
> > - * \return True if the two pixel formats are not equal, false otherwise
> > - */
> > -bool operator!=(const PixelFormat &lhs, const PixelFormat &rhs)
> > -{
> > - return !(lhs == rhs);
> > -}
> > -
> > -/**
> > - * \brief Compare pixel formats for smaller than order
> > - * \todo Take modifiers into account if \a lhs == \a rhs.
> > - * \return True if \a lhs is smaller than \a rhs, false otherwise
> > - */
> > -bool operator<(const PixelFormat &lhs, const PixelFormat &rhs)
> > -{
> > - return lhs.fourcc() < rhs.fourcc();
> > -}
> > -
> > } /* namespace libcamera */
> > diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> > index b5762a7eabcf4e25..d8d711a951d666e9 100644
> > --- a/src/libcamera/v4l2_videodevice.cpp
> > +++ b/src/libcamera/v4l2_videodevice.cpp
> > @@ -1563,39 +1563,39 @@ PixelFormat V4L2VideoDevice::toPixelFormat(uint32_t v4l2Fourcc)
> > switch (v4l2Fourcc) {
> > /* RGB formats. */
> > case V4L2_PIX_FMT_RGB24:
> > - return DRM_FORMAT_BGR888;
> > + return PixelFormat(DRM_FORMAT_BGR888);
> > case V4L2_PIX_FMT_BGR24:
> > - return DRM_FORMAT_RGB888;
> > + return PixelFormat(DRM_FORMAT_RGB888);
> > case V4L2_PIX_FMT_ARGB32:
> > - return DRM_FORMAT_BGRA8888;
> > + return PixelFormat(DRM_FORMAT_BGRA8888);
> >
> > /* YUV packed formats. */
> > case V4L2_PIX_FMT_YUYV:
> > - return DRM_FORMAT_YUYV;
> > + return PixelFormat(DRM_FORMAT_YUYV);
> > case V4L2_PIX_FMT_YVYU:
> > - return DRM_FORMAT_YVYU;
> > + return PixelFormat(DRM_FORMAT_YVYU);
> > case V4L2_PIX_FMT_UYVY:
> > - return DRM_FORMAT_UYVY;
> > + return PixelFormat(DRM_FORMAT_UYVY);
> > case V4L2_PIX_FMT_VYUY:
> > - return DRM_FORMAT_VYUY;
> > + return PixelFormat(DRM_FORMAT_VYUY);
> >
> > /* YUY planar formats. */
> > case V4L2_PIX_FMT_NV16:
> > case V4L2_PIX_FMT_NV16M:
> > - return DRM_FORMAT_NV16;
> > + return PixelFormat(DRM_FORMAT_NV16);
> > case V4L2_PIX_FMT_NV61:
> > case V4L2_PIX_FMT_NV61M:
> > - return DRM_FORMAT_NV61;
> > + return PixelFormat(DRM_FORMAT_NV61);
> > case V4L2_PIX_FMT_NV12:
> > case V4L2_PIX_FMT_NV12M:
> > - return DRM_FORMAT_NV12;
> > + return PixelFormat(DRM_FORMAT_NV12);
> > case V4L2_PIX_FMT_NV21:
> > case V4L2_PIX_FMT_NV21M:
> > - return DRM_FORMAT_NV21;
> > + return PixelFormat(DRM_FORMAT_NV21);
> >
> > /* Compressed formats. */
> > case V4L2_PIX_FMT_MJPEG:
> > - return DRM_FORMAT_MJPEG;
> > + return PixelFormat(DRM_FORMAT_MJPEG);
> >
> > /* V4L2 formats not yet supported by DRM. */
> > case V4L2_PIX_FMT_GREY:
> > @@ -1608,7 +1608,7 @@ PixelFormat V4L2VideoDevice::toPixelFormat(uint32_t v4l2Fourcc)
> > LogError).stream()
> > << "Unsupported V4L2 pixel format "
> > << utils::hex(v4l2Fourcc);
> > - return 0;
> > + return PixelFormat();
> > }
> > }
> >
> > diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
> > index 3bbbbf79cdb475db..55dd69d37bd65897 100644
> > --- a/src/v4l2/v4l2_camera_proxy.cpp
> > +++ b/src/v4l2/v4l2_camera_proxy.cpp
> > @@ -536,21 +536,21 @@ namespace {
> >
> > static const std::array<PixelFormatInfo, 13> pixelFormatInfo = {{
> > /* RGB formats. */
> > - { DRM_FORMAT_RGB888, V4L2_PIX_FMT_BGR24, 1, {{ { 24, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_BGR888, V4L2_PIX_FMT_RGB24, 1, {{ { 24, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_BGRA8888, V4L2_PIX_FMT_ARGB32, 1, {{ { 32, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_RGB888), V4L2_PIX_FMT_BGR24, 1, {{ { 24, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_BGR888), V4L2_PIX_FMT_RGB24, 1, {{ { 24, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_BGRA8888), V4L2_PIX_FMT_ARGB32, 1, {{ { 32, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > /* YUV packed formats. */
> > - { DRM_FORMAT_UYVY, V4L2_PIX_FMT_UYVY, 1, {{ { 16, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_VYUY, V4L2_PIX_FMT_VYUY, 1, {{ { 16, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_YUYV, V4L2_PIX_FMT_YUYV, 1, {{ { 16, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_YVYU, V4L2_PIX_FMT_YVYU, 1, {{ { 16, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_UYVY), V4L2_PIX_FMT_UYVY, 1, {{ { 16, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_VYUY), V4L2_PIX_FMT_VYUY, 1, {{ { 16, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_YUYV), V4L2_PIX_FMT_YUYV, 1, {{ { 16, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_YVYU), V4L2_PIX_FMT_YVYU, 1, {{ { 16, 1, 1 }, { 0, 0, 0 }, { 0, 0, 0 } }} },
> > /* YUY planar formats. */
> > - { DRM_FORMAT_NV12, V4L2_PIX_FMT_NV12, 2, {{ { 8, 1, 1 }, { 16, 2, 2 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_NV21, V4L2_PIX_FMT_NV21, 2, {{ { 8, 1, 1 }, { 16, 2, 2 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_NV16, V4L2_PIX_FMT_NV16, 2, {{ { 8, 1, 1 }, { 16, 2, 1 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_NV61, V4L2_PIX_FMT_NV61, 2, {{ { 8, 1, 1 }, { 16, 2, 1 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_NV24, V4L2_PIX_FMT_NV24, 2, {{ { 8, 1, 1 }, { 16, 2, 1 }, { 0, 0, 0 } }} },
> > - { DRM_FORMAT_NV42, V4L2_PIX_FMT_NV42, 2, {{ { 8, 1, 1 }, { 16, 1, 1 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_NV12), V4L2_PIX_FMT_NV12, 2, {{ { 8, 1, 1 }, { 16, 2, 2 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_NV21), V4L2_PIX_FMT_NV21, 2, {{ { 8, 1, 1 }, { 16, 2, 2 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_NV16), V4L2_PIX_FMT_NV16, 2, {{ { 8, 1, 1 }, { 16, 2, 1 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_NV61), V4L2_PIX_FMT_NV61, 2, {{ { 8, 1, 1 }, { 16, 2, 1 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_NV24), V4L2_PIX_FMT_NV24, 2, {{ { 8, 1, 1 }, { 16, 2, 1 }, { 0, 0, 0 } }} },
> > + { PixelFormat(DRM_FORMAT_NV42), V4L2_PIX_FMT_NV42, 2, {{ { 8, 1, 1 }, { 16, 1, 1 }, { 0, 0, 0 } }} },
> > }};
> >
> > } /* namespace */
> > @@ -594,7 +594,7 @@ PixelFormat V4L2CameraProxy::v4l2ToDrm(uint32_t format)
> > return info.v4l2Format == format;
> > });
> > if (info == pixelFormatInfo.end())
> > - return format;
> > + return PixelFormat();
> >
> > return info->format;
> > }
> > diff --git a/test/stream/stream_formats.cpp b/test/stream/stream_formats.cpp
> > index a391f5cd087d3872..92f1574b8a0b315c 100644
> > --- a/test/stream/stream_formats.cpp
> > +++ b/test/stream/stream_formats.cpp
> > @@ -55,40 +55,40 @@ protected:
> > {
> > /* Test discrete sizes */
> > StreamFormats discrete({
> > - { 1, { SizeRange(100, 100), SizeRange(200, 200) } },
> > - { 2, { SizeRange(300, 300), SizeRange(400, 400) } },
> > + { PixelFormat(1), { SizeRange(100, 100), SizeRange(200, 200) } },
> > + { PixelFormat(2), { SizeRange(300, 300), SizeRange(400, 400) } },
> > });
> >
> > - if (testSizes("discrete 1", discrete.sizes(1),
> > + if (testSizes("discrete 1", discrete.sizes(PixelFormat(1)),
> > { Size(100, 100), Size(200, 200) }))
> > return TestFail;
> > - if (testSizes("discrete 2", discrete.sizes(2),
> > + if (testSizes("discrete 2", discrete.sizes(PixelFormat(2)),
> > { Size(300, 300), Size(400, 400) }))
> > return TestFail;
> >
> > /* Test range sizes */
> > StreamFormats range({
> > - { 1, { SizeRange(640, 480, 640, 480) } },
> > - { 2, { SizeRange(640, 480, 800, 600, 8, 8) } },
> > - { 3, { SizeRange(640, 480, 800, 600, 16, 16) } },
> > - { 4, { SizeRange(128, 128, 4096, 4096, 128, 128) } },
> > + { PixelFormat(1), { SizeRange(640, 480, 640, 480) } },
> > + { PixelFormat(2), { SizeRange(640, 480, 800, 600, 8, 8) } },
> > + { PixelFormat(3), { SizeRange(640, 480, 800, 600, 16, 16) } },
> > + { PixelFormat(4), { SizeRange(128, 128, 4096, 4096, 128, 128) } },
> > });
> >
> > - if (testSizes("range 1", range.sizes(1), { Size(640, 480) }))
> > + if (testSizes("range 1", range.sizes(PixelFormat(1)), { Size(640, 480) }))
> > return TestFail;
> >
> > - if (testSizes("range 2", range.sizes(2), {
> > + if (testSizes("range 2", range.sizes(PixelFormat(2)), {
> > Size(640, 480), Size(720, 480),
> > Size(720, 576), Size(768, 480),
> > Size(800, 600) }))
> > return TestFail;
> >
> > - if (testSizes("range 3", range.sizes(3), {
> > + if (testSizes("range 3", range.sizes(PixelFormat(3)), {
> > Size(640, 480), Size(720, 480),
> > Size(720, 576), Size(768, 480) }))
> > return TestFail;
> >
> > - if (testSizes("range 4", range.sizes(4), {
> > + if (testSizes("range 4", range.sizes(PixelFormat(4)), {
> > Size(1024, 768), Size(1280, 1024),
> > Size(2048, 1152), Size(2048, 1536),
> > Size(2560, 2048), Size(3200, 2048), }))
> > diff --git a/test/v4l2_videodevice/buffer_cache.cpp b/test/v4l2_videodevice/buffer_cache.cpp
> > index c951bc9650dc4e0e..8921605030cfdefb 100644
> > --- a/test/v4l2_videodevice/buffer_cache.cpp
> > +++ b/test/v4l2_videodevice/buffer_cache.cpp
> > @@ -144,7 +144,7 @@ public:
> > const unsigned int numBuffers = 8;
> >
> > StreamConfiguration cfg;
> > - cfg.pixelFormat = DRM_FORMAT_YUYV;
> > + cfg.pixelFormat = PixelFormat(DRM_FORMAT_YUYV);
> > cfg.size = Size(600, 800);
> > cfg.bufferCount = numBuffers;
> >
>
> --
> Regards,
>
> Laurent Pinchart
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list