X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fhints.cc;h=eb3cc73aaf281508e327c63480e2161888561949;hb=60d528017a3ac1afdc30a3a000b28dda96a2175e;hp=d196b7ddb088c4509cd93575da3bda4e8bd69b7b;hpb=54038beb4437c027e584fc95110f6fd4dbf2207d;p=dcpomatic.git diff --git a/src/lib/hints.cc b/src/lib/hints.cc index d196b7ddb..eb3cc73aa 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 Carl Hetherington + Copyright (C) 2016-2017 Carl Hetherington This file is part of DCP-o-matic. @@ -32,12 +32,16 @@ #include #include #include +#include #include "i18n.h" using std::vector; using std::string; +using std::pair; +using std::min; using std::max; +using std::cout; using boost::shared_ptr; using boost::optional; @@ -85,16 +89,18 @@ get_hints (shared_ptr film) } } - if (scope && !flat_or_narrower && film->container()->id() == "185") { + string const film_container = film->container()->id(); + + if (scope && !flat_or_narrower && film_container == "185") { hints.push_back (_("All of your content is in Scope (2.39:1) but your DCP's container is Flat (1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. You may prefer to set your DCP's container to Scope (2.39:1) in the \"DCP\" tab.")); } - if (!scope && flat_or_narrower && film->container()->id() == "239") { + if (!scope && flat_or_narrower && film_container == "239") { hints.push_back (_("All of your content is at 1.85:1 or narrower but your DCP's container is Scope (2.39:1). This will pillar-box your content inside a Flat (1.85:1) frame. You may prefer to set your DCP's container to Flat (1.85:1) in the \"DCP\" tab.")); } - if (film->video_frame_rate() != 24 && film->video_frame_rate() != 48) { - hints.push_back (String::compose (_("Your DCP frame rate (%1 fps) may cause problems in a few (mostly older) projectors. Use 24 or 48 frames per second to be on the safe side."), film->video_frame_rate())); + if (film_container != "185" && film_container != "239" && film_container != "full-frame") { + hints.push_back (_("Your DCP uses an unusual container ratio. This may cause problems on some projectors. If possible, use Flat or Scope for the DCP container ratio")); } if (film->j2k_bandwidth() >= 245000000) { @@ -102,7 +108,23 @@ get_hints (shared_ptr film) } if (film->interop() && film->video_frame_rate() != 24 && film->video_frame_rate() != 48) { - hints.push_back (_("You are set up for an Interop DCP at a frame rate which is not officially supported. You are advised to make a SMPTE DCP instead.")); + string base = _("You are set up for an Interop DCP at a frame rate which is not officially supported. You are advised either to change the frame rate of your DCP or to make a SMPTE DCP instead."); + base += " "; + pair range24 = film->speed_up_range (24); + pair range48 = film->speed_up_range (48); + pair range (max (range24.first, range48.first), min (range24.second, range48.second)); + string h; + if (range.second > (29.0/24)) { + h = base; + h += _("However, setting your DCP frame rate to 24 or 48 will cause a significant speed-up of your content, and SMPTE DCPs are not supported by all projectors."); + } else if (range.first < (24.0/29)) { + h = base; + h += _("However, setting your DCP frame rate to 24 or 48 will cause a significant slowdown of your content, and SMPTE DCPs are not supported by all projectors."); + } else { + h = _("You are set up for an Interop DCP at a frame rate which is not officially supported. You are advised either to change the frame rate of your DCP or to make a SMPTE DCP instead (although SMPTE DCPs are not supported by all projectors)."); + } + + hints.push_back (h); } int vob = 0; @@ -129,30 +151,36 @@ get_hints (shared_ptr film) boost::filesystem::path path = film->audio_analysis_path (film->playlist ()); if (boost::filesystem::exists (path)) { - shared_ptr an (new AudioAnalysis (path)); + try { + shared_ptr an (new AudioAnalysis (path)); - string ch; + string ch; - vector sample_peak = an->sample_peak (); - vector true_peak = an->true_peak (); + vector sample_peak = an->sample_peak (); + vector true_peak = an->true_peak (); - for (size_t i = 0; i < sample_peak.size(); ++i) { - float const peak = max (sample_peak[i].peak, true_peak.empty() ? 0 : true_peak[i]); - float const peak_dB = 20 * log10 (peak) + an->gain_correction (film->playlist ()); - if (peak_dB > -3) { - ch += dcp::raw_convert (short_audio_channel_name (i)) + ", "; + for (size_t i = 0; i < sample_peak.size(); ++i) { + float const peak = max (sample_peak[i].peak, true_peak.empty() ? 0 : true_peak[i]); + float const peak_dB = 20 * log10 (peak) + an->gain_correction (film->playlist ()); + if (peak_dB > -3) { + ch += dcp::raw_convert (short_audio_channel_name (i)) + ", "; + } } - } - ch = ch.substr (0, ch.length() - 2); + ch = ch.substr (0, ch.length() - 2); - if (!ch.empty ()) { - hints.push_back ( - String::compose ( - _("Your audio level is very high (on %1). You should reduce the gain of your audio content."), - ch - ) - ); + if (!ch.empty ()) { + hints.push_back ( + String::compose ( + _("Your audio level is very high (on %1). You should reduce the gain of your audio content."), + ch + ) + ); + } + } catch (OldFormatError& e) { + /* The audio analysis is too old to load in; just skip this hint as if + it had never been run. + */ } }