- DCPDecoder decoder (shared_from_this(), film()->log());
- BOOST_FOREACH (shared_ptr<dcp::Reel> i, decoder.reels()) {
- if (!i->main_subtitle()) {
- why_not.push_back (_("The DCP does not have subtitles in all reels."));
- return false;
+ shared_ptr<DCPDecoder> decoder;
+ try {
+ decoder.reset (new DCPDecoder (film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>()));
+ } catch (dcp::ReadError &) {
+ /* We couldn't read the DCP, so it's probably missing */
+ return false;
+ } catch (dcp::KDMDecryptionError &) {
+ /* We have an incorrect KDM */
+ return false;
+ }
+
+ for (auto i: decoder->reels()) {
+ 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;
+ }