X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_content.cc;h=eb1c5f42c2a3a5b525da1f01fe219fc72ef8e7fd;hb=cfbe9d2f44e380efed7a61b5b5c7a2fec7794915;hp=4bd718e96207212eeb1860672514ccac27b1f214;hpb=8fedaaa75c4586a4cc7ffb393bd71d1fdb091dc8;p=dcpomatic.git diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index 4bd718e96..eb1c5f42c 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -18,6 +18,7 @@ */ + #include "atmos_content.h" #include "dcp_content.h" #include "video_content.h" @@ -45,25 +46,24 @@ #include "i18n.h" + using std::cout; -using std::distance; +using std::dynamic_pointer_cast; +using std::function; using std::list; using std::make_shared; -using std::map; -using std::pair; using std::shared_ptr; using std::string; using std::vector; -using boost::scoped_ptr; using boost::optional; -using boost::function; -using std::dynamic_pointer_cast; +using boost::scoped_ptr; #if BOOST_VERSION >= 106100 using namespace boost::placeholders; #endif using dcp::raw_convert; using namespace dcpomatic; + int const DCPContentProperty::NEEDS_ASSETS = 600; int const DCPContentProperty::NEEDS_KDM = 601; int const DCPContentProperty::REFERENCE_VIDEO = 602; @@ -73,6 +73,7 @@ int const DCPContentProperty::NAME = 605; int const DCPContentProperty::TEXTS = 606; int const DCPContentProperty::CPL = 607; + DCPContent::DCPContent (boost::filesystem::path p) : _encrypted (false) , _needs_assets (false) @@ -96,7 +97,8 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version) { video = VideoContent::from_xml (this, node, version); audio = AudioContent::from_xml (this, node, version); - text = TextContent::from_xml (this, node, version); + list notes; + text = TextContent::from_xml (this, node, version, notes); atmos = AtmosContent::from_xml (this, node); for (int i = 0; i < static_cast(TextType::COUNT); ++i) { @@ -186,10 +188,7 @@ DCPContent::read_directory (boost::filesystem::path p) if (!have_metadata) { throw DCPError ("No ASSETMAP or ASSETMAP.xml file found: is this a DCP?"); } else { - throw DCPError ( - "This looks like a DCP-o-matic project folder, which cannot be added to a different project. " - "Choose the DCP directory inside the DCP-o-matic project folder if that's what you want to import." - ); + throw ProjectFolderError (); } } @@ -204,7 +203,7 @@ DCPContent::read_sub_directory (boost::filesystem::path p) if (boost::filesystem::is_regular_file(i.path())) { LOG_GENERAL ("Inside there's regular file %1", i.path().string()); add_path (i.path()); - } else if (boost::filesystem::is_directory (i.path())) { + } else if (boost::filesystem::is_directory(i.path()) && i.path().filename() != ".AppleDouble") { LOG_GENERAL ("Inside there's directory %1", i.path().string()); read_sub_directory (i.path()); } @@ -219,10 +218,10 @@ DCPContent::examine (shared_ptr film, shared_ptr job) bool const needed_kdm = needs_kdm (); string const old_name = name (); - ChangeSignaller cc_texts (this, DCPContentProperty::TEXTS); - ChangeSignaller cc_assets (this, DCPContentProperty::NEEDS_ASSETS); - ChangeSignaller cc_kdm (this, DCPContentProperty::NEEDS_KDM); - ChangeSignaller cc_name (this, DCPContentProperty::NAME); + ContentChangeSignaller cc_texts (this, DCPContentProperty::TEXTS); + ContentChangeSignaller cc_assets (this, DCPContentProperty::NEEDS_ASSETS); + ContentChangeSignaller cc_kdm (this, DCPContentProperty::NEEDS_KDM); + ContentChangeSignaller cc_name (this, DCPContentProperty::NAME); if (job) { job->set_progress_unknown (); @@ -264,15 +263,18 @@ DCPContent::examine (shared_ptr film, shared_ptr job) atmos->set_length (examiner->atmos_length()); } - list > new_text; - for (int i = 0; i < static_cast(TextType::COUNT); ++i) { - for (int j = 0; j < examiner->text_count(static_cast(i)); ++j) { - auto c = make_shared(this, static_cast(i), static_cast(i)); - if (i == static_cast(TextType::CLOSED_CAPTION)) { - c->set_dcp_track (examiner->dcp_text_track(j)); - } - new_text.push_back (c); - } + list> new_text; + + for (int i = 0; i < examiner->text_count(TextType::OPEN_SUBTITLE); ++i) { + auto c = make_shared(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE); + c->set_language (examiner->open_subtitle_language()); + new_text.push_back (c); + } + + for (int i = 0; i < examiner->text_count(TextType::CLOSED_CAPTION); ++i) { + auto c = make_shared(this, TextType::CLOSED_CAPTION, TextType::CLOSED_CAPTION); + c->set_dcp_track (examiner->dcp_text_track(i)); + new_text.push_back (c); } { @@ -288,7 +290,7 @@ DCPContent::examine (shared_ptr film, shared_ptr job) _cpl = examiner->cpl (); _reel_lengths = examiner->reel_lengths (); for (auto const& i: examiner->markers()) { - _markers[i.first] = ContentTime(i.second.as_editable_units(DCPTime::HZ)); + _markers[i.first] = ContentTime(i.second.as_editable_units_ceil(DCPTime::HZ)); } _ratings = examiner->ratings (); _content_versions = examiner->content_versions (); @@ -509,7 +511,7 @@ DCPContent::set_default_colour_conversion () void DCPContent::set_reference_video (bool r) { - ChangeSignaller cc (this, DCPContentProperty::REFERENCE_VIDEO); + ContentChangeSignaller cc (this, DCPContentProperty::REFERENCE_VIDEO); { boost::mutex::scoped_lock lm (_mutex); @@ -520,7 +522,7 @@ DCPContent::set_reference_video (bool r) void DCPContent::set_reference_audio (bool r) { - ChangeSignaller cc (this, DCPContentProperty::REFERENCE_AUDIO); + ContentChangeSignaller cc (this, DCPContentProperty::REFERENCE_AUDIO); { boost::mutex::scoped_lock lm (_mutex); @@ -531,7 +533,7 @@ DCPContent::set_reference_audio (bool r) void DCPContent::set_reference_text (TextType type, bool r) { - ChangeSignaller cc (this, DCPContentProperty::REFERENCE_TEXT); + ContentChangeSignaller cc (this, DCPContentProperty::REFERENCE_TEXT); { boost::mutex::scoped_lock lm (_mutex); @@ -740,7 +742,7 @@ DCPContent::can_reference_text (shared_ptr film, TextType type, stri return false; } else if (i->main_subtitle()->entry_point().get_value_or(0) != 0) { /// TRANSLATORS: this string will follow "Cannot reference this DCP: " - why_not = _("one if its subtitle reels has a non-zero entry point so it must be re-written."); + why_not = _("one of its subtitle reels has a non-zero entry point so it must be re-written."); return false; } } @@ -753,7 +755,7 @@ DCPContent::can_reference_text (shared_ptr film, TextType type, stri for (auto j: i->closed_captions()) { if (j->entry_point().get_value_or(0) != 0) { /// TRANSLATORS: this string will follow "Cannot reference this DCP: " - why_not = _("one if its closed caption has a non-zero entry point so it must be re-written."); + why_not = _("one of its closed caption has a non-zero entry point so it must be re-written."); return false; } } @@ -788,7 +790,7 @@ DCPContent::take_settings_from (shared_ptr c) void DCPContent::set_cpl (string id) { - ChangeSignaller cc (this, DCPContentProperty::CPL); + ContentChangeSignaller cc (this, DCPContentProperty::CPL); { boost::mutex::scoped_lock lm (_mutex);