X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_examiner.cc;h=dfb47f2ebf6d1f009e9476620e4c708ea84591c4;hb=92f024ea58c7279b8096e5e9f60f9cb2613e8a91;hp=74640ff00358146b8c3dc0f8307ea35aa7d3b9e1;hpb=b55c6c5496f6c8248dd51bbcaecb80ef0efcbadb;p=dcpomatic.git diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc index 74640ff00..dfb47f2eb 100644 --- a/src/lib/dcp_examiner.cc +++ b/src/lib/dcp_examiner.cc @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -55,7 +56,8 @@ DCPExaminer::DCPExaminer (shared_ptr content) : DCP (content) , _video_length (0) , _audio_length (0) - , _has_subtitles (false) + , _has_video (false) + , _has_audio (false) , _encrypted (false) , _needs_assets (false) , _kdm_valid (false) @@ -63,6 +65,10 @@ DCPExaminer::DCPExaminer (shared_ptr content) { shared_ptr cpl; + for (int i = 0; i < TEXT_COUNT; ++i) { + _has_text[i] = false; + } + if (content->cpl ()) { /* Use the CPL that the content was using before */ BOOST_FOREACH (shared_ptr i, cpls()) { @@ -102,6 +108,7 @@ DCPExaminer::DCPExaminer (shared_ptr content) _cpl = cpl->id (); _name = cpl->content_title_text (); + _content_kind = cpl->content_kind (); BOOST_FOREACH (shared_ptr i, cpl->reels()) { @@ -120,6 +127,7 @@ DCPExaminer::DCPExaminer (shared_ptr content) throw DCPError (_("Mismatched frame rates in DCP")); } + _has_video = true; shared_ptr asset = i->main_picture()->asset (); if (!_video_size) { _video_size = asset->size (); @@ -137,6 +145,7 @@ DCPExaminer::DCPExaminer (shared_ptr content) return; } + _has_audio = true; shared_ptr asset = i->main_sound()->asset (); if (!_audio_channels) { @@ -161,7 +170,27 @@ DCPExaminer::DCPExaminer (shared_ptr content) return; } - _has_subtitles = true; + _has_text[TEXT_OPEN_SUBTITLE] = true; + } + + BOOST_FOREACH (shared_ptr j, i->closed_captions()) { + if (!j->asset_ref().resolved()) { + /* We are missing this asset so we can't continue; examination will be repeated later */ + _needs_assets = true; + return; + } + + _has_text[TEXT_CLOSED_CAPTION] = true; + } + + if (i->main_picture()) { + _reel_lengths.push_back (i->main_picture()->duration()); + } else if (i->main_sound()) { + _reel_lengths.push_back (i->main_sound()->duration()); + } else if (i->main_subtitle()) { + _reel_lengths.push_back (i->main_subtitle()->duration()); + } else if (!i->closed_captions().empty()) { + _reel_lengths.push_back (i->closed_captions().front()->duration()); } } @@ -192,6 +221,8 @@ DCPExaminer::DCPExaminer (shared_ptr content) } } catch (dcp::DCPReadError& e) { _kdm_valid = false; + } catch (dcp::MiscError& e) { + _kdm_valid = false; } DCPOMATIC_ASSERT (cpl->standard ());