Bump libdcp for fix to remove erroneous <EntryPoint> and <Duration> markers from...
[dcpomatic.git] / src / lib / reel_writer.cc
index 0b367ae38581a15649b9e3eef7de8c545561c1cf..d8ce8882e3ced36100a12c9037067348de3d0109 100644 (file)
@@ -168,12 +168,12 @@ ReelWriter::ReelWriter (
        }
 
        if (film()->audio_channels()) {
-               auto langs = film()->audio_languages();
+               auto lang = film()->audio_language();
                _sound_asset = make_shared<dcp::SoundAsset> (
                        dcp::Fraction(film()->video_frame_rate(), 1),
                        film()->audio_frame_rate(),
                        film()->audio_channels(),
-                       langs.empty() ? dcp::LanguageTag("en-US") : langs.front(),
+                       lang ? *lang : dcp::LanguageTag("en-US"),
                        standard
                        );
 
@@ -440,6 +440,10 @@ ReelWriter::finish (boost::filesystem::path output_dcp)
        }
 }
 
+
+/** Try to make a ReelAsset for a subtitles or closed captions in a given period in the DCP.
+ *  A SubtitleAsset can be provided, or we will use one from @ref refs if not.
+ */
 template <class Interop, class SMPTE, class Result>
 shared_ptr<Result>
 maybe_add_text (
@@ -641,7 +645,7 @@ ReelWriter::create_reel_text (
        } else if (ensure_subtitles) {
                /* We had no subtitle asset, but we've been asked to make sure there is one */
                subtitle = maybe_add_text<dcp::ReelInteropSubtitleAsset, dcp::ReelSMPTESubtitleAsset, dcp::ReelSubtitleAsset> (
-                       empty_text_asset(TextType::OPEN_SUBTITLE, optional<DCPTextTrack>()),
+                       empty_text_asset(TextType::OPEN_SUBTITLE, optional<DCPTextTrack>(), true),
                        duration,
                        reel,
                        refs,
@@ -670,7 +674,7 @@ ReelWriter::create_reel_text (
        /* Make empty tracks for anything we've been asked to ensure but that we haven't added */
        for (auto i: ensure_closed_captions) {
                auto a = maybe_add_text<dcp::ReelInteropClosedCaptionAsset, dcp::ReelSMPTEClosedCaptionAsset, dcp::ReelClosedCaptionAsset> (
-                       empty_text_asset(TextType::CLOSED_CAPTION, i), duration, reel, refs, fonts, _default_font, film(), _period, output_dcp, _text_only
+                       empty_text_asset(TextType::CLOSED_CAPTION, i, true), duration, reel, refs, fonts, _default_font, film(), _period, output_dcp, _text_only
                        );
                DCPOMATIC_ASSERT (a);
                a->set_annotation_text (i.name);
@@ -681,7 +685,6 @@ ReelWriter::create_reel_text (
 }
 
 
-
 void
 ReelWriter::create_reel_markers (shared_ptr<dcp::Reel> reel) const
 {
@@ -695,7 +698,7 @@ ReelWriter::create_reel_markers (shared_ptr<dcp::Reel> reel) const
        }
 
        if (!reel_markers.empty ()) {
-               auto ma = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(film()->video_frame_rate(), 1), reel->duration(), 0);
+               auto ma = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(film()->video_frame_rate(), 1), reel->duration());
                for (auto const& i: reel_markers) {
                        DCPTime relative = i.second - _period.from;
                        auto hmsf = relative.split (film()->video_frame_rate());
@@ -784,7 +787,7 @@ ReelWriter::write (shared_ptr<const AudioBuffers> audio)
 
 
 shared_ptr<dcp::SubtitleAsset>
-ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track) const
+ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool with_dummy) const
 {
        shared_ptr<dcp::SubtitleAsset> asset;
 
@@ -815,29 +818,32 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track) const
                if (film()->encrypted()) {
                        s->set_key (film()->key());
                }
-               s->add (
-                       std::make_shared<dcp::SubtitleString>(
-                               optional<std::string>(),
-                               false,
-                               false,
-                               false,
-                               dcp::Colour(),
-                               42,
-                               1.0,
-                               dcp::Time(0, 0, 0, 0, 24),
-                               dcp::Time(0, 0, 1, 0, 24),
-                               0.5,
-                               dcp::HAlign::CENTER,
-                               0.5,
-                               dcp::VAlign::CENTER,
-                               dcp::Direction::LTR,
-                               "",
-                               dcp::Effect::NONE,
-                               dcp::Colour(),
-                               dcp::Time(),
-                               dcp::Time()
-                               )
-                      );
+               if (with_dummy) {
+                       s->add (
+                               std::make_shared<dcp::SubtitleString>(
+                                       optional<std::string>(),
+                                       false,
+                                       false,
+                                       false,
+                                       dcp::Colour(),
+                                       42,
+                                       1.0,
+                                       dcp::Time(0, 0, 0, 0, 24),
+                                       dcp::Time(0, 0, 1, 0, 24),
+                                       0.5,
+                                       dcp::HAlign::CENTER,
+                                       0.5,
+                                       dcp::VAlign::CENTER,
+                                       dcp::Direction::LTR,
+                                       " ",
+                                       dcp::Effect::NONE,
+                                       dcp::Colour(),
+                                       dcp::Time(),
+                                       dcp::Time(),
+                                       0
+                                       )
+                              );
+               }
                asset = s;
        }
 
@@ -863,7 +869,7 @@ ReelWriter::write (PlayerText subs, TextType type, optional<DCPTextTrack> track,
        }
 
        if (!asset) {
-               asset = empty_text_asset (type, track);
+               asset = empty_text_asset (type, track, false);
        }
 
        switch (type) {