summaryrefslogtreecommitdiff
path: root/src/lib/colour_conversion.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-01-04 23:10:39 +0000
committerCarl Hetherington <cth@carlh.net>2015-01-04 23:10:39 +0000
commitf7642b4e1384156e3ce4f689474331ea7b958cbb (patch)
tree49f5c5b9e830bddd32ef203d98ea004943210078 /src/lib/colour_conversion.cc
parentbee98cdc1ddc5f87749de3bbf2ae5e4b2ef498c3 (diff)
Fix loading of 1.x metadata.
Diffstat (limited to 'src/lib/colour_conversion.cc')
-rw-r--r--src/lib/colour_conversion.cc53
1 files changed, 34 insertions, 19 deletions
diff --git a/src/lib/colour_conversion.cc b/src/lib/colour_conversion.cc
index ef36087e7..ad09458f9 100644
--- a/src/lib/colour_conversion.cc
+++ b/src/lib/colour_conversion.cc
@@ -51,22 +51,37 @@ ColourConversion::ColourConversion (dcp::ColourConversion conversion_)
}
-ColourConversion::ColourConversion (cxml::NodePtr node)
+ColourConversion::ColourConversion (cxml::NodePtr node, int version)
{
shared_ptr<dcp::TransferFunction> in;
-
- cxml::ConstNodePtr in_node = node->node_child ("InputTransferFunction");
- string in_type = in_node->string_child ("Type");
- if (in_type == "Gamma") {
- _in.reset (new dcp::GammaTransferFunction (false, in_node->number_child<double> ("Gamma")));
- } else if (in_type == "ModifiedGamma") {
- _in.reset (new dcp::ModifiedGammaTransferFunction (
- false,
- in_node->number_child<double> ("Power"),
- in_node->number_child<double> ("Threshold"),
- in_node->number_child<double> ("A"),
- in_node->number_child<double> ("B")
- ));
+
+ if (version >= 32) {
+
+ /* Version 2.x */
+
+ cxml::ConstNodePtr in_node = node->node_child ("InputTransferFunction");
+ string in_type = in_node->string_child ("Type");
+ if (in_type == "Gamma") {
+ _in.reset (new dcp::GammaTransferFunction (false, in_node->number_child<double> ("Gamma")));
+ } else if (in_type == "ModifiedGamma") {
+ _in.reset (new dcp::ModifiedGammaTransferFunction (
+ false,
+ in_node->number_child<double> ("Power"),
+ in_node->number_child<double> ("Threshold"),
+ in_node->number_child<double> ("A"),
+ in_node->number_child<double> ("B")
+ ));
+ }
+
+ } else {
+
+ /* Version 1.x */
+
+ if (node->bool_child ("InputGammaLinearised")) {
+ _in.reset (new dcp::ModifiedGammaTransferFunction (false, node->number_child<float> ("InputGamma"), 0.04045, 0.055, 12.92));
+ } else {
+ _in.reset (new dcp::GammaTransferFunction (false, node->number_child<float> ("InputGamma")));
+ }
}
list<cxml::NodePtr> m = node->node_children ("Matrix");
@@ -75,18 +90,18 @@ ColourConversion::ColourConversion (cxml::NodePtr node)
int const tj = (*i)->number_attribute<int> ("j");
_matrix(ti, tj) = raw_convert<double> ((*i)->content ());
}
-
+
_out.reset (new dcp::GammaTransferFunction (true, node->number_child<double> ("OutputGamma")));
}
boost::optional<ColourConversion>
-ColourConversion::from_xml (cxml::NodePtr node)
+ColourConversion::from_xml (cxml::NodePtr node, int version)
{
if (!node->optional_node_child ("InputTransferFunction")) {
return boost::optional<ColourConversion> ();
}
- return ColourConversion (node);
+ return ColourConversion (node, version);
}
void
@@ -176,8 +191,8 @@ PresetColourConversion::PresetColourConversion (string n, dcp::ColourConversion
}
-PresetColourConversion::PresetColourConversion (cxml::NodePtr node)
- : conversion (node)
+PresetColourConversion::PresetColourConversion (cxml::NodePtr node, int version)
+ : conversion (node, version)
{
name = node->string_child ("Name");
}