KWin
Loading...
Searching...
No Matches
colorspace.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2023 Xaver Hugl <xaver.hugl@gmail.com>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6#pragma once
7#include <optional>
8
9#include <QMatrix4x4>
10#include <QVector2D>
11
12#include "kwin_export.h"
13
14namespace KWin
15{
16
17enum class NamedColorimetry {
18 BT709,
19 BT2020,
20};
21
27class KWIN_EXPORT Colorimetry
28{
29public:
30 static const Colorimetry &fromName(NamedColorimetry name);
34 static QVector3D xyToXYZ(QVector2D xy);
38 static QVector2D xyzToXY(QVector3D xyz);
42 static QMatrix4x4 chromaticAdaptationMatrix(QVector2D sourceWhitepoint, QVector2D destinationWhitepoint);
43
44 static QMatrix4x4 calculateToXYZMatrix(QVector3D red, QVector3D green, QVector3D blue, QVector3D white);
45
46 explicit Colorimetry(QVector2D red, QVector2D green, QVector2D blue, QVector2D white);
47 explicit Colorimetry(QVector3D red, QVector3D green, QVector3D blue, QVector3D white);
48
52 const QMatrix4x4 &toXYZ() const;
56 const QMatrix4x4 &fromXYZ() const;
61 QMatrix4x4 toOther(const Colorimetry &colorimetry) const;
62 bool operator==(const Colorimetry &other) const;
63 bool operator==(NamedColorimetry name) const;
67 Colorimetry adaptedTo(QVector2D newWhitepoint) const;
71 Colorimetry interpolateGamutTo(const Colorimetry &one, double factor) const;
72
73 const QVector2D &red() const;
74 const QVector2D &green() const;
75 const QVector2D &blue() const;
76 const QVector2D &white() const;
77
78private:
79 QVector2D m_red;
80 QVector2D m_green;
81 QVector2D m_blue;
82 QVector2D m_white;
83 QMatrix4x4 m_toXYZ;
84 QMatrix4x4 m_fromXYZ;
85};
86
91 sRGB = 0,
92 linear = 1,
94 scRGB = 3,
95 gamma22 = 4,
96};
97
102class KWIN_EXPORT ColorDescription
103{
104public:
114 explicit ColorDescription(const Colorimetry &colorimety, NamedTransferFunction tf, double sdrBrightness, double minHdrBrightness, double maxFrameAverageBrightness, double maxHdrHighlightBrightness, const Colorimetry &sdrColorimetry = Colorimetry::fromName(NamedColorimetry::BT709));
115 explicit ColorDescription(NamedColorimetry colorimetry, NamedTransferFunction tf, double sdrBrightness, double minHdrBrightness, double maxFrameAverageBrightness, double maxHdrHighlightBrightness, const Colorimetry &sdrColorimetry = Colorimetry::fromName(NamedColorimetry::BT709));
116
117 const Colorimetry &colorimetry() const;
118 const Colorimetry &sdrColorimetry() const;
119 NamedTransferFunction transferFunction() const;
120 double sdrBrightness() const;
121 double minHdrBrightness() const;
122 double maxFrameAverageBrightness() const;
123 double maxHdrHighlightBrightness() const;
124
125 bool operator==(const ColorDescription &other) const;
126
127 QVector3D mapTo(QVector3D rgb, const ColorDescription &other) const;
128
132 static const ColorDescription sRGB;
133 static QVector3D encodedToNits(const QVector3D &nits, NamedTransferFunction tf, double sdrBrightness);
134 static QVector3D nitsToEncoded(const QVector3D &rgb, NamedTransferFunction tf, double sdrBrightness);
135
136private:
137 Colorimetry m_colorimetry;
138 NamedTransferFunction m_transferFunction;
139 Colorimetry m_sdrColorimetry;
140 double m_sdrGamutWideness;
141 double m_sdrBrightness;
142 double m_minHdrBrightness;
143 double m_maxFrameAverageBrightness;
144 double m_maxHdrHighlightBrightness;
145};
146}
static const ColorDescription sRGB
Definition colorspace.h:132
NamedColorimetry
Definition colorspace.h:17
bool operator==(const LinuxDmaBufV1Feedback::Tranche &t1, const LinuxDmaBufV1Feedback::Tranche &t2)
NamedTransferFunction
Definition colorspace.h:90