KWin
Loading...
Searching...
No Matches
test_colorspaces.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2023 Xaver Hugl <xaver.hugl@gmail.com>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#include <QTest>
8
9#include "core/colorspace.h"
10
11using namespace KWin;
12
13class TestColorspaces : public QObject
14{
15 Q_OBJECT
16
17public:
18 TestColorspaces() = default;
19
20private Q_SLOTS:
21 void roundtripConversion_data();
22 void roundtripConversion();
23};
24
25static bool compareVectors(const QVector3D &one, const QVector3D &two, float maxDifference)
26{
27 const bool ret = std::abs(one.x() - two.x()) <= maxDifference
28 && std::abs(one.y() - two.y()) <= maxDifference
29 && std::abs(one.z() - two.z()) <= maxDifference;
30 if (!ret) {
31 qWarning() << one << "!=" << two << "within" << maxDifference;
32 }
33 return ret;
34}
35
36void TestColorspaces::roundtripConversion_data()
37{
38 QTest::addColumn<NamedColorimetry>("srcColorimetry");
39 QTest::addColumn<NamedTransferFunction>("srcTransferFunction");
40 QTest::addColumn<NamedColorimetry>("dstColorimetry");
41 QTest::addColumn<NamedTransferFunction>("dstTransferFunction");
42 QTest::addColumn<double>("requiredAccuracy");
43
44 const double resolution10bit = std::pow(1.0 / 2.0, 10);
45 QTest::addRow("BT709 (sRGB) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::sRGB << NamedColorimetry::BT2020 << NamedTransferFunction::linear << resolution10bit;
46 QTest::addRow("BT709 (gamma 2.2) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::gamma22 << NamedColorimetry::BT2020 << NamedTransferFunction::linear << resolution10bit;
47 QTest::addRow("BT709 (scRGB) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::scRGB << NamedColorimetry::BT2020 << NamedTransferFunction::linear << resolution10bit;
48 QTest::addRow("BT709 (linear) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::linear << NamedColorimetry::BT2020 << NamedTransferFunction::linear << resolution10bit;
49 QTest::addRow("BT709 (PQ) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::PerceptualQuantizer << NamedColorimetry::BT2020 << NamedTransferFunction::linear << 3 * resolution10bit;
50}
51
52void TestColorspaces::roundtripConversion()
53{
54 QFETCH(NamedColorimetry, srcColorimetry);
55 QFETCH(NamedTransferFunction, srcTransferFunction);
56 QFETCH(NamedColorimetry, dstColorimetry);
57 QFETCH(NamedTransferFunction, dstTransferFunction);
58 QFETCH(double, requiredAccuracy);
59
60 const auto src = ColorDescription(srcColorimetry, srcTransferFunction, 100, 0, 100, 100);
61 const auto dst = ColorDescription(dstColorimetry, dstTransferFunction, 100, 0, 100, 100);
62
63 const QVector3D red(1, 0, 0);
64 const QVector3D green(0, 1, 0);
65 const QVector3D blue(0, 0, 1);
66 const QVector3D white(1, 1, 1);
67
68 QVERIFY(compareVectors(dst.mapTo(src.mapTo(red, dst), src), red, requiredAccuracy));
69 QVERIFY(compareVectors(dst.mapTo(src.mapTo(green, dst), src), green, requiredAccuracy));
70 QVERIFY(compareVectors(dst.mapTo(src.mapTo(blue, dst), src), blue, requiredAccuracy));
71 QVERIFY(compareVectors(dst.mapTo(src.mapTo(white, dst), src), white, requiredAccuracy));
72}
73
75
76#include "test_colorspaces.moc"
TestColorspaces()=default
NamedColorimetry
Definition colorspace.h:17
NamedTransferFunction
Definition colorspace.h:90
QTEST_MAIN(OnScreenNotificationTest)