diff options
| -rw-r--r-- | src/lib/colour_conversion.cc | 168 | ||||
| -rw-r--r-- | src/lib/colour_conversion.h | 32 |
2 files changed, 99 insertions, 101 deletions
diff --git a/src/lib/colour_conversion.cc b/src/lib/colour_conversion.cc index 447382a1e..588a388e3 100644 --- a/src/lib/colour_conversion.cc +++ b/src/lib/colour_conversion.cc @@ -54,19 +54,19 @@ using dcp::raw_convert; vector<PresetColourConversion> PresetColourConversion::_presets; -ColourConversion::ColourConversion () - : dcp::ColourConversion (dcp::ColourConversion::srgb_to_xyz ()) +ColourConversion::ColourConversion() + : dcp::ColourConversion(dcp::ColourConversion::srgb_to_xyz()) { } -ColourConversion::ColourConversion (dcp::ColourConversion conversion_) - : dcp::ColourConversion (conversion_) +ColourConversion::ColourConversion(dcp::ColourConversion conversion_) + : dcp::ColourConversion(conversion_) { } -ColourConversion::ColourConversion (cxml::NodePtr node, int version) +ColourConversion::ColourConversion(cxml::NodePtr node, int version) { shared_ptr<dcp::TransferFunction> in; @@ -74,10 +74,10 @@ ColourConversion::ColourConversion (cxml::NodePtr node, int version) /* Version 2.x */ - auto in_node = node->node_child ("InputTransferFunction"); - auto in_type = in_node->string_child ("Type"); + auto in_node = node->node_child("InputTransferFunction"); + auto in_type = in_node->string_child("Type"); if (in_type == "Gamma") { - _in = make_shared<dcp::GammaTransferFunction>(in_node->number_child<double> ("Gamma")); + _in = make_shared<dcp::GammaTransferFunction>(in_node->number_child<double>("Gamma")); } else if (in_type == "ModifiedGamma") { _in = make_shared<dcp::ModifiedGammaTransferFunction>( in_node->number_child<double>("Power"), @@ -93,19 +93,19 @@ ColourConversion::ColourConversion (cxml::NodePtr node, int version) /* Version 1.x */ - if (node->bool_child ("InputGammaLinearised")) { - _in.reset (new dcp::ModifiedGammaTransferFunction (node->number_child<double> ("InputGamma"), 0.04045, 0.055, 12.92)); + if (node->bool_child("InputGammaLinearised")) { + _in.reset(new dcp::ModifiedGammaTransferFunction(node->number_child<double>("InputGamma"), 0.04045, 0.055, 12.92)); } else { - _in.reset (new dcp::GammaTransferFunction (node->number_child<double> ("InputGamma"))); + _in.reset(new dcp::GammaTransferFunction(node->number_child<double>("InputGamma"))); } } _yuv_to_rgb = static_cast<dcp::YUVToRGB>(node->optional_number_child<int>("YUVToRGB").get_value_or(static_cast<int>(dcp::YUVToRGB::REC601))); - auto m = node->node_children ("Matrix"); - if (!m.empty ()) { + auto m = node->node_children("Matrix"); + if (!m.empty()) { /* Read in old <Matrix> nodes and convert them to chromaticities */ - boost::numeric::ublas::matrix<double> C (3, 3); + boost::numeric::ublas::matrix<double> C(3, 3); for (auto i: m) { int const ti = i->number_attribute<int>("i"); int const tj = i->number_attribute<int>("j"); @@ -113,28 +113,27 @@ ColourConversion::ColourConversion (cxml::NodePtr node, int version) } double const rd = C(0, 0) + C(1, 0) + C(2, 0); - _red = dcp::Chromaticity (C(0, 0) / rd, C(1, 0) / rd); + _red = dcp::Chromaticity(C(0, 0) / rd, C(1, 0) / rd); double const gd = C(0, 1) + C(1, 1) + C(2, 1); - _green = dcp::Chromaticity (C(0, 1) / gd, C(1, 1) / gd); + _green = dcp::Chromaticity(C(0, 1) / gd, C(1, 1) / gd); double const bd = C(0, 2) + C(1, 2) + C(2, 2); - _blue = dcp::Chromaticity (C(0, 2) / bd, C(1, 2) / bd); + _blue = dcp::Chromaticity(C(0, 2) / bd, C(1, 2) / bd); double const wd = C(0, 0) + C(0, 1) + C(0, 2) + C(1, 0) + C(1, 1) + C(1, 2) + C(2, 0) + C(2, 1) + C(2, 2); - _white = dcp::Chromaticity ((C(0, 0) + C(0, 1) + C(0, 2)) / wd, (C(1, 0) + C(1, 1) + C(1, 2)) / wd); + _white = dcp::Chromaticity((C(0, 0) + C(0, 1) + C(0, 2)) / wd,(C(1, 0) + C(1, 1) + C(1, 2)) / wd); } else { /* New-style chromaticities */ - _red = dcp::Chromaticity (node->number_child<double> ("RedX"), node->number_child<double> ("RedY")); - _green = dcp::Chromaticity (node->number_child<double> ("GreenX"), node->number_child<double> ("GreenY")); - _blue = dcp::Chromaticity (node->number_child<double> ("BlueX"), node->number_child<double> ("BlueY")); - _white = dcp::Chromaticity (node->number_child<double> ("WhiteX"), node->number_child<double> ("WhiteY")); - if (node->optional_node_child ("AdjustedWhiteX")) { - _adjusted_white = dcp::Chromaticity ( - node->number_child<double> ("AdjustedWhiteX"), node->number_child<double> ("AdjustedWhiteY") + _red = dcp::Chromaticity(node->number_child<double>("RedX"), node->number_child<double>("RedY")); + _green = dcp::Chromaticity(node->number_child<double>("GreenX"), node->number_child<double>("GreenY")); + _blue = dcp::Chromaticity(node->number_child<double>("BlueX"), node->number_child<double>("BlueY")); + _white = dcp::Chromaticity(node->number_child<double>("WhiteX"), node->number_child<double>("WhiteY")); + if (node->optional_node_child("AdjustedWhiteX")) { + _adjusted_white = dcp::Chromaticity( + node->number_child<double>("AdjustedWhiteX"), node->number_child<double>("AdjustedWhiteY") ); } } - auto gamma = node->optional_number_child<double>("OutputGamma"); - if (gamma) { + if (auto gamma = node->optional_number_child<double>("OutputGamma")) { _out = make_shared<dcp::GammaTransferFunction>(node->number_child<double>("OutputGamma")); } else { _out = make_shared<dcp::IdentityTransferFunction>(); @@ -142,25 +141,25 @@ ColourConversion::ColourConversion (cxml::NodePtr node, int version) } boost::optional<ColourConversion> -ColourConversion::from_xml (cxml::NodePtr node, int version) +ColourConversion::from_xml(cxml::NodePtr node, int version) { - if (!node->optional_node_child ("InputTransferFunction")) { - return boost::optional<ColourConversion> (); + if (!node->optional_node_child("InputTransferFunction")) { + return boost::optional<ColourConversion>(); } - return ColourConversion (node, version); + return ColourConversion(node, version); } void ColourConversion::as_xml(xmlpp::Element* element) const { auto in_node = cxml::add_child(element, "InputTransferFunction"); - if (dynamic_pointer_cast<const dcp::GammaTransferFunction> (_in)) { - auto tf = dynamic_pointer_cast<const dcp::GammaTransferFunction> (_in); + if (dynamic_pointer_cast<const dcp::GammaTransferFunction>(_in)) { + auto tf = dynamic_pointer_cast<const dcp::GammaTransferFunction>(_in); cxml::add_text_child(in_node, "Type", "Gamma"); cxml::add_text_child(in_node, "Gamma", fmt::to_string(tf->gamma())); - } else if (dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction> (_in)) { - auto tf = dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction> (_in); + } else if (dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction>(_in)) { + auto tf = dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction>(_in); cxml::add_text_child(in_node, "Type", "ModifiedGamma"); cxml::add_text_child(in_node, "Power", fmt::to_string(tf->power())); cxml::add_text_child(in_node, "Threshold", fmt::to_string(tf->threshold())); @@ -190,15 +189,15 @@ ColourConversion::as_xml(xmlpp::Element* element) const } optional<size_t> -ColourConversion::preset () const +ColourConversion::preset() const { - auto presets = PresetColourConversion::all (); + auto presets = PresetColourConversion::all(); size_t i = 0; while (i < presets.size() && presets[i].conversion != *this) { ++i; } - if (i >= presets.size ()) { + if (i >= presets.size()) { return {}; } @@ -206,98 +205,97 @@ ColourConversion::preset () const } string -ColourConversion::identifier () const +ColourConversion::identifier() const { Digester digester; - if (dynamic_pointer_cast<const dcp::GammaTransferFunction> (_in)) { - shared_ptr<const dcp::GammaTransferFunction> tf = dynamic_pointer_cast<const dcp::GammaTransferFunction> (_in); - digester.add (tf->gamma ()); - } else if (dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction> (_in)) { - shared_ptr<const dcp::ModifiedGammaTransferFunction> tf = dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction> (_in); - digester.add (tf->power ()); - digester.add (tf->threshold ()); - digester.add (tf->A ()); - digester.add (tf->B ()); + if (dynamic_pointer_cast<const dcp::GammaTransferFunction>(_in)) { + auto tf = dynamic_pointer_cast<const dcp::GammaTransferFunction>(_in); + digester.add(tf->gamma()); + } else if (dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction>(_in)) { + shared_ptr<const dcp::ModifiedGammaTransferFunction> tf = dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction>(_in); + digester.add(tf->power()); + digester.add(tf->threshold()); + digester.add(tf->A()); + digester.add(tf->B()); } - digester.add (_red.x); - digester.add (_red.y); - digester.add (_green.x); - digester.add (_green.y); - digester.add (_blue.x); - digester.add (_blue.y); - digester.add (_white.x); - digester.add (_white.y); + digester.add(_red.x); + digester.add(_red.y); + digester.add(_green.x); + digester.add(_green.y); + digester.add(_blue.x); + digester.add(_blue.y); + digester.add(_white.x); + digester.add(_white.y); if (_adjusted_white) { - digester.add (_adjusted_white.get().x); - digester.add (_adjusted_white.get().y); + digester.add(_adjusted_white.get().x); + digester.add(_adjusted_white.get().y); } digester.add(static_cast<int>(_yuv_to_rgb)); - auto gf = dynamic_pointer_cast<const dcp::GammaTransferFunction> (_out); - if (gf) { - digester.add (gf->gamma ()); + if (auto gf = dynamic_pointer_cast<const dcp::GammaTransferFunction>(_out)) { + digester.add(gf->gamma()); } - return digester.get (); + return digester.get(); } -PresetColourConversion::PresetColourConversion () - : name (_("Untitled")) +PresetColourConversion::PresetColourConversion() + : name(_("Untitled")) { } -PresetColourConversion::PresetColourConversion (string n, string i, dcp::ColourConversion conversion_) - : conversion (conversion_) - , name (n) - , id (i) +PresetColourConversion::PresetColourConversion(string n, string i, dcp::ColourConversion conversion_) + : conversion(conversion_) + , name(n) + , id(i) { } -PresetColourConversion::PresetColourConversion (cxml::NodePtr node, int version) - : conversion (node, version) - , name (node->string_child ("Name")) +PresetColourConversion::PresetColourConversion(cxml::NodePtr node, int version) + : conversion(node, version) + , name(node->string_child("Name")) { } bool -operator== (ColourConversion const & a, ColourConversion const & b) +operator==(ColourConversion const & a, ColourConversion const & b) { - return a.about_equal (b, 1e-6); + return a.about_equal(b, 1e-6); } bool -operator!= (ColourConversion const & a, ColourConversion const & b) +operator!=(ColourConversion const & a, ColourConversion const & b) { return !(a == b); } bool -operator== (PresetColourConversion const & a, PresetColourConversion const & b) +operator==(PresetColourConversion const & a, PresetColourConversion const & b) { return a.name == b.name && a.conversion == b.conversion; } void -PresetColourConversion::setup_colour_conversion_presets () +PresetColourConversion::setup_colour_conversion_presets() { - _presets.push_back (PresetColourConversion (_("sRGB"), "srgb", dcp::ColourConversion::srgb_to_xyz ())); - _presets.push_back (PresetColourConversion (_("Rec. 601"), "rec601", dcp::ColourConversion::rec601_to_xyz ())); - _presets.push_back (PresetColourConversion (_("Rec. 709"), "rec709", dcp::ColourConversion::rec709_to_xyz ())); - _presets.push_back (PresetColourConversion (_("P3"), "p3", dcp::ColourConversion::p3_to_xyz ())); - _presets.push_back (PresetColourConversion (_("Rec. 1886"), "rec1886", dcp::ColourConversion::rec1886_to_xyz ())); - _presets.push_back (PresetColourConversion (_("Rec. 2020"), "rec2020", dcp::ColourConversion::rec2020_to_xyz ())); - _presets.push_back (PresetColourConversion (_("S-Gamut3/S-Log3"), "sgamut3", dcp::ColourConversion::s_gamut3_to_xyz ())); + _presets.push_back(PresetColourConversion(_("sRGB"), "srgb", dcp::ColourConversion::srgb_to_xyz())); + _presets.push_back(PresetColourConversion(_("Rec. 601"), "rec601", dcp::ColourConversion::rec601_to_xyz())); + _presets.push_back(PresetColourConversion(_("Rec. 709"), "rec709", dcp::ColourConversion::rec709_to_xyz())); + _presets.push_back(PresetColourConversion(_("P3"), "p3", dcp::ColourConversion::p3_to_xyz())); + _presets.push_back(PresetColourConversion(_("Rec. 1886"), "rec1886", dcp::ColourConversion::rec1886_to_xyz())); + _presets.push_back(PresetColourConversion(_("Rec. 2020"), "rec2020", dcp::ColourConversion::rec2020_to_xyz())); + _presets.push_back(PresetColourConversion(_("S-Gamut3/S-Log3"), "sgamut3", dcp::ColourConversion::s_gamut3_to_xyz())); } PresetColourConversion -PresetColourConversion::from_id (string s) +PresetColourConversion::from_id(string s) { for (auto const& i: _presets) { if (i.id == s) { @@ -305,5 +303,5 @@ PresetColourConversion::from_id (string s) } } - DCPOMATIC_ASSERT (false); + DCPOMATIC_ASSERT(false); } diff --git a/src/lib/colour_conversion.h b/src/lib/colour_conversion.h index 0c07ddbac..0e2fcc548 100644 --- a/src/lib/colour_conversion.h +++ b/src/lib/colour_conversion.h @@ -36,45 +36,45 @@ namespace xmlpp { class ColourConversion : public dcp::ColourConversion { public: - ColourConversion (); - explicit ColourConversion (dcp::ColourConversion); - ColourConversion (cxml::NodePtr, int version); - virtual ~ColourConversion () {} + ColourConversion(); + explicit ColourConversion(dcp::ColourConversion); + ColourConversion(cxml::NodePtr, int version); + virtual ~ColourConversion() {} virtual void as_xml(xmlpp::Element*) const; - std::string identifier () const; + std::string identifier() const; - boost::optional<size_t> preset () const; + boost::optional<size_t> preset() const; - static boost::optional<ColourConversion> from_xml (cxml::NodePtr, int version); + static boost::optional<ColourConversion> from_xml(cxml::NodePtr, int version); }; class PresetColourConversion { public: - PresetColourConversion (); - PresetColourConversion (std::string n, std::string i, dcp::ColourConversion); - PresetColourConversion (cxml::NodePtr node, int version); + PresetColourConversion(); + PresetColourConversion(std::string n, std::string i, dcp::ColourConversion); + PresetColourConversion(cxml::NodePtr node, int version); ColourConversion conversion; std::string name; /** an internal short (non-internationalised) name for this preset */ std::string id; - static std::vector<PresetColourConversion> all () { + static std::vector<PresetColourConversion> all() { return _presets; } - static PresetColourConversion from_id (std::string id); + static PresetColourConversion from_id(std::string id); - static void setup_colour_conversion_presets (); + static void setup_colour_conversion_presets(); private: static std::vector<PresetColourConversion> _presets; }; -bool operator== (ColourConversion const &, ColourConversion const &); -bool operator!= (ColourConversion const &, ColourConversion const &); -bool operator== (PresetColourConversion const &, PresetColourConversion const &); +bool operator==(ColourConversion const &, ColourConversion const &); +bool operator!=(ColourConversion const &, ColourConversion const &); +bool operator==(PresetColourConversion const &, PresetColourConversion const &); #endif |
