[libcamera-devel,v2,5/6] tests: stream: Add a colorspace adjustment test
diff mbox series

Message ID 20220824162425.71087-6-umang.jain@ideasonboard.com
State Superseded
Delegated to: Umang Jain
Headers show
Series
  • Colorspace adjustments and gstreamer mappings
Related show

Commit Message

Umang Jain Aug. 24, 2022, 4:24 p.m. UTC
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@ideasonboard.com>
---
 test/stream/meson.build           |  1 +
 test/stream/stream_colorspace.cpp | 80 +++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+)
 create mode 100644 test/stream/stream_colorspace.cpp

Patch
diff mbox series

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..65e695ca
--- /dev/null
+++ b/test/stream/stream_colorspace.cpp
@@ -0,0 +1,80 @@ 
+/* 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();
+	}
+};
+
+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 stream with sRGB colorspace should have Y'CbCr encoding
+		 * adjusted.
+		 */
+		config_.validate();
+		if (streamCfg.colorSpace->ycbcrEncoding == ColorSpace::YcbcrEncoding::None)
+			return TestFail;
+
+		/* For RGB pixelFormat, sRGB colorspace shouldn't get adjusted */
+		streamCfg.pixelFormat = formats::RGB888;
+		streamCfg.colorSpace = ColorSpace::Srgb;
+		config_.validate();
+		if (streamCfg.colorSpace != ColorSpace::Srgb)
+			return TestFail;
+
+		/*
+		 * For YUV pixelFormat, encoding should picked up according to
+		 * primaries.
+		 */
+		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;
+
+		return TestPass;
+	}
+
+	TestCameraConfiguration config_;
+};
+
+TEST_REGISTER(StreamColorSpaceTest)