Disallow referring to subtitles / closed captions with start trim.
authorCarl Hetherington <cth@carlh.net>
Wed, 25 Nov 2020 22:58:25 +0000 (23:58 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 25 Nov 2020 22:58:25 +0000 (23:58 +0100)
Since per Bv2.1 we can't have subs / closed captions with non-zero
entry point I think we have no choice but to rewrite in that case
(#1802).

src/lib/dcp_content.cc
src/wx/text_panel.cc

index f695332ec5d92bf156c7f3b6216f15b046c73a63..3b90c9c4f2400bf8e17be6047a910ac5c92133f6 100644 (file)
@@ -35,7 +35,9 @@
 #include <dcp/dcp.h>
 #include <dcp/raw_convert.h>
 #include <dcp/exceptions.h>
+#include <dcp/reel_closed_caption_asset.h>
 #include <dcp/reel_picture_asset.h>
+#include <dcp/reel_subtitle_asset.h>
 #include <dcp/reel.h>
 #include <libxml++/libxml++.h>
 #include <boost/foreach.hpp>
@@ -734,18 +736,39 @@ DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, stri
        }
 
         BOOST_FOREACH (shared_ptr<dcp::Reel> i, decoder->reels()) {
-                if (type == TEXT_OPEN_SUBTITLE && !i->main_subtitle()) {
-                       /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
-                        why_not = _("it does not have open subtitles in all its reels.");
-                        return false;
+                if (type == TEXT_OPEN_SUBTITLE) {
+                       if (!i->main_subtitle()) {
+                               /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+                               why_not = _("it does not have open subtitles in all its reels.");
+                               return false;
+                       } else if (i->main_subtitle()->entry_point().get_value_or(0) != 0) {
+                               /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+                               why_not = _("one if its subtitle reels has a non-zero entry point so it must be re-written.");
+                               return false;
+                       }
                 }
-               if (type == TEXT_CLOSED_CAPTION && i->closed_captions().empty()) {
-                       /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
-                        why_not = _("it does not have closed captions in all its reels.");
-                        return false;
+               if (type == TEXT_CLOSED_CAPTION) {
+                       if (i->closed_captions().empty()) {
+                               /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+                               why_not = _("it does not have closed captions in all its reels.");
+                               return false;
+                       }
+                       BOOST_FOREACH (shared_ptr<dcp::ReelClosedCaptionAsset> j, i->closed_captions()) {
+                               if (j->entry_point().get_value_or(0) != 0) {
+                                       /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+                                       why_not = _("one if its closed caption has a non-zero entry point so it must be re-written.");
+                                       return false;
+                               }
+                       }
                }
         }
 
+       if (trim_start() != dcpomatic::ContentTime()) {
+               /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+               why_not = _("it has a start trim so its subtitles or closed captions must be re-written.");
+               return false;
+       }
+
        /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
        return can_reference (film, bind (&check_text, _1), _("it overlaps other text content; remove the other content."), why_not);
 }
index 30c2010d07e0ea515c13210e8e558de74498776e..b21d33ce57f1b1f0c5bfe844dc5bc5c4037f1749 100644 (file)
@@ -456,6 +456,8 @@ TextPanel::film_content_changed (int property)
                setup_sensitivity ();
        } else if (property == DCPContentProperty::TEXTS) {
                setup_sensitivity ();
+       } else if (property == ContentProperty::TRIM_START) {
+               setup_sensitivity ();
        }
 }