[libcamera-devel] [PATCH v3 6/7] tests: stream: Add a colorspace adjustment test
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Aug 30 00:28:37 CEST 2022
One more comment.
On Tue, Aug 30, 2022 at 01:28:04AM +0300, Laurent Pinchart wrote:
> Hi Umang,
>
> Thank you for the patch.
>
> On Mon, Aug 29, 2022 at 10:07:41PM +0530, Umang Jain via libcamera-devel wrote:
> > ColorSpace can be adjusted based on the stream's pixelFormat being
> > requested. Add a test to check the adjustment logic defined in
> > ColorSpace::adjust().
> >
> > Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> > ---
> > test/stream/meson.build | 1 +
> > test/stream/stream_colorspace.cpp | 87 +++++++++++++++++++++++++++++++
> > 2 files changed, 88 insertions(+)
> > create mode 100644 test/stream/stream_colorspace.cpp
> >
> > diff --git a/test/stream/meson.build b/test/stream/meson.build
> > index 73608ffd..89f51c18 100644
> > --- a/test/stream/meson.build
> > +++ b/test/stream/meson.build
> > @@ -1,6 +1,7 @@
> > # SPDX-License-Identifier: CC0-1.0
> >
> > stream_tests = [
> > + ['stream_colorspace', 'stream_colorspace.cpp'],
> > ['stream_formats', 'stream_formats.cpp'],
> > ]
> >
> > diff --git a/test/stream/stream_colorspace.cpp b/test/stream/stream_colorspace.cpp
> > new file mode 100644
> > index 00000000..7b7e84e0
> > --- /dev/null
> > +++ b/test/stream/stream_colorspace.cpp
> > @@ -0,0 +1,87 @@
> > +/* SPDX-License-Identifier: GPL-2.0-or-later */
> > +/*
> > + * Copyright (C) 2022, Ideas on Board Oy.
> > + *
> > + * stream_colorspace.cpp - Stream colorspace tests
> > + */
> > +
> > +#include <iostream>
> > +
> > +#include <libcamera/camera.h>
> > +#include <libcamera/formats.h>
> > +#include <libcamera/stream.h>
> > +
> > +#include "test.h"
> > +
> > +using namespace libcamera;
> > +using namespace std;
> > +
> > +class TestCameraConfiguration : public CameraConfiguration
> > +{
> > +public:
> > + TestCameraConfiguration()
> > + : CameraConfiguration()
> > + {
> > + }
> > +
> > + Status validate() override
> > + {
> > + return validateColorSpaces();
>
> Clever way to test this :-)
>
> > + }
> > +};
> > +
> > +class StreamColorSpaceTest : public Test
> > +{
> > +protected:
> > + int run()
> > + {
> > + StreamConfiguration cfg;
> > + cfg.size = { 640, 320 };
> > + cfg.pixelFormat = formats::YUV422;
> > + cfg.colorSpace = ColorSpace::Srgb;
> > + config_.addConfiguration(cfg);
> > +
> > + StreamConfiguration &streamCfg = config_.at(0);
> > +
> > + /*
> > + * YUV pixelformat with sRGB colorspace should have Y'CbCr encoding
> > + * adjusted.
> > + */
> > + config_.validate();
> > + if (streamCfg.colorSpace->ycbcrEncoding == ColorSpace::YcbcrEncoding::None)
>
> Test failures should print an error message, to identify the test that
> fails. Something like.
>
> std::cerr << "YUV format must have YCbCr encoding" << std::endl;
>
> Same below.
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
> > + return TestFail;
> > +
> > + /*
> > + * For YUV pixelFormat, encoding should picked up according to
>
> s/should picked/should be picked/
>
> > + * primaries and transfer function, if 'None' is specified.
> > + */
> > + streamCfg.pixelFormat = formats::YUV422;
> > + streamCfg.colorSpace = ColorSpace(ColorSpace::Primaries::Rec2020,
> > + ColorSpace::TransferFunction::Rec709,
> > + ColorSpace::YcbcrEncoding::None,
> > + ColorSpace::Range::Limited);
> > + config_.validate();
> > + if (streamCfg.colorSpace->ycbcrEncoding != ColorSpace::YcbcrEncoding::Rec2020)
> > + return TestFail;
> > +
> > + /* For RGB pixelFormat, sRGB colorspace shouldn't get adjusted */
>
> s/adjusted/adjusted./
>
> Same below.
>
> > + streamCfg.pixelFormat = formats::RGB888;
> > + streamCfg.colorSpace = ColorSpace::Srgb;
>
> I'd set it to Sycc here to test that it gets adjusted to Srgb.
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
> > + config_.validate();
> > + if (streamCfg.colorSpace != ColorSpace::Srgb)
> > + return TestFail;
> > +
> > + /* Raw formats should always set colorspace to ColorSpace::Raw */
> > + streamCfg.pixelFormat = formats::SBGGR8;
> > + streamCfg.colorSpace = ColorSpace::Rec709;
> > + config_.validate();
> > + if (streamCfg.colorSpace != ColorSpace::Raw)
> > + return TestFail;
> > +
> > + return TestPass;
> > + }
> > +
> > + TestCameraConfiguration config_;
This can be a local variable in the run() function.
> > +};
> > +
> > +TEST_REGISTER(StreamColorSpaceTest)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list