[libcamera-devel] [PATCH v4 6/7] tests: stream: Add a colorspace adjustment test
paul.elder at ideasonboard.com
paul.elder at ideasonboard.com
Thu Sep 1 06:03:32 CEST 2022
On Tue, Aug 30, 2022 at 01:17:24PM +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>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> test/stream/meson.build | 1 +
> test/stream/stream_colorspace.cpp | 96 +++++++++++++++++++++++++++++++
> 2 files changed, 97 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..1b7afe65
> --- /dev/null
> +++ b/test/stream/stream_colorspace.cpp
> @@ -0,0 +1,96 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2022, Ideas on Board Oy.
> + *
> + * stream_colorspace.cpp - Stream colorspace adjustment test
> + */
> +
> +#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();
> + }
> +};
> +
> +class StreamColorSpaceTest : public Test
> +{
> +protected:
> + int run()
> + {
> + TestCameraConfiguration config;
> +
> + 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) {
> + cerr << "YUV format must have YCbCr encoding" << endl;
> + return TestFail;
> + }
> +
> + /*
> + * For YUV pixelFormat, encoding should be picked up according
> + * to 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) {
> + cerr << "Failed to adjust colorspace Y'CbCr encoding according"
> + << " to primaries and transfer function" << endl;
> + return TestFail;
> + }
> +
> + /* For RGB pixelFormat, Sycc colorspace should get adjusted to sRGB. */
> + streamCfg.pixelFormat = formats::RGB888;
> + streamCfg.colorSpace = ColorSpace::Sycc;
> + config.validate();
> + if (streamCfg.colorSpace != ColorSpace::Srgb) {
> + cerr << "RGB format's colorspace should be set to Srgb" << endl;
> + 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) {
> + cerr << "Raw format must always have Raw colorspace" << endl;
> + return TestFail;
> + }
> +
> + return TestPass;
> + }
> +};
> +
> +TEST_REGISTER(StreamColorSpaceTest)
> --
> 2.37.2
>
More information about the libcamera-devel
mailing list