Merge branch 'staging'
[dcpomatic.git] / src / lib / util.cc
index 2f8be6edde675dc37de0c1336b7d3a406bcf61fe..83980f82829ac3b7c5e00001dbfd4cd863f877af 100644 (file)
@@ -61,6 +61,7 @@ extern "C" {
 #include "filter.h"
 #include "sound_processor.h"
 #include "config.h"
+#include "film.h"
 #ifdef DVDOMATIC_WINDOWS
 #include "stack.hpp"
 #endif
@@ -637,8 +638,8 @@ Socket::read_uint32 ()
 /** @param other A Rect.
  *  @return The intersection of this with `other'.
  */
-Rect
-Rect::intersection (Rect const & other) const
+dvdomatic::Rect
+dvdomatic::Rect::intersection (Rect const & other) const
 {
        int const tx = max (x, other.x);
        int const ty = max (y, other.y);
@@ -942,32 +943,6 @@ still_image_file (string f)
        return (ext == N_(".tif") || ext == N_(".tiff") || ext == N_(".jpg") || ext == N_(".jpeg") || ext == N_(".png") || ext == N_(".bmp"));
 }
 
-/** @return A pair containing CPU model name and the number of processors */
-pair<string, int>
-cpu_info ()
-{
-       pair<string, int> info;
-       info.second = 0;
-       
-#ifdef DVDOMATIC_POSIX
-       ifstream f (N_("/proc/cpuinfo"));
-       while (f.good ()) {
-               string l;
-               getline (f, l);
-               if (boost::algorithm::starts_with (l, N_("model name"))) {
-                       string::size_type const c = l.find (':');
-                       if (c != string::npos) {
-                               info.first = l.substr (c + 2);
-                       }
-               } else if (boost::algorithm::starts_with (l, N_("processor"))) {
-                       ++info.second;
-               }
-       }
-#endif 
-
-       return info;
-}
-
 string
 audio_channel_name (int c)
 {
@@ -988,8 +963,9 @@ audio_channel_name (int c)
        return channels[c];
 }
 
-AudioMapping::AudioMapping (int c)
-       : _source_channels (c)
+AudioMapping::AudioMapping (shared_ptr<const Film> f)
+       : _source_channels (f->audio_stream() ? f->audio_stream()->channels() : 0)
+       , _minimum_channels (f->minimum_audio_channels ())
 {
 
 }
@@ -1027,8 +1003,11 @@ AudioMapping::dcp_to_source (libdcp::Channel c) const
        return static_cast<int> (c);
 }
 
+/** @return minimum number of DCP channels that we can allow in this
+    DCP, given the nature of the source.
+*/
 int
-AudioMapping::dcp_channels () const
+AudioMapping::minimum_dcp_channels () const
 {
        if (_source_channels == 1) {
                /* The source is mono, so to put the mono channel into
@@ -1040,6 +1019,15 @@ AudioMapping::dcp_channels () const
        return _source_channels;
 }
 
+/** @return number of channels that there should be in the DCP, including
+ *  any silent padded ones.
+ */
+int
+AudioMapping::dcp_channels () const
+{
+       return max (_source_channels, _minimum_channels);
+}
+
 FrameRateConversion::FrameRateConversion (float source, int dcp)
        : skip (false)
        , repeat (false)