X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fhints.cc;h=ebc42bc918f092a76c881c73df49e665c8c54934;hb=28111007e2e6fd62f5810be780706ae1618bd33f;hp=13154803579eb5a9379b872471a573c367ca8c1b;hpb=cadca6e4f8c1d844f1b5fb9375023e627c674fa9;p=dcpomatic.git diff --git a/src/lib/hints.cc b/src/lib/hints.cc index 131548035..ebc42bc91 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -27,6 +27,7 @@ #include "text_content.h" #include "audio_processor.h" #include "font.h" +#include "font_data.h" #include "ratio.h" #include "audio_analysis.h" #include "compose.hpp" @@ -39,7 +40,6 @@ #include #include #include -#include #include #include @@ -51,8 +51,8 @@ using std::pair; using std::min; using std::max; using std::cout; -using boost::shared_ptr; -using boost::weak_ptr; +using std::shared_ptr; +using std::weak_ptr; using boost::optional; using boost::bind; using namespace dcpomatic; @@ -125,7 +125,7 @@ Hints::check_incorrect_container () { int narrower_than_scope = 0; int scope = 0; - BOOST_FOREACH (shared_ptr i, film()->content()) { + for (auto i: film()->content()) { if (i->video) { Ratio const * r = Ratio::nearest_from_ratio(i->video->scaled_size(film()->frame_size()).ratio()); if (r && r->id() == "239") { @@ -205,7 +205,7 @@ Hints::check_speed_up () { optional lowest_speed_up; optional highest_speed_up; - BOOST_FOREACH (shared_ptr i, film()->content()) { + for (auto i: film()->content()) { double spu = film()->active_frame_rate_change(i->position()).speed_up; if (!lowest_speed_up || spu < *lowest_speed_up) { lowest_speed_up = spu; @@ -235,9 +235,9 @@ Hints::check_big_font_files () { bool big_font_files = false; if (film()->interop ()) { - BOOST_FOREACH (shared_ptr i, film()->content()) { - BOOST_FOREACH (shared_ptr j, i->text) { - BOOST_FOREACH (shared_ptr k, j->fonts()) { + for (auto i: film()->content()) { + for (auto j: i->text) { + for (auto k: j->fonts()) { optional const p = k->file (); if (p && boost::filesystem::file_size(p.get()) >= (MAX_FONT_FILE_SIZE - SIZE_SLACK)) { big_font_files = true; @@ -257,7 +257,7 @@ void Hints::check_vob () { int vob = 0; - BOOST_FOREACH (shared_ptr i, film()->content()) { + for (auto i: film()->content()) { if (boost::algorithm::starts_with (i->path(0).filename().string(), "VTS_")) { ++vob; } @@ -273,7 +273,7 @@ void Hints::check_3d_in_2d () { int three_d = 0; - BOOST_FOREACH (shared_ptr i, film()->content()) { + for (auto i: film()->content()) { if (i->video && i->video->frame_type() != VIDEO_FRAME_TYPE_2D) { ++three_d; } @@ -390,12 +390,20 @@ Hints::thread () boost::filesystem::path dcp_dir = film->dir("hints") / dcpomatic::get_process_id(); boost::filesystem::remove_all (dcp_dir); - _writer->finish (film->dir("hints") / dcpomatic::get_process_id()); + + try { + _writer->finish (film->dir("hints") / dcpomatic::get_process_id()); + } catch (...) { + store_current (); + emit (bind(boost::ref(Finished))); + return; + } + dcp::DCP dcp (dcp_dir); dcp.read (); DCPOMATIC_ASSERT (dcp.cpls().size() == 1); - BOOST_FOREACH (shared_ptr reel, dcp.cpls().front()->reels()) { - BOOST_FOREACH (shared_ptr ccap, reel->closed_captions()) { + for (auto reel: dcp.cpls().front()->reels()) { + for (auto ccap: reel->closed_captions()) { if (ccap->asset() && ccap->asset()->xml_as_string().length() > static_cast(MAX_CLOSED_CAPTION_XML_SIZE - SIZE_SLACK) && !ccap_xml_too_big) { hint (_( "At least one of your closed caption files' XML part is larger than " MAX_CLOSED_CAPTION_XML_SIZE_TEXT @@ -452,7 +460,7 @@ void Hints::closed_caption (PlayerText text, DCPTimePeriod period) { int lines = text.string.size(); - BOOST_FOREACH (StringText i, text.string) { + for (auto i: text.string) { if (utf8_strlen(i.text()) > MAX_CLOSED_CAPTION_LENGTH) { ++lines; if (!_long_ccap) { @@ -509,7 +517,7 @@ Hints::open_subtitle (PlayerText text, DCPTimePeriod period) } size_t longest_line = 0; - BOOST_FOREACH (StringText const& i, text.string) { + for (auto const& i: text.string) { longest_line = max (longest_line, i.text().length()); } @@ -526,7 +534,7 @@ void Hints::check_ffec_and_ffmc_in_smpte_feature () { shared_ptr f = film(); - if (!f->interop() && f->dcp_content_type()->libdcp_kind() == dcp::FEATURE && (!f->marker(dcp::FFEC) || !f->marker(dcp::FFMC))) { + if (!f->interop() && f->dcp_content_type()->libdcp_kind() == dcp::ContentKind::FEATURE && (!f->marker(dcp::Marker::FFEC) || !f->marker(dcp::Marker::FFMC))) { hint (_("SMPTE DCPs with the type FTR (feature) should have markers for the first frame of end credits (FFEC) and the first frame of moving credits (FFMC). You should add these markers using the 'Markers' button in the DCP tab.")); } }