From 69c1f365d571c3450eb51e46711ed9b4b5705d76 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Tue, 27 Jul 2021 11:42:30 -0700 Subject: [PATCH] texconv: updated colorspace names for -rotatecolor switch --- Texconv/texconv.cpp | 55 ++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/Texconv/texconv.cpp b/Texconv/texconv.cpp index a88ec3c..90c9c40 100644 --- a/Texconv/texconv.cpp +++ b/Texconv/texconv.cpp @@ -133,10 +133,10 @@ namespace ROTATE_HDR10_TO_709, ROTATE_709_TO_2020, ROTATE_2020_TO_709, - ROTATE_P3_TO_HDR10, - ROTATE_P3_TO_2020, - ROTATE_709_TO_DISPLAY_P3, - ROTATE_DISPLAY_P3_TO_709, + ROTATE_P3D65_TO_HDR10, + ROTATE_P3D65_TO_2020, + ROTATE_709_TO_P3D65, + ROTATE_P3D65_TO_709, }; static_assert(OPT_MAX <= 64, "dwOptions is a unsigned int bitfield"); @@ -400,14 +400,14 @@ namespace const SValue g_pRotateColor[] = { - { L"709to2020", ROTATE_709_TO_2020 }, - { L"2020to709", ROTATE_2020_TO_709 }, - { L"709toHDR10", ROTATE_709_TO_HDR10 }, - { L"HDR10to709", ROTATE_HDR10_TO_709 }, - { L"P3to2020", ROTATE_P3_TO_2020 }, - { L"P3toHDR10", ROTATE_P3_TO_HDR10 }, - { L"709toDisplayP3", ROTATE_709_TO_DISPLAY_P3 }, - { L"DisplayP3to709", ROTATE_DISPLAY_P3_TO_709 }, + { L"709to2020", ROTATE_709_TO_2020 }, + { L"2020to709", ROTATE_2020_TO_709 }, + { L"709toHDR10", ROTATE_709_TO_HDR10 }, + { L"HDR10to709", ROTATE_HDR10_TO_709 }, + { L"P3D65to2020", ROTATE_P3D65_TO_2020 }, + { L"P3D65toHDR10", ROTATE_P3D65_TO_HDR10 }, + { L"709toP3D65", ROTATE_709_TO_P3D65 }, + { L"P3D65to709", ROTATE_P3D65_TO_709 }, { nullptr, 0 }, }; @@ -1189,6 +1189,7 @@ namespace const XMVECTORF32 c_MaxNitsFor2084 = { { { 10000.0f, 10000.0f, 10000.0f, 1.f } } }; + // HDTV to UHDTV (Rec.709 color primaries into Rec.2020) const XMMATRIX c_from709to2020 = { 0.6274040f, 0.0690970f, 0.0163916f, 0.f, @@ -1197,6 +1198,7 @@ namespace 0.f, 0.f, 0.f, 1.f }; + // UHDTV to HDTV const XMMATRIX c_from2020to709 = { 1.6604910f, -0.1245505f, -0.0181508f, 0.f, @@ -1205,8 +1207,8 @@ namespace 0.f, 0.f, 0.f, 1.f }; - // DCI-P3 https://en.wikipedia.org/wiki/DCI-P3 - const XMMATRIX c_fromP3to2020 = + // DCI-P3-D65 https://en.wikipedia.org/wiki/DCI-P3 to UHDTV (DCI-P3-D65 color primaries into Rec.2020) + const XMMATRIX c_fromP3D65to2020 = { 0.753845f, 0.0457456f, -0.00121055f, 0.f, 0.198593f, 0.941777f, 0.0176041f, 0.f, @@ -1214,8 +1216,8 @@ namespace 0.f, 0.f, 0.f, 1.f }; - // Display P3 (P3D65) - const XMMATRIX c_from709toDisplayP3 = + // HDTV to DCI-P3-D65 (a.k.a. Display P3 or P3D65) + const XMMATRIX c_from709toP3D65 = { 0.822461969f, 0.033194199f, 0.017082631f, 0.f, 0.1775380f, 0.9668058f, 0.0723974f, 0.f, @@ -1223,7 +1225,8 @@ namespace 0.f, 0.f, 0.f, 1.f }; - const XMMATRIX c_fromDisplayP3to709 = + // DCI-P3-D65 to HDTV + const XMMATRIX c_fromP3D65to709 = { 1.224940176f, -0.042056955f, -0.019637555f, 0.f, -0.224940176f, 1.042056955f, -0.078636046f, 0.f, @@ -2490,7 +2493,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) // --- Color rotation (if requested) ------------------------------------------- if (dwRotateColor) { - if (dwRotateColor == ROTATE_HDR10_TO_709 || dwRotateColor == ROTATE_DISPLAY_P3_TO_709) + if (dwRotateColor == ROTATE_HDR10_TO_709 || dwRotateColor == ROTATE_P3D65_TO_709) { std::unique_ptr timage(new (std::nothrow) ScratchImage); if (!timage) @@ -2639,7 +2642,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) }, *timage); break; - case ROTATE_P3_TO_HDR10: + case ROTATE_P3D65_TO_HDR10: hr = TransformImage(image->GetImages(), image->GetImageCount(), image->GetMetadata(), [&](XMVECTOR* outPixels, const XMVECTOR* inPixels, size_t w, size_t y) { @@ -2651,7 +2654,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) { XMVECTOR value = inPixels[j]; - XMVECTOR nvalue = XMVector3Transform(value, c_fromP3to2020); + XMVECTOR nvalue = XMVector3Transform(value, c_fromP3D65to2020); // Convert to ST.2084 nvalue = XMVectorDivide(XMVectorMultiply(nvalue, paperWhite), c_MaxNitsFor2084); @@ -2672,7 +2675,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) }, *timage); break; - case ROTATE_P3_TO_2020: + case ROTATE_P3D65_TO_2020: hr = TransformImage(image->GetImages(), image->GetImageCount(), image->GetMetadata(), [&](XMVECTOR* outPixels, const XMVECTOR* inPixels, size_t w, size_t y) { @@ -2682,7 +2685,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) { XMVECTOR value = inPixels[j]; - XMVECTOR nvalue = XMVector3Transform(value, c_fromP3to2020); + XMVECTOR nvalue = XMVector3Transform(value, c_fromP3D65to2020); value = XMVectorSelect(value, nvalue, g_XMSelect1110); @@ -2691,7 +2694,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) }, *timage); break; - case ROTATE_709_TO_DISPLAY_P3: + case ROTATE_709_TO_P3D65: hr = TransformImage(image->GetImages(), image->GetImageCount(), image->GetMetadata(), [&](XMVECTOR* outPixels, const XMVECTOR* inPixels, size_t w, size_t y) { @@ -2701,7 +2704,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) { XMVECTOR value = inPixels[j]; - XMVECTOR nvalue = XMVector3Transform(value, c_from709toDisplayP3); + XMVECTOR nvalue = XMVector3Transform(value, c_from709toP3D65); value = XMVectorSelect(value, nvalue, g_XMSelect1110); @@ -2710,7 +2713,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) }, *timage); break; - case ROTATE_DISPLAY_P3_TO_709: + case ROTATE_P3D65_TO_709: hr = TransformImage(image->GetImages(), image->GetImageCount(), image->GetMetadata(), [&](XMVECTOR* outPixels, const XMVECTOR* inPixels, size_t w, size_t y) { @@ -2720,7 +2723,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) { XMVECTOR value = inPixels[j]; - XMVECTOR nvalue = XMVector3Transform(value, c_fromDisplayP3to709); + XMVECTOR nvalue = XMVector3Transform(value, c_fromP3D65to709); value = XMVectorSelect(value, nvalue, g_XMSelect1110);