X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_content.cc;h=b1c9e3815fd916b8edb57ee7e9bad8576052a3c6;hb=99428af22969a6cfb1dbd2053a9356bb23b3182f;hp=51c7f8549ba504fe75a090509893317da526ca9d;hpb=35466aa2bf59544d436a5f576e81856c5e0d0311;p=dcpomatic.git diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index 51c7f8549..b1c9e3815 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2015 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,16 +32,18 @@ using std::string; using std::cout; using std::distance; +using std::pair; +using std::list; using boost::shared_ptr; using boost::optional; int const DCPContentProperty::CAN_BE_PLAYED = 600; -DCPContent::DCPContent (shared_ptr f, boost::filesystem::path p) - : Content (f) - , VideoContent (f) - , SingleStreamAudioContent (f) - , SubtitleContent (f) +DCPContent::DCPContent (shared_ptr film, boost::filesystem::path p) + : Content (film) + , VideoContent (film) + , SingleStreamAudioContent (film) + , SubtitleContent (film) , _has_subtitles (false) , _encrypted (false) , _kdm_valid (false) @@ -51,11 +53,11 @@ DCPContent::DCPContent (shared_ptr f, boost::filesystem::path p) unset_colour_conversion (false); } -DCPContent::DCPContent (shared_ptr f, cxml::ConstNodePtr node, int version) - : Content (f, node) - , VideoContent (f, node, version) - , SingleStreamAudioContent (f, node, version) - , SubtitleContent (f, node, version) +DCPContent::DCPContent (shared_ptr film, cxml::ConstNodePtr node, int version) + : Content (film, node) + , VideoContent (film, node, version) + , SingleStreamAudioContent (film, node, version) + , SubtitleContent (film, node, version) { _name = node->string_child ("Name"); _has_subtitles = node->bool_child ("HasSubtitles"); @@ -82,19 +84,21 @@ void DCPContent::examine (shared_ptr job) { bool const could_be_played = can_be_played (); - + job->set_progress_unknown (); Content::examine (job); - + shared_ptr examiner (new DCPExaminer (shared_from_this ())); take_from_video_examiner (examiner); take_from_audio_examiner (examiner); - boost::mutex::scoped_lock lm (_mutex); - _name = examiner->name (); - _has_subtitles = examiner->has_subtitles (); - _encrypted = examiner->encrypted (); - _kdm_valid = examiner->kdm_valid (); + { + boost::mutex::scoped_lock lm (_mutex); + _name = examiner->name (); + _has_subtitles = examiner->has_subtitles (); + _encrypted = examiner->encrypted (); + _kdm_valid = examiner->kdm_valid (); + } if (could_be_played != can_be_played ()) { signal_changed (DCPContentProperty::CAN_BE_PLAYED); @@ -141,7 +145,8 @@ DCPContent::full_length () const { shared_ptr film = _film.lock (); DCPOMATIC_ASSERT (film); - return DCPTime (video_length (), FrameRateChange (video_frame_rate (), film->video_frame_rate ())); + FrameRateChange const frc (video_frame_rate (), film->video_frame_rate ()); + return DCPTime::from_frames (rint (video_length () * frc.factor ()), film->video_frame_rate ()); } string @@ -159,6 +164,7 @@ DCPContent::add_kdm (dcp::EncryptedKDM k) bool DCPContent::can_be_played () const { + boost::mutex::scoped_lock lm (_mutex); return !_encrypted || _kdm_valid; } @@ -177,3 +183,9 @@ DCPContent::directory () const return dir; } + +void +DCPContent::add_properties (list >& p) const +{ + SingleStreamAudioContent::add_properties (p); +}