Subtitle language handling tweaks; write multiple subtitle languages
[dcpomatic.git] / src / lib / writer.cc
index e2054dc03921f20dd8fef146fab4f0d455b8bc54..a9700f4f5edbbb7272e2ed2735c56f74cd2535b3 100644 (file)
@@ -62,7 +62,11 @@ using boost::shared_ptr;
 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 dcp::ArrayData;
 using namespace dcpomatic;
 
 Writer::Writer (shared_ptr<const Film> film, weak_ptr<Job> j)
@@ -127,7 +131,7 @@ Writer::~Writer ()
  *  @param eyes Eyes that this frame image is for.
  */
 void
-Writer::write (Data encoded, Frame frame, Eyes eyes)
+Writer::write (shared_ptr<const Data> encoded, Frame frame, Eyes eyes)
 {
        boost::mutex::scoped_lock lock (_state_mutex);
 
@@ -423,7 +427,7 @@ try
                        case QueueItem::FULL:
                                LOG_DEBUG_ENCODE (N_("Writer FULL-writes %1 (%2)"), qi.frame, (int) qi.eyes);
                                if (!qi.encoded) {
-                                       qi.encoded = Data (_film->j2c_path (qi.reel, qi.frame, qi.eyes, false));
+                                       qi.encoded.reset (new ArrayData(_film->j2c_path(qi.reel, qi.frame, qi.eyes, false)));
                                }
                                reel.write (qi.encoded, qi.frame, qi.eyes);
                                ++_full_written;
@@ -616,6 +620,11 @@ Writer::finish ()
        cpl->set_main_picture_stored_area (_film->frame_size());
        cpl->set_main_picture_active_area (_film->active_area());
 
+       vector<dcp::LanguageTag> sl = _film->subtitle_languages();
+       if (sl.size() > 1) {
+               cpl->set_additional_subtitle_languages(std::vector<dcp::LanguageTag>(sl.begin() + 1, sl.end()));
+       }
+
        shared_ptr<const dcp::CertificateChain> signer;
        signer = Config::instance()->signer_chain ();
        /* We did check earlier, but check again here to be on the safe side */
@@ -656,15 +665,12 @@ Writer::write_cover_sheet ()
        boost::algorithm::replace_all (text, "$CONTAINER", _film->container()->container_nickname());
        boost::algorithm::replace_all (text, "$AUDIO_LANGUAGE", _film->isdcf_metadata().audio_language);
 
-       optional<string> subtitle_language;
-       BOOST_FOREACH (shared_ptr<Content> i, _film->content()) {
-               BOOST_FOREACH (shared_ptr<TextContent> j, i->text) {
-                       if (j->type() == TEXT_OPEN_SUBTITLE && j->use()) {
-                               subtitle_language = j->language ();
-                       }
-               }
+       vector<dcp::LanguageTag> subtitle_languages = _film->subtitle_languages();
+       if (subtitle_languages.empty()) {
+               boost::algorithm::replace_all (text, "$SUBTITLE_LANGUAGE", "None");
+       } else {
+               boost::algorithm::replace_all (text, "$SUBTITLE_LANGUAGE", subtitle_languages.front().description());
        }
-       boost::algorithm::replace_all (text, "$SUBTITLE_LANGUAGE", subtitle_language.get_value_or("None"));
 
        boost::uintmax_t size = 0;
        for (