X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fhints.cc;h=3edceeee371bbe4978765bf0f96b2aef14dd5102;hp=749fbb6763e8ca53b9a4bf2ac01411bea19b80d0;hb=bcc4e2f7dc4cd5658e199ddacb7202b00ec72cf1;hpb=9b4c2ae80d83d4e91c2fe9c6704a22aaeb3ee734 diff --git a/src/lib/hints.cc b/src/lib/hints.cc index 749fbb676..3edceeee3 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -49,10 +49,10 @@ using boost::shared_ptr; using boost::weak_ptr; using boost::optional; using boost::bind; +using namespace dcpomatic; Hints::Hints (weak_ptr film) : _film (film) - , _thread (0) , _long_ccap (false) , _overlap_ccap (false) , _too_many_ccap_lines (false) @@ -64,27 +64,22 @@ Hints::Hints (weak_ptr film) void Hints::start () { - _thread = new boost::thread (bind(&Hints::thread, this)); + _thread = boost::thread (bind(&Hints::thread, this)); } Hints::~Hints () { - if (!_thread) { + if (!_thread.joinable()) { return; } try { - { - boost::mutex::scoped_lock lm (_mutex); - _stop = true; - } - _thread->interrupt (); - _thread->join (); + _stop = true; + _thread.interrupt (); + _thread.join (); } catch (...) { } - - delete _thread; } void @@ -116,7 +111,7 @@ Hints::thread () } if (film->audio_channels() < 6) { - hint (_("Your DCP has fewer than 6 audio channels. This may cause problems on some projectors.")); + hint (_("Your DCP has fewer than 6 audio channels. This may cause problems on some projectors. You may want to set the DCP to have 6 channels. It does not matter if your content has fewer channels, as DCP-o-matic will fill the extras with silence.")); } AudioProcessor const * ap = film->audio_processor(); @@ -124,7 +119,7 @@ Hints::thread () hint (_("You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and may result in poor-quality audio. If you continue, you should listen to the resulting DCP in a cinema to make sure that it sounds good.")); } - int flat_or_narrower = 0; + int narrower_than_scope = 0; int scope = 0; BOOST_FOREACH (shared_ptr i, content) { if (i->video) { @@ -132,19 +127,19 @@ Hints::thread () if (r && r->id() == "239") { ++scope; } else if (r && r->id() != "239" && r->id() != "190") { - ++flat_or_narrower; + ++narrower_than_scope; } } } string const film_container = film->container()->id(); - if (scope && !flat_or_narrower && film_container == "185") { + if (scope && !narrower_than_scope && film_container == "185") { hint (_("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 == "239") { - hint (_("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 (!scope && narrower_than_scope && film_container == "239") { + hint (_("All of your content is 2.35:1 or narrower but your DCP's container is Scope (2.39:1). This will pillar-box your content. You may prefer to set your DCP's container to have the same ratio as your content.")); } if (film_container != "185" && film_container != "239" && film_container != "190") { @@ -162,7 +157,7 @@ Hints::thread () case 25: { /* You might want to go to 24 */ - string base = String::compose(_("You are set up for a DCP at a frame rate of %1fps. This frame rate is not supported by all projectors. You may want to consider changing your frame rate to %2fps."), 25, 24); + string base = String::compose(_("You are set up for a DCP at a frame rate of %1 fps. This frame rate is not supported by all projectors. You may want to consider changing your frame rate to %2 fps."), 25, 24); if (film->interop()) { base += " "; base += _("If you do use 25fps you should change your DCP standard to SMPTE."); @@ -178,7 +173,7 @@ Hints::thread () case 50: case 60: /* You almost certainly want to go to half frame rate */ - hint (String::compose(_("You are set up for a DCP at a frame rate of %1fps. This frame rate is not supported by all projectors. You are advised to change the DCP frame rate to %2fps."), film->video_frame_rate(), film->video_frame_rate() / 2)); + hint (String::compose(_("You are set up for a DCP at a frame rate of %1 fps. This frame rate is not supported by all projectors. You are advised to change the DCP frame rate to %2 fps."), film->video_frame_rate(), film->video_frame_rate() / 2)); break; } @@ -240,7 +235,7 @@ Hints::thread () 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 ()); + float const peak_dB = linear_to_db(peak) + an->gain_correction(film->playlist()); if (peak_dB > -3) { ch += dcp::raw_convert (short_audio_channel_name (i)) + ", "; } @@ -272,20 +267,21 @@ Hints::thread () struct timeval last_pulse; gettimeofday (&last_pulse, 0); - while (!player->pass()) { + try { + while (!player->pass()) { - struct timeval now; - gettimeofday (&now, 0); - if ((seconds(now) - seconds(last_pulse)) > 1) { - { - boost::mutex::scoped_lock lm (_mutex); + struct timeval now; + gettimeofday (&now, 0); + if ((seconds(now) - seconds(last_pulse)) > 1) { if (_stop) { break; } + emit (bind (boost::ref(Pulse))); + last_pulse = now; } - emit (bind (boost::ref(Pulse))); - last_pulse = now; } + } catch (...) { + store_current (); } emit (bind(boost::ref(Finished))); @@ -320,9 +316,13 @@ Hints::text (PlayerText text, TextType type, DCPTimePeriod period) _too_many_ccap_lines = true; } - if (!_overlap_ccap && _last && _last->overlap(period)) { + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + + /* XXX: maybe overlapping closed captions (i.e. different languages) are OK with Interop? */ + if (film->interop() && !_overlap_ccap && _last && _last->overlap(period)) { _overlap_ccap = true; - hint (_("You have overlapping closed captions, which are not allowed.")); + hint (_("You have overlapping closed captions, which are not allowed in Interop DCPs. Change your DCP standard to SMPTE.")); } _last = period;