Add a simple DCP editor.
[dcpomatic.git] / src / lib / writer.cc
index b749968a7c79f4388ea17c8de0b00444835b172a..954c135d3a90d4e43fcfa0e4e3b34ea4b81320e0 100644 (file)
 
 using std::cout;
 using std::dynamic_pointer_cast;
-using std::list;
-using std::make_pair;
 using std::make_shared;
-using std::map;
 using std::max;
 using std::min;
-using std::pair;
 using std::shared_ptr;
 using std::string;
 using std::vector;
@@ -546,7 +542,7 @@ Writer::calculate_digests ()
                pool.create_thread (boost::bind (&boost::asio::io_service::run, &service));
        }
 
-       boost::function<void (float)> set_progress;
+       std::function<void (float)> set_progress;
        if (job) {
                set_progress = boost::bind (&Writer::set_digest_progress, this, job.get(), _1);
        } else {
@@ -624,12 +620,18 @@ Writer::finish (boost::filesystem::path output_dcp)
                issuer = String::compose("DCP-o-matic %1 %2", dcpomatic_version, dcpomatic_git_commit);
        }
 
+       cpl->set_creator (creator);
+       cpl->set_issuer (issuer);
+
        cpl->set_ratings (film()->ratings());
 
        vector<dcp::ContentVersion> cv;
        for (auto i: film()->content_versions()) {
                cv.push_back (dcp::ContentVersion(i));
        }
+       if (cv.empty()) {
+               cv = { dcp::ContentVersion("1") };
+       }
        cpl->set_content_versions (cv);
 
        cpl->set_full_content_title_text (film()->name());
@@ -651,6 +653,9 @@ Writer::finish (boost::filesystem::path output_dcp)
        if (film()->luminance()) {
                cpl->set_luminance (*film()->luminance());
        }
+       if (film()->sign_language_video_language()) {
+               cpl->set_sign_language_video_language (*film()->sign_language_video_language());
+       }
 
        auto ac = film()->mapped_audio_channels();
        dcp::MCASoundField field = (
@@ -687,14 +692,11 @@ Writer::finish (boost::filesystem::path output_dcp)
                throw InvalidSignerError (reason);
        }
 
-       dcp.write_xml (
-               issuer,
-               creator,
-               dcp::LocalTime().as_string(),
-               film()->dcp_name(),
-               signer,
-               Config::instance()->dcp_metadata_filename_format()
-               );
+       dcp.set_issuer(issuer);
+       dcp.set_creator(creator);
+       dcp.set_annotation_text(film()->dcp_name());
+
+       dcp.write_xml (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
@@ -718,9 +720,9 @@ Writer::write_cover_sheet (boost::filesystem::path output_dcp)
        boost::algorithm::replace_all (text, "$TYPE", film()->dcp_content_type()->pretty_name());
        boost::algorithm::replace_all (text, "$CONTAINER", film()->container()->container_nickname());
 
-       auto audio_languages = film()->audio_languages();
-       if (!audio_languages.empty()) {
-               boost::algorithm::replace_all (text, "$AUDIO_LANGUAGE", audio_languages.front().description());
+       auto audio_language = film()->audio_language();
+       if (audio_language) {
+               boost::algorithm::replace_all (text, "$AUDIO_LANGUAGE", audio_language->description());
        } else {
                boost::algorithm::replace_all (text, "$AUDIO_LANGUAGE", _("None"));
        }
@@ -948,7 +950,7 @@ Writer::set_digest_progress (Job* job, float progress)
 
 /** Calculate hashes for any referenced MXF assets which do not already have one */
 void
-Writer::calculate_referenced_digests (boost::function<void (float)> set_progress)
+Writer::calculate_referenced_digests (std::function<void (float)> set_progress)
 try
 {
        for (auto const& i: _reel_assets) {