/* 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)