X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_examiner.cc;h=9bf401125dda6dea75e3a880541603256588e079;hb=4230f0381715f8f6f9e85374ea0e74fb3104a18d;hp=4b9238e5b3d1c7f3758c833fc615a0d76d780bc0;hpb=a5c629cb9b638b67a0e4c2d26fe9ab2e124bf0eb;p=dcpomatic.git diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc index 4b9238e5b..9bf401125 100644 --- a/src/lib/dcp_examiner.cc +++ b/src/lib/dcp_examiner.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -52,8 +52,8 @@ using std::runtime_error; using boost::shared_ptr; using boost::dynamic_pointer_cast; -DCPExaminer::DCPExaminer (shared_ptr content) - : DCP (content) +DCPExaminer::DCPExaminer (shared_ptr content, bool tolerant) + : DCP (content, tolerant) , _video_length (0) , _audio_length (0) , _has_video (false) @@ -66,7 +66,7 @@ DCPExaminer::DCPExaminer (shared_ptr content) shared_ptr cpl; for (int i = 0; i < TEXT_COUNT; ++i) { - _has_text[i] = false; + _text_count[i] = 0; } if (content->cpl ()) { @@ -108,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()) { @@ -134,7 +135,7 @@ DCPExaminer::DCPExaminer (shared_ptr content) throw DCPError (_("Mismatched video sizes in DCP")); } - _video_length += i->main_picture()->duration(); + _video_length += i->main_picture()->actual_duration(); } if (i->main_sound ()) { @@ -159,7 +160,7 @@ DCPExaminer::DCPExaminer (shared_ptr content) throw DCPError (_("Mismatched audio sample rates in DCP")); } - _audio_length += i->main_sound()->duration(); + _audio_length += i->main_sound()->actual_duration(); } if (i->main_subtitle ()) { @@ -169,27 +170,27 @@ DCPExaminer::DCPExaminer (shared_ptr content) return; } - _has_text[TEXT_OPEN_SUBTITLE] = true; + _text_count[TEXT_OPEN_SUBTITLE] = 1; } - if (i->closed_caption ()) { - if (!i->closed_caption()->asset_ref().resolved()) { + 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; + _text_count[TEXT_CLOSED_CAPTION]++; } if (i->main_picture()) { - _reel_lengths.push_back (i->main_picture()->duration()); + _reel_lengths.push_back (i->main_picture()->actual_duration()); } else if (i->main_sound()) { - _reel_lengths.push_back (i->main_sound()->duration()); + _reel_lengths.push_back (i->main_sound()->actual_duration()); } else if (i->main_subtitle()) { - _reel_lengths.push_back (i->main_subtitle()->duration()); - } else if (i->closed_caption()) { - _reel_lengths.push_back (i->closed_caption()->duration()); + _reel_lengths.push_back (i->main_subtitle()->actual_duration()); + } else if (!i->closed_captions().empty()) { + _reel_lengths.push_back (i->closed_captions().front()->actual_duration()); } } @@ -218,7 +219,7 @@ DCPExaminer::DCPExaminer (shared_ptr content) i->main_subtitle()->asset()->subtitles (); } } - } catch (dcp::DCPReadError& e) { + } catch (dcp::ReadError& e) { _kdm_valid = false; } catch (dcp::MiscError& e) { _kdm_valid = false;