Remove BT.2020 support from QColorSpace
BT.2020 is an HDR color space and its luminance range doesn't match that of the rest of the currently available color spaces. Without support for white-point luminance in 5.14, there would be a behavior change when luminance support is later introduced, so it is better to remove it now, and reintroduce it when the necessary handling of different luminance levels is available. Change-Id: Ie29e4dd757faae3ac91d4252e1206acce42801dc Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
c2e32a29c3
commit
89d0a03c06
@ -226,12 +226,6 @@ public:
|
|||||||
{ 0.1351922452f, 0.7118769884f, 0.0000000000f },
|
{ 0.1351922452f, 0.7118769884f, 0.0000000000f },
|
||||||
{ 0.0313525312f, 0.0000856627f, 0.8251883388f } };
|
{ 0.0313525312f, 0.0000856627f, 0.8251883388f } };
|
||||||
}
|
}
|
||||||
static QColorMatrix toXyzFromBt2020()
|
|
||||||
{
|
|
||||||
return QColorMatrix { { 0.6506130099f, 0.2695676684f, -0.0018652577f },
|
|
||||||
{ 0.1865101457f, 0.6840794086f, 0.0172256753f },
|
|
||||||
{ 0.1270887405f, 0.0463530831f, 0.8098278046f } };
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool operator==(const QColorMatrix &m1, const QColorMatrix &m2)
|
inline bool operator==(const QColorMatrix &m1, const QColorMatrix &m2)
|
||||||
|
@ -70,12 +70,6 @@ QColorSpacePrimaries::QColorSpacePrimaries(QColorSpace::Primaries primaries)
|
|||||||
bluePoint = QPointF(0.150, 0.060);
|
bluePoint = QPointF(0.150, 0.060);
|
||||||
whitePoint = QColorVector::D65Chromaticity();
|
whitePoint = QColorVector::D65Chromaticity();
|
||||||
break;
|
break;
|
||||||
case QColorSpace::Primaries::Bt2020:
|
|
||||||
redPoint = QPointF(0.708, 0.292);
|
|
||||||
greenPoint = QPointF(0.190, 0.797);
|
|
||||||
bluePoint = QPointF(0.131, 0.046);
|
|
||||||
whitePoint = QColorVector::D65Chromaticity();
|
|
||||||
break;
|
|
||||||
case QColorSpace::Primaries::AdobeRgb:
|
case QColorSpace::Primaries::AdobeRgb:
|
||||||
redPoint = QPointF(0.640, 0.330);
|
redPoint = QPointF(0.640, 0.330);
|
||||||
greenPoint = QPointF(0.210, 0.710);
|
greenPoint = QPointF(0.210, 0.710);
|
||||||
@ -191,11 +185,6 @@ QColorSpacePrivate::QColorSpacePrivate(QColorSpace::NamedColorSpace namedColorSp
|
|||||||
transferFunction = QColorSpace::TransferFunction::ProPhotoRgb;
|
transferFunction = QColorSpace::TransferFunction::ProPhotoRgb;
|
||||||
description = QStringLiteral("ProPhoto RGB");
|
description = QStringLiteral("ProPhoto RGB");
|
||||||
break;
|
break;
|
||||||
case QColorSpace::Bt2020:
|
|
||||||
primaries = QColorSpace::Primaries::Bt2020;
|
|
||||||
transferFunction = QColorSpace::TransferFunction::Bt2020;
|
|
||||||
description = QStringLiteral("BT.2020");
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
Q_UNREACHABLE();
|
Q_UNREACHABLE();
|
||||||
}
|
}
|
||||||
@ -277,14 +266,6 @@ void QColorSpacePrivate::identifyColorSpace()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QColorSpace::Primaries::Bt2020:
|
|
||||||
if (transferFunction == QColorSpace::TransferFunction::Bt2020) {
|
|
||||||
namedColorSpace = QColorSpace::Bt2020;
|
|
||||||
if (description.isEmpty())
|
|
||||||
description = QStringLiteral("BT.2020");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -335,12 +316,6 @@ void QColorSpacePrivate::setTransferFunction()
|
|||||||
if (qFuzzyIsNull(gamma))
|
if (qFuzzyIsNull(gamma))
|
||||||
gamma = 1.8f;
|
gamma = 1.8f;
|
||||||
break;
|
break;
|
||||||
case QColorSpace::TransferFunction::Bt2020:
|
|
||||||
trc[0].m_type = QColorTrc::Type::Function;
|
|
||||||
trc[0].m_fun = QColorTransferFunction::fromBt2020();
|
|
||||||
if (qFuzzyIsNull(gamma))
|
|
||||||
gamma = 1.961f;
|
|
||||||
break;
|
|
||||||
case QColorSpace::TransferFunction::Custom:
|
case QColorSpace::TransferFunction::Custom:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -415,8 +390,6 @@ QColorTransform QColorSpacePrivate::transformationToColorSpace(const QColorSpace
|
|||||||
\l{http://www.color.org/chardata/rgb/DCIP3.xalter}{ICC registration of DCI-P3}
|
\l{http://www.color.org/chardata/rgb/DCIP3.xalter}{ICC registration of DCI-P3}
|
||||||
\value ProPhotoRgb The Pro Photo RGB color space, also known as ROMM RGB is a very wide gamut color space.
|
\value ProPhotoRgb The Pro Photo RGB color space, also known as ROMM RGB is a very wide gamut color space.
|
||||||
\l{http://www.color.org/chardata/rgb/rommrgb.xalter}{ICC registration of ROMM RGB}
|
\l{http://www.color.org/chardata/rgb/rommrgb.xalter}{ICC registration of ROMM RGB}
|
||||||
\value Bt2020 BT.2020 also known as Rec.2020 is the color space of HDR TVs.
|
|
||||||
\l{http://www.color.org/chardata/rgb/BT2020.xalter}{ICC registration of BT.2020}
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -429,7 +402,6 @@ QColorTransform QColorSpacePrivate::transformationToColorSpace(const QColorSpace
|
|||||||
\value AdobeRgb The Adobe RGB primaries
|
\value AdobeRgb The Adobe RGB primaries
|
||||||
\value DciP3D65 The DCI-P3 primaries with the D65 whitepoint
|
\value DciP3D65 The DCI-P3 primaries with the D65 whitepoint
|
||||||
\value ProPhotoRgb The ProPhoto RGB primaries with the D50 whitepoint
|
\value ProPhotoRgb The ProPhoto RGB primaries with the D50 whitepoint
|
||||||
\value Bt2020 The BT.2020 primaries
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -442,7 +414,6 @@ QColorTransform QColorSpacePrivate::transformationToColorSpace(const QColorSpace
|
|||||||
\value Gamma A transfer function that is a real gamma curve based on the value of gamma()
|
\value Gamma A transfer function that is a real gamma curve based on the value of gamma()
|
||||||
\value SRgb The sRGB transfer function, composed of linear and gamma parts
|
\value SRgb The sRGB transfer function, composed of linear and gamma parts
|
||||||
\value ProPhotoRgb The ProPhoto RGB transfer function, composed of linear and gamma parts
|
\value ProPhotoRgb The ProPhoto RGB transfer function, composed of linear and gamma parts
|
||||||
\value Bt2020 The BT.2020 transfer function, composed of linear and gamma parts
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -457,7 +428,7 @@ QColorSpace::QColorSpace()
|
|||||||
*/
|
*/
|
||||||
QColorSpace::QColorSpace(NamedColorSpace namedColorSpace)
|
QColorSpace::QColorSpace(NamedColorSpace namedColorSpace)
|
||||||
{
|
{
|
||||||
static QColorSpacePrivate *predefinedColorspacePrivates[QColorSpace::Bt2020 + 1];
|
static QColorSpacePrivate *predefinedColorspacePrivates[QColorSpace::ProPhotoRgb + 1];
|
||||||
if (!predefinedColorspacePrivates[namedColorSpace]) {
|
if (!predefinedColorspacePrivates[namedColorSpace]) {
|
||||||
predefinedColorspacePrivates[namedColorSpace] = new QColorSpacePrivate(namedColorSpace);
|
predefinedColorspacePrivates[namedColorSpace] = new QColorSpacePrivate(namedColorSpace);
|
||||||
predefinedColorspacePrivates[namedColorSpace]->ref.ref();
|
predefinedColorspacePrivates[namedColorSpace]->ref.ref();
|
||||||
|
@ -59,8 +59,7 @@ public:
|
|||||||
SRgbLinear,
|
SRgbLinear,
|
||||||
AdobeRgb,
|
AdobeRgb,
|
||||||
DisplayP3,
|
DisplayP3,
|
||||||
ProPhotoRgb,
|
ProPhotoRgb
|
||||||
Bt2020,
|
|
||||||
};
|
};
|
||||||
Q_ENUM(NamedColorSpace)
|
Q_ENUM(NamedColorSpace)
|
||||||
enum class Primaries {
|
enum class Primaries {
|
||||||
@ -68,8 +67,7 @@ public:
|
|||||||
SRgb,
|
SRgb,
|
||||||
AdobeRgb,
|
AdobeRgb,
|
||||||
DciP3D65,
|
DciP3D65,
|
||||||
ProPhotoRgb,
|
ProPhotoRgb
|
||||||
Bt2020,
|
|
||||||
};
|
};
|
||||||
Q_ENUM(Primaries)
|
Q_ENUM(Primaries)
|
||||||
enum class TransferFunction {
|
enum class TransferFunction {
|
||||||
@ -77,8 +75,7 @@ public:
|
|||||||
Linear,
|
Linear,
|
||||||
Gamma,
|
Gamma,
|
||||||
SRgb,
|
SRgb,
|
||||||
ProPhotoRgb,
|
ProPhotoRgb
|
||||||
Bt2020,
|
|
||||||
};
|
};
|
||||||
Q_ENUM(TransferFunction)
|
Q_ENUM(TransferFunction)
|
||||||
|
|
||||||
|
@ -130,10 +130,6 @@ public:
|
|||||||
{
|
{
|
||||||
return QColorTransferFunction(1.0f / 1.055f, 0.055f / 1.055f, 1.0f / 12.92f, 0.04045f, 0.0f, 0.0f, 2.4f);
|
return QColorTransferFunction(1.0f / 1.055f, 0.055f / 1.055f, 1.0f / 12.92f, 0.04045f, 0.0f, 0.0f, 2.4f);
|
||||||
}
|
}
|
||||||
static QColorTransferFunction fromBt2020()
|
|
||||||
{
|
|
||||||
return QColorTransferFunction(1.0f / 1.0993f, 0.0993f / 1.0993f, 1.0f / 4.5f, 0.08145f, 0.0f, 0.0f, 2.2f);
|
|
||||||
}
|
|
||||||
static QColorTransferFunction fromProPhotoRgb()
|
static QColorTransferFunction fromProPhotoRgb()
|
||||||
{
|
{
|
||||||
return QColorTransferFunction(1.0f, 0.0f, 1.0f / 16.0f, 16.0f / 512.0f, 0.0f, 0.0f, 1.8f);
|
return QColorTransferFunction(1.0f, 0.0f, 1.0f / 16.0f, 16.0f / 512.0f, 0.0f, 0.0f, 1.8f);
|
||||||
|
@ -687,9 +687,6 @@ bool fromIccProfile(const QByteArray &data, QColorSpace *colorSpace)
|
|||||||
} else if (colorspaceDPtr->toXyz == QColorMatrix::toXyzFromDciP3D65()) {
|
} else if (colorspaceDPtr->toXyz == QColorMatrix::toXyzFromDciP3D65()) {
|
||||||
qCDebug(lcIcc) << "fromIccProfile: DCI-P3 D65 primaries detected";
|
qCDebug(lcIcc) << "fromIccProfile: DCI-P3 D65 primaries detected";
|
||||||
colorspaceDPtr->primaries = QColorSpace::Primaries::DciP3D65;
|
colorspaceDPtr->primaries = QColorSpace::Primaries::DciP3D65;
|
||||||
} else if (colorspaceDPtr->toXyz == QColorMatrix::toXyzFromBt2020()) {
|
|
||||||
qCDebug(lcIcc) << "fromIccProfile: BT.2020 primaries detected";
|
|
||||||
colorspaceDPtr->primaries = QColorSpace::Primaries::Bt2020;
|
|
||||||
}
|
}
|
||||||
if (colorspaceDPtr->toXyz == QColorMatrix::toXyzFromProPhotoRgb()) {
|
if (colorspaceDPtr->toXyz == QColorMatrix::toXyzFromProPhotoRgb()) {
|
||||||
qCDebug(lcIcc) << "fromIccProfile: ProPhoto RGB primaries detected";
|
qCDebug(lcIcc) << "fromIccProfile: ProPhoto RGB primaries detected";
|
||||||
|
@ -123,9 +123,6 @@ void tst_QColorSpace::namedColorSpaces_data()
|
|||||||
QTest::newRow("ProPhoto RGB") << QColorSpace::ProPhotoRgb
|
QTest::newRow("ProPhoto RGB") << QColorSpace::ProPhotoRgb
|
||||||
<< QColorSpace::Primaries::ProPhotoRgb
|
<< QColorSpace::Primaries::ProPhotoRgb
|
||||||
<< QColorSpace::TransferFunction::ProPhotoRgb;
|
<< QColorSpace::TransferFunction::ProPhotoRgb;
|
||||||
QTest::newRow("BT.2020") << QColorSpace::Bt2020
|
|
||||||
<< QColorSpace::Primaries::Bt2020
|
|
||||||
<< QColorSpace::TransferFunction::Bt2020;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QColorSpace::namedColorSpaces()
|
void tst_QColorSpace::namedColorSpaces()
|
||||||
@ -220,7 +217,6 @@ void tst_QColorSpace::imageConversion_data()
|
|||||||
QTest::newRow("Display-P3 -> sRGB") << QColorSpace::DisplayP3 << QColorSpace::SRgb << 0;
|
QTest::newRow("Display-P3 -> sRGB") << QColorSpace::DisplayP3 << QColorSpace::SRgb << 0;
|
||||||
QTest::newRow("Adobe RGB -> sRGB") << QColorSpace::AdobeRgb << QColorSpace::SRgb << 2;
|
QTest::newRow("Adobe RGB -> sRGB") << QColorSpace::AdobeRgb << QColorSpace::SRgb << 2;
|
||||||
QTest::newRow("Display-P3 -> Adobe RGB") << QColorSpace::DisplayP3 << QColorSpace::AdobeRgb << 2;
|
QTest::newRow("Display-P3 -> Adobe RGB") << QColorSpace::DisplayP3 << QColorSpace::AdobeRgb << 2;
|
||||||
QTest::newRow("Display-P3 -> BT.2020") << QColorSpace::DisplayP3 << QColorSpace::Bt2020 << 4;
|
|
||||||
QTest::newRow("sRGB -> sRGB Linear") << QColorSpace::SRgb << QColorSpace::SRgbLinear << 0;
|
QTest::newRow("sRGB -> sRGB Linear") << QColorSpace::SRgb << QColorSpace::SRgbLinear << 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -351,14 +347,12 @@ void tst_QColorSpace::primariesXyz()
|
|||||||
QColorSpace adobeRgb = QColorSpace::AdobeRgb;
|
QColorSpace adobeRgb = QColorSpace::AdobeRgb;
|
||||||
QColorSpace displayP3 = QColorSpace::DisplayP3;
|
QColorSpace displayP3 = QColorSpace::DisplayP3;
|
||||||
QColorSpace proPhotoRgb = QColorSpace::ProPhotoRgb;
|
QColorSpace proPhotoRgb = QColorSpace::ProPhotoRgb;
|
||||||
QColorSpace bt2020 = QColorSpace::Bt2020;
|
|
||||||
|
|
||||||
// Check if our calculated matrices, match the precalculated ones.
|
// Check if our calculated matrices, match the precalculated ones.
|
||||||
QCOMPARE(QColorSpacePrivate::get(sRgb)->toXyz, QColorMatrix::toXyzFromSRgb());
|
QCOMPARE(QColorSpacePrivate::get(sRgb)->toXyz, QColorMatrix::toXyzFromSRgb());
|
||||||
QCOMPARE(QColorSpacePrivate::get(adobeRgb)->toXyz, QColorMatrix::toXyzFromAdobeRgb());
|
QCOMPARE(QColorSpacePrivate::get(adobeRgb)->toXyz, QColorMatrix::toXyzFromAdobeRgb());
|
||||||
QCOMPARE(QColorSpacePrivate::get(displayP3)->toXyz, QColorMatrix::toXyzFromDciP3D65());
|
QCOMPARE(QColorSpacePrivate::get(displayP3)->toXyz, QColorMatrix::toXyzFromDciP3D65());
|
||||||
QCOMPARE(QColorSpacePrivate::get(proPhotoRgb)->toXyz, QColorMatrix::toXyzFromProPhotoRgb());
|
QCOMPARE(QColorSpacePrivate::get(proPhotoRgb)->toXyz, QColorMatrix::toXyzFromProPhotoRgb());
|
||||||
QCOMPARE(QColorSpacePrivate::get(bt2020)->toXyz, QColorMatrix::toXyzFromBt2020());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef QT_BUILD_INTERNAL
|
#ifdef QT_BUILD_INTERNAL
|
||||||
@ -370,7 +364,6 @@ void tst_QColorSpace::primaries2_data()
|
|||||||
QTest::newRow("DCI-P3 (D65)") << QColorSpace::Primaries::DciP3D65;
|
QTest::newRow("DCI-P3 (D65)") << QColorSpace::Primaries::DciP3D65;
|
||||||
QTest::newRow("Adobe RGB (1998)") << QColorSpace::Primaries::AdobeRgb;
|
QTest::newRow("Adobe RGB (1998)") << QColorSpace::Primaries::AdobeRgb;
|
||||||
QTest::newRow("ProPhoto RGB") << QColorSpace::Primaries::ProPhotoRgb;
|
QTest::newRow("ProPhoto RGB") << QColorSpace::Primaries::ProPhotoRgb;
|
||||||
QTest::newRow("BT.2020") << QColorSpace::Primaries::Bt2020;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QColorSpace::primaries2()
|
void tst_QColorSpace::primaries2()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user