diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-11-25 23:58:25 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-11-25 23:58:25 +0100 |
| commit | 67bd4a37f5836ef34d9b5752744061d4be07e6e1 (patch) | |
| tree | 58cadaf18f3b3dbea5ce4a1ae8e07ac15fee11b6 | |
| parent | 8104c994724ef0f0c47d074e6a8a856d52dfaa7a (diff) | |
Disallow referring to subtitles / closed captions with start trim.
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).
| -rw-r--r-- | src/lib/dcp_content.cc | 39 | ||||
| -rw-r--r-- | src/wx/text_panel.cc | 2 |
2 files changed, 33 insertions, 8 deletions
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index f695332ec..3b90c9c4f 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -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); } diff --git a/src/wx/text_panel.cc b/src/wx/text_panel.cc index 30c2010d0..b21d33ce5 100644 --- a/src/wx/text_panel.cc +++ b/src/wx/text_panel.cc @@ -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 (); } } |
