Cleanup: use some more make_shared.
[dcpomatic.git] / src / lib / writer.cc
index bc299414bb8e72975e8399ee0ebc166041ed986a..6e3821aa7c7d7d94ea624ced4fb637e2a653c7da 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;
@@ -307,12 +303,12 @@ Writer::write (shared_ptr<const AudioBuffers> audio, DCPTime const time)
                        DCPOMATIC_ASSERT ((part_frames[0] + part_frames[1]) <= audio->frames());
 
                        if (part_frames[0]) {
-                               shared_ptr<AudioBuffers> part (new AudioBuffers(audio, part_frames[0], 0));
+                               auto part = make_shared<AudioBuffers>(audio, part_frames[0], 0);
                                _audio_reel->write (part);
                        }
 
                        if (part_frames[1]) {
-                               audio.reset (new AudioBuffers(audio, part_frames[1], part_frames[0]));
+                               audio = make_shared<AudioBuffers>(audio, part_frames[1], part_frames[0]);
                        } else {
                                audio.reset ();
                        }
@@ -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
@@ -708,19 +710,23 @@ void
 Writer::write_cover_sheet (boost::filesystem::path output_dcp)
 {
        auto const cover = film()->file("COVER_SHEET.txt");
-       auto f = fopen_boost (cover, "w");
+       dcp::File f(cover, "w");
        if (!f) {
                throw OpenFileError (cover, errno, OpenFileError::WRITE);
        }
 
        auto text = Config::instance()->cover_sheet ();
        boost::algorithm::replace_all (text, "$CPL_NAME", film()->name());
+       auto cpls = film()->cpls();
+       if (!cpls.empty()) {
+               boost::algorithm::replace_all (text, "$CPL_FILENAME", cpls[0].cpl_file.filename().string());
+       }
        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"));
        }
@@ -772,8 +778,7 @@ Writer::write_cover_sheet (boost::filesystem::path output_dcp)
 
        boost::algorithm::replace_all (text, "$LENGTH", length);
 
-       checked_fwrite (text.c_str(), text.length(), f, cover);
-       fclose (f);
+       f.checked_write(text.c_str(), text.length());
 }