Adapt for changes to libdcp API.
[dcpomatic.git] / src / lib / util.cc
index f9877523a0d3b4ef4b0ef56fc1163e866fb5f6fc..7824e7fed739f75d51063298d99ffe61fafcbb28 100644 (file)
@@ -45,6 +45,7 @@
 #include "image.h"
 #include "text_decoder.h"
 #include "job_manager.h"
+#include "warnings.h"
 #include <dcp/decrypted_kdm.h>
 #include <dcp/locale_convert.h>
 #include <dcp/util.h>
@@ -52,6 +53,7 @@
 #include <dcp/picture_asset.h>
 #include <dcp/sound_asset.h>
 #include <dcp/subtitle_asset.h>
+#include <dcp/atmos_asset.h>
 extern "C" {
 #include <libavfilter/avfilter.h>
 #include <libavformat/avformat.h>
@@ -64,7 +66,9 @@ extern "C" {
 #include <boost/range/algorithm/replace_if.hpp>
 #include <boost/thread.hpp>
 #include <boost/filesystem.hpp>
+DCPOMATIC_DISABLE_WARNINGS
 #include <boost/locale.hpp>
+DCPOMATIC_ENABLE_WARNINGS
 #ifdef DCPOMATIC_WINDOWS
 #include <boost/locale.hpp>
 #include <dbghelp.h>
@@ -229,6 +233,7 @@ addr2line (void const * const addr)
        return system(addr2line_cmd);
 }
 
+DCPOMATIC_DISABLE_WARNINGS
 /** This is called when C signals occur on Windows (e.g. SIGSEGV)
  *  (NOT C++ exceptions!).  We write a backtrace to backtrace_file by dark means.
  *  Adapted from code here: http://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c/
@@ -285,6 +290,7 @@ exception_handler(struct _EXCEPTION_POINTERS * info)
 
        return EXCEPTION_CONTINUE_SEARCH;
 }
+DCPOMATIC_ENABLE_WARNINGS
 #endif
 
 void
@@ -355,8 +361,10 @@ dcpomatic_setup ()
        SetUnhandledExceptionFilter(exception_handler);
 #endif
 
+DCPOMATIC_DISABLE_WARNINGS
        av_register_all ();
        avfilter_register_all ();
+DCPOMATIC_ENABLE_WARNINGS
 
 #ifdef DCPOMATIC_OSX
        /* Add our library directory to the libltdl search path so that
@@ -371,12 +379,12 @@ dcpomatic_setup ()
 
 #ifdef DCPOMATIC_WINDOWS
        putenv ("PANGOCAIRO_BACKEND=fontconfig");
-       putenv (String::compose("FONTCONFIG_PATH=%1", shared_path().string()).c_str());
+       putenv (String::compose("FONTCONFIG_PATH=%1", resources_path().string()).c_str());
 #endif
 
 #ifdef DCPOMATIC_OSX
        setenv ("PANGOCAIRO_BACKEND", "fontconfig", 1);
-       setenv ("FONTCONFIG_PATH", shared_path().string().c_str(), 1);
+       setenv ("FONTCONFIG_PATH", resources_path().string().c_str(), 1);
 #endif
 
        Pango::init ();
@@ -727,6 +735,21 @@ audio_asset_filename (shared_ptr<dcp::SoundAsset> asset, int reel_index, int ree
        return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
 }
 
+
+string
+atmos_asset_filename (shared_ptr<dcp::AtmosAsset> asset, int reel_index, int reel_count, optional<string> summary)
+{
+       dcp::NameFormat::Map values;
+       values['t'] = "atmos";
+       values['r'] = raw_convert<string> (reel_index + 1);
+       values['n'] = raw_convert<string> (reel_count);
+       if (summary) {
+               values['c'] = careful_string_filter (summary.get());
+       }
+       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
+}
+
+
 float
 relaxed_string_to_float (string s)
 {
@@ -810,6 +833,10 @@ audio_channel_types (list<int> mapped, int channels)
                        break;
                case dcp::HI:
                case dcp::VI:
+               case dcp::SYNC_SIGNAL:
+               case dcp::SIGN_LANGUAGE:
+               case dcp::UNUSED:
+               case dcp::CHANNEL_COUNT:
                        break;
                }
        }
@@ -1230,3 +1257,24 @@ decrypt_kdm_with_helpful_error (dcp::EncryptedKDM kdm)
        }
 }
 
+
+boost::filesystem::path
+default_font_file ()
+{
+       boost::filesystem::path liberation_normal;
+       try {
+               liberation_normal = resources_path() / "LiberationSans-Regular.ttf";
+               if (!boost::filesystem::exists (liberation_normal)) {
+                       /* Hack for unit tests */
+                       liberation_normal = resources_path() / "fonts" / "LiberationSans-Regular.ttf";
+               }
+       } catch (boost::filesystem::filesystem_error& e) {
+
+       }
+
+       if (!boost::filesystem::exists(liberation_normal)) {
+               liberation_normal = "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf";
+       }
+
+       return liberation_normal;
+}