From: Carl Hetherington Date: Wed, 21 Sep 2016 21:16:48 +0000 (+0100) Subject: Correctly spot that a DCP with unencrypted picture but encrypted sound/subtitle needs... X-Git-Tag: v2.9.26~3 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=8457b7c1066da4e14f00a76f3855e60d986b179f Correctly spot that a DCP with unencrypted picture but encrypted sound/subtitle needs a KDM. --- diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index c180240c8..96e9f17a2 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -54,10 +54,11 @@ using boost::function; using boost::dynamic_pointer_cast; using dcp::raw_convert; -int const DCPContentProperty::CAN_BE_PLAYED = 600; -int const DCPContentProperty::REFERENCE_VIDEO = 601; -int const DCPContentProperty::REFERENCE_AUDIO = 602; -int const DCPContentProperty::REFERENCE_SUBTITLE = 603; +int const DCPContentProperty::NEEDS_ASSETS = 600; +int const DCPContentProperty::NEEDS_KDM = 601; +int const DCPContentProperty::REFERENCE_VIDEO = 602; +int const DCPContentProperty::REFERENCE_AUDIO = 603; +int const DCPContentProperty::REFERENCE_SUBTITLE = 604; DCPContent::DCPContent (shared_ptr film, boost::filesystem::path p) : Content (film) @@ -135,7 +136,8 @@ DCPContent::read_directory (boost::filesystem::path p) void DCPContent::examine (shared_ptr job) { - bool const could_be_played = can_be_played (); + bool const needed_assets = needs_assets (); + bool const needed_kdm = needs_kdm (); job->set_progress_unknown (); Content::examine (job); @@ -170,8 +172,12 @@ DCPContent::examine (shared_ptr job) _cpl = examiner->cpl (); } - if (could_be_played != can_be_played ()) { - signal_changed (DCPContentProperty::CAN_BE_PLAYED); + if (needed_assets != needs_assets ()) { + signal_changed (DCPContentProperty::NEEDS_ASSETS); + } + + if (needed_kdm != needs_kdm ()) { + signal_changed (DCPContentProperty::NEEDS_KDM); } video->set_frame_type (_three_d ? VIDEO_FRAME_TYPE_3D : VIDEO_FRAME_TYPE_2D); diff --git a/src/lib/dcp_content.h b/src/lib/dcp_content.h index f97045484..93a207ed7 100644 --- a/src/lib/dcp_content.h +++ b/src/lib/dcp_content.h @@ -32,7 +32,8 @@ class DCPContentProperty { public: - static int const CAN_BE_PLAYED; + static int const NEEDS_KDM; + static int const NEEDS_ASSETS; static int const REFERENCE_VIDEO; static int const REFERENCE_AUDIO; static int const REFERENCE_SUBTITLE; diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc index b2034890b..e25583cb6 100644 --- a/src/lib/dcp_examiner.cc +++ b/src/lib/dcp_examiner.cc @@ -35,6 +35,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -165,12 +168,12 @@ DCPExaminer::DCPExaminer (shared_ptr content) _encrypted = cpl->encrypted (); _kdm_valid = true; - /* Check that we can read the first picture frame */ + /* Check that we can read the first picture, sound and subtitle frames of each reel */ try { - if (!cpl->reels().empty ()) { - shared_ptr asset = cpl->reels().front()->main_picture()->asset (); - shared_ptr mono = dynamic_pointer_cast (asset); - shared_ptr stereo = dynamic_pointer_cast (asset); + BOOST_FOREACH (shared_ptr i, cpl->reels()) { + shared_ptr pic = i->main_picture()->asset (); + shared_ptr mono = dynamic_pointer_cast (pic); + shared_ptr stereo = dynamic_pointer_cast (pic); if (mono) { mono->start_read()->get_frame(0)->xyz_image (); @@ -178,6 +181,14 @@ DCPExaminer::DCPExaminer (shared_ptr content) stereo->start_read()->get_frame(0)->xyz_image (dcp::EYE_LEFT); } + if (i->main_sound()) { + shared_ptr sound = i->main_sound()->asset (); + i->main_sound()->asset()->start_read()->get_frame(0); + } + + if (i->main_subtitle()) { + i->main_subtitle()->asset()->subtitles (); + } } } catch (dcp::DCPReadError& e) { _kdm_valid = false; diff --git a/src/lib/player.cc b/src/lib/player.cc index c17cdfdc0..69306e381 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -169,7 +169,8 @@ Player::playlist_content_changed (weak_ptr w, int property, bool freque property == ContentProperty::TRIM_END || property == ContentProperty::PATH || property == VideoContentProperty::FRAME_TYPE || - property == DCPContentProperty::CAN_BE_PLAYED || + property == DCPContentProperty::NEEDS_ASSETS || + property == DCPContentProperty::NEEDS_KDM || property == SubtitleContentProperty::COLOUR || property == SubtitleContentProperty::OUTLINE || property == SubtitleContentProperty::SHADOW || diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index 1d9f010bf..5892d9c4c 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -468,7 +468,7 @@ ContentPanel::set_selection (weak_ptr wc) void ContentPanel::film_content_changed (int property) { - if (property == ContentProperty::PATH || property == DCPContentProperty::CAN_BE_PLAYED) { + if (property == ContentProperty::PATH || property == DCPContentProperty::NEEDS_ASSETS || property == DCPContentProperty::NEEDS_KDM) { setup (); }