summaryrefslogtreecommitdiff
path: root/src/lib/colour_conversion.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-10-14 21:14:04 +0200
committerCarl Hetherington <cth@carlh.net>2025-10-14 21:14:22 +0200
commit24ee9f8cf3736c5cd946eb6df8bd3189f8a62ce0 (patch)
treed33e33ded5b766cff09d748786a8427949de1f1d /src/lib/colour_conversion.cc
parent1f336350e4c6f60c4597b43976d1a9e4e05ea61b (diff)
Fix MPEG2 DCP gamma (#3026).3026-mpeg2-colour
Diffstat (limited to 'src/lib/colour_conversion.cc')
-rw-r--r--src/lib/colour_conversion.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/lib/colour_conversion.cc b/src/lib/colour_conversion.cc
index b5d6cd4c5..5dc633f60 100644
--- a/src/lib/colour_conversion.cc
+++ b/src/lib/colour_conversion.cc
@@ -138,6 +138,12 @@ ColourConversion::ColourConversion(cxml::NodePtr node, int version)
} else {
_out_j2k = make_shared<dcp::IdentityTransferFunction>();
}
+
+ if (auto mpeg2_gamma = node->optional_number_child<double>("OutputMPEG2Gamma")) {
+ _out_mpeg2 = make_shared<dcp::GammaTransferFunction>(*mpeg2_gamma);
+ } else {
+ _out_mpeg2 = make_shared<dcp::IdentityTransferFunction>();
+ }
}
boost::optional<ColourConversion>
@@ -186,6 +192,10 @@ ColourConversion::as_xml(xmlpp::Element* element) const
if (auto gf = dynamic_pointer_cast<const dcp::GammaTransferFunction>(_out_j2k)) {
cxml::add_text_child(element, "OutputGamma", fmt::to_string(gf->gamma()));
}
+
+ if (auto gf = dynamic_pointer_cast<const dcp::GammaTransferFunction>(_out_mpeg2)) {
+ cxml::add_text_child(element, "OutputMPEG2Gamma", fmt::to_string(gf->gamma()));
+ }
}
optional<size_t>
@@ -240,6 +250,10 @@ ColourConversion::identifier() const
digester.add(gf->gamma());
}
+ if (auto gf = dynamic_pointer_cast<const dcp::GammaTransferFunction>(_out_mpeg2)) {
+ digester.add(gf->gamma());
+ }
+
return digester.get();
}