X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fdcp_content.cc;h=193c9995aee57516e15a6a5143237c352282ef63;hp=2d441353a061c996b52970bad9895555e5be0d78;hb=HEAD;hpb=f8661a47b8ddafb6a076456d4d1b9239aa45e4b1 diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index 2d441353a..bdd5e0e09 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -31,7 +31,6 @@ #include "job.h" #include "log.h" #include "overlaps.h" -#include "scope_guard.h" #include "text_content.h" #include "video_content.h" #include @@ -41,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -224,7 +224,7 @@ DCPContent::examine (shared_ptr film, shared_ptr job) string const old_name = name (); ContentChangeSignalDespatcher::instance()->suspend(); - ScopeGuard sg = []() { + dcp::ScopeGuard sg = []() { ContentChangeSignalDespatcher::instance()->resume(); }; @@ -720,13 +720,13 @@ DCPContent::can_reference_audio (shared_ptr film, string& why_not) c return false; } - for (auto i: decoder->reels()) { - if (!i->main_sound()) { - /// TRANSLATORS: this string will follow "Cannot reference this DCP: " - why_not = _("it does not have sound in all its reels."); - return false; - } - } + if (audio && audio->stream()) { + auto const channels = audio->stream()->channels(); + if (channels != film->audio_channels()) { + why_not = String::compose(_("it has a different number of audio channels than the project; set the project to have %1 channels."), channels); + return false; + } + } /// TRANSLATORS: this string will follow "Cannot reference this DCP: " return can_reference( @@ -748,6 +748,9 @@ DCPContent::can_reference_text (shared_ptr film, TextType type, stri } catch (dcp::ReadError &) { /* We couldn't read the DCP, so it's probably missing */ return false; + } catch (DCPError &) { + /* We couldn't read the DCP, so it's probably missing */ + return false; } catch (dcp::KDMDecryptionError &) { /* We have an incorrect KDM */ return false; @@ -755,22 +758,13 @@ DCPContent::can_reference_text (shared_ptr film, TextType type, stri for (auto i: decoder->reels()) { if (type == TextType::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) { + if (i->main_subtitle() && i->main_subtitle()->entry_point().get_value_or(0) != 0) { /// TRANSLATORS: this string will follow "Cannot reference this DCP: " why_not = _("one of its subtitle reels has a non-zero entry point so it must be re-written."); return false; } } if (type == TextType::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; - } for (auto j: i->closed_captions()) { if (j->entry_point().get_value_or(0) != 0) { /// TRANSLATORS: this string will follow "Cannot reference this DCP: " @@ -844,7 +838,7 @@ DCPContent::kdm_timing_window_valid () const Resolution DCPContent::resolution () const { - if (video->size().width > 2048 || video->size().height > 1080) { + if (video->size() && (video->size()->width > 2048 || video->size()->height > 1080)) { return Resolution::FOUR_K; }