X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.cc;h=8a165586cff07e2741206f7397a77be2e850d088;hb=cd1b171489ba1d549cbefb393973987de803eb57;hp=5b8acbae9bb17868fa0baa64d40b2f504f085749;hpb=41daefcf0f0fcabd03e084ab05ee35f823740234;p=dcpomatic.git diff --git a/src/lib/film.cc b/src/lib/film.cc index 5b8acbae9..8a165586c 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2020 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -69,7 +69,6 @@ #include #include #include -#include #include #include #include @@ -97,9 +96,10 @@ using std::back_inserter; using std::map; using std::exception; using std::find; -using boost::shared_ptr; -using boost::weak_ptr; -using boost::dynamic_pointer_cast; +using std::shared_ptr; +using std::weak_ptr; +using std::make_shared; +using std::dynamic_pointer_cast; using boost::optional; using boost::is_any_of; #if BOOST_VERSION >= 106100 @@ -172,8 +172,8 @@ Film::Film (optional dir) , _audio_language (dcp::LanguageTag("en-US")) , _release_territory (dcp::LanguageTag::RegionSubtag("US")) , _version_number (1) - , _status (dcp::FINAL) - , _luminance (dcp::Luminance(4.5, dcp::Luminance::FOOT_LAMBERT)) + , _status (dcp::Status::FINAL) + , _luminance (dcp::Luminance(4.5, dcp::Luminance::Unit::FOOT_LAMBERT)) , _state_version (current_state_version) , _dirty (false) , _tolerant (false) @@ -193,16 +193,16 @@ Film::Film (optional dir) boost::filesystem::path p (boost::filesystem::system_complete (dir.get())); boost::filesystem::path result; - for (boost::filesystem::path::iterator i = p.begin(); i != p.end(); ++i) { - if (*i == "..") { + for (auto i: p) { + if (i == "..") { boost::system::error_code ec; if (boost::filesystem::is_symlink(result, ec) || result.filename() == "..") { - result /= *i; + result /= i; } else { result = result.parent_path (); } - } else if (*i != ".") { - result /= *i; + } else if (i != ".") { + result /= i; } } @@ -210,9 +210,9 @@ Film::Film (optional dir) } if (_directory) { - _log.reset (new FileLog (file ("log"))); + _log = make_shared(file("log")); } else { - _log.reset (new NullLog); + _log = make_shared(); } _playlist->set_sequence (_sequence); @@ -220,11 +220,11 @@ Film::Film (optional dir) Film::~Film () { - BOOST_FOREACH (boost::signals2::connection& i, _job_connections) { + for (auto& i: _job_connections) { i.disconnect (); } - BOOST_FOREACH (boost::signals2::connection& i, _audio_analysis_connections) { + for (auto& i: _audio_analysis_connections) { i.disconnect (); } } @@ -285,10 +285,10 @@ Film::internal_video_asset_filename (DCPTimePeriod p) const boost::filesystem::path Film::audio_analysis_path (shared_ptr playlist) const { - boost::filesystem::path p = dir ("analysis"); + auto p = dir ("analysis"); Digester digester; - BOOST_FOREACH (shared_ptr i, playlist->content ()) { + for (auto i: playlist->content ()) { if (!i->audio) { continue; } @@ -320,16 +320,16 @@ Film::audio_analysis_path (shared_ptr playlist) const boost::filesystem::path Film::subtitle_analysis_path (shared_ptr content) const { - boost::filesystem::path p = dir ("analysis"); + auto p = dir ("analysis"); Digester digester; digester.add (content->digest()); if (!content->text.empty()) { - shared_ptr tc = content->text.front(); + auto tc = content->text.front(); digester.add (tc->x_scale()); digester.add (tc->y_scale()); - BOOST_FOREACH (shared_ptr i, tc->fonts()) { + for (auto i: tc->fonts()) { digester.add (i->id()); } if (tc->effect()) { @@ -339,7 +339,7 @@ Film::subtitle_analysis_path (shared_ptr content) const digester.add (tc->outline_width()); } - shared_ptr fc = dynamic_pointer_cast(content); + auto fc = dynamic_pointer_cast(content); if (fc) { digester.add (fc->subtitle_stream()->identifier()); } @@ -360,7 +360,7 @@ Film::make_dcp (bool gui, bool check) throw BadSettingError (_("name"), _("Cannot contain slashes")); } - if (container() == 0) { + if (container() == nullptr) { throw MissingSettingError (_("container")); } @@ -372,7 +372,7 @@ Film::make_dcp (bool gui, bool check) throw runtime_error (_("The DCP is empty, perhaps because all the content has zero length.")); } - if (dcp_content_type() == 0) { + if (dcp_content_type() == nullptr) { throw MissingSettingError (_("content type")); } @@ -380,11 +380,11 @@ Film::make_dcp (bool gui, bool check) set_name ("DCP"); } - BOOST_FOREACH (shared_ptr i, content ()) { + for (auto i: content ()) { if (!i->paths_valid()) { throw runtime_error (_("some of your content is missing")); } - shared_ptr dcp = dynamic_pointer_cast (i); + auto dcp = dynamic_pointer_cast(i); if (dcp && dcp->needs_kdm()) { throw runtime_error (_("Some of your content needs a KDM")); } @@ -395,11 +395,11 @@ Film::make_dcp (bool gui, bool check) set_isdcf_date_today (); - BOOST_FOREACH (string i, environment_info ()) { + for (auto i: environment_info ()) { LOG_GENERAL_NC (i); } - BOOST_FOREACH (shared_ptr i, content ()) { + for (auto i: content ()) { LOG_GENERAL ("Content: %1", i->technical_summary()); } LOG_GENERAL ("DCP video rate %1 fps", video_frame_rate()); @@ -410,10 +410,10 @@ Film::make_dcp (bool gui, bool check) } LOG_GENERAL ("J2K bandwidth %1", j2k_bandwidth()); - shared_ptr tj (new TranscodeJob (shared_from_this())); - tj->set_encoder (shared_ptr (new DCPEncoder (shared_from_this(), tj))); + auto tj = make_shared(shared_from_this()); + tj->set_encoder (make_shared(shared_from_this(), tj)); if (check) { - shared_ptr cc (new CheckContentChangeJob(shared_from_this(), tj, gui)); + auto cc = make_shared(shared_from_this(), tj, gui); JobManager::instance()->add (cc); } else { JobManager::instance()->add (tj); @@ -424,15 +424,14 @@ Film::make_dcp (bool gui, bool check) void Film::send_dcp_to_tms () { - shared_ptr j (new UploadJob (shared_from_this())); - JobManager::instance()->add (j); + JobManager::instance()->add(make_shared(shared_from_this())); } shared_ptr Film::metadata (bool with_content_paths) const { - shared_ptr doc (new xmlpp::Document); - xmlpp::Element* root = doc->create_root_node ("Metadata"); + auto doc = make_shared(); + auto root = doc->create_root_node ("Metadata"); root->add_child("Version")->add_child_text (raw_convert (current_state_version)); root->add_child("Name")->add_child_text (_name); @@ -466,14 +465,14 @@ Film::metadata (bool with_content_paths) const root->add_child("ReencodeJ2K")->add_child_text (_reencode_j2k ? "1" : "0"); root->add_child("UserExplicitVideoFrameRate")->add_child_text(_user_explicit_video_frame_rate ? "1" : "0"); for (map::const_iterator i = _markers.begin(); i != _markers.end(); ++i) { - xmlpp::Element* m = root->add_child("Marker"); + auto m = root->add_child("Marker"); m->set_attribute("Type", dcp::marker_to_string(i->first)); m->add_child_text(raw_convert(i->second.get())); } - BOOST_FOREACH (dcp::Rating i, _ratings) { + for (auto i: _ratings) { i.as_xml (root->add_child("Rating")); } - BOOST_FOREACH (string i, _content_versions) { + for (auto i: _content_versions) { root->add_child("ContentVersion")->add_child_text(i); } root->add_child("NameLanguage")->add_child_text(_name_language.to_string()); @@ -488,7 +487,7 @@ Film::metadata (bool with_content_paths) const root->add_child("LuminanceUnit")->add_child_text(dcp::Luminance::unit_to_string(_luminance.unit())); root->add_child("UserExplicitContainer")->add_child_text(_user_explicit_container ? "1" : "0"); root->add_child("UserExplicitResolution")->add_child_text(_user_explicit_resolution ? "1" : "0"); - BOOST_FOREACH (dcp::LanguageTag i, _subtitle_languages) { + for (auto i: _subtitle_languages) { root->add_child("SubtitleLanguage")->add_child_text(i.to_string()); } _playlist->as_xml (root->add_child ("Playlist"), with_content_paths); @@ -499,8 +498,7 @@ Film::metadata (bool with_content_paths) const void Film::write_metadata (boost::filesystem::path path) const { - shared_ptr doc = metadata (); - doc->write_to_file_formatted (path.string()); + metadata()->write_to_file_formatted(path.string()); } /** Write state to our `metadata' file */ @@ -509,8 +507,7 @@ Film::write_metadata () const { DCPOMATIC_ASSERT (directory()); boost::filesystem::create_directories (directory().get()); - shared_ptr doc = metadata (); - doc->write_to_file_formatted (file(metadata_file).string ()); + metadata()->write_to_file_formatted(file(metadata_file).string()); _dirty = false; } @@ -520,7 +517,7 @@ Film::write_template (boost::filesystem::path path) const { boost::filesystem::create_directories (path.parent_path()); shared_ptr doc = metadata (false); - doc->write_to_file_formatted (path.string ()); + metadata(false)->write_to_file_formatted(path.string()); } /** Read state from our metadata file. @@ -549,7 +546,7 @@ Film::read_metadata (optional path) throw runtime_error (_("This film was created with a newer version of DCP-o-matic, and it cannot be loaded into this version. Sorry!")); } else if (_state_version < current_state_version) { /* This is an older version; save a copy (if we haven't already) */ - boost::filesystem::path const older = path->parent_path() / String::compose("metadata.%1.xml", _state_version); + auto const older = path->parent_path() / String::compose("metadata.%1.xml", _state_version); if (!boost::filesystem::is_regular_file(older)) { try { boost::filesystem::copy_file(*path, older); @@ -572,14 +569,14 @@ Film::read_metadata (optional path) { - optional c = f.optional_string_child ("DCPContentType"); + auto c = f.optional_string_child("DCPContentType"); if (c) { _dcp_content_type = DCPContentType::from_isdcf_name (c.get ()); } } { - optional c = f.optional_string_child ("Container"); + auto c = f.optional_string_child("Container"); if (c) { _container = Ratio::from_id (c.get ()); } @@ -617,7 +614,7 @@ Film::read_metadata (optional path) } if (_audio_processor && !Config::instance()->show_experimental_audio_processors()) { - list ap = AudioProcessor::visible(); + auto ap = AudioProcessor::visible(); if (find(ap.begin(), ap.end(), _audio_processor) == ap.end()) { Config::instance()->set_show_experimental_audio_processors(true); } @@ -628,34 +625,34 @@ Film::read_metadata (optional path) _reencode_j2k = f.optional_bool_child("ReencodeJ2K").get_value_or(false); _user_explicit_video_frame_rate = f.optional_bool_child("UserExplicitVideoFrameRate").get_value_or(false); - BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("Marker")) { + for (auto i: f.node_children("Marker")) { _markers[dcp::marker_from_string(i->string_attribute("Type"))] = DCPTime(dcp::raw_convert(i->content())); } - BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("Rating")) { + for (auto i: f.node_children("Rating")) { _ratings.push_back (dcp::Rating(i)); } - BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("ContentVersion")) { + for (auto i: f.node_children("ContentVersion")) { _content_versions.push_back (i->content()); } - optional name_language = f.optional_string_child("NameLanguage"); + auto name_language = f.optional_string_child("NameLanguage"); if (name_language) { _name_language = dcp::LanguageTag (*name_language); } - optional audio_language = f.optional_string_child("AudioLanguage"); + auto audio_language = f.optional_string_child("AudioLanguage"); if (audio_language) { _audio_language = dcp::LanguageTag (*audio_language); } - optional release_territory = f.optional_string_child("ReleaseTerritory"); + auto release_territory = f.optional_string_child("ReleaseTerritory"); if (release_territory) { _release_territory = dcp::LanguageTag::RegionSubtag (*release_territory); } _version_number = f.optional_number_child("VersionNumber").get_value_or(0); - optional status = f.optional_string_child("Status"); + auto status = f.optional_string_child("Status"); if (status) { _status = dcp::string_to_status (*status); } @@ -664,8 +661,8 @@ Film::read_metadata (optional path) _distributor = f.optional_string_child("Distributor").get_value_or(""); _facility = f.optional_string_child("Facility").get_value_or(""); - float value = f.optional_number_child("LuminanceValue").get_value_or(4.5); - optional unit = f.optional_string_child("LuminanceUnit"); + auto value = f.optional_number_child("LuminanceValue").get_value_or(4.5); + auto unit = f.optional_string_child("LuminanceUnit"); if (unit) { _luminance = dcp::Luminance (value, dcp::Luminance::string_to_unit(*unit)); } @@ -674,7 +671,7 @@ Film::read_metadata (optional path) _user_explicit_container = f.optional_bool_child("UserExplicitContainer").get_value_or(true); _user_explicit_resolution = f.optional_bool_child("UserExplicitResolution").get_value_or(true); - BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("SubtitleLanguage")) { + for (auto i: f.node_children("SubtitleLanguage")) { _subtitle_languages.push_back (dcp::LanguageTag(i->content())); } @@ -693,8 +690,8 @@ Film::read_metadata (optional path) optional found_language; - BOOST_FOREACH (cxml::ConstNodePtr i, f.node_child("Playlist")->node_children("Content")) { - cxml::ConstNodePtr text = i->optional_node_child("Text"); + for (auto i: f.node_child("Playlist")->node_children("Content")) { + auto text = i->optional_node_child("Text"); if (text && text->optional_string_child("Language") && !found_language) { try { found_language = dcp::LanguageTag(text->string_child("Language")); @@ -703,7 +700,7 @@ Film::read_metadata (optional path) } if (_state_version >= 9) { - optional isdcf_language = f.node_child("ISDCFMetadata")->optional_string_child("SubtitleLanguage"); + auto isdcf_language = f.node_child("ISDCFMetadata")->optional_string_child("SubtitleLanguage"); if (isdcf_language && !found_language) { try { found_language = dcp::LanguageTag(*isdcf_language); @@ -773,10 +770,10 @@ Film::mapped_audio_channels () const mapped.push_back (i); } } else { - BOOST_FOREACH (shared_ptr i, content ()) { + for (auto i: content()) { if (i->audio) { - list c = i->audio->mapping().mapped_output_channels (); - copy (c.begin(), c.end(), back_inserter (mapped)); + auto c = i->audio->mapping().mapped_output_channels(); + copy (c.begin(), c.end(), back_inserter(mapped)); } } @@ -793,7 +790,7 @@ Film::isdcf_name (bool if_created_now) const { string d; - string raw_name = name (); + auto raw_name = name (); /* Split the raw name up into words */ vector words; @@ -802,16 +799,16 @@ Film::isdcf_name (bool if_created_now) const string fixed_name; /* Add each word to fixed_name */ - for (vector::const_iterator i = words.begin(); i != words.end(); ++i) { - string w = *i; + for (auto i: words) { + string w = i; /* First letter is always capitalised */ w[0] = toupper (w[0]); /* Count caps in w */ size_t caps = 0; - for (size_t i = 0; i < w.size(); ++i) { - if (isupper (w[i])) { + for (size_t j = 0; j < w.size(); ++j) { + if (isupper (w[j])) { ++caps; } } @@ -820,13 +817,13 @@ Film::isdcf_name (bool if_created_now) const leave it alone. */ if (caps == w.size ()) { - for (size_t i = 1; i < w.size(); ++i) { - w[i] = tolower (w[i]); + for (size_t j = 1; j < w.size(); ++j) { + w[j] = tolower (w[j]); } } - for (size_t i = 0; i < w.size(); ++i) { - fixed_name += w[i]; + for (size_t j = 0; j < w.size(); ++j) { + fixed_name += w[j]; } } @@ -841,7 +838,7 @@ Film::isdcf_name (bool if_created_now) const d += "-" + raw_convert(isdcf_metadata().content_version); } - ISDCFMetadata const dm = isdcf_metadata (); + auto const dm = isdcf_metadata (); if (dm.temp_version) { d += "-Temp"; @@ -882,9 +879,9 @@ Film::isdcf_name (bool if_created_now) const /* XXX: this uses the first bit of content only */ /* Interior aspect ratio. The standard says we don't do this for trailers, for some strange reason */ - if (dcp_content_type() && dcp_content_type()->libdcp_kind() != dcp::TRAILER) { - Ratio const * content_ratio = 0; - BOOST_FOREACH (shared_ptr i, content ()) { + if (dcp_content_type() && dcp_content_type()->libdcp_kind() != dcp::ContentKind::TRAILER) { + Ratio const* content_ratio = nullptr; + for (auto i: content ()) { if (i->video) { /* Here's the first piece of video content */ content_ratio = Ratio::nearest_from_ratio(i->video->scaled_size(frame_size()).ratio()); @@ -905,10 +902,10 @@ Film::isdcf_name (bool if_created_now) const for now I'm just appending -CCAP if we have any closed captions. */ - bool burnt_in = true; - bool ccap = false; - BOOST_FOREACH (shared_ptr i, content()) { - BOOST_FOREACH (shared_ptr j, i->text) { + auto burnt_in = true; + auto ccap = false; + for (auto i: content()) { + for (auto j: i->text) { if (j->type() == TEXT_OPEN_SUBTITLE && j->use() && !j->burn()) { burnt_in = false; } else if (j->type() == TEXT_CLOSED_CAPTION && j->use()) { @@ -918,7 +915,7 @@ Film::isdcf_name (bool if_created_now) const } if (!_subtitle_languages.empty()) { - string lang = _subtitle_languages.front().language().get_value_or("en").subtag(); + auto lang = _subtitle_languages.front().language().get_value_or("en").subtag(); if (burnt_in) { transform (lang.begin(), lang.end(), lang.begin(), ::tolower); } else { @@ -946,19 +943,19 @@ Film::isdcf_name (bool if_created_now) const /* Count mapped audio channels */ - list mapped = mapped_audio_channels (); + auto mapped = mapped_audio_channels (); - pair ch = audio_channel_types (mapped, audio_channels()); + auto ch = audio_channel_types (mapped, audio_channels()); if (!ch.first && !ch.second) { d += "_MOS"; } else if (ch.first) { d += String::compose("_%1%2", ch.first, ch.second); } - if (audio_channels() > static_cast(dcp::HI) && find(mapped.begin(), mapped.end(), dcp::HI) != mapped.end()) { + if (audio_channels() > static_cast(dcp::Channel::HI) && find(mapped.begin(), mapped.end(), static_cast(dcp::Channel::HI)) != mapped.end()) { d += "-HI"; } - if (audio_channels() > static_cast(dcp::VI) && find(mapped.begin(), mapped.end(), dcp::VI) != mapped.end()) { + if (audio_channels() > static_cast(dcp::Channel::VI) && find(mapped.begin(), mapped.end(), static_cast(dcp::Channel::VI)) != mapped.end()) { d += "-VI"; } @@ -988,9 +985,9 @@ Film::isdcf_name (bool if_created_now) const d += "-3D"; } - bool vf = false; - BOOST_FOREACH (shared_ptr i, content ()) { - shared_ptr dc = dynamic_pointer_cast (i); + auto vf = false; + for (auto i: content()) { + auto dc = dynamic_pointer_cast(i); if (!dc) { continue; } @@ -1255,15 +1252,15 @@ Film::cpls () const vector out; - boost::filesystem::path const dir = directory().get(); - for (boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator(dir); i != boost::filesystem::directory_iterator(); ++i) { + auto const dir = directory().get(); + for (auto i: boost::filesystem::directory_iterator(dir)) { if ( - boost::filesystem::is_directory (*i) && - i->path().leaf() != "j2c" && i->path().leaf() != "video" && i->path().leaf() != "info" && i->path().leaf() != "analysis" + boost::filesystem::is_directory (i) && + i.path().leaf() != "j2c" && i.path().leaf() != "video" && i.path().leaf() != "info" && i.path().leaf() != "analysis" ) { try { - out.push_back (CPLSummary(*i)); + out.push_back (CPLSummary(i)); } catch (...) { } @@ -1298,7 +1295,7 @@ Film::examine_and_add_content (shared_ptr content, bool disable_audio_a run_ffprobe (content->path(0), file("ffprobe.log")); } - shared_ptr j (new ExamineContentJob (shared_from_this(), content)); + auto j = make_shared(shared_from_this(), content); _job_connections.push_back ( j->Finished.connect (bind (&Film::maybe_add_content, this, weak_ptr(j), weak_ptr(content), disable_audio_analysis)) @@ -1310,12 +1307,12 @@ Film::examine_and_add_content (shared_ptr content, bool disable_audio_a void Film::maybe_add_content (weak_ptr j, weak_ptr c, bool disable_audio_analysis) { - shared_ptr job = j.lock (); + auto job = j.lock (); if (!job || !job->finished_ok ()) { return; } - shared_ptr content = c.lock (); + auto content = c.lock (); if (!content) { return; } @@ -1323,7 +1320,7 @@ Film::maybe_add_content (weak_ptr j, weak_ptr c, bool disable_audi add_content (content); if (Config::instance()->automatic_audio_analysis() && content->audio && !disable_audio_analysis) { - shared_ptr playlist (new Playlist); + auto playlist = make_shared(); playlist->add (shared_from_this(), content); boost::signals2::connection c; JobManager::instance()->analyse_audio ( @@ -1345,7 +1342,7 @@ Film::add_content (shared_ptr c) if (_template_film) { /* Take settings from the first piece of content of c's type in _template */ - BOOST_FOREACH (shared_ptr i, _template_film->content()) { + for (auto i: _template_film->content()) { c->take_settings_from (i); } } @@ -1365,7 +1362,7 @@ Film::maybe_set_container_and_resolution () { /* Get the only piece of video content, if there is only one */ shared_ptr video; - BOOST_FOREACH (shared_ptr i, _playlist->content()) { + for (auto i: _playlist->content()) { if (i->video) { if (!video) { video = i->video; @@ -1430,7 +1427,7 @@ int Film::best_video_frame_rate () const { /* Don't default to anything above 30fps (make the user select that explicitly) */ - int best = _playlist->best_video_frame_rate (); + auto best = _playlist->best_video_frame_rate (); if (best > 30) { best /= 2; } @@ -1490,7 +1487,7 @@ void Film::check_settings_consistency () { optional atmos_rate; - BOOST_FOREACH (shared_ptr i, content()) { + for (auto i: content()) { if (i->atmos) { int rate = lrintf (i->atmos->edit_rate().as_float()); @@ -1505,8 +1502,8 @@ Film::check_settings_consistency () } bool change_made = false; - BOOST_FOREACH (shared_ptr i, content()) { - shared_ptr d = dynamic_pointer_cast(i); + for (auto i: content()) { + auto d = dynamic_pointer_cast(i); if (!d) { continue; } @@ -1590,10 +1587,10 @@ Film::frame_size () const dcp::Size Film::active_area () const { - dcp::Size const frame = frame_size (); + auto const frame = frame_size (); dcp::Size active; - BOOST_FOREACH (shared_ptr i, content()) { + for (auto i: content()) { if (i->video) { dcp::Size s = i->video->scaled_size (frame); active.width = max(active.width, s.width); @@ -1631,33 +1628,33 @@ Film::make_kdm ( throw runtime_error (_("Cannot make a KDM as this project is not encrypted.")); } - shared_ptr cpl (new dcp::CPL (cpl_file)); - shared_ptr signer = Config::instance()->signer_chain (); + auto cpl = make_shared(cpl_file); + auto signer = Config::instance()->signer_chain(); if (!signer->valid ()) { throw InvalidSignerError (); } /* Find keys that have been added to imported, encrypted DCP content */ list imported_keys; - BOOST_FOREACH (shared_ptr i, content()) { - shared_ptr d = dynamic_pointer_cast (i); + for (auto i: content()) { + auto d = dynamic_pointer_cast (i); if (d && d->kdm()) { dcp::DecryptedKDM kdm (d->kdm().get(), Config::instance()->decryption_chain()->key().get()); - list keys = kdm.keys (); + auto keys = kdm.keys (); copy (keys.begin(), keys.end(), back_inserter (imported_keys)); } } map, dcp::Key> keys; - BOOST_FOREACH(shared_ptr i, cpl->reel_mxfs()) { + for (auto i: cpl->reel_mxfs()) { if (!i->key_id()) { continue; } /* Get any imported key for this ID */ bool done = false; - BOOST_FOREACH (dcp::DecryptedKDMKey j, imported_keys) { + for (auto j: imported_keys) { if (j.id() == i->key_id().get()) { LOG_GENERAL ("Using imported key for %1", i->key_id().get()); keys[i] = j.key(); @@ -1701,7 +1698,7 @@ Film::should_be_enough_disk_space (double& required, double& available, bool& ca boost::filesystem::path test = internal_video_asset_dir() / "test"; boost::filesystem::path test2 = internal_video_asset_dir() / "test2"; can_hard_link = true; - FILE* f = fopen_boost (test, "w"); + auto f = fopen_boost (test, "w"); if (f) { fclose (f); boost::system::error_code ec; @@ -1713,7 +1710,7 @@ Film::should_be_enough_disk_space (double& required, double& available, bool& ca boost::filesystem::remove (test2); } - boost::filesystem::space_info s = boost::filesystem::space (internal_video_asset_dir ()); + auto s = boost::filesystem::space (internal_video_asset_dir ()); required = double (required_disk_space ()) / 1073741824.0f; if (!can_hard_link) { required *= 2; @@ -1767,7 +1764,7 @@ list Film::reels () const { list p; - DCPTime const len = length(); + auto const len = length(); switch (reel_type ()) { case REELTYPE_SINGLE: @@ -1779,9 +1776,9 @@ Film::reels () const list split_points; split_points.push_back (DCPTime()); split_points.push_back (len); - BOOST_FOREACH (shared_ptr c, content()) { + for (auto c: content()) { if (c->video) { - BOOST_FOREACH (DCPTime t, c->reel_split_points(shared_from_this())) { + for (auto t: c->reel_split_points(shared_from_this())) { split_points.push_back (t); } split_points.push_back (c->end(shared_from_this())); @@ -1793,7 +1790,7 @@ Film::reels () const /* Make them into periods, coalescing any that are less than 1 second long */ optional last; - BOOST_FOREACH (DCPTime t, split_points) { + for (auto t: split_points) { if (last && (t - *last) >= DCPTime::from_seconds(1)) { /* Period from *last to t is long enough; use it and start a new one */ p.push_back (DCPTimePeriod(*last, t)); @@ -1870,8 +1867,8 @@ Film::copy_from (shared_ptr film) bool Film::references_dcp_video () const { - BOOST_FOREACH (shared_ptr i, _playlist->content()) { - shared_ptr d = dynamic_pointer_cast(i); + for (auto i: _playlist->content()) { + auto d = dynamic_pointer_cast(i); if (d && d->reference_video()) { return true; } @@ -1883,8 +1880,8 @@ Film::references_dcp_video () const bool Film::references_dcp_audio () const { - BOOST_FOREACH (shared_ptr i, _playlist->content()) { - shared_ptr d = dynamic_pointer_cast(i); + for (auto i: _playlist->content()) { + auto d = dynamic_pointer_cast(i); if (d && d->reference_audio()) { return true; } @@ -1897,7 +1894,7 @@ Film::references_dcp_audio () const bool Film::contains_atmos_content () const { - BOOST_FOREACH (shared_ptr i, _playlist->content()) { + for (auto i: _playlist->content()) { if (i->atmos) { return true; } @@ -1911,10 +1908,10 @@ list Film::closed_caption_tracks () const { list tt; - BOOST_FOREACH (shared_ptr i, content()) { - BOOST_FOREACH (shared_ptr j, i->text) { + for (auto i: content()) { + for (auto j: i->text) { /* XXX: Empty DCPTextTrack ends up being a magic value here - the "unknown" or "not specified" track */ - DCPTextTrack dtt = j->dcp_track().get_value_or(DCPTextTrack()); + auto dtt = j->dcp_track().get_value_or(DCPTextTrack()); if (j->type() == TEXT_CLOSED_CAPTION && find(tt.begin(), tt.end(), dtt) == tt.end()) { tt.push_back (dtt); } @@ -2029,9 +2026,7 @@ Film::set_luminance (dcp::Luminance l) void Film::set_subtitle_language (dcp::LanguageTag language) { - vector lang; - lang.push_back (language); - set_subtitle_languages (lang); + set_subtitle_languages ({language}); } @@ -2062,9 +2057,9 @@ Film::set_facility (string f) optional Film::marker (dcp::Marker type) const { - map::const_iterator i = _markers.find (type); + auto i = _markers.find (type); if (i == _markers.end()) { - return optional(); + return {}; } return i->second; } @@ -2072,7 +2067,7 @@ Film::marker (dcp::Marker type) const shared_ptr Film::info_file_handle (DCPTimePeriod period, bool read) const { - return shared_ptr (new InfoFileHandle(_info_file_mutex, info_file(period), read)); + return std::make_shared(_info_file_mutex, info_file(period), read); } InfoFileHandle::InfoFileHandle (boost::mutex& mutex, boost::filesystem::path file, bool read) @@ -2085,7 +2080,7 @@ InfoFileHandle::InfoFileHandle (boost::mutex& mutex, boost::filesystem::path fil throw OpenFileError (file, errno, OpenFileError::READ); } } else { - bool const exists = boost::filesystem::exists (file); + auto const exists = boost::filesystem::exists (file); if (exists) { _handle = fopen_boost (file, "r+b"); } else { @@ -2109,7 +2104,7 @@ void Film::add_ffoc_lfoc (Markers& markers) const { if (markers.find(dcp::Marker::FFOC) == markers.end()) { - markers[dcp::Marker::FFOC] = dcpomatic::DCPTime(0); + markers[dcp::Marker::FFOC] = dcpomatic::DCPTime::from_frames(1, video_frame_rate()); } if (markers.find(dcp::Marker::LFOC) == markers.end()) {