From 6d95d9689831a74fade32038a808f206c03d8aa2 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 6 Feb 2024 10:58:39 +0100 Subject: [PATCH] FIXME: Remove all use of add_child() from xmlpp. Needs bump of libcxml. --- src/lib/analytics.cc | 4 +- src/lib/atmos_content.cc | 6 +- src/lib/atmos_content.h | 2 +- src/lib/atmos_mxf_content.cc | 8 +- src/lib/atmos_mxf_content.h | 2 +- src/lib/audio_analysis.cc | 24 +-- src/lib/audio_content.cc | 12 +- src/lib/audio_content.h | 2 +- src/lib/audio_mapping.cc | 8 +- src/lib/audio_mapping.h | 2 +- src/lib/audio_point.cc | 4 +- src/lib/cinema.cc | 12 +- src/lib/colour_conversion.cc | 49 +++--- src/lib/colour_conversion.h | 2 +- src/lib/config.cc | 262 ++++++++++++++-------------- src/lib/content.cc | 14 +- src/lib/content.h | 2 +- src/lib/crop.cc | 10 +- src/lib/crop.h | 2 +- src/lib/cross_common.cc | 10 +- src/lib/dcp_content.cc | 60 ++++--- src/lib/dcp_content.h | 2 +- src/lib/dcp_digest_file.cc | 28 +-- src/lib/dcp_subtitle_content.cc | 10 +- src/lib/dcp_subtitle_content.h | 2 +- src/lib/dcp_text_track.cc | 4 +- src/lib/dcp_video.cc | 10 +- src/lib/dkdm_recipient.cc | 6 +- src/lib/dkdm_wrapper.cc | 8 +- src/lib/encode_server.cc | 4 +- src/lib/export_config.cc | 12 +- src/lib/export_config.h | 2 +- src/lib/ffmpeg_audio_stream.cc | 14 +- src/lib/ffmpeg_audio_stream.h | 2 +- src/lib/ffmpeg_content.cc | 32 ++-- src/lib/ffmpeg_content.h | 2 +- src/lib/ffmpeg_image_proxy.cc | 4 +- src/lib/ffmpeg_image_proxy.h | 2 +- src/lib/ffmpeg_stream.cc | 6 +- src/lib/ffmpeg_stream.h | 2 +- src/lib/ffmpeg_subtitle_stream.cc | 10 +- src/lib/ffmpeg_subtitle_stream.h | 2 +- src/lib/film.cc | 98 +++++------ src/lib/font.cc | 6 +- src/lib/font.h | 2 +- src/lib/image_content.cc | 8 +- src/lib/image_content.h | 2 +- src/lib/image_proxy.h | 4 +- src/lib/j2k_image_proxy.cc | 12 +- src/lib/j2k_image_proxy.h | 2 +- src/lib/kdm_recipient.cc | 8 +- src/lib/pixel_quanta.cc | 4 +- src/lib/player_video.cc | 34 ++-- src/lib/player_video.h | 2 +- src/lib/playlist.cc | 4 +- src/lib/playlist.h | 2 +- src/lib/raw_image_proxy.cc | 10 +- src/lib/raw_image_proxy.h | 2 +- src/lib/rgba.cc | 10 +- src/lib/rgba.h | 2 +- src/lib/screen.cc | 2 +- src/lib/spl.cc | 6 +- src/lib/spl_entry.cc | 2 +- src/lib/string_text_file_content.cc | 10 +- src/lib/string_text_file_content.h | 2 +- src/lib/subtitle_analysis.cc | 16 +- src/lib/text_content.cc | 52 +++--- src/lib/text_content.h | 2 +- src/lib/video_content.cc | 36 ++-- src/lib/video_content.h | 2 +- src/lib/video_mxf_content.cc | 8 +- src/lib/video_mxf_content.h | 2 +- test/stream_test.cc | 36 ++-- 73 files changed, 525 insertions(+), 524 deletions(-) diff --git a/src/lib/analytics.cc b/src/lib/analytics.cc index 836051fe5..3fce79749 100644 --- a/src/lib/analytics.cc +++ b/src/lib/analytics.cc @@ -93,8 +93,8 @@ Analytics::write () const xmlpp::Document doc; auto root = doc.create_root_node ("Analytics"); - root->add_child("Version")->add_child_text(raw_convert(_current_version)); - root->add_child("SuccessfulDCPEncodes")->add_child_text(raw_convert(_successful_dcp_encodes)); + cxml::add_text_child(root, "Version", raw_convert(_current_version)); + cxml::add_text_child(root, "SuccessfulDCPEncodes", raw_convert(_successful_dcp_encodes)); try { doc.write_to_file_formatted(write_path("analytics.xml").string()); diff --git a/src/lib/atmos_content.cc b/src/lib/atmos_content.cc index ada304dad..22bd431a2 100644 --- a/src/lib/atmos_content.cc +++ b/src/lib/atmos_content.cc @@ -63,10 +63,10 @@ AtmosContent::from_xml (Content* parent, cxml::ConstNodePtr node) void -AtmosContent::as_xml (xmlpp::Node* node) const +AtmosContent::as_xml(xmlpp::Element* element) const { - node->add_child("AtmosLength")->add_child_text(dcp::raw_convert(_length)); - node->add_child("AtmosEditRate")->add_child_text(_edit_rate.as_string()); + cxml::add_text_child(element, "AtmosLength", dcp::raw_convert(_length)); + cxml::add_text_child(element, "AtmosEditRate", _edit_rate.as_string()); } diff --git a/src/lib/atmos_content.h b/src/lib/atmos_content.h index afa3c75a2..ffa181497 100644 --- a/src/lib/atmos_content.h +++ b/src/lib/atmos_content.h @@ -42,7 +42,7 @@ public: static std::shared_ptr from_xml (Content* parent, cxml::ConstNodePtr node); - void as_xml (xmlpp::Node* node) const; + void as_xml(xmlpp::Element* element) const; void set_length (Frame len); diff --git a/src/lib/atmos_mxf_content.cc b/src/lib/atmos_mxf_content.cc index 82c20e88f..1283961ee 100644 --- a/src/lib/atmos_mxf_content.cc +++ b/src/lib/atmos_mxf_content.cc @@ -98,11 +98,11 @@ AtmosMXFContent::summary () const void -AtmosMXFContent::as_xml (xmlpp::Node* node, bool with_paths) const +AtmosMXFContent::as_xml(xmlpp::Element* element, bool with_paths) const { - node->add_child("Type")->add_child_text("AtmosMXF"); - Content::as_xml (node, with_paths); - atmos->as_xml (node); + cxml::add_text_child(element, "Type", "AtmosMXF"); + Content::as_xml(element, with_paths); + atmos->as_xml(element); } diff --git a/src/lib/atmos_mxf_content.h b/src/lib/atmos_mxf_content.h index 57f041774..e6225a355 100644 --- a/src/lib/atmos_mxf_content.h +++ b/src/lib/atmos_mxf_content.h @@ -39,7 +39,7 @@ public: void examine (std::shared_ptr film, std::shared_ptr job) override; std::string summary () const override; - void as_xml (xmlpp::Node* node, bool with_path) const override; + void as_xml(xmlpp::Element* element, bool with_path) const override; dcpomatic::DCPTime full_length (std::shared_ptr film) const override; dcpomatic::DCPTime approximate_length () const override; diff --git a/src/lib/audio_analysis.cc b/src/lib/audio_analysis.cc index b8c2e072d..b4331a949 100644 --- a/src/lib/audio_analysis.cc +++ b/src/lib/audio_analysis.cc @@ -141,44 +141,44 @@ void AudioAnalysis::write (boost::filesystem::path filename) { auto doc = make_shared(); - xmlpp::Element* root = doc->create_root_node ("AudioAnalysis"); + auto root = doc->create_root_node("AudioAnalysis"); - root->add_child("Version")->add_child_text(raw_convert(_current_state_version)); + cxml::add_text_child(root, "Version", raw_convert(_current_state_version)); for (auto& i: _data) { - auto channel = root->add_child ("Channel"); + auto channel = cxml::add_child(root, "Channel"); for (auto& j: i) { - j.as_xml (channel->add_child ("Point")); + j.as_xml(cxml::add_child(channel, "Point")); } } for (size_t i = 0; i < _sample_peak.size(); ++i) { - auto n = root->add_child("SamplePeak"); + auto n = cxml::add_child(root, "SamplePeak"); n->add_child_text (raw_convert (_sample_peak[i].peak)); n->set_attribute ("Time", raw_convert (_sample_peak[i].time.get())); } for (auto i: _true_peak) { - root->add_child("TruePeak")->add_child_text (raw_convert (i)); + cxml::add_text_child(root, "TruePeak", raw_convert(i)); } if (_integrated_loudness) { - root->add_child("IntegratedLoudness")->add_child_text (raw_convert (_integrated_loudness.get ())); + cxml::add_text_child(root, "IntegratedLoudness", raw_convert(_integrated_loudness.get())); } if (_loudness_range) { - root->add_child("LoudnessRange")->add_child_text (raw_convert (_loudness_range.get ())); + cxml::add_text_child(root, "LoudnessRange", raw_convert(_loudness_range.get())); } if (_analysis_gain) { - root->add_child("AnalysisGain")->add_child_text (raw_convert (_analysis_gain.get ())); + cxml::add_text_child(root, "AnalysisGain", raw_convert(_analysis_gain.get())); } - root->add_child("SamplesPerPoint")->add_child_text (raw_convert (_samples_per_point)); - root->add_child("SampleRate")->add_child_text (raw_convert (_sample_rate)); + cxml::add_text_child(root, "SamplesPerPoint", raw_convert(_samples_per_point)); + cxml::add_text_child(root, "SampleRate", raw_convert(_sample_rate)); if (_leqm) { - root->add_child("Leqm")->add_child_text(raw_convert(*_leqm)); + cxml::add_text_child(root, "Leqm", raw_convert(*_leqm)); } doc->write_to_file_formatted (filename.string ()); diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index 16f2bd5f1..2569e1cf0 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -124,14 +124,14 @@ AudioContent::AudioContent (Content* parent, vector> c) void -AudioContent::as_xml (xmlpp::Node* node) const +AudioContent::as_xml(xmlpp::Element* element) const { boost::mutex::scoped_lock lm (_mutex); - node->add_child("AudioGain")->add_child_text(raw_convert(_gain)); - node->add_child("AudioDelay")->add_child_text(raw_convert(_delay)); - node->add_child("AudioFadeIn")->add_child_text(raw_convert(_fade_in.get())); - node->add_child("AudioFadeOut")->add_child_text(raw_convert(_fade_out.get())); - node->add_child("AudioUseSameFadesAsVideo")->add_child_text(_use_same_fades_as_video ? "1" : "0"); + cxml::add_text_child(element, "AudioGain", raw_convert(_gain)); + cxml::add_text_child(element, "AudioDelay", raw_convert(_delay)); + cxml::add_text_child(element, "AudioFadeIn", raw_convert(_fade_in.get())); + cxml::add_text_child(element, "AudioFadeOut", raw_convert(_fade_out.get())); + cxml::add_text_child(element, "AudioUseSameFadesAsVideo", _use_same_fades_as_video ? "1" : "0"); } diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h index 084871c8b..2a140b3e4 100644 --- a/src/lib/audio_content.h +++ b/src/lib/audio_content.h @@ -56,7 +56,7 @@ public: AudioContent (Content* parent, std::vector>); AudioContent (Content* parent, cxml::ConstNodePtr); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; std::string technical_summary () const; void take_settings_from (std::shared_ptr c); diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc index b8aa6249f..443cd8029 100644 --- a/src/lib/audio_mapping.cc +++ b/src/lib/audio_mapping.cc @@ -219,17 +219,17 @@ AudioMapping::get (int input_channel, int output_channel) const void -AudioMapping::as_xml (xmlpp::Node* node) const +AudioMapping::as_xml(xmlpp::Element* element) const { auto const input = input_channels(); auto const output = output_channels(); - node->add_child("InputChannels")->add_child_text(raw_convert(input)); - node->add_child("OutputChannels")->add_child_text(raw_convert(output)); + cxml::add_text_child(element, "InputChannels", raw_convert(input)); + cxml::add_text_child(element, "OutputChannels", raw_convert(output)); for (int c = 0; c < input; ++c) { for (int d = 0; d < output; ++d) { - auto t = node->add_child ("Gain"); + auto t = cxml::add_child(element, "Gain"); t->set_attribute ("Input", raw_convert (c)); t->set_attribute ("Output", raw_convert (d)); t->add_child_text (raw_convert (get (c, d))); diff --git a/src/lib/audio_mapping.h b/src/lib/audio_mapping.h index fe9a79789..68487d908 100644 --- a/src/lib/audio_mapping.h +++ b/src/lib/audio_mapping.h @@ -52,7 +52,7 @@ public: /* Default copy constructor is fine */ - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; void make_zero (); void make_default (AudioProcessor const * processor, boost::optional filename = boost::optional()); diff --git a/src/lib/audio_point.cc b/src/lib/audio_point.cc index 1f32d25fc..036904520 100644 --- a/src/lib/audio_point.cc +++ b/src/lib/audio_point.cc @@ -72,6 +72,6 @@ AudioPoint::operator= (AudioPoint const & other) void AudioPoint::as_xml (xmlpp::Element* parent) const { - parent->add_child("Peak")->add_child_text(raw_convert(_data[PEAK])); - parent->add_child("RMS")->add_child_text(raw_convert(_data[RMS])); + cxml::add_text_child(parent, "Peak", raw_convert(_data[PEAK])); + cxml::add_text_child(parent, "RMS", raw_convert(_data[RMS])); } diff --git a/src/lib/cinema.cc b/src/lib/cinema.cc index 3b4b9d7b6..5614fea57 100644 --- a/src/lib/cinema.cc +++ b/src/lib/cinema.cc @@ -65,19 +65,19 @@ Cinema::read_screens (cxml::ConstNodePtr node) void Cinema::as_xml (xmlpp::Element* parent) const { - parent->add_child("Name")->add_child_text (name); + cxml::add_text_child(parent, "Name", name); for (auto i: emails) { - parent->add_child("Email")->add_child_text (i); + cxml::add_text_child(parent, "Email", i); } - parent->add_child("Notes")->add_child_text (notes); + cxml::add_text_child(parent, "Notes", notes); - parent->add_child("UTCOffsetHour")->add_child_text (raw_convert (_utc_offset_hour)); - parent->add_child("UTCOffsetMinute")->add_child_text (raw_convert (_utc_offset_minute)); + cxml::add_text_child(parent, "UTCOffsetHour", raw_convert (_utc_offset_hour)); + cxml::add_text_child(parent, "UTCOffsetMinute", raw_convert (_utc_offset_minute)); for (auto i: _screens) { - i->as_xml (parent->add_child ("Screen")); + i->as_xml(cxml::add_child(parent, "Screen")); } } diff --git a/src/lib/colour_conversion.cc b/src/lib/colour_conversion.cc index bd1b47cb1..f1e625812 100644 --- a/src/lib/colour_conversion.cc +++ b/src/lib/colour_conversion.cc @@ -151,41 +151,40 @@ ColourConversion::from_xml (cxml::NodePtr node, int version) } void -ColourConversion::as_xml (xmlpp::Node* node) const +ColourConversion::as_xml(xmlpp::Element* element) const { - auto in_node = node->add_child ("InputTransferFunction"); + auto in_node = cxml::add_child(element, "InputTransferFunction"); if (dynamic_pointer_cast (_in)) { auto tf = dynamic_pointer_cast (_in); - in_node->add_child("Type")->add_child_text ("Gamma"); - in_node->add_child("Gamma")->add_child_text (raw_convert (tf->gamma ())); + cxml::add_text_child(in_node, "Type", "Gamma"); + cxml::add_text_child(in_node, "Gamma", raw_convert(tf->gamma())); } else if (dynamic_pointer_cast (_in)) { auto tf = dynamic_pointer_cast (_in); - in_node->add_child("Type")->add_child_text ("ModifiedGamma"); - in_node->add_child("Power")->add_child_text (raw_convert (tf->power ())); - in_node->add_child("Threshold")->add_child_text (raw_convert (tf->threshold ())); - in_node->add_child("A")->add_child_text (raw_convert (tf->A ())); - in_node->add_child("B")->add_child_text (raw_convert (tf->B ())); - } else if (dynamic_pointer_cast (_in)) { - in_node->add_child("Type")->add_child_text ("SGamut3"); + cxml::add_text_child(in_node, "Type", "ModifiedGamma"); + cxml::add_text_child(in_node, "Power", raw_convert(tf->power ())); + cxml::add_text_child(in_node, "Threshold", raw_convert(tf->threshold ())); + cxml::add_text_child(in_node, "A", raw_convert(tf->A())); + cxml::add_text_child(in_node, "B", raw_convert(tf->B())); + } else if (dynamic_pointer_cast(_in)) { + cxml::add_text_child(in_node, "Type", "SGamut3"); } - node->add_child("YUVToRGB")->add_child_text (raw_convert (static_cast (_yuv_to_rgb))); - node->add_child("RedX")->add_child_text (raw_convert (_red.x)); - node->add_child("RedY")->add_child_text (raw_convert (_red.y)); - node->add_child("GreenX")->add_child_text (raw_convert (_green.x)); - node->add_child("GreenY")->add_child_text (raw_convert (_green.y)); - node->add_child("BlueX")->add_child_text (raw_convert (_blue.x)); - node->add_child("BlueY")->add_child_text (raw_convert (_blue.y)); - node->add_child("WhiteX")->add_child_text (raw_convert (_white.x)); - node->add_child("WhiteY")->add_child_text (raw_convert (_white.y)); + cxml::add_text_child(element, "YUVToRGB", raw_convert(static_cast(_yuv_to_rgb))); + cxml::add_text_child(element, "RedX", raw_convert(_red.x)); + cxml::add_text_child(element, "RedY", raw_convert(_red.y)); + cxml::add_text_child(element, "GreenX", raw_convert(_green.x)); + cxml::add_text_child(element, "GreenY", raw_convert(_green.y)); + cxml::add_text_child(element, "BlueX", raw_convert(_blue.x)); + cxml::add_text_child(element, "BlueY", raw_convert(_blue.y)); + cxml::add_text_child(element, "WhiteX", raw_convert(_white.x)); + cxml::add_text_child(element, "WhiteY", raw_convert(_white.y)); if (_adjusted_white) { - node->add_child("AdjustedWhiteX")->add_child_text (raw_convert (_adjusted_white.get().x)); - node->add_child("AdjustedWhiteY")->add_child_text (raw_convert (_adjusted_white.get().y)); + cxml::add_text_child(element, "AdjustedWhiteX", raw_convert(_adjusted_white.get().x)); + cxml::add_text_child(element, "AdjustedWhiteY", raw_convert(_adjusted_white.get().y)); } - if (dynamic_pointer_cast (_out)) { - shared_ptr gf = dynamic_pointer_cast (_out); - node->add_child("OutputGamma")->add_child_text (raw_convert (gf->gamma ())); + if (auto gf = dynamic_pointer_cast(_out)) { + cxml::add_text_child(element, "OutputGamma", raw_convert(gf->gamma())); } } diff --git a/src/lib/colour_conversion.h b/src/lib/colour_conversion.h index 73b6ad23c..0c07ddbac 100644 --- a/src/lib/colour_conversion.h +++ b/src/lib/colour_conversion.h @@ -41,7 +41,7 @@ public: ColourConversion (cxml::NodePtr, int version); virtual ~ColourConversion () {} - virtual void as_xml (xmlpp::Node *) const; + virtual void as_xml(xmlpp::Element*) const; std::string identifier () const; boost::optional preset () const; diff --git a/src/lib/config.cc b/src/lib/config.cc index 384db5cde..84e56e971 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -721,218 +721,218 @@ Config::write_config () const auto root = doc.create_root_node ("Config"); /* [XML] Version The version number of the configuration file format. */ - root->add_child("Version")->add_child_text (raw_convert(_current_version)); + cxml::add_text_child(root, "Version", raw_convert(_current_version)); /* [XML] MasterEncodingThreads Number of encoding threads to use when running as master. */ - root->add_child("MasterEncodingThreads")->add_child_text (raw_convert (_master_encoding_threads)); + cxml::add_text_child(root, "MasterEncodingThreads", raw_convert(_master_encoding_threads)); /* [XML] ServerEncodingThreads Number of encoding threads to use when running as server. */ - root->add_child("ServerEncodingThreads")->add_child_text (raw_convert (_server_encoding_threads)); + cxml::add_text_child(root, "ServerEncodingThreads", raw_convert(_server_encoding_threads)); if (_default_directory) { /* [XML:opt] DefaultDirectory Default directory when creating a new film in the GUI. */ - root->add_child("DefaultDirectory")->add_child_text (_default_directory->string ()); + cxml::add_text_child(root, "DefaultDirectory", _default_directory->string()); } /* [XML] ServerPortBase Port number to use for frame encoding requests. ServerPortBase + 1 and ServerPortBase + 2 are used for querying servers. ServerPortBase + 3 is used by the batch converter to listen for job requests. */ - root->add_child("ServerPortBase")->add_child_text (raw_convert (_server_port_base)); + cxml::add_text_child(root, "ServerPortBase", raw_convert(_server_port_base)); /* [XML] UseAnyServers 1 to broadcast to look for encoding servers to use, 0 to use only those configured. */ - root->add_child("UseAnyServers")->add_child_text (_use_any_servers ? "1" : "0"); + cxml::add_text_child(root, "UseAnyServers", _use_any_servers ? "1" : "0"); for (auto i: _servers) { /* [XML:opt] Server IP address or hostname of an encoding server to use; you can use as many of these tags as you like. */ - root->add_child("Server")->add_child_text (i); + cxml::add_text_child(root, "Server", i); } /* [XML] OnlyServersEncode 1 to set the master to do decoding of source content no JPEG2000 encoding; all encoding is done by the encoding servers. 0 to set the master to do some encoding as well as coordinating the job. */ - root->add_child("OnlyServersEncode")->add_child_text (_only_servers_encode ? "1" : "0"); + cxml::add_text_child(root, "OnlyServersEncode", _only_servers_encode ? "1" : "0"); /* [XML] TMSProtocol Protocol to use to copy files to a TMS; 0 to use SCP, 1 for FTP. */ - root->add_child("TMSProtocol")->add_child_text (raw_convert (static_cast (_tms_protocol))); + cxml::add_text_child(root, "TMSProtocol", raw_convert(static_cast(_tms_protocol))); /* [XML] TMSPassive True to use PASV mode with TMS FTP connections. */ - root->add_child("TMSPassive")->add_child_text(_tms_passive ? "1" : "0"); + cxml::add_text_child(root, "TMSPassive", _tms_passive ? "1" : "0"); /* [XML] TMSIP IP address of TMS. */ - root->add_child("TMSIP")->add_child_text (_tms_ip); + cxml::add_text_child(root, "TMSIP", _tms_ip); /* [XML] TMSPath Path on the TMS to copy files to. */ - root->add_child("TMSPath")->add_child_text (_tms_path); + cxml::add_text_child(root, "TMSPath", _tms_path); /* [XML] TMSUser Username to log into the TMS with. */ - root->add_child("TMSUser")->add_child_text (_tms_user); + cxml::add_text_child(root, "TMSUser", _tms_user); /* [XML] TMSPassword Password to log into the TMS with. */ - root->add_child("TMSPassword")->add_child_text (_tms_password); + cxml::add_text_child(root, "TMSPassword", _tms_password); if (_language) { /* [XML:opt] Language Language to use in the GUI e.g. fr_FR. */ - root->add_child("Language")->add_child_text (_language.get()); + cxml::add_text_child(root, "Language", _language.get()); } if (_default_dcp_content_type) { /* [XML:opt] DefaultDCPContentType Default content type to use when creating new films (FTR, SHR, TLR, TST, XSN, RTG, TSR, POL, PSA or ADV). */ - root->add_child("DefaultDCPContentType")->add_child_text (_default_dcp_content_type->isdcf_name ()); + cxml::add_text_child(root, "DefaultDCPContentType", _default_dcp_content_type->isdcf_name()); } /* [XML] DefaultDCPAudioChannels Default number of audio channels to use when creating new films. */ - root->add_child("DefaultDCPAudioChannels")->add_child_text (raw_convert (_default_dcp_audio_channels)); + cxml::add_text_child(root, "DefaultDCPAudioChannels", raw_convert(_default_dcp_audio_channels)); /* [XML] DCPIssuer Issuer text to write into CPL files. */ - root->add_child("DCPIssuer")->add_child_text (_dcp_issuer); + cxml::add_text_child(root, "DCPIssuer", _dcp_issuer); /* [XML] DCPCreator Creator text to write into CPL files. */ - root->add_child("DCPCreator")->add_child_text (_dcp_creator); + cxml::add_text_child(root, "DCPCreator", _dcp_creator); /* [XML] Company name to write into MXF files. */ - root->add_child("DCPCompanyName")->add_child_text (_dcp_company_name); + cxml::add_text_child(root, "DCPCompanyName", _dcp_company_name); /* [XML] Product name to write into MXF files. */ - root->add_child("DCPProductName")->add_child_text (_dcp_product_name); + cxml::add_text_child(root, "DCPProductName", _dcp_product_name); /* [XML] Product version to write into MXF files. */ - root->add_child("DCPProductVersion")->add_child_text (_dcp_product_version); + cxml::add_text_child(root, "DCPProductVersion", _dcp_product_version); /* [XML] Comment to write into JPEG2000 data. */ - root->add_child("DCPJ2KComment")->add_child_text (_dcp_j2k_comment); + cxml::add_text_child(root, "DCPJ2KComment", _dcp_j2k_comment); /* [XML] UploadAfterMakeDCP 1 to upload to a TMS after making a DCP, 0 for no upload. */ - root->add_child("UploadAfterMakeDCP")->add_child_text (_upload_after_make_dcp ? "1" : "0"); + cxml::add_text_child(root, "UploadAfterMakeDCP", _upload_after_make_dcp ? "1" : "0"); /* [XML] DefaultStillLength Default length (in seconds) for still images in new films. */ - root->add_child("DefaultStillLength")->add_child_text (raw_convert (_default_still_length)); + cxml::add_text_child(root, "DefaultStillLength", raw_convert(_default_still_length)); /* [XML] DefaultJ2KBandwidth Default bitrate (in bits per second) for JPEG2000 data in new films. */ - root->add_child("DefaultJ2KBandwidth")->add_child_text (raw_convert (_default_j2k_bandwidth)); + cxml::add_text_child(root, "DefaultJ2KBandwidth", raw_convert(_default_j2k_bandwidth)); /* [XML] DefaultAudioDelay Default delay to apply to audio (positive moves audio later) in milliseconds. */ - root->add_child("DefaultAudioDelay")->add_child_text (raw_convert (_default_audio_delay)); + cxml::add_text_child(root, "DefaultAudioDelay", raw_convert(_default_audio_delay)); /* [XML] DefaultInterop 1 to default new films to Interop, 0 for SMPTE. */ - root->add_child("DefaultInterop")->add_child_text (_default_interop ? "1" : "0"); + cxml::add_text_child(root, "DefaultInterop", _default_interop ? "1" : "0"); if (_default_audio_language) { /* [XML] DefaultAudioLanguage Default audio language to use for new films */ - root->add_child("DefaultAudioLanguage")->add_child_text(_default_audio_language->to_string()); + cxml::add_text_child(root, "DefaultAudioLanguage", _default_audio_language->to_string()); } if (_default_territory) { /* [XML] DefaultTerritory Default territory to use for new films */ - root->add_child("DefaultTerritory")->add_child_text(_default_territory->subtag()); + cxml::add_text_child(root, "DefaultTerritory", _default_territory->subtag()); } for (auto const& i: _default_metadata) { - auto c = root->add_child("DefaultMetadata"); + auto c = cxml::add_child(root, "DefaultMetadata"); c->set_attribute("key", i.first); c->add_child_text(i.second); } if (_default_kdm_directory) { /* [XML:opt] DefaultKDMDirectory Default directory to write KDMs to. */ - root->add_child("DefaultKDMDirectory")->add_child_text (_default_kdm_directory->string ()); + cxml::add_text_child(root, "DefaultKDMDirectory", _default_kdm_directory->string ()); } - _default_kdm_duration.as_xml(root->add_child("DefaultKDMDuration")); + _default_kdm_duration.as_xml(cxml::add_child(root, "DefaultKDMDuration")); /* [XML] MailServer Hostname of SMTP server to use. */ - root->add_child("MailServer")->add_child_text (_mail_server); + cxml::add_text_child(root, "MailServer", _mail_server); /* [XML] MailPort Port number to use on SMTP server. */ - root->add_child("MailPort")->add_child_text (raw_convert (_mail_port)); + cxml::add_text_child(root, "MailPort", raw_convert(_mail_port)); /* [XML] MailProtocol Protocol to use on SMTP server (Auto, Plain, STARTTLS or SSL) */ switch (_mail_protocol) { case EmailProtocol::AUTO: - root->add_child("MailProtocol")->add_child_text("Auto"); + cxml::add_text_child(root, "MailProtocol", "Auto"); break; case EmailProtocol::PLAIN: - root->add_child("MailProtocol")->add_child_text("Plain"); + cxml::add_text_child(root, "MailProtocol", "Plain"); break; case EmailProtocol::STARTTLS: - root->add_child("MailProtocol")->add_child_text("STARTTLS"); + cxml::add_text_child(root, "MailProtocol", "STARTTLS"); break; case EmailProtocol::SSL: - root->add_child("MailProtocol")->add_child_text("SSL"); + cxml::add_text_child(root, "MailProtocol", "SSL"); break; } /* [XML] MailUser Username to use on SMTP server. */ - root->add_child("MailUser")->add_child_text (_mail_user); + cxml::add_text_child(root, "MailUser", _mail_user); /* [XML] MailPassword Password to use on SMTP server. */ - root->add_child("MailPassword")->add_child_text (_mail_password); + cxml::add_text_child(root, "MailPassword", _mail_password); /* [XML] KDMSubject Subject to use for KDM emails. */ - root->add_child("KDMSubject")->add_child_text (_kdm_subject); + cxml::add_text_child(root, "KDMSubject", _kdm_subject); /* [XML] KDMFrom From address to use for KDM emails. */ - root->add_child("KDMFrom")->add_child_text (_kdm_from); + cxml::add_text_child(root, "KDMFrom", _kdm_from); for (auto i: _kdm_cc) { /* [XML] KDMCC CC address to use for KDM emails; you can use as many of these tags as you like. */ - root->add_child("KDMCC")->add_child_text (i); + cxml::add_text_child(root, "KDMCC", i); } /* [XML] KDMBCC BCC address to use for KDM emails. */ - root->add_child("KDMBCC")->add_child_text (_kdm_bcc); + cxml::add_text_child(root, "KDMBCC", _kdm_bcc); /* [XML] KDMEmail Text of KDM email. */ - root->add_child("KDMEmail")->add_child_text (_kdm_email); + cxml::add_text_child(root, "KDMEmail", _kdm_email); /* [XML] NotificationSubject Subject to use for notification emails. */ - root->add_child("NotificationSubject")->add_child_text (_notification_subject); + cxml::add_text_child(root, "NotificationSubject", _notification_subject); /* [XML] NotificationFrom From address to use for notification emails. */ - root->add_child("NotificationFrom")->add_child_text (_notification_from); + cxml::add_text_child(root, "NotificationFrom", _notification_from); /* [XML] NotificationFrom To address to use for notification emails. */ - root->add_child("NotificationTo")->add_child_text (_notification_to); + cxml::add_text_child(root, "NotificationTo", _notification_to); for (auto i: _notification_cc) { /* [XML] NotificationCC CC address to use for notification emails; you can use as many of these tags as you like. */ - root->add_child("NotificationCC")->add_child_text (i); + cxml::add_text_child(root, "NotificationCC", i); } /* [XML] NotificationBCC BCC address to use for notification emails. */ - root->add_child("NotificationBCC")->add_child_text (_notification_bcc); + cxml::add_text_child(root, "NotificationBCC", _notification_bcc); /* [XML] NotificationEmail Text of notification email. */ - root->add_child("NotificationEmail")->add_child_text (_notification_email); + cxml::add_text_child(root, "NotificationEmail", _notification_email); /* [XML] CheckForUpdates 1 to check dcpomatic.com for new versions, 0 to check only on request. */ - root->add_child("CheckForUpdates")->add_child_text (_check_for_updates ? "1" : "0"); + cxml::add_text_child(root, "CheckForUpdates", _check_for_updates ? "1" : "0"); /* [XML] CheckForUpdates 1 to check dcpomatic.com for new text versions, 0 to check only on request. */ - root->add_child("CheckForTestUpdates")->add_child_text (_check_for_test_updates ? "1" : "0"); + cxml::add_text_child(root, "CheckForTestUpdates", _check_for_test_updates ? "1" : "0"); /* [XML] MaximumJ2KBandwidth Maximum J2K bandwidth (in bits per second) that can be specified in the GUI. */ - root->add_child("MaximumJ2KBandwidth")->add_child_text (raw_convert (_maximum_j2k_bandwidth)); + cxml::add_text_child(root, "MaximumJ2KBandwidth", raw_convert(_maximum_j2k_bandwidth)); /* [XML] AllowAnyDCPFrameRate 1 to allow users to specify any frame rate when creating DCPs, 0 to limit the GUI to standard rates. */ - root->add_child("AllowAnyDCPFrameRate")->add_child_text (_allow_any_dcp_frame_rate ? "1" : "0"); + cxml::add_text_child(root, "AllowAnyDCPFrameRate", _allow_any_dcp_frame_rate ? "1" : "0"); /* [XML] AllowAnyContainer 1 to allow users to user any container ratio for their DCP, 0 to limit the GUI to DCI Flat/Scope */ - root->add_child("AllowAnyContainer")->add_child_text (_allow_any_container ? "1" : "0"); + cxml::add_text_child(root, "AllowAnyContainer", _allow_any_container ? "1" : "0"); /* [XML] Allow96kHzAudio 1 to allow users to make DCPs with 96kHz audio, 0 to always make 48kHz DCPs */ - root->add_child("Allow96kHzAudio")->add_child_text(_allow_96khz_audio ? "1" : "0"); + cxml::add_text_child(root, "Allow96kHzAudio", _allow_96khz_audio ? "1" : "0"); /* [XML] UseAllAudioChannels 1 to allow users to map audio to all 16 DCP channels, 0 to limit to the channels used in standard DCPs */ - root->add_child("UseAllAudioChannels")->add_child_text(_use_all_audio_channels ? "1" : "0"); + cxml::add_text_child(root, "UseAllAudioChannels", _use_all_audio_channels ? "1" : "0"); /* [XML] ShowExperimentalAudioProcessors 1 to offer users the (experimental) audio upmixer processors, 0 to hide them */ - root->add_child("ShowExperimentalAudioProcessors")->add_child_text (_show_experimental_audio_processors ? "1" : "0"); + cxml::add_text_child(root, "ShowExperimentalAudioProcessors", _show_experimental_audio_processors ? "1" : "0"); /* [XML] LogTypes Types of logging to write; a bitfield where 1 is general notes, 2 warnings, 4 errors, 8 debug information related to 3D, 16 debug information related to encoding, 32 debug information for timing purposes, 64 debug information related to sending email, 128 debug information related to the video view, 256 information about disk writing, 512 debug information related to the player, 1024 debug information related to audio analyses. */ - root->add_child("LogTypes")->add_child_text (raw_convert (_log_types)); + cxml::add_text_child(root, "LogTypes", raw_convert (_log_types)); /* [XML] AnalyseEBUR128 1 to do EBUR128 analyses when analysing audio, otherwise 0. */ - root->add_child("AnalyseEBUR128")->add_child_text (_analyse_ebur128 ? "1" : "0"); + cxml::add_text_child(root, "AnalyseEBUR128", _analyse_ebur128 ? "1" : "0"); /* [XML] AutomaticAudioAnalysis 1 to run audio analysis automatically when audio content is added to the film, otherwise 0. */ - root->add_child("AutomaticAudioAnalysis")->add_child_text (_automatic_audio_analysis ? "1" : "0"); + cxml::add_text_child(root, "AutomaticAudioAnalysis", _automatic_audio_analysis ? "1" : "0"); #ifdef DCPOMATIC_WINDOWS if (_win32_console) { /* [XML] Win32Console 1 to open a console when running on Windows, otherwise 0. * We only write this if it's true, which is a bit of a hack to allow unit tests to work * more easily on Windows (without a platform-specific reference in config_write_utf8_test) */ - root->add_child("Win32Console")->add_child_text ("1"); + cxml::add_text_child(root, "Win32Console", "1"); } #endif /* [XML] Signer Certificate chain and private key to use when signing DCPs and KDMs. Should contain <Certificate> tags in order and a <PrivateKey> tag all containing PEM-encoded certificates or private keys as appropriate. */ - auto signer = root->add_child ("Signer"); + auto signer = cxml::add_child(root, "Signer"); DCPOMATIC_ASSERT (_signer_chain); for (auto const& i: _signer_chain->unordered()) { - signer->add_child("Certificate")->add_child_text (i.certificate (true)); + cxml::add_text_child(signer, "Certificate", i.certificate (true)); } - signer->add_child("PrivateKey")->add_child_text (_signer_chain->key().get ()); + cxml::add_text_child(signer, "PrivateKey", _signer_chain->key().get ()); /* [XML] Decryption Certificate chain and private key to use when decrypting KDMs */ - auto decryption = root->add_child ("Decryption"); + auto decryption = cxml::add_child(root, "Decryption"); DCPOMATIC_ASSERT (_decryption_chain); for (auto const& i: _decryption_chain->unordered()) { - decryption->add_child("Certificate")->add_child_text (i.certificate (true)); + cxml::add_text_child(decryption, "Certificate", i.certificate (true)); } - decryption->add_child("PrivateKey")->add_child_text (_decryption_chain->key().get ()); + cxml::add_text_child(decryption, "PrivateKey", _decryption_chain->key().get()); /* [XML] History Filename of DCP to present in the File menu of the GUI; there can be more than one of these tags. */ for (auto i: _history) { - root->add_child("History")->add_child_text (i.string ()); + cxml::add_text_child(root, "History", i.string()); } /* [XML] History Filename of DCP to present in the File menu of the player; there can be more than one of these tags. */ for (auto i: _player_history) { - root->add_child("PlayerHistory")->add_child_text (i.string ()); + cxml::add_text_child(root, "PlayerHistory", i.string()); } /* [XML] DKDMGroup A group of DKDMs, each with a Name attribute, containing other <DKDMGroup> @@ -942,53 +942,53 @@ Config::write_config () const _dkdms->as_xml (root); /* [XML] CinemasFile Filename of cinemas list file. */ - root->add_child("CinemasFile")->add_child_text (_cinemas_file.string()); + cxml::add_text_child(root, "CinemasFile", _cinemas_file.string()); /* [XML] DKDMRecipientsFile Filename of DKDM recipients list file. */ - root->add_child("DKDMRecipientsFile")->add_child_text (_dkdm_recipients_file.string()); + cxml::add_text_child(root, "DKDMRecipientsFile", _dkdm_recipients_file.string()); /* [XML] ShowHintsBeforeMakeDCP 1 to show hints in the GUI before making a DCP, otherwise 0. */ - root->add_child("ShowHintsBeforeMakeDCP")->add_child_text (_show_hints_before_make_dcp ? "1" : "0"); + cxml::add_text_child(root, "ShowHintsBeforeMakeDCP", _show_hints_before_make_dcp ? "1" : "0"); /* [XML] ConfirmKDMEmail 1 to confirm before sending KDM emails in the GUI, otherwise 0. */ - root->add_child("ConfirmKDMEmail")->add_child_text (_confirm_kdm_email ? "1" : "0"); + cxml::add_text_child(root, "ConfirmKDMEmail", _confirm_kdm_email ? "1" : "0"); /* [XML] KDMFilenameFormat Format for KDM filenames. */ - root->add_child("KDMFilenameFormat")->add_child_text (_kdm_filename_format.specification ()); + cxml::add_text_child(root, "KDMFilenameFormat", _kdm_filename_format.specification()); /* [XML] KDMFilenameFormat Format for DKDM filenames. */ - root->add_child("DKDMFilenameFormat")->add_child_text(_dkdm_filename_format.specification()); + cxml::add_text_child(root, "DKDMFilenameFormat", _dkdm_filename_format.specification()); /* [XML] KDMContainerNameFormat Format for KDM containers (directories or ZIP files). */ - root->add_child("KDMContainerNameFormat")->add_child_text (_kdm_container_name_format.specification ()); + cxml::add_text_child(root, "KDMContainerNameFormat", _kdm_container_name_format.specification()); /* [XML] DCPMetadataFilenameFormat Format for DCP metadata filenames. */ - root->add_child("DCPMetadataFilenameFormat")->add_child_text (_dcp_metadata_filename_format.specification ()); + cxml::add_text_child(root, "DCPMetadataFilenameFormat", _dcp_metadata_filename_format.specification()); /* [XML] DCPAssetFilenameFormat Format for DCP asset filenames. */ - root->add_child("DCPAssetFilenameFormat")->add_child_text (_dcp_asset_filename_format.specification ()); + cxml::add_text_child(root, "DCPAssetFilenameFormat", _dcp_asset_filename_format.specification()); /* [XML] JumpToSelected 1 to make the GUI jump to the start of content when it is selected, otherwise 0. */ - root->add_child("JumpToSelected")->add_child_text (_jump_to_selected ? "1" : "0"); + cxml::add_text_child(root, "JumpToSelected", _jump_to_selected ? "1" : "0"); /* [XML] Nagged 1 if a particular nag screen has been shown and should not be shown again, otherwise 0. */ for (int i = 0; i < NAG_COUNT; ++i) { - xmlpp::Element* e = root->add_child ("Nagged"); + auto e = cxml::add_child(root, "Nagged"); e->set_attribute ("Id", raw_convert(i)); e->add_child_text (_nagged[i] ? "1" : "0"); } /* [XML] PreviewSound 1 to use sound in the GUI preview and player, otherwise 0. */ - root->add_child("PreviewSound")->add_child_text (_sound ? "1" : "0"); + cxml::add_text_child(root, "PreviewSound", _sound ? "1" : "0"); if (_sound_output) { /* [XML:opt] PreviewSoundOutput Name of the audio output to use. */ - root->add_child("PreviewSoundOutput")->add_child_text (_sound_output.get()); + cxml::add_text_child(root, "PreviewSoundOutput", _sound_output.get()); } /* [XML] CoverSheet Text of the cover sheet to write when making DCPs. */ - root->add_child("CoverSheet")->add_child_text (_cover_sheet); + cxml::add_text_child(root, "CoverSheet", _cover_sheet); if (_last_player_load_directory) { - root->add_child("LastPlayerLoadDirectory")->add_child_text(_last_player_load_directory->string()); + cxml::add_text_child(root, "LastPlayerLoadDirectory", _last_player_load_directory->string()); } /* [XML] LastKDMWriteType Last type of KDM-write: flat for a flat file, folder for a folder or zip for a ZIP file. */ if (_last_kdm_write_type) { switch (_last_kdm_write_type.get()) { case KDM_WRITE_FLAT: - root->add_child("LastKDMWriteType")->add_child_text("flat"); + cxml::add_text_child(root, "LastKDMWriteType", "flat"); break; case KDM_WRITE_FOLDER: - root->add_child("LastKDMWriteType")->add_child_text("folder"); + cxml::add_text_child(root, "LastKDMWriteType", "folder"); break; case KDM_WRITE_ZIP: - root->add_child("LastKDMWriteType")->add_child_text("zip"); + cxml::add_text_child(root, "LastKDMWriteType", "zip"); break; } } @@ -996,58 +996,58 @@ Config::write_config () const if (_last_dkdm_write_type) { switch (_last_dkdm_write_type.get()) { case DKDM_WRITE_INTERNAL: - root->add_child("LastDKDMWriteType")->add_child_text("internal"); + cxml::add_text_child(root, "LastDKDMWriteType", "internal"); break; case DKDM_WRITE_FILE: - root->add_child("LastDKDMWriteType")->add_child_text("file"); + cxml::add_text_child(root, "LastDKDMWriteType", "file"); break; } } /* [XML] FramesInMemoryMultiplier value to multiply the encoding threads count by to get the maximum number of frames to be held in memory at once. */ - root->add_child("FramesInMemoryMultiplier")->add_child_text(raw_convert(_frames_in_memory_multiplier)); + cxml::add_text_child(root, "FramesInMemoryMultiplier", raw_convert(_frames_in_memory_multiplier)); /* [XML] DecodeReduction power of 2 to reduce DCP images by before decoding in the player. */ if (_decode_reduction) { - root->add_child("DecodeReduction")->add_child_text(raw_convert(_decode_reduction.get())); + cxml::add_text_child(root, "DecodeReduction", raw_convert(_decode_reduction.get())); } /* [XML] DefaultNotify 1 to default jobs to notify when complete, otherwise 0. */ - root->add_child("DefaultNotify")->add_child_text(_default_notify ? "1" : "0"); + cxml::add_text_child(root, "DefaultNotify", _default_notify ? "1" : "0"); /* [XML] Notification 1 if a notification type is enabled, otherwise 0. */ for (int i = 0; i < NOTIFICATION_COUNT; ++i) { - xmlpp::Element* e = root->add_child ("Notification"); + auto e = cxml::add_child(root, "Notification"); e->set_attribute ("Id", raw_convert(i)); e->add_child_text (_notification[i] ? "1" : "0"); } if (_barco_username) { /* [XML] BarcoUsername Username for logging into Barco's servers when downloading server certificates. */ - root->add_child("BarcoUsername")->add_child_text(*_barco_username); + cxml::add_text_child(root, "BarcoUsername", *_barco_username); } if (_barco_password) { /* [XML] BarcoPassword Password for logging into Barco's servers when downloading server certificates. */ - root->add_child("BarcoPassword")->add_child_text(*_barco_password); + cxml::add_text_child(root, "BarcoPassword", *_barco_password); } if (_christie_username) { /* [XML] ChristieUsername Username for logging into Christie's servers when downloading server certificates. */ - root->add_child("ChristieUsername")->add_child_text(*_christie_username); + cxml::add_text_child(root, "ChristieUsername", *_christie_username); } if (_christie_password) { /* [XML] ChristiePassword Password for logging into Christie's servers when downloading server certificates. */ - root->add_child("ChristiePassword")->add_child_text(*_christie_password); + cxml::add_text_child(root, "ChristiePassword", *_christie_password); } if (_gdc_username) { /* [XML] GDCUsername Username for logging into GDC's servers when downloading server certificates. */ - root->add_child("GDCUsername")->add_child_text(*_gdc_username); + cxml::add_text_child(root, "GDCUsername", *_gdc_username); } if (_gdc_password) { /* [XML] GDCPassword Password for logging into GDC's servers when downloading server certificates. */ - root->add_child("GDCPassword")->add_child_text(*_gdc_password); + cxml::add_text_child(root, "GDCPassword", *_gdc_password); } /* [XML] PlayerMode window for a single window, full for full-screen and dual for full screen playback @@ -1055,80 +1055,80 @@ Config::write_config () const */ switch (_player_mode) { case PLAYER_MODE_WINDOW: - root->add_child("PlayerMode")->add_child_text("window"); + cxml::add_text_child(root, "PlayerMode", "window"); break; case PLAYER_MODE_FULL: - root->add_child("PlayerMode")->add_child_text("full"); + cxml::add_text_child(root, "PlayerMode", "full"); break; case PLAYER_MODE_DUAL: - root->add_child("PlayerMode")->add_child_text("dual"); + cxml::add_text_child(root, "PlayerMode", "dual"); break; } /* [XML] ImageDisplay Screen number to put image on in dual-screen player mode. */ - root->add_child("ImageDisplay")->add_child_text(raw_convert(_image_display)); + cxml::add_text_child(root, "ImageDisplay", raw_convert(_image_display)); switch (_video_view_type) { case VIDEO_VIEW_SIMPLE: - root->add_child("VideoViewType")->add_child_text("simple"); + cxml::add_text_child(root, "VideoViewType", "simple"); break; case VIDEO_VIEW_OPENGL: - root->add_child("VideoViewType")->add_child_text("opengl"); + cxml::add_text_child(root, "VideoViewType", "opengl"); break; } /* [XML] RespectKDMValidityPeriods 1 to refuse to use KDMs that are out of date, 0 to ignore KDM dates. */ - root->add_child("RespectKDMValidityPeriods")->add_child_text(_respect_kdm_validity_periods ? "1" : "0"); + cxml::add_text_child(root, "RespectKDMValidityPeriods", _respect_kdm_validity_periods ? "1" : "0"); if (_player_debug_log_file) { /* [XML] PlayerLogFile Filename to use for player debug logs. */ - root->add_child("PlayerDebugLogFile")->add_child_text(_player_debug_log_file->string()); + cxml::add_text_child(root, "PlayerDebugLogFile", _player_debug_log_file->string()); } if (_player_content_directory) { /* [XML] PlayerContentDirectory Directory to use for player content in the dual-screen mode. */ - root->add_child("PlayerContentDirectory")->add_child_text(_player_content_directory->string()); + cxml::add_text_child(root, "PlayerContentDirectory", _player_content_directory->string()); } if (_player_playlist_directory) { /* [XML] PlayerPlaylistDirectory Directory to use for player playlists in the dual-screen mode. */ - root->add_child("PlayerPlaylistDirectory")->add_child_text(_player_playlist_directory->string()); + cxml::add_text_child(root, "PlayerPlaylistDirectory", _player_playlist_directory->string()); } if (_player_kdm_directory) { /* [XML] PlayerKDMDirectory Directory to use for player KDMs in the dual-screen mode. */ - root->add_child("PlayerKDMDirectory")->add_child_text(_player_kdm_directory->string()); + cxml::add_text_child(root, "PlayerKDMDirectory", _player_kdm_directory->string()); } if (_audio_mapping) { - _audio_mapping->as_xml (root->add_child("AudioMapping")); + _audio_mapping->as_xml(cxml::add_child(root, "AudioMapping")); } for (auto const& i: _custom_languages) { - root->add_child("CustomLanguage")->add_child_text(i.to_string()); + cxml::add_text_child(root, "CustomLanguage", i.to_string()); } for (auto const& initial: _initial_paths) { if (initial.second) { - root->add_child(initial.first)->add_child_text(initial.second->string()); + cxml::add_text_child(root, initial.first, initial.second->string()); } } - root->add_child("UseISDCFNameByDefault")->add_child_text(_use_isdcf_name_by_default ? "1" : "0"); - root->add_child("WriteKDMsToDisk")->add_child_text(_write_kdms_to_disk ? "1" : "0"); - root->add_child("EmailKDMs")->add_child_text(_email_kdms ? "1" : "0"); - root->add_child("DefaultKDMType")->add_child_text(dcp::formulation_to_string(_default_kdm_type)); - root->add_child("AutoCropThreshold")->add_child_text(raw_convert(_auto_crop_threshold)); + cxml::add_text_child(root, "UseISDCFNameByDefault", _use_isdcf_name_by_default ? "1" : "0"); + cxml::add_text_child(root, "WriteKDMsToDisk", _write_kdms_to_disk ? "1" : "0"); + cxml::add_text_child(root, "EmailKDMs", _email_kdms ? "1" : "0"); + cxml::add_text_child(root, "DefaultKDMType", dcp::formulation_to_string(_default_kdm_type)); + cxml::add_text_child(root, "AutoCropThreshold", raw_convert(_auto_crop_threshold)); if (_last_release_notes_version) { - root->add_child("LastReleaseNotesVersion")->add_child_text(*_last_release_notes_version); + cxml::add_text_child(root, "LastReleaseNotesVersion", *_last_release_notes_version); } if (_main_divider_sash_position) { - root->add_child("MainDividerSashPosition")->add_child_text(raw_convert(*_main_divider_sash_position)); + cxml::add_text_child(root, "MainDividerSashPosition", raw_convert(*_main_divider_sash_position)); } if (_main_content_divider_sash_position) { - root->add_child("MainContentDividerSashPosition")->add_child_text(raw_convert(*_main_content_divider_sash_position)); + cxml::add_text_child(root, "MainContentDividerSashPosition", raw_convert(*_main_content_divider_sash_position)); } - root->add_child("DefaultAddFileLocation")->add_child_text( + cxml::add_text_child(root, "DefaultAddFileLocation", _default_add_file_location == DefaultAddFileLocation::SAME_AS_LAST_TIME ? "last" : "project" ); /* [XML] AllowSMPTEBv20 1 to allow the user to choose SMPTE (Bv2.0 only) as a standard, otherwise 0 */ - root->add_child("AllowSMPTEBv20")->add_child_text(_allow_smpte_bv20 ? "1" : "0"); + cxml::add_text_child(root, "AllowSMPTEBv20", _allow_smpte_bv20 ? "1" : "0"); /* [XML] ISDCFNamePartLength Maximum length of the "name" part of an ISDCF name, which should be 14 according to the standard */ - root->add_child("ISDCFNamePartLength")->add_child_text(raw_convert(_isdcf_name_part_length)); + cxml::add_text_child(root, "ISDCFNamePartLength", raw_convert(_isdcf_name_part_length)); - _export.write(root->add_child("Export")); + _export.write(cxml::add_child(root, "Export")); auto target = config_write_file(); @@ -1157,10 +1157,10 @@ write_file (string root_node, string node, string version, list> t { xmlpp::Document doc; auto root = doc.create_root_node (root_node); - root->add_child("Version")->add_child_text(version); + cxml::add_text_child(root, "Version", version); for (auto i: things) { - i->as_xml (root->add_child(node)); + i->as_xml(cxml::add_child(root, node)); } try { @@ -1500,7 +1500,7 @@ void Config::link (boost::filesystem::path new_file) const { xmlpp::Document doc; - doc.create_root_node("Config")->add_child("Link")->add_child_text(new_file.string()); + cxml::add_text_child(doc.create_root_node("Config"), "Link", new_file.string()); try { doc.write_to_file_formatted(write_path("config.xml").string()); } catch (xmlpp::exception& e) { diff --git a/src/lib/content.cc b/src/lib/content.cc index 6324050ec..6743705d9 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -140,23 +140,23 @@ Content::Content (vector> c) void -Content::as_xml (xmlpp::Node* node, bool with_paths) const +Content::as_xml(xmlpp::Element* element, bool with_paths) const { boost::mutex::scoped_lock lm (_mutex); if (with_paths) { for (size_t i = 0; i < _paths.size(); ++i) { - auto p = node->add_child("Path"); + auto p = cxml::add_child(element, "Path"); p->add_child_text (_paths[i].string()); p->set_attribute ("mtime", raw_convert(_last_write_times[i])); } } - node->add_child("Digest")->add_child_text(_digest); - node->add_child("Position")->add_child_text(raw_convert(_position.get())); - node->add_child("TrimStart")->add_child_text(raw_convert(_trim_start.get())); - node->add_child("TrimEnd")->add_child_text(raw_convert(_trim_end.get())); + cxml::add_text_child(element, "Digest", _digest); + cxml::add_text_child(element, "Position", raw_convert(_position.get())); + cxml::add_text_child(element, "TrimStart", raw_convert(_trim_start.get())); + cxml::add_text_child(element, "TrimEnd", raw_convert(_trim_end.get())); if (_video_frame_rate) { - node->add_child("VideoFrameRate")->add_child_text(raw_convert(_video_frame_rate.get())); + cxml::add_text_child(element, "VideoFrameRate", raw_convert(_video_frame_rate.get())); } } diff --git a/src/lib/content.h b/src/lib/content.h index f2fecddf0..3753c84d7 100644 --- a/src/lib/content.h +++ b/src/lib/content.h @@ -100,7 +100,7 @@ public: */ virtual std::string technical_summary () const; - virtual void as_xml (xmlpp::Node *, bool with_paths) const; + virtual void as_xml(xmlpp::Element* element, bool with_paths) const; virtual dcpomatic::DCPTime full_length (std::shared_ptr) const = 0; virtual dcpomatic::DCPTime approximate_length () const = 0; virtual std::string identifier () const; diff --git a/src/lib/crop.cc b/src/lib/crop.cc index d2d020a9f..a6f7d4bac 100644 --- a/src/lib/crop.cc +++ b/src/lib/crop.cc @@ -42,12 +42,12 @@ Crop::Crop(shared_ptr node) void -Crop::as_xml(xmlpp::Node* node) const +Crop::as_xml(xmlpp::Element* element) const { - node->add_child("LeftCrop")->add_child_text(raw_convert(left)); - node->add_child("RightCrop")->add_child_text(raw_convert(right)); - node->add_child("TopCrop")->add_child_text(raw_convert(top)); - node->add_child("BottomCrop")->add_child_text(raw_convert(bottom)); + cxml::add_text_child(element, "LeftCrop", raw_convert(left)); + cxml::add_text_child(element, "RightCrop", raw_convert(right)); + cxml::add_text_child(element, "TopCrop", raw_convert(top)); + cxml::add_text_child(element, "BottomCrop", raw_convert(bottom)); } diff --git a/src/lib/crop.h b/src/lib/crop.h index 00734d5e9..24330731d 100644 --- a/src/lib/crop.h +++ b/src/lib/crop.h @@ -65,7 +65,7 @@ struct Crop return s; } - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; }; diff --git a/src/lib/cross_common.cc b/src/lib/cross_common.cc index b4d322096..711c3c540 100644 --- a/src/lib/cross_common.cc +++ b/src/lib/cross_common.cc @@ -62,16 +62,16 @@ Drive::as_xml () const { xmlpp::Document doc; auto root = doc.create_root_node ("Drive"); - root->add_child("Device")->add_child_text(_device); + cxml::add_text_child(root, "Device", _device); for (auto i: _mount_points) { - root->add_child("MountPoint")->add_child_text(i.string()); + cxml::add_text_child(root, "MountPoint", i.string()); } - root->add_child("Size")->add_child_text(dcp::raw_convert(_size)); + cxml::add_text_child(root, "Size", dcp::raw_convert(_size)); if (_vendor) { - root->add_child("Vendor")->add_child_text(*_vendor); + cxml::add_text_child(root, "Vendor", *_vendor); } if (_model) { - root->add_child("Model")->add_child_text(*_model); + cxml::add_text_child(root, "Model", *_model); } return doc.write_to_string("UTF-8"); diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index 6185b3a19..c95aa3203 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -347,88 +347,90 @@ DCPContent::technical_summary () const return s; } + void -DCPContent::as_xml (xmlpp::Node* node, bool with_paths) const +DCPContent::as_xml(xmlpp::Element* element, bool with_paths) const { - node->add_child("Type")->add_child_text ("DCP"); + cxml::add_text_child(element, "Type", "DCP"); - Content::as_xml (node, with_paths); + Content::as_xml(element, with_paths); if (video) { - video->as_xml (node); + video->as_xml(element); } if (audio) { - audio->as_xml (node); - node->add_child("AudioFrameRate")->add_child_text (raw_convert (audio->stream()->frame_rate())); - node->add_child("AudioLength")->add_child_text (raw_convert (audio->stream()->length())); - audio->stream()->mapping().as_xml (node->add_child("AudioMapping")); + audio->as_xml(element); + cxml::add_text_child(element, "AudioFrameRate", raw_convert(audio->stream()->frame_rate())); + cxml::add_text_child(element, "AudioLength", raw_convert(audio->stream()->length())); + audio->stream()->mapping().as_xml(cxml::add_child(element, "AudioMapping")); } for (auto i: text) { - i->as_xml (node); + i->as_xml(element); } if (atmos) { - atmos->as_xml (node); + atmos->as_xml(element); } boost::mutex::scoped_lock lm (_mutex); - node->add_child("Name")->add_child_text (_name); - node->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0"); - node->add_child("NeedsAssets")->add_child_text (_needs_assets ? "1" : "0"); + cxml::add_text_child(element, "Name", _name); + cxml::add_text_child(element, "Encrypted", _encrypted ? "1" : "0"); + cxml::add_text_child(element, "NeedsAssets", _needs_assets ? "1" : "0"); if (_kdm) { - node->add_child("KDM")->add_child_text (_kdm->as_xml ()); + cxml::add_text_child(element, "KDM", _kdm->as_xml()); } - node->add_child("KDMValid")->add_child_text (_kdm_valid ? "1" : "0"); - node->add_child("ReferenceVideo")->add_child_text (_reference_video ? "1" : "0"); - node->add_child("ReferenceAudio")->add_child_text (_reference_audio ? "1" : "0"); - node->add_child("ReferenceOpenSubtitle")->add_child_text(_reference_text[TextType::OPEN_SUBTITLE] ? "1" : "0"); - node->add_child("ReferenceClosedCaption")->add_child_text(_reference_text[TextType::CLOSED_CAPTION] ? "1" : "0"); + cxml::add_text_child(element, "KDMValid", _kdm_valid ? "1" : "0"); + cxml::add_text_child(element, "ReferenceVideo", _reference_video ? "1" : "0"); + cxml::add_text_child(element, "ReferenceAudio", _reference_audio ? "1" : "0"); + cxml::add_text_child(element, "ReferenceOpenSubtitle", _reference_text[TextType::OPEN_SUBTITLE] ? "1" : "0"); + cxml::add_text_child(element, "ReferenceClosedCaption", _reference_text[TextType::CLOSED_CAPTION] ? "1" : "0"); if (_standard) { switch (_standard.get ()) { case dcp::Standard::INTEROP: - node->add_child("Standard")->add_child_text ("Interop"); + cxml::add_text_child(element, "Standard", "Interop"); break; case dcp::Standard::SMPTE: - node->add_child("Standard")->add_child_text ("SMPTE"); + cxml::add_text_child(element, "Standard", "SMPTE"); break; default: DCPOMATIC_ASSERT (false); } } - node->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0"); + cxml::add_text_child(element, "ThreeD", _three_d ? "1" : "0"); if (_content_kind) { - node->add_child("ContentKind")->add_child_text(_content_kind->name()); + cxml::add_text_child(element, "ContentKind", _content_kind->name()); } if (_cpl) { - node->add_child("CPL")->add_child_text (_cpl.get ()); + cxml::add_text_child(element, "CPL", _cpl.get()); } for (auto i: _reel_lengths) { - node->add_child("ReelLength")->add_child_text (raw_convert (i)); + cxml::add_text_child(element, "ReelLength", raw_convert(i)); } for (auto const& i: _markers) { - auto marker = node->add_child("Marker"); + auto marker = cxml::add_child(element, "Marker"); marker->set_attribute("type", dcp::marker_to_string(i.first)); marker->add_child_text(raw_convert(i.second.get())); } for (auto i: _ratings) { - auto rating = node->add_child("Rating"); + auto rating = cxml::add_child(element, "Rating"); i.as_xml (rating); } for (auto i: _content_versions) { - node->add_child("ContentVersion")->add_child_text(i); + cxml::add_text_child(element, "ContentVersion", i); } if (_active_audio_channels) { - node->add_child("ActiveAudioChannels")->add_child_text(raw_convert(*_active_audio_channels)); + cxml::add_text_child(element, "ActiveAudioChannels", raw_convert(*_active_audio_channels)); } } + DCPTime DCPContent::full_length (shared_ptr film) const { diff --git a/src/lib/dcp_content.h b/src/lib/dcp_content.h index 3753740a2..3cdb5de8d 100644 --- a/src/lib/dcp_content.h +++ b/src/lib/dcp_content.h @@ -75,7 +75,7 @@ public: void examine (std::shared_ptr film, std::shared_ptr) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + void as_xml(xmlpp::Element*, bool with_paths) const override; std::string identifier () const override; void take_settings_from (std::shared_ptr c) override; diff --git a/src/lib/dcp_digest_file.cc b/src/lib/dcp_digest_file.cc index eb243b60d..4278caa98 100644 --- a/src/lib/dcp_digest_file.cc +++ b/src/lib/dcp_digest_file.cc @@ -42,14 +42,14 @@ template void add_asset(string film_key, shared_ptr reel_asset, shared_ptr asset, xmlpp::Element* reel, string name) { if (asset) { - auto out = reel->add_child(name); - out->add_child("Id")->add_child_text("urn:uuid:" + asset->id()); + auto out = cxml::add_child(reel, name); + cxml::add_text_child(out, "Id", "urn:uuid:" + asset->id()); if (reel_asset->annotation_text()) { - out->add_child("AnnotationText")->add_child_text(reel_asset->annotation_text().get()); + cxml::add_text_child(out, "AnnotationText", reel_asset->annotation_text().get()); } if (asset->key_id()) { - out->add_child("KeyId")->add_child_text("urn:uuid:" + asset->key_id().get()); - out->add_child("Key")->add_child_text(asset->key() ? asset->key()->hex() : film_key); + cxml::add_text_child(out, "KeyId", "urn:uuid:" + asset->key_id().get()); + cxml::add_text_child(out, "Key", asset->key() ? asset->key()->hex() : film_key); } } }; @@ -64,16 +64,16 @@ write_dcp_digest_file ( { xmlpp::Document doc; auto root = doc.create_root_node("FHG_DCP_DIGEST", "http://www.fhg.de/2009/04/02/dcpdig"); - root->add_child("InteropMode")->add_child_text(cpl->standard() == dcp::Standard::INTEROP ? "true" : "false"); - auto composition = root->add_child("CompositionList")->add_child("Composition"); - composition->add_child("Id")->add_child_text("urn:uuid:" + cpl->id()); - composition->add_child("AnnotationText")->add_child_text(cpl->annotation_text().get_value_or("")); - composition->add_child("ContentTitleText")->add_child_text(cpl->content_title_text()); - auto reel_list = composition->add_child("ReelList"); + cxml::add_text_child(root, "InteropMode", cpl->standard() == dcp::Standard::INTEROP ? "true" : "false"); + auto composition = cxml::add_child(cxml::add_child(root, "CompositionList"), "Composition"); + cxml::add_text_child(composition, "Id", "urn:uuid:" + cpl->id()); + cxml::add_text_child(composition, "AnnotationText", cpl->annotation_text().get_value_or("")); + cxml::add_text_child(composition, "ContentTitleText", cpl->content_title_text()); + auto reel_list = cxml::add_child(composition, "ReelList"); for (auto in_reel: cpl->reels()) { - auto out_reel = reel_list->add_child("Reel"); - out_reel->add_child("Id")->add_child_text("urn:uuid:" + in_reel->id()); - out_reel->add_child("AnnotationText"); + auto out_reel = cxml::add_child(reel_list, "Reel"); + cxml::add_text_child(out_reel, "Id", "urn:uuid:" + in_reel->id()); + cxml::add_child(out_reel, "AnnotationText"); if (in_reel->main_picture()) { add_asset(film_key, in_reel->main_picture(), in_reel->main_picture()->asset(), out_reel, "MainPicture"); } diff --git a/src/lib/dcp_subtitle_content.cc b/src/lib/dcp_subtitle_content.cc index 8de5967ef..9ca3750d1 100644 --- a/src/lib/dcp_subtitle_content.cc +++ b/src/lib/dcp_subtitle_content.cc @@ -137,14 +137,14 @@ DCPSubtitleContent::technical_summary () const } void -DCPSubtitleContent::as_xml (xmlpp::Node* node, bool with_paths) const +DCPSubtitleContent::as_xml(xmlpp::Element* element, bool with_paths) const { - node->add_child("Type")->add_child_text ("DCPSubtitle"); - Content::as_xml (node, with_paths); + cxml::add_text_child(element, "Type", "DCPSubtitle"); + Content::as_xml(element, with_paths); if (only_text()) { - only_text()->as_xml (node); + only_text()->as_xml(element); } - node->add_child("Length")->add_child_text (raw_convert (_length.get ())); + cxml::add_text_child(element, "Length", raw_convert(_length.get())); } diff --git a/src/lib/dcp_subtitle_content.h b/src/lib/dcp_subtitle_content.h index 89a6f26a2..068b6dbac 100644 --- a/src/lib/dcp_subtitle_content.h +++ b/src/lib/dcp_subtitle_content.h @@ -30,7 +30,7 @@ public: void examine (std::shared_ptr film, std::shared_ptr) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + void as_xml(xmlpp::Element*, bool with_paths) const override; dcpomatic::DCPTime full_length (std::shared_ptr film) const override; dcpomatic::DCPTime approximate_length () const override; diff --git a/src/lib/dcp_text_track.cc b/src/lib/dcp_text_track.cc index 0bd751275..292932396 100644 --- a/src/lib/dcp_text_track.cc +++ b/src/lib/dcp_text_track.cc @@ -56,9 +56,9 @@ DCPTextTrack::summary () const void DCPTextTrack::as_xml (xmlpp::Element* parent) const { - parent->add_child("Name")->add_child_text(name); + cxml::add_text_child(parent, "Name", name); if (language) { - parent->add_child("Language")->add_child_text(language->to_string()); + cxml::add_text_child(parent, "Language", language->to_string()); } } diff --git a/src/lib/dcp_video.cc b/src/lib/dcp_video.cc index 217b72183..ea04610cd 100644 --- a/src/lib/dcp_video.cc +++ b/src/lib/dcp_video.cc @@ -215,7 +215,7 @@ DCPVideo::encode_remotely (EncodeServerDescription serv, int timeout) const /* Collect all XML metadata */ xmlpp::Document doc; auto root = doc.create_root_node ("EncodingRequest"); - root->add_child("Version")->add_child_text (raw_convert (SERVER_LINK_VERSION)); + cxml::add_text_child(root, "Version", raw_convert(SERVER_LINK_VERSION)); add_metadata (root); LOG_DEBUG_ENCODE (N_("Sending frame %1 to remote"), _index); @@ -254,10 +254,10 @@ DCPVideo::encode_remotely (EncodeServerDescription serv, int timeout) const void DCPVideo::add_metadata (xmlpp::Element* el) const { - el->add_child("Index")->add_child_text (raw_convert (_index)); - el->add_child("FramesPerSecond")->add_child_text (raw_convert (_frames_per_second)); - el->add_child("J2KBandwidth")->add_child_text (raw_convert (_j2k_bandwidth)); - el->add_child("Resolution")->add_child_text (raw_convert (int (_resolution))); + cxml::add_text_child(el, "Index", raw_convert(_index)); + cxml::add_text_child(el, "FramesPerSecond", raw_convert(_frames_per_second)); + cxml::add_text_child(el, "J2KBandwidth", raw_convert(_j2k_bandwidth)); + cxml::add_text_child(el, "Resolution", raw_convert(int(_resolution))); _frame->add_metadata (el); } diff --git a/src/lib/dkdm_recipient.cc b/src/lib/dkdm_recipient.cc index c73379bed..6ca36d088 100644 --- a/src/lib/dkdm_recipient.cc +++ b/src/lib/dkdm_recipient.cc @@ -52,11 +52,11 @@ DKDMRecipient::as_xml (xmlpp::Element* node) const KDMRecipient::as_xml (node); for (auto i: emails) { - node->add_child("Email")->add_child_text(i); + cxml::add_text_child(node, "Email", i); } - node->add_child("UTCOffsetHour")->add_child_text(raw_convert(utc_offset_hour)); - node->add_child("UTCOffsetMinute")->add_child_text(raw_convert(utc_offset_minute)); + cxml::add_text_child(node, "UTCOffsetHour", raw_convert(utc_offset_hour)); + cxml::add_text_child(node, "UTCOffsetMinute", raw_convert(utc_offset_minute)); } diff --git a/src/lib/dkdm_wrapper.cc b/src/lib/dkdm_wrapper.cc index 016c77c3f..2b941dfca 100644 --- a/src/lib/dkdm_wrapper.cc +++ b/src/lib/dkdm_wrapper.cc @@ -62,16 +62,16 @@ DKDM::name () const void -DKDM::as_xml (xmlpp::Element* node) const +DKDM::as_xml(xmlpp::Element* element) const { - node->add_child("DKDM")->add_child_text (_dkdm.as_xml ()); + cxml::add_text_child(element, "DKDM", _dkdm.as_xml()); } void -DKDMGroup::as_xml (xmlpp::Element* node) const +DKDMGroup::as_xml(xmlpp::Element* element) const { - auto f = node->add_child("DKDMGroup"); + auto f = cxml::add_child(element, "DKDMGroup"); f->set_attribute ("Name", _name); for (auto i: _children) { i->as_xml (f); diff --git a/src/lib/encode_server.cc b/src/lib/encode_server.cc index 036ea58a5..fd5866ecf 100644 --- a/src/lib/encode_server.cc +++ b/src/lib/encode_server.cc @@ -298,8 +298,8 @@ EncodeServer::broadcast_received () /* Reply to the client saying what we can do */ xmlpp::Document doc; auto root = doc.create_root_node ("ServerAvailable"); - root->add_child("Threads")->add_child_text (raw_convert (_worker_threads.size ())); - root->add_child("Version")->add_child_text (raw_convert (SERVER_LINK_VERSION)); + cxml::add_text_child(root, "Threads", raw_convert(_worker_threads.size())); + cxml::add_text_child(root, "Version", raw_convert(SERVER_LINK_VERSION)); auto xml = doc.write_to_string ("UTF-8"); if (_verbose) { diff --git a/src/lib/export_config.cc b/src/lib/export_config.cc index e030b98e2..4dfbb9027 100644 --- a/src/lib/export_config.cc +++ b/src/lib/export_config.cc @@ -77,7 +77,7 @@ ExportConfig::read(cxml::ConstNodePtr node) void -ExportConfig::write(xmlpp::Element* node) const +ExportConfig::write(xmlpp::Element* element) const { string name; @@ -97,11 +97,11 @@ ExportConfig::write(xmlpp::Element* node) const break; } - node->add_child("Format")->add_child_text(name); - node->add_child("MixdownToStereo")->add_child_text(_mixdown_to_stereo ? "1" : "0"); - node->add_child("SplitReels")->add_child_text(_split_reels ? "1" : "0"); - node->add_child("SplitStreams")->add_child_text(_split_streams ? "1" : "0"); - node->add_child("X264CRF")->add_child_text(dcp::raw_convert(_x264_crf)); + cxml::add_text_child(element, "Format", name); + cxml::add_text_child(element, "MixdownToStereo", _mixdown_to_stereo ? "1" : "0"); + cxml::add_text_child(element, "SplitReels", _split_reels ? "1" : "0"); + cxml::add_text_child(element, "SplitStreams", _split_streams ? "1" : "0"); + cxml::add_text_child(element, "X264CRF", dcp::raw_convert(_x264_crf)); } diff --git a/src/lib/export_config.h b/src/lib/export_config.h index 47dddb6c3..52d7b601d 100644 --- a/src/lib/export_config.h +++ b/src/lib/export_config.h @@ -37,7 +37,7 @@ public: void set_defaults(); void read(cxml::ConstNodePtr node); - void write(xmlpp::Element* node) const; + void write(xmlpp::Element* element) const; ExportFormat format() const { return _format; diff --git a/src/lib/ffmpeg_audio_stream.cc b/src/lib/ffmpeg_audio_stream.cc index 9400eb60d..24f96b889 100644 --- a/src/lib/ffmpeg_audio_stream.cc +++ b/src/lib/ffmpeg_audio_stream.cc @@ -52,19 +52,19 @@ FFmpegAudioStream::FFmpegAudioStream (cxml::ConstNodePtr node, int version) void -FFmpegAudioStream::as_xml (xmlpp::Node* root) const +FFmpegAudioStream::as_xml(xmlpp::Element* root) const { FFmpegStream::as_xml (root); - root->add_child("FrameRate")->add_child_text(raw_convert(frame_rate())); - root->add_child("Length")->add_child_text(raw_convert(length())); - mapping().as_xml (root->add_child("Mapping")); + cxml::add_text_child(root, "FrameRate", raw_convert(frame_rate())); + cxml::add_text_child(root, "Length", raw_convert(length())); + mapping().as_xml(cxml::add_child(root, "Mapping")); if (first_audio) { - root->add_child("FirstAudio")->add_child_text(raw_convert(first_audio.get().get())); + cxml::add_text_child(root, "FirstAudio", raw_convert(first_audio.get().get())); } if (codec_name) { - root->add_child("CodecName")->add_child_text(codec_name.get()); + cxml::add_text_child(root, "CodecName", codec_name.get()); } if (bit_depth()) { - root->add_child("BitDepth")->add_child_text(raw_convert(bit_depth().get())); + cxml::add_text_child(root, "BitDepth", raw_convert(bit_depth().get())); } } diff --git a/src/lib/ffmpeg_audio_stream.h b/src/lib/ffmpeg_audio_stream.h index aae982f9e..afd30e905 100644 --- a/src/lib/ffmpeg_audio_stream.h +++ b/src/lib/ffmpeg_audio_stream.h @@ -48,7 +48,7 @@ public: FFmpegAudioStream (cxml::ConstNodePtr, int); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; /* XXX: should probably be locked */ diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index c788e7cb1..8baa40c1b 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -197,61 +197,61 @@ FFmpegContent::FFmpegContent (vector> c) void -FFmpegContent::as_xml (xmlpp::Node* node, bool with_paths) const +FFmpegContent::as_xml(xmlpp::Element* element, bool with_paths) const { - node->add_child("Type")->add_child_text("FFmpeg"); - Content::as_xml (node, with_paths); + cxml::add_text_child(element, "Type", "FFmpeg"); + Content::as_xml(element, with_paths); if (video) { - video->as_xml (node); + video->as_xml(element); } if (audio) { - audio->as_xml (node); + audio->as_xml(element); for (auto i: audio->streams()) { auto f = dynamic_pointer_cast (i); DCPOMATIC_ASSERT (f); - f->as_xml (node->add_child("AudioStream")); + f->as_xml(cxml::add_child(element, "AudioStream")); } } if (only_text()) { - only_text()->as_xml (node); + only_text()->as_xml(element); } boost::mutex::scoped_lock lm (_mutex); for (auto i: _subtitle_streams) { - auto t = node->add_child("SubtitleStream"); + auto t = cxml::add_child(element, "SubtitleStream"); if (_subtitle_stream && i == _subtitle_stream) { - t->add_child("Selected")->add_child_text("1"); + cxml::add_text_child(t, "Selected", "1"); } i->as_xml (t); } for (auto i: _filters) { - node->add_child("Filter")->add_child_text(i.id()); + cxml::add_text_child(element, "Filter", i.id()); } if (_first_video) { - node->add_child("FirstVideo")->add_child_text(raw_convert(_first_video.get().get())); + cxml::add_text_child(element, "FirstVideo", raw_convert(_first_video.get().get())); } if (_color_range) { - node->add_child("ColorRange")->add_child_text(raw_convert(static_cast(*_color_range))); + cxml::add_text_child(element, "ColorRange", raw_convert(static_cast(*_color_range))); } if (_color_primaries) { - node->add_child("ColorPrimaries")->add_child_text(raw_convert(static_cast(*_color_primaries))); + cxml::add_text_child(element, "ColorPrimaries", raw_convert(static_cast(*_color_primaries))); } if (_color_trc) { - node->add_child("ColorTransferCharacteristic")->add_child_text(raw_convert(static_cast(*_color_trc))); + cxml::add_text_child(element, "ColorTransferCharacteristic", raw_convert(static_cast(*_color_trc))); } if (_colorspace) { - node->add_child("Colorspace")->add_child_text(raw_convert(static_cast(*_colorspace))); + cxml::add_text_child(element, "Colorspace", raw_convert(static_cast(*_colorspace))); } if (_bits_per_pixel) { - node->add_child("BitsPerPixel")->add_child_text(raw_convert(*_bits_per_pixel)); + cxml::add_text_child(element, "BitsPerPixel", raw_convert(*_bits_per_pixel)); } } diff --git a/src/lib/ffmpeg_content.h b/src/lib/ffmpeg_content.h index a86358b76..ce067f2d3 100644 --- a/src/lib/ffmpeg_content.h +++ b/src/lib/ffmpeg_content.h @@ -70,7 +70,7 @@ public: void take_settings_from (std::shared_ptr c) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + void as_xml(xmlpp::Element* element, bool with_paths) const override; dcpomatic::DCPTime full_length (std::shared_ptr film) const override; dcpomatic::DCPTime approximate_length () const override; diff --git a/src/lib/ffmpeg_image_proxy.cc b/src/lib/ffmpeg_image_proxy.cc index 2fcd486df..0ee41deab 100644 --- a/src/lib/ffmpeg_image_proxy.cc +++ b/src/lib/ffmpeg_image_proxy.cc @@ -234,9 +234,9 @@ FFmpegImageProxy::image (Image::Alignment alignment, optional) const void -FFmpegImageProxy::add_metadata (xmlpp::Node* node) const +FFmpegImageProxy::add_metadata(xmlpp::Element* element) const { - node->add_child("Type")->add_child_text (N_("FFmpeg")); + cxml::add_text_child(element, "Type", N_("FFmpeg")); } void diff --git a/src/lib/ffmpeg_image_proxy.h b/src/lib/ffmpeg_image_proxy.h index b567fadee..1b8f44a7a 100644 --- a/src/lib/ffmpeg_image_proxy.h +++ b/src/lib/ffmpeg_image_proxy.h @@ -35,7 +35,7 @@ public: boost::optional size = boost::optional () ) const override; - void add_metadata (xmlpp::Node *) const override; + void add_metadata(xmlpp::Element*) const override; void write_to_socket (std::shared_ptr) const override; bool same (std::shared_ptr other) const override; size_t memory_used () const override; diff --git a/src/lib/ffmpeg_stream.cc b/src/lib/ffmpeg_stream.cc index 47f71d119..800c45eb6 100644 --- a/src/lib/ffmpeg_stream.cc +++ b/src/lib/ffmpeg_stream.cc @@ -40,10 +40,10 @@ FFmpegStream::FFmpegStream (cxml::ConstNodePtr node) } void -FFmpegStream::as_xml (xmlpp::Node* root) const +FFmpegStream::as_xml(xmlpp::Element* root) const { - root->add_child("Name")->add_child_text (name); - root->add_child("Id")->add_child_text (raw_convert (_id)); + cxml::add_text_child(root, "Name", name); + cxml::add_text_child(root, "Id", raw_convert(_id)); } bool diff --git a/src/lib/ffmpeg_stream.h b/src/lib/ffmpeg_stream.h index 84b2a8853..221075eeb 100644 --- a/src/lib/ffmpeg_stream.h +++ b/src/lib/ffmpeg_stream.h @@ -37,7 +37,7 @@ public: explicit FFmpegStream (cxml::ConstNodePtr); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; /** @param c An AVFormatContext. * @param index A stream index within the AVFormatContext. diff --git a/src/lib/ffmpeg_subtitle_stream.cc b/src/lib/ffmpeg_subtitle_stream.cc index 1101901b7..3f43b6ec5 100644 --- a/src/lib/ffmpeg_subtitle_stream.cc +++ b/src/lib/ffmpeg_subtitle_stream.cc @@ -49,15 +49,15 @@ FFmpegSubtitleStream::FFmpegSubtitleStream (cxml::ConstNodePtr node, int version } void -FFmpegSubtitleStream::as_xml (xmlpp::Node* root) const +FFmpegSubtitleStream::as_xml(xmlpp::Element* root) const { - FFmpegStream::as_xml (root); + FFmpegStream::as_xml(root); boost::mutex::scoped_lock lm (_mutex); for (map::const_iterator i = _colours.begin(); i != _colours.end(); ++i) { - xmlpp::Node* node = root->add_child("Colour"); - i->first.as_xml (node->add_child("From")); - i->second.as_xml (node->add_child("To")); + auto node = cxml::add_child(root, "Colour"); + i->first.as_xml(cxml::add_child(node, "From")); + i->second.as_xml(cxml::add_child(node, "To")); } } diff --git a/src/lib/ffmpeg_subtitle_stream.h b/src/lib/ffmpeg_subtitle_stream.h index 8f56d1975..6251350ce 100644 --- a/src/lib/ffmpeg_subtitle_stream.h +++ b/src/lib/ffmpeg_subtitle_stream.h @@ -33,7 +33,7 @@ public: FFmpegSubtitleStream (cxml::ConstNodePtr node, int version); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; void set_colour (RGBA from, RGBA to); std::map colours () const; diff --git a/src/lib/film.cc b/src/lib/film.cc index d9ab6e2a3..fc0325f26 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -379,88 +379,88 @@ Film::metadata (bool with_content_paths) const auto doc = make_shared(); auto root = doc->create_root_node ("Metadata"); - root->add_child("Version")->add_child_text (raw_convert (current_state_version)); - auto last_write = root->add_child("LastWrittenBy"); + cxml::add_text_child(root, "Version", raw_convert(current_state_version)); + auto last_write = cxml::add_child(root, "LastWrittenBy"); last_write->add_child_text (dcpomatic_version); last_write->set_attribute("git", dcpomatic_git_commit); - root->add_child("Name")->add_child_text (_name); - root->add_child("UseISDCFName")->add_child_text (_use_isdcf_name ? "1" : "0"); + cxml::add_text_child(root, "Name", _name); + cxml::add_text_child(root, "UseISDCFName", _use_isdcf_name ? "1" : "0"); if (_dcp_content_type) { - root->add_child("DCPContentType")->add_child_text (_dcp_content_type->isdcf_name ()); + cxml::add_text_child(root, "DCPContentType", _dcp_content_type->isdcf_name()); } if (_container) { - root->add_child("Container")->add_child_text (_container->id ()); - } - - root->add_child("Resolution")->add_child_text (resolution_to_string (_resolution)); - root->add_child("J2KBandwidth")->add_child_text (raw_convert (_j2k_bandwidth)); - root->add_child("VideoFrameRate")->add_child_text (raw_convert (_video_frame_rate)); - root->add_child("AudioFrameRate")->add_child_text(raw_convert(_audio_frame_rate)); - root->add_child("ISDCFDate")->add_child_text (boost::gregorian::to_iso_string (_isdcf_date)); - root->add_child("AudioChannels")->add_child_text (raw_convert (_audio_channels)); - root->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0"); - root->add_child("Sequence")->add_child_text (_sequence ? "1" : "0"); - root->add_child("Interop")->add_child_text (_interop ? "1" : "0"); - root->add_child("LimitToSMPTEBv20")->add_child_text(_limit_to_smpte_bv20 ? "1" : "0"); - root->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0"); - root->add_child("Key")->add_child_text (_key.hex ()); - root->add_child("ContextID")->add_child_text (_context_id); + cxml::add_text_child(root, "Container", _container->id()); + } + + cxml::add_text_child(root, "Resolution", resolution_to_string(_resolution)); + cxml::add_text_child(root, "J2KBandwidth", raw_convert(_j2k_bandwidth)); + cxml::add_text_child(root, "VideoFrameRate", raw_convert(_video_frame_rate)); + cxml::add_text_child(root, "AudioFrameRate", raw_convert(_audio_frame_rate)); + cxml::add_text_child(root, "ISDCFDate", boost::gregorian::to_iso_string(_isdcf_date)); + cxml::add_text_child(root, "AudioChannels", raw_convert(_audio_channels)); + cxml::add_text_child(root, "ThreeD", _three_d ? "1" : "0"); + cxml::add_text_child(root, "Sequence", _sequence ? "1" : "0"); + cxml::add_text_child(root, "Interop", _interop ? "1" : "0"); + cxml::add_text_child(root, "LimitToSMPTEBv20", _limit_to_smpte_bv20 ? "1" : "0"); + cxml::add_text_child(root, "Encrypted", _encrypted ? "1" : "0"); + cxml::add_text_child(root, "Key", _key.hex ()); + cxml::add_text_child(root, "ContextID", _context_id); if (_audio_processor) { - root->add_child("AudioProcessor")->add_child_text (_audio_processor->id ()); + cxml::add_text_child(root, "AudioProcessor", _audio_processor->id()); } - root->add_child("ReelType")->add_child_text (raw_convert (static_cast (_reel_type))); - root->add_child("ReelLength")->add_child_text (raw_convert (_reel_length)); - root->add_child("ReencodeJ2K")->add_child_text (_reencode_j2k ? "1" : "0"); - root->add_child("UserExplicitVideoFrameRate")->add_child_text(_user_explicit_video_frame_rate ? "1" : "0"); + cxml::add_text_child(root, "ReelType", raw_convert(static_cast (_reel_type))); + cxml::add_text_child(root, "ReelLength", raw_convert(_reel_length)); + cxml::add_text_child(root, "ReencodeJ2K", _reencode_j2k ? "1" : "0"); + cxml::add_text_child(root, "UserExplicitVideoFrameRate", _user_explicit_video_frame_rate ? "1" : "0"); for (auto const& marker: _markers) { - auto m = root->add_child("Marker"); + auto m = cxml::add_child(root, "Marker"); m->set_attribute("Type", dcp::marker_to_string(marker.first)); m->add_child_text(raw_convert(marker.second.get())); } for (auto i: _ratings) { - i.as_xml (root->add_child("Rating")); + i.as_xml(cxml::add_child(root, "Rating")); } for (auto i: _content_versions) { - root->add_child("ContentVersion")->add_child_text(i); + cxml::add_text_child(root, "ContentVersion", i); } - root->add_child("NameLanguage")->add_child_text(_name_language.to_string()); - root->add_child("TerritoryType")->add_child_text(territory_type_to_string(_territory_type)); + cxml::add_text_child(root, "NameLanguage", _name_language.to_string()); + cxml::add_text_child(root, "TerritoryType", territory_type_to_string(_territory_type)); if (_release_territory) { - root->add_child("ReleaseTerritory")->add_child_text(_release_territory->subtag()); + cxml::add_text_child(root, "ReleaseTerritory", _release_territory->subtag()); } if (_sign_language_video_language) { - root->add_child("SignLanguageVideoLanguage")->add_child_text(_sign_language_video_language->to_string()); + cxml::add_text_child(root, "SignLanguageVideoLanguage", _sign_language_video_language->to_string()); } - root->add_child("VersionNumber")->add_child_text(raw_convert(_version_number)); - root->add_child("Status")->add_child_text(dcp::status_to_string(_status)); + cxml::add_text_child(root, "VersionNumber", raw_convert(_version_number)); + cxml::add_text_child(root, "Status", dcp::status_to_string(_status)); if (_chain) { - root->add_child("Chain")->add_child_text(*_chain); + cxml::add_text_child(root, "Chain", *_chain); } if (_distributor) { - root->add_child("Distributor")->add_child_text(*_distributor); + cxml::add_text_child(root, "Distributor", *_distributor); } if (_facility) { - root->add_child("Facility")->add_child_text(*_facility); + cxml::add_text_child(root, "Facility", *_facility); } if (_studio) { - root->add_child("Studio")->add_child_text(*_studio); + cxml::add_text_child(root, "Studio", *_studio); } - root->add_child("TempVersion")->add_child_text(_temp_version ? "1" : "0"); - root->add_child("PreRelease")->add_child_text(_pre_release ? "1" : "0"); - root->add_child("RedBand")->add_child_text(_red_band ? "1" : "0"); - root->add_child("TwoDVersionOfThreeD")->add_child_text(_two_d_version_of_three_d ? "1" : "0"); + cxml::add_text_child(root, "TempVersion", _temp_version ? "1" : "0"); + cxml::add_text_child(root, "PreRelease", _pre_release ? "1" : "0"); + cxml::add_text_child(root, "RedBand", _red_band ? "1" : "0"); + cxml::add_text_child(root, "TwoDVersionOfThreeD", _two_d_version_of_three_d ? "1" : "0"); if (_luminance) { - root->add_child("LuminanceValue")->add_child_text(raw_convert(_luminance->value())); - root->add_child("LuminanceUnit")->add_child_text(dcp::Luminance::unit_to_string(_luminance->unit())); + cxml::add_text_child(root, "LuminanceValue", raw_convert(_luminance->value())); + cxml::add_text_child(root, "LuminanceUnit", dcp::Luminance::unit_to_string(_luminance->unit())); } - root->add_child("UserExplicitContainer")->add_child_text(_user_explicit_container ? "1" : "0"); - root->add_child("UserExplicitResolution")->add_child_text(_user_explicit_resolution ? "1" : "0"); + cxml::add_text_child(root, "UserExplicitContainer", _user_explicit_container ? "1" : "0"); + cxml::add_text_child(root, "UserExplicitResolution", _user_explicit_resolution ? "1" : "0"); if (_audio_language) { - root->add_child("AudioLanguage")->add_child_text(_audio_language->to_string()); + cxml::add_text_child(root, "AudioLanguage", _audio_language->to_string()); } - _playlist->as_xml (root->add_child ("Playlist"), with_content_paths); + _playlist->as_xml(cxml::add_child(root, "Playlist"), with_content_paths); return doc; } diff --git a/src/lib/font.cc b/src/lib/font.cc index 955a2ad1c..246d3eeb8 100644 --- a/src/lib/font.cc +++ b/src/lib/font.cc @@ -63,11 +63,11 @@ Font& Font::operator=(Font const& other) void -Font::as_xml (xmlpp::Node* node) +Font::as_xml(xmlpp::Element* element) { - node->add_child("Id")->add_child_text(_id); + cxml::add_text_child(element, "Id", _id); if (_content.file) { - node->add_child("File")->add_child_text(_content.file->string()); + cxml::add_text_child(element, "File", _content.file->string()); } } diff --git a/src/lib/font.h b/src/lib/font.h index 12a14aba4..092b682ba 100644 --- a/src/lib/font.h +++ b/src/lib/font.h @@ -57,7 +57,7 @@ public: Font(Font const& other); Font& operator=(Font const& other); - void as_xml (xmlpp::Node* node); + void as_xml(xmlpp::Element* element); std::string id () const { return _id; diff --git a/src/lib/image_content.cc b/src/lib/image_content.cc index 1a92c944e..1ac6e085b 100644 --- a/src/lib/image_content.cc +++ b/src/lib/image_content.cc @@ -99,13 +99,13 @@ ImageContent::technical_summary () const void -ImageContent::as_xml (xmlpp::Node* node, bool with_paths) const +ImageContent::as_xml(xmlpp::Element* element, bool with_paths) const { - node->add_child("Type")->add_child_text ("Image"); - Content::as_xml (node, with_paths); + cxml::add_text_child(element, "Type", "Image"); + Content::as_xml(element, with_paths); if (video) { - video->as_xml (node); + video->as_xml(element); } } diff --git a/src/lib/image_content.h b/src/lib/image_content.h index d817eeee8..140159bfa 100644 --- a/src/lib/image_content.h +++ b/src/lib/image_content.h @@ -40,7 +40,7 @@ public: void examine (std::shared_ptr film, std::shared_ptr) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + void as_xml(xmlpp::Element*, bool with_paths) const override; dcpomatic::DCPTime full_length (std::shared_ptr film) const override; dcpomatic::DCPTime approximate_length () const override; diff --git a/src/lib/image_proxy.h b/src/lib/image_proxy.h index a37be580f..cec13b773 100644 --- a/src/lib/image_proxy.h +++ b/src/lib/image_proxy.h @@ -41,7 +41,7 @@ class Image; class Socket; namespace xmlpp { - class Node; + class Element; } namespace cxml { @@ -101,7 +101,7 @@ public: boost::optional size = boost::optional () ) const = 0; - virtual void add_metadata (xmlpp::Node *) const = 0; + virtual void add_metadata(xmlpp::Element *) const = 0; virtual void write_to_socket (std::shared_ptr) const = 0; /** @return true if our image is definitely the same as another, false if it is probably not */ virtual bool same (std::shared_ptr) const = 0; diff --git a/src/lib/j2k_image_proxy.cc b/src/lib/j2k_image_proxy.cc index 269b01bca..869e96967 100644 --- a/src/lib/j2k_image_proxy.cc +++ b/src/lib/j2k_image_proxy.cc @@ -192,15 +192,15 @@ J2KImageProxy::image (Image::Alignment alignment, optional target_siz void -J2KImageProxy::add_metadata (xmlpp::Node* node) const +J2KImageProxy::add_metadata(xmlpp::Element* element) const { - node->add_child("Type")->add_child_text(N_("J2K")); - node->add_child("Width")->add_child_text(raw_convert(_size.width)); - node->add_child("Height")->add_child_text(raw_convert(_size.height)); + cxml::add_text_child(element, "Type", N_("J2K")); + cxml::add_text_child(element, "Width", raw_convert(_size.width)); + cxml::add_text_child(element, "Height", raw_convert(_size.height)); if (_eye) { - node->add_child("Eye")->add_child_text(raw_convert(static_cast(_eye.get()))); + cxml::add_text_child(element, "Eye", raw_convert(static_cast(_eye.get()))); } - node->add_child("Size")->add_child_text(raw_convert(_data->size())); + cxml::add_text_child(element, "Size", raw_convert(_data->size())); } diff --git a/src/lib/j2k_image_proxy.h b/src/lib/j2k_image_proxy.h index 9666ea406..3346fff08 100644 --- a/src/lib/j2k_image_proxy.h +++ b/src/lib/j2k_image_proxy.h @@ -61,7 +61,7 @@ public: boost::optional size = boost::optional () ) const override; - void add_metadata (xmlpp::Node *) const override; + void add_metadata(xmlpp::Element*) const override; void write_to_socket (std::shared_ptr override) const override; /** @return true if our image is definitely the same as another, false if it is probably not */ bool same (std::shared_ptr) const override; diff --git a/src/lib/kdm_recipient.cc b/src/lib/kdm_recipient.cc index 671e9797c..c33eb1b9f 100644 --- a/src/lib/kdm_recipient.cc +++ b/src/lib/kdm_recipient.cc @@ -39,14 +39,14 @@ KDMRecipient::KDMRecipient (cxml::ConstNodePtr node) void KDMRecipient::as_xml (xmlpp::Element* parent) const { - parent->add_child("Name")->add_child_text(name); + cxml::add_text_child(parent, "Name", name); if (recipient) { - parent->add_child("Recipient")->add_child_text(recipient->certificate(true)); + cxml::add_text_child(parent, "Recipient", recipient->certificate(true)); } if (recipient_file) { - parent->add_child("RecipientFile")->add_child_text(*recipient_file); + cxml::add_text_child(parent, "RecipientFile", *recipient_file); } - parent->add_child("Notes")->add_child_text(notes); + cxml::add_text_child(parent, "Notes", notes); } diff --git a/src/lib/pixel_quanta.cc b/src/lib/pixel_quanta.cc index 7c1d285cf..07690f3ac 100644 --- a/src/lib/pixel_quanta.cc +++ b/src/lib/pixel_quanta.cc @@ -34,8 +34,8 @@ PixelQuanta::PixelQuanta (cxml::ConstNodePtr node) void PixelQuanta::as_xml (xmlpp::Element* node) const { - node->add_child("X")->add_child_text(dcp::raw_convert(x)); - node->add_child("Y")->add_child_text(dcp::raw_convert(y)); + cxml::add_text_child(node, "X", dcp::raw_convert(x)); + cxml::add_text_child(node, "Y", dcp::raw_convert(y)); } diff --git a/src/lib/player_video.cc b/src/lib/player_video.cc index 35c5d3daa..deebc67fd 100644 --- a/src/lib/player_video.cc +++ b/src/lib/player_video.cc @@ -199,29 +199,29 @@ PlayerVideo::make_image (function pixel_format, V void -PlayerVideo::add_metadata (xmlpp::Node* node) const +PlayerVideo::add_metadata(xmlpp::Element* element) const { - _crop.as_xml (node); + _crop.as_xml(element); if (_fade) { - node->add_child("Fade")->add_child_text (raw_convert (_fade.get ())); + cxml::add_text_child(element, "Fade", raw_convert(_fade.get())); } - _in->add_metadata (node->add_child ("In")); - node->add_child("InterWidth")->add_child_text (raw_convert (_inter_size.width)); - node->add_child("InterHeight")->add_child_text (raw_convert (_inter_size.height)); - node->add_child("OutWidth")->add_child_text (raw_convert (_out_size.width)); - node->add_child("OutHeight")->add_child_text (raw_convert (_out_size.height)); - node->add_child("Eyes")->add_child_text (raw_convert (static_cast (_eyes))); - node->add_child("Part")->add_child_text (raw_convert (static_cast (_part))); - node->add_child("VideoRange")->add_child_text(raw_convert(static_cast(_video_range))); - node->add_child("Error")->add_child_text(_error ? "1" : "0"); + _in->add_metadata(cxml::add_child(element, "In")); + cxml::add_text_child(element, "InterWidth", raw_convert(_inter_size.width)); + cxml::add_text_child(element, "InterHeight", raw_convert(_inter_size.height)); + cxml::add_text_child(element, "OutWidth", raw_convert(_out_size.width)); + cxml::add_text_child(element, "OutHeight", raw_convert(_out_size.height)); + cxml::add_text_child(element, "Eyes", raw_convert(static_cast(_eyes))); + cxml::add_text_child(element, "Part", raw_convert(static_cast(_part))); + cxml::add_text_child(element, "VideoRange", raw_convert(static_cast(_video_range))); + cxml::add_text_child(element, "Error", _error ? "1" : "0"); if (_colour_conversion) { - _colour_conversion.get().as_xml (node); + _colour_conversion.get().as_xml(element); } if (_text) { - node->add_child ("SubtitleWidth")->add_child_text (raw_convert (_text->image->size().width)); - node->add_child ("SubtitleHeight")->add_child_text (raw_convert (_text->image->size().height)); - node->add_child ("SubtitleX")->add_child_text (raw_convert (_text->position.x)); - node->add_child ("SubtitleY")->add_child_text (raw_convert (_text->position.y)); + cxml::add_text_child(element, "SubtitleWidth", raw_convert(_text->image->size().width)); + cxml::add_text_child(element, "SubtitleHeight", raw_convert(_text->image->size().height)); + cxml::add_text_child(element, "SubtitleX", raw_convert(_text->position.x)); + cxml::add_text_child(element, "SubtitleY", raw_convert(_text->position.y)); } } diff --git a/src/lib/player_video.h b/src/lib/player_video.h index f2781c1a0..acf7f6473 100644 --- a/src/lib/player_video.h +++ b/src/lib/player_video.h @@ -82,7 +82,7 @@ public: static AVPixelFormat force (AVPixelFormat); static AVPixelFormat keep_xyz_or_rgb (AVPixelFormat); - void add_metadata (xmlpp::Node* node) const; + void add_metadata(xmlpp::Element* element) const; void write_to_socket (std::shared_ptr socket) const; bool reset_metadata (std::shared_ptr film, dcp::Size player_video_container_size); diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc index 85957e106..7f83e9474 100644 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@ -282,10 +282,10 @@ Playlist::set_from_xml (shared_ptr film, cxml::ConstNodePtr node, in * @param with_content_paths true to include <Path> nodes in <Content> nodes, false to omit them. */ void -Playlist::as_xml (xmlpp::Node* node, bool with_content_paths) +Playlist::as_xml(xmlpp::Element* element, bool with_content_paths) { for (auto i: content()) { - i->as_xml (node->add_child ("Content"), with_content_paths); + i->as_xml(cxml::add_child(element, "Content"), with_content_paths); } } diff --git a/src/lib/playlist.h b/src/lib/playlist.h index e2662eb45..7b9bd19fa 100644 --- a/src/lib/playlist.h +++ b/src/lib/playlist.h @@ -50,7 +50,7 @@ public: Playlist (Playlist const&) = delete; Playlist& operator= (Playlist const&) = delete; - void as_xml (xmlpp::Node *, bool with_content_paths); + void as_xml(xmlpp::Element*, bool with_content_paths); void set_from_xml (std::shared_ptr film, cxml::ConstNodePtr node, int version, std::list& notes); void add (std::shared_ptr film, std::shared_ptr); diff --git a/src/lib/raw_image_proxy.cc b/src/lib/raw_image_proxy.cc index c606ddd99..1ad78827c 100644 --- a/src/lib/raw_image_proxy.cc +++ b/src/lib/raw_image_proxy.cc @@ -73,12 +73,12 @@ RawImageProxy::image (Image::Alignment alignment, optional) const void -RawImageProxy::add_metadata (xmlpp::Node* node) const +RawImageProxy::add_metadata(xmlpp::Element* element) const { - node->add_child("Type")->add_child_text(N_("Raw")); - node->add_child("Width")->add_child_text(raw_convert(_image->size().width)); - node->add_child("Height")->add_child_text(raw_convert(_image->size().height)); - node->add_child("PixelFormat")->add_child_text(raw_convert(static_cast(_image->pixel_format()))); + cxml::add_text_child(element, "Type", N_("Raw")); + cxml::add_text_child(element, "Width", raw_convert(_image->size().width)); + cxml::add_text_child(element, "Height", raw_convert(_image->size().height)); + cxml::add_text_child(element, "PixelFormat", raw_convert(static_cast(_image->pixel_format()))); } diff --git a/src/lib/raw_image_proxy.h b/src/lib/raw_image_proxy.h index d5ae2457d..852f7c076 100644 --- a/src/lib/raw_image_proxy.h +++ b/src/lib/raw_image_proxy.h @@ -37,7 +37,7 @@ public: boost::optional size = boost::optional () ) const override; - void add_metadata (xmlpp::Node *) const override; + void add_metadata(xmlpp::Element*) const override; void write_to_socket (std::shared_ptr) const override; bool same (std::shared_ptr) const override; size_t memory_used () const override; diff --git a/src/lib/rgba.cc b/src/lib/rgba.cc index 2e6a4fab6..2e0408d8a 100644 --- a/src/lib/rgba.cc +++ b/src/lib/rgba.cc @@ -41,12 +41,12 @@ RGBA::RGBA (cxml::ConstNodePtr node) void -RGBA::as_xml (xmlpp::Node* parent) const +RGBA::as_xml(xmlpp::Element* parent) const { - parent->add_child("R")->add_child_text(lexical_cast(int(r))); - parent->add_child("G")->add_child_text(lexical_cast(int(g))); - parent->add_child("B")->add_child_text(lexical_cast(int(b))); - parent->add_child("A")->add_child_text(lexical_cast(int(a))); + cxml::add_text_child(parent, "R", lexical_cast(int(r))); + cxml::add_text_child(parent, "G", lexical_cast(int(g))); + cxml::add_text_child(parent, "B", lexical_cast(int(b))); + cxml::add_text_child(parent, "A", lexical_cast(int(a))); } diff --git a/src/lib/rgba.h b/src/lib/rgba.h index 96fed710e..a582a4ca1 100644 --- a/src/lib/rgba.h +++ b/src/lib/rgba.h @@ -44,7 +44,7 @@ public: explicit RGBA (cxml::ConstNodePtr node); - void as_xml (xmlpp::Node* parent) const; + void as_xml(xmlpp::Element* parent) const; uint8_t r = 0; uint8_t g = 0; diff --git a/src/lib/screen.cc b/src/lib/screen.cc index febf9085c..fc75aee06 100644 --- a/src/lib/screen.cc +++ b/src/lib/screen.cc @@ -57,7 +57,7 @@ Screen::as_xml (xmlpp::Element* parent) const { KDMRecipient::as_xml (parent); for (auto i: trusted_devices) { - parent->add_child("TrustedDevice")->add_child_text(i.as_string()); + cxml::add_text_child(parent, "TrustedDevice", i.as_string()); } } diff --git a/src/lib/spl.cc b/src/lib/spl.cc index f49f11a7d..e87465cdc 100644 --- a/src/lib/spl.cc +++ b/src/lib/spl.cc @@ -62,10 +62,10 @@ SPL::write (boost::filesystem::path path) const { xmlpp::Document doc; auto root = doc.create_root_node ("SPL"); - root->add_child("Id")->add_child_text (_id); - root->add_child("Name")->add_child_text (_name); + cxml::add_text_child(root, "Id", _id); + cxml::add_text_child(root, "Name", _name); for (auto i: _spl) { - i.as_xml (root->add_child("Entry")); + i.as_xml(cxml::add_child(root, "Entry")); } doc.write_to_file_formatted (path.string()); } diff --git a/src/lib/spl_entry.cc b/src/lib/spl_entry.cc index f0b377a56..a77b0b7d5 100644 --- a/src/lib/spl_entry.cc +++ b/src/lib/spl_entry.cc @@ -53,5 +53,5 @@ SPLEntry::SPLEntry (shared_ptr c) void SPLEntry::as_xml (xmlpp::Element* e) { - e->add_child("Digest")->add_child_text(digest); + cxml::add_text_child(e, "Digest", digest); } diff --git a/src/lib/string_text_file_content.cc b/src/lib/string_text_file_content.cc index d8c195be7..c6639936c 100644 --- a/src/lib/string_text_file_content.cc +++ b/src/lib/string_text_file_content.cc @@ -122,16 +122,16 @@ StringTextFileContent::technical_summary () const void -StringTextFileContent::as_xml (xmlpp::Node* node, bool with_paths) const +StringTextFileContent::as_xml(xmlpp::Element* element, bool with_paths) const { - node->add_child("Type")->add_child_text("TextSubtitle"); - Content::as_xml (node, with_paths); + cxml::add_text_child(element, "Type", "TextSubtitle"); + Content::as_xml(element, with_paths); if (only_text()) { - only_text()->as_xml(node); + only_text()->as_xml(element); } - node->add_child("Length")->add_child_text(raw_convert(_length.get ())); + cxml::add_text_child(element, "Length", raw_convert(_length.get())); } diff --git a/src/lib/string_text_file_content.h b/src/lib/string_text_file_content.h index 30f543381..8a5d9946a 100644 --- a/src/lib/string_text_file_content.h +++ b/src/lib/string_text_file_content.h @@ -45,7 +45,7 @@ public: void examine (std::shared_ptr film, std::shared_ptr) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + void as_xml(xmlpp::Element*, bool with_paths) const override; dcpomatic::DCPTime full_length (std::shared_ptr film) const override; dcpomatic::DCPTime approximate_length () const override; std::string identifier () const override; diff --git a/src/lib/subtitle_analysis.cc b/src/lib/subtitle_analysis.cc index ff1969a3a..2968416c6 100644 --- a/src/lib/subtitle_analysis.cc +++ b/src/lib/subtitle_analysis.cc @@ -70,18 +70,18 @@ SubtitleAnalysis::write (boost::filesystem::path path) const auto doc = make_shared(); xmlpp::Element* root = doc->create_root_node ("SubtitleAnalysis"); - root->add_child("Version")->add_child_text (raw_convert(_current_state_version)); + cxml::add_text_child(root, "Version", raw_convert(_current_state_version)); if (_bounding_box) { - auto bounding_box = root->add_child("BoundingBox"); - bounding_box->add_child("X")->add_child_text(raw_convert(_bounding_box->x)); - bounding_box->add_child("Y")->add_child_text(raw_convert(_bounding_box->y)); - bounding_box->add_child("Width")->add_child_text(raw_convert(_bounding_box->width)); - bounding_box->add_child("Height")->add_child_text(raw_convert(_bounding_box->height)); + auto bounding_box = cxml::add_child(root, "BoundingBox"); + cxml::add_text_child(bounding_box, "X", raw_convert(_bounding_box->x)); + cxml::add_text_child(bounding_box, "Y", raw_convert(_bounding_box->y)); + cxml::add_text_child(bounding_box, "Width", raw_convert(_bounding_box->width)); + cxml::add_text_child(bounding_box, "Height", raw_convert(_bounding_box->height)); } - root->add_child("AnalysisXOffset")->add_child_text(raw_convert(_analysis_x_offset)); - root->add_child("AnalysisYOffset")->add_child_text(raw_convert(_analysis_y_offset)); + cxml::add_text_child(root, "AnalysisXOffset", raw_convert(_analysis_x_offset)); + cxml::add_text_child(root, "AnalysisYOffset", raw_convert(_analysis_y_offset)); doc->write_to_file_formatted (path.string()); } diff --git a/src/lib/text_content.cc b/src/lib/text_content.cc index 92a35b822..90bf52757 100644 --- a/src/lib/text_content.cc +++ b/src/lib/text_content.cc @@ -353,61 +353,61 @@ TextContent::TextContent (Content* parent, vector> c) /** _mutex must not be held on entry */ void -TextContent::as_xml (xmlpp::Node* root) const +TextContent::as_xml(xmlpp::Element* root) const { boost::mutex::scoped_lock lm (_mutex); - auto text = root->add_child ("Text"); + auto text = cxml::add_child(root, "Text"); - text->add_child("Use")->add_child_text (_use ? "1" : "0"); - text->add_child("Burn")->add_child_text (_burn ? "1" : "0"); - text->add_child("XOffset")->add_child_text (raw_convert (_x_offset)); - text->add_child("YOffset")->add_child_text (raw_convert (_y_offset)); - text->add_child("XScale")->add_child_text (raw_convert (_x_scale)); - text->add_child("YScale")->add_child_text (raw_convert (_y_scale)); + cxml::add_text_child(text, "Use", _use ? "1" : "0"); + cxml::add_text_child(text, "Burn", _burn ? "1" : "0"); + cxml::add_text_child(text, "XOffset", raw_convert(_x_offset)); + cxml::add_text_child(text, "YOffset", raw_convert(_y_offset)); + cxml::add_text_child(text, "XScale", raw_convert(_x_scale)); + cxml::add_text_child(text, "YScale", raw_convert(_y_scale)); if (_colour) { - text->add_child("Red")->add_child_text (raw_convert (_colour->r)); - text->add_child("Green")->add_child_text (raw_convert (_colour->g)); - text->add_child("Blue")->add_child_text (raw_convert (_colour->b)); + cxml::add_text_child(text, "Red", raw_convert(_colour->r)); + cxml::add_text_child(text, "Green", raw_convert(_colour->g)); + cxml::add_text_child(text, "Blue", raw_convert(_colour->b)); } if (_effect) { switch (*_effect) { case dcp::Effect::NONE: - text->add_child("Effect")->add_child_text("none"); + cxml::add_text_child(text, "Effect", "none"); break; case dcp::Effect::BORDER: - text->add_child("Effect")->add_child_text("outline"); + cxml::add_text_child(text, "Effect", "outline"); break; case dcp::Effect::SHADOW: - text->add_child("Effect")->add_child_text("shadow"); + cxml::add_text_child(text, "Effect", "shadow"); break; } } if (_effect_colour) { - text->add_child("EffectRed")->add_child_text (raw_convert (_effect_colour->r)); - text->add_child("EffectGreen")->add_child_text (raw_convert (_effect_colour->g)); - text->add_child("EffectBlue")->add_child_text (raw_convert (_effect_colour->b)); + cxml::add_text_child(text, "EffectRed", raw_convert(_effect_colour->r)); + cxml::add_text_child(text, "EffectGreen", raw_convert(_effect_colour->g)); + cxml::add_text_child(text, "EffectBlue", raw_convert(_effect_colour->b)); } - text->add_child("LineSpacing")->add_child_text (raw_convert (_line_spacing)); + cxml::add_text_child(text, "LineSpacing", raw_convert(_line_spacing)); if (_fade_in) { - text->add_child("FadeIn")->add_child_text (raw_convert (_fade_in->get())); + cxml::add_text_child(text, "FadeIn", raw_convert(_fade_in->get())); } if (_fade_out) { - text->add_child("FadeOut")->add_child_text (raw_convert (_fade_out->get())); + cxml::add_text_child(text, "FadeOut", raw_convert(_fade_out->get())); } - text->add_child("OutlineWidth")->add_child_text (raw_convert (_outline_width)); + cxml::add_text_child(text, "OutlineWidth", raw_convert(_outline_width)); for (auto i: _fonts) { - i->as_xml (text->add_child("Font")); + i->as_xml(cxml::add_child(text, "Font")); } - text->add_child("Type")->add_child_text (text_type_to_string(_type)); - text->add_child("OriginalType")->add_child_text (text_type_to_string(_original_type)); + cxml::add_text_child(text, "Type", text_type_to_string(_type)); + cxml::add_text_child(text, "OriginalType", text_type_to_string(_original_type)); if (_dcp_track) { - _dcp_track->as_xml(text->add_child("DCPTrack")); + _dcp_track->as_xml(cxml::add_child(text, "DCPTrack")); } if (_language) { - auto lang = text->add_child("Language"); + auto lang = cxml::add_child(text, "Language"); lang->add_child_text (_language->to_string()); lang->set_attribute ("Additional", _language_is_additional ? "1" : "0"); } diff --git a/src/lib/text_content.h b/src/lib/text_content.h index 4d4bdc507..312227120 100644 --- a/src/lib/text_content.h +++ b/src/lib/text_content.h @@ -72,7 +72,7 @@ public: TextContent (Content* parent, std::vector>); TextContent (Content* parent, cxml::ConstNodePtr, int version, std::list& notes); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; std::string identifier () const; void take_settings_from (std::shared_ptr c); diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc index 91ed11855..91bfa2419 100644 --- a/src/lib/video_content.cc +++ b/src/lib/video_content.cc @@ -273,37 +273,37 @@ VideoContent::VideoContent (Content* parent, vector > c) void -VideoContent::as_xml (xmlpp::Node* node) const +VideoContent::as_xml(xmlpp::Element* element) const { boost::mutex::scoped_lock lm (_mutex); - node->add_child("Use")->add_child_text (_use ? "1" : "0"); - node->add_child("VideoLength")->add_child_text (raw_convert (_length)); + cxml::add_text_child(element, "Use", _use ? "1" : "0"); if (_size) { - node->add_child("VideoWidth")->add_child_text(raw_convert(_size->width)); - node->add_child("VideoHeight")->add_child_text(raw_convert(_size->height)); + cxml::add_text_child(element, "VideoLength", raw_convert(_length)); + cxml::add_text_child(element, "VideoWidth", raw_convert(_size.width)); } - node->add_child("VideoFrameType")->add_child_text (video_frame_type_to_string (_frame_type)); + cxml::add_text_child(element, "VideoHeight", raw_convert(_size.height)); + cxml::add_text_child(element, "VideoFrameType", video_frame_type_to_string(_frame_type)); if (_sample_aspect_ratio) { - node->add_child("SampleAspectRatio")->add_child_text (raw_convert (_sample_aspect_ratio.get ())); + cxml::add_text_child(element, "SampleAspectRatio", raw_convert (_sample_aspect_ratio.get ())); } - _crop.as_xml (node); + _crop.as_xml(element); if (_custom_ratio) { - node->add_child("CustomRatio")->add_child_text(raw_convert(*_custom_ratio)); + cxml::add_text_child(element, "CustomRatio", raw_convert(*_custom_ratio)); } if (_custom_size) { - node->add_child("CustomWidth")->add_child_text(raw_convert(_custom_size->width)); - node->add_child("CustomHeight")->add_child_text(raw_convert(_custom_size->height)); + cxml::add_text_child(element, "CustomWidth", raw_convert(_custom_size->width)); + cxml::add_text_child(element, "CustomHeight", raw_convert(_custom_size->height)); } if (_colour_conversion) { - _colour_conversion.get().as_xml (node->add_child("ColourConversion")); + _colour_conversion.get().as_xml(cxml::add_child(element, "ColourConversion")); } - node->add_child("YUV")->add_child_text (_yuv ? "1" : "0"); - node->add_child("FadeIn")->add_child_text (raw_convert (_fade_in)); - node->add_child("FadeOut")->add_child_text (raw_convert (_fade_out)); - node->add_child("Range")->add_child_text(_range == VideoRange::FULL ? "full" : "video"); - _pixel_quanta.as_xml(node->add_child("PixelQuanta")); + cxml::add_text_child(element, "YUV", _yuv ? "1" : "0"); + cxml::add_text_child(element, "FadeIn", raw_convert(_fade_in)); + cxml::add_text_child(element, "FadeOut", raw_convert(_fade_out)); + cxml::add_text_child(element, "Range", _range == VideoRange::FULL ? "full" : "video"); + _pixel_quanta.as_xml(cxml::add_child(element, "PixelQuanta")); if (_burnt_subtitle_language) { - node->add_child("BurntSubtitleLanguage")->add_child_text(_burnt_subtitle_language->to_string()); + cxml::add_text_child(element, "BurntSubtitleLanguage", _burnt_subtitle_language->to_string()); } } diff --git a/src/lib/video_content.h b/src/lib/video_content.h index e7e8eb1b3..b8571c6c9 100644 --- a/src/lib/video_content.h +++ b/src/lib/video_content.h @@ -66,7 +66,7 @@ public: VideoContent (Content* parent, cxml::ConstNodePtr node, int version, VideoRange video_range_hint); VideoContent (Content* parent, std::vector>); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; std::string technical_summary () const; std::string identifier () const; void take_settings_from (std::shared_ptr c); diff --git a/src/lib/video_mxf_content.cc b/src/lib/video_mxf_content.cc index 9adca5a2d..546e1445b 100644 --- a/src/lib/video_mxf_content.cc +++ b/src/lib/video_mxf_content.cc @@ -121,11 +121,11 @@ VideoMXFContent::identifier () const void -VideoMXFContent::as_xml (xmlpp::Node* node, bool with_paths) const +VideoMXFContent::as_xml(xmlpp::Element* element, bool with_paths) const { - node->add_child("Type")->add_child_text("VideoMXF"); - Content::as_xml (node, with_paths); - video->as_xml (node); + cxml::add_text_child(element, "Type", "VideoMXF"); + Content::as_xml(element, with_paths); + video->as_xml(element); } diff --git a/src/lib/video_mxf_content.h b/src/lib/video_mxf_content.h index 5a04c3da9..1731942a6 100644 --- a/src/lib/video_mxf_content.h +++ b/src/lib/video_mxf_content.h @@ -40,7 +40,7 @@ public: std::string summary () const override; std::string technical_summary () const override; std::string identifier () const override; - void as_xml (xmlpp::Node* node, bool with_paths) const override; + void as_xml(xmlpp::Element* element, bool with_paths) const override; dcpomatic::DCPTime full_length (std::shared_ptr film) const override; dcpomatic::DCPTime approximate_length () const override; void add_properties (std::shared_ptr film, std::list& p) const override; diff --git a/test/stream_test.cc b/test/stream_test.cc index a180739ab..ecd2deac8 100644 --- a/test/stream_test.cc +++ b/test/stream_test.cc @@ -43,38 +43,38 @@ BOOST_AUTO_TEST_CASE (stream_test) { xmlpp::Document doc; auto root = doc.create_root_node("FFmpegAudioStream"); - root->add_child("Name")->add_child_text ("hello there world"); - root->add_child("Id")->add_child_text ("4"); - root->add_child("FrameRate")->add_child_text ("44100"); - root->add_child("Channels")->add_child_text ("2"); + cxml::add_text_child(root, "Name", "hello there world"); + cxml::add_text_child(root, "Id", "4"); + cxml::add_text_child(root, "FrameRate", "44100"); + cxml::add_text_child(root, "Channels", "2"); /* This is the state file version 5 description of the mapping */ - auto mapping = root->add_child("Mapping"); - mapping->add_child("ContentChannels")->add_child_text ("2"); + auto mapping = cxml::add_child(root, "Mapping"); + cxml::add_text_child(mapping, "ContentChannels", "2"); { /* L -> L */ - auto map = mapping->add_child("Map"); - map->add_child("ContentIndex")->add_child_text ("0"); - map->add_child("DCP")->add_child_text ("0"); + auto map = cxml::add_child(mapping, "Map"); + cxml::add_text_child(map, "ContentIndex", "0"); + cxml::add_text_child(map, "DCP", "0"); } { /* L -> C */ - auto map = mapping->add_child("Map"); - map->add_child("ContentIndex")->add_child_text ("0"); - map->add_child("DCP")->add_child_text ("2"); + auto map = cxml::add_child(mapping, "Map"); + cxml::add_text_child(map, "ContentIndex", "0"); + cxml::add_text_child(map, "DCP", "2"); } { /* R -> R */ - auto map = mapping->add_child("Map"); - map->add_child("ContentIndex")->add_child_text ("1"); - map->add_child("DCP")->add_child_text ("1"); + auto map = cxml::add_child(mapping, "Map"); + cxml::add_text_child(map, "ContentIndex", "1"); + cxml::add_text_child(map, "DCP", "1"); } { /* R -> C */ - auto map = mapping->add_child("Map"); - map->add_child("ContentIndex")->add_child_text ("1"); - map->add_child("DCP")->add_child_text ("2"); + auto map = cxml::add_child(mapping, "Map"); + cxml::add_text_child(map, "ContentIndex", "1"); + cxml::add_text_child(map, "DCP", "2"); } FFmpegAudioStream a (cxml::NodePtr (new cxml::Node (root)), 5); -- 2.30.2