summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-08-23 17:36:10 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-08-26 01:04:27 +0300
commit555d27ce58cd6eeb050f7201ae67c4cd88607fc4 (patch)
treefa3219ea1a2ea46c717d337b8188fafa25c7c4a9
parentfbfdaa2d205b8898527609fb18d641429f0e0710 (diff)
test: Add a ColorSpace test
Add a test for the ColorSpace class that exercises the toString() and fromString() functions. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
-rw-r--r--test/color-space.cpp105
-rw-r--r--test/meson.build1
2 files changed, 106 insertions, 0 deletions
diff --git a/test/color-space.cpp b/test/color-space.cpp
new file mode 100644
index 00000000..7d45b217
--- /dev/null
+++ b/test/color-space.cpp
@@ -0,0 +1,105 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2022, Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *
+ * libcamera ColorSpace test
+ */
+
+#include <array>
+#include <iostream>
+
+#include <libcamera/color_space.h>
+
+#include "test.h"
+
+using namespace libcamera;
+using namespace std;
+
+class ColorSpaceTest : public Test
+{
+protected:
+ int run()
+ {
+ if (ColorSpace::toString(std::nullopt) != "Unset") {
+ std::cerr << "Conversion from nullopt to string failed" << std::endl;
+ return TestFail;
+ }
+
+ const std::array<std::pair<ColorSpace, std::string>, 10> colorSpaces = { {
+ { ColorSpace::Raw, "RAW" },
+ { ColorSpace::Srgb, "sRGB" },
+ { ColorSpace::Sycc, "sYCC" },
+ { ColorSpace::Smpte170m, "SMPTE170M" },
+ { ColorSpace::Rec709, "Rec709" },
+ { ColorSpace::Rec2020, "Rec2020" },
+ {
+ ColorSpace{
+ ColorSpace::Primaries::Raw,
+ ColorSpace::TransferFunction::Linear,
+ ColorSpace::YcbcrEncoding::None,
+ ColorSpace::Range::Limited
+ },
+ "RAW/Linear/None/Limited"
+ }, {
+ ColorSpace{
+ ColorSpace::Primaries::Smpte170m,
+ ColorSpace::TransferFunction::Srgb,
+ ColorSpace::YcbcrEncoding::Rec601,
+ ColorSpace::Range::Full
+ },
+ "SMPTE170M/sRGB/Rec601/Full"
+ }, {
+ ColorSpace{
+ ColorSpace::Primaries::Rec709,
+ ColorSpace::TransferFunction::Rec709,
+ ColorSpace::YcbcrEncoding::Rec709,
+ ColorSpace::Range::Full
+ },
+ "Rec709/Rec709/Rec709/Full"
+ }, {
+ ColorSpace{
+ ColorSpace::Primaries::Rec2020,
+ ColorSpace::TransferFunction::Linear,
+ ColorSpace::YcbcrEncoding::Rec2020,
+ ColorSpace::Range::Limited
+ },
+ "Rec2020/Linear/Rec2020/Limited"
+ },
+ } };
+
+ for (const auto &[colorSpace, name] : colorSpaces) {
+ if (colorSpace.toString() != name) {
+ std::cerr
+ << "Conversion from ColorSpace to string failed: "
+ << "expected " << name
+ << ", got " << colorSpace.toString()
+ << std::endl;
+ return TestFail;
+ }
+
+ if (ColorSpace::fromString(name) != colorSpace) {
+ std::cerr
+ << "Conversion from string "
+ << name << " to ColorSpace failed"
+ << std::endl;
+ return TestFail;
+ }
+ }
+
+ if (ColorSpace::fromString("Invalid")) {
+ std::cerr << "Conversion from invalid name string to color space succeeded"
+ << std::endl;
+ return TestFail;
+ }
+
+ if (ColorSpace::fromString("Rec709/Rec709/Rec710/Limited")) {
+ std::cerr << "Conversion from invalid component string to color space succeeded"
+ << std::endl;
+ return TestFail;
+ }
+
+ return TestPass;
+ }
+};
+
+TEST_REGISTER(ColorSpaceTest)
diff --git a/test/meson.build b/test/meson.build
index d050bfa1..6cc77841 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -26,6 +26,7 @@ subdir('v4l2_subdevice')
subdir('v4l2_videodevice')
public_tests = [
+ ['color-space', 'color-space.cpp'],
['geometry', 'geometry.cpp'],
['public-api', 'public-api.cpp'],
['signal', 'signal.cpp'],