Add dummy subtitle and closed caption reels even when referencing
authorCarl Hetherington <cth@carlh.net>
Wed, 3 Jan 2024 23:40:03 +0000 (00:40 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 4 Jan 2024 22:36:08 +0000 (23:36 +0100)
other DCPs (in a VF) that themselves might have missing subtitles
for some reels.

src/lib/writer.cc

index 8863816e868b9b92a9e2b19be5fc65e6dfa7412c..fbe2d248d5c952c3112f1e5f9f7184ae3b4073c3 100644 (file)
@@ -41,7 +41,9 @@
 #include <dcp/cpl.h>
 #include <dcp/locale_convert.h>
 #include <dcp/raw_convert.h>
+#include <dcp/reel_closed_caption_asset.h>
 #include <dcp/reel_file_asset.h>
+#include <dcp/reel_subtitle_asset.h>
 #include <cerrno>
 #include <cfloat>
 #include <set>
@@ -930,6 +932,22 @@ void
 Writer::write (ReferencedReelAsset asset)
 {
        _reel_assets.push_back (asset);
+
+       if (dynamic_pointer_cast<dcp::ReelSubtitleAsset>(asset.asset)) {
+               _have_subtitles = true;
+       } else if (auto ccap = dynamic_pointer_cast<dcp::ReelClosedCaptionAsset>(asset.asset)) {
+               /* This feels quite fragile. We have a referenced reel and want to know if it's
+                * part of a given closed-caption track so that we can fill if it has any
+                * missing reels.  I guess for that purpose almost any DCPTextTrack values are
+                * fine so long as they are consistent.
+                */
+               DCPTextTrack track;
+               track.name = ccap->annotation_text().get_value_or("");
+               track.language = dcp::LanguageTag(ccap->language().get_value_or("en-US"));
+               if (_have_closed_captions.find(track) == _have_closed_captions.end()) {
+                       _have_closed_captions.insert(track);
+               }
+       }
 }