Fix incorrect container size when loading a VF/OV combination into the player.
[dcpomatic.git] / src / lib / hints.cc
index eb3cc73aaf281508e327c63480e2161888561949..91aabdd56622e3939d934fcfc858dfbc1259298e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2016-2017 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2016-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -24,6 +24,7 @@
 #include "content.h"
 #include "video_content.h"
 #include "subtitle_content.h"
+#include "audio_processor.h"
 #include "font.h"
 #include "ratio.h"
 #include "audio_analysis.h"
@@ -76,6 +77,11 @@ get_hints (shared_ptr<const Film> film)
                hints.push_back (_("Your DCP has fewer than 6 audio channels.  This may cause problems on some projectors."));
        }
 
+       AudioProcessor const * ap = film->audio_processor();
+       if (ap && (ap->id() == "stereo-5.1-upmix-a" || ap->id() == "stereo-5.1-upmix-b")) {
+               hints.push_back (_("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 scope = 0;
        BOOST_FOREACH (shared_ptr<const Content> i, content) {
@@ -83,7 +89,7 @@ get_hints (shared_ptr<const Film> film)
                        Ratio const * r = i->video->scale().ratio ();
                        if (r && r->id() == "239") {
                                ++scope;
-                       } else if (r && r->id() != "239" && r->id() != "full-frame") {
+                       } else if (r && r->id() != "239" && r->id() != "190") {
                                ++flat_or_narrower;
                        }
                }
@@ -99,7 +105,7 @@ get_hints (shared_ptr<const Film> film)
                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_container != "185" && film_container != "239" && film_container != "full-frame") {
+       if (film_container != "185" && film_container != "239" && film_container != "190") {
                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"));
        }
 
@@ -127,6 +133,30 @@ get_hints (shared_ptr<const Film> film)
                hints.push_back (h);
        }
 
+       optional<double> lowest_speed_up;
+       optional<double> highest_speed_up;
+       BOOST_FOREACH (shared_ptr<const Content> i, content) {
+               double spu = film->active_frame_rate_change(i->position()).speed_up;
+               if (!lowest_speed_up || spu < *lowest_speed_up) {
+                       lowest_speed_up = spu;
+               }
+               if (!highest_speed_up || spu > *highest_speed_up) {
+                       highest_speed_up = spu;
+               }
+       }
+
+       double worst_speed_up = 1;
+       if (highest_speed_up) {
+               worst_speed_up = *highest_speed_up;
+       }
+       if (lowest_speed_up) {
+               worst_speed_up = max (worst_speed_up, 1 / *lowest_speed_up);
+       }
+
+       if (worst_speed_up > 25.5/24.0) {
+               hints.push_back (_("There is a large difference between the frame rate of your DCP and that of some of your content.  This will cause your audio to play back at a much lower or higher pitch than it should.  You are advised to set your DCP frame rate to one closer to your content, provided that your target projection systems support your chosen DCP rate."));
+       }
+
        int vob = 0;
        BOOST_FOREACH (shared_ptr<const Content> i, content) {
                if (boost::algorithm::starts_with (i->path(0).filename().string(), "VTS_")) {