using boost::weak_ptr;
using boost::dynamic_pointer_cast;
using boost::optional;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
using dcp::Data;
using namespace dcpomatic;
pool.join_all ();
service.stop ();
- /* Add reels to CPL */
+ /* Add reels */
BOOST_FOREACH (ReelWriter& i, _reels) {
cpl->add (i.create_reel (_reel_assets, _fonts));
}
- dcp::XMLMetadata meta;
- meta.annotation_text = cpl->annotation_text ();
- meta.creator = Config::instance()->dcp_creator ();
- if (meta.creator.empty ()) {
- meta.creator = String::compose ("DCP-o-matic %1 %2", dcpomatic_version, dcpomatic_git_commit);
+ /* Add metadata */
+
+ string creator = Config::instance()->dcp_creator();
+ if (creator.empty()) {
+ creator = String::compose("DCP-o-matic %1 %2", dcpomatic_version, dcpomatic_git_commit);
+ }
+
+ string issuer = Config::instance()->dcp_issuer();
+ if (issuer.empty()) {
+ issuer = String::compose("DCP-o-matic %1 %2", dcpomatic_version, dcpomatic_git_commit);
+ }
+
+ cpl->set_ratings (_film->ratings());
+
+ vector<dcp::ContentVersion> cv;
+ BOOST_FOREACH (string i, _film->content_versions()) {
+ cv.push_back (dcp::ContentVersion(i));
}
- meta.issuer = Config::instance()->dcp_issuer ();
- if (meta.issuer.empty ()) {
- meta.issuer = String::compose ("DCP-o-matic %1 %2", dcpomatic_version, dcpomatic_git_commit);
+ cpl->set_content_versions (cv);
+
+ cpl->set_full_content_title_text (_film->name());
+ cpl->set_full_content_title_text_language (_film->name_language());
+ cpl->set_release_territory (_film->release_territory());
+ cpl->set_version_number (_film->version_number());
+ cpl->set_status (_film->status());
+ cpl->set_chain (_film->chain());
+ cpl->set_distributor (_film->distributor());
+ cpl->set_facility (_film->facility());
+ cpl->set_luminance (_film->luminance());
+
+ list<int> ac = _film->mapped_audio_channels ();
+ dcp::MCASoundField field = (
+ find(ac.begin(), ac.end(), static_cast<int>(dcp::BSL)) != ac.end() ||
+ find(ac.begin(), ac.end(), static_cast<int>(dcp::BSR)) != ac.end()
+ ) ? dcp::SEVEN_POINT_ONE : dcp::FIVE_POINT_ONE;
+
+ dcp::MainSoundConfiguration msc (field, _film->audio_channels());
+ BOOST_FOREACH (int i, ac) {
+ if (i < _film->audio_channels()) {
+ msc.set_mapping (i, static_cast<dcp::Channel>(i));
+ }
}
- meta.set_issue_date_now ();
- cpl->set_metadata (meta);
- cpl->set_ratings (vector_to_list(_film->ratings()));
- cpl->set_content_version_label_text (_film->content_version());
+ cpl->set_main_sound_configuration (msc.to_string());
+ cpl->set_main_sound_sample_rate (_film->audio_frame_rate());
+ cpl->set_main_picture_stored_area (_film->frame_size());
+ cpl->set_main_picture_active_area (_film->active_area());
shared_ptr<const dcp::CertificateChain> signer;
signer = Config::instance()->signer_chain ();
throw InvalidSignerError (reason);
}
- dcp.write_xml (_film->interop () ? dcp::INTEROP : dcp::SMPTE, meta, signer, Config::instance()->dcp_metadata_filename_format());
+ dcp.write_xml (
+ _film->interop() ? dcp::INTEROP : dcp::SMPTE,
+ issuer,
+ creator,
+ dcp::LocalTime().as_string(),
+ String::compose("Created by libdcp %1", dcp::version),
+ signer,
+ Config::instance()->dcp_metadata_filename_format()
+ );
LOG_GENERAL (
N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT, %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk