[libcamera-devel] [PATCH v3 6/7] tests: stream: Add a colorspace adjustment test
Umang Jain
umang.jain at ideasonboard.com
Mon Aug 29 18:37:41 CEST 2022
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();
+ }
+};
+
+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)
+ return TestFail;
+
+ /*
+ * For YUV pixelFormat, encoding should 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)
+ 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;
+
+ /* 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_;
+};
+
+TEST_REGISTER(StreamColorSpaceTest)
--
2.37.2
More information about the libcamera-devel
mailing list