Different configuration of filename format for assets / metadata (since CPL/PKL files...
[dcpomatic.git] / src / lib / util.cc
index 784aacf4e0232ee01555bfa6f9163c94217be7cb..1cf71ba32090a40963363d8abc37d065c9160124 100644 (file)
 #include "cross.h"
 #include "video_content.h"
 #include "rect.h"
-#include "md5_digester.h"
+#include "digester.h"
 #include "audio_processor.h"
-#include "safe_stringstream.h"
 #include "compose.hpp"
+#include <locked_sstream.h>
 #include <dcp/util.h>
 #include <dcp/picture_asset.h>
 #include <dcp/sound_asset.h>
@@ -46,6 +46,9 @@ extern "C" {
 #include <libavcodec/avcodec.h>
 }
 #include <curl/curl.h>
+#ifdef DCPOMATIC_GRAPHICS_MAGICK
+#include <Magick++.h>
+#endif
 #include <glib.h>
 #include <pangomm/init.h>
 #include <boost/algorithm/string.hpp>
@@ -112,7 +115,7 @@ seconds_to_hms (int s)
        int h = m / 60;
        m -= (h * 60);
 
-       SafeStringStream hms;
+       locked_stringstream hms;
        hms << h << N_(":");
        hms.width (2);
        hms << setfill ('0') << m << N_(":");
@@ -133,11 +136,11 @@ seconds_to_approximate_hms (int s)
        int h = m / 60;
        m -= (h * 60);
 
-       SafeStringStream ap;
+       locked_stringstream ap;
 
        bool const hours = h > 0;
-       bool const minutes = h < 10 && m > 0;
-       bool const seconds = m < 10 && s > 0;
+       bool const minutes = h < 6 && m > 0;
+       bool const seconds = h == 0 && m < 10 && s > 0;
 
        if (hours) {
                if (m > 30 && !minutes) {
@@ -148,7 +151,7 @@ seconds_to_approximate_hms (int s)
                        ap << h << _("h");
                }
 
-               if (minutes | seconds) {
+               if (minutes || seconds) {
                        ap << N_(" ");
                }
        }
@@ -346,6 +349,10 @@ dcpomatic_setup ()
 
        curl_global_init (CURL_GLOBAL_ALL);
 
+#ifdef DCPOMATIC_GRAPHICS_MAGICK
+       Magick::InitializeMagick (0);
+#endif
+
        ui_thread = boost::this_thread::get_id ();
 }
 
@@ -405,10 +412,10 @@ dcpomatic_setup_gettext_i18n (string lang)
 
 /** Compute a digest of the first and last `size' bytes of a set of files. */
 string
-md5_digest_head_tail (vector<boost::filesystem::path> files, boost::uintmax_t size)
+digest_head_tail (vector<boost::filesystem::path> files, boost::uintmax_t size)
 {
        boost::scoped_array<char> buffer (new char[size]);
-       MD5Digester digester;
+       Digester digester;
 
        /* Head */
        boost::uintmax_t to_do = size;
@@ -610,15 +617,31 @@ split_get_request (string url)
 }
 
 string
-video_asset_filename (shared_ptr<dcp::PictureAsset> asset)
+video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary)
 {
-       return "j2c_" + asset->id() + ".mxf";
+       dcp::NameFormat::Map values;
+       values['t'] = "j2c";
+       values['i'] = asset->id();
+       values['r'] = raw_convert<string> (reel_index + 1);
+       values['n'] = raw_convert<string> (reel_count);
+       if (summary) {
+               values['c'] = summary.get();
+       }
+       return Config::instance()->dcp_asset_filename_format().get(values) + ".mxf";
 }
 
 string
-audio_asset_filename (shared_ptr<dcp::SoundAsset> asset)
+audio_asset_filename (shared_ptr<dcp::SoundAsset> asset, int reel_index, int reel_count, optional<string> summary)
 {
-       return "pcm_" + asset->id() + ".mxf";
+       dcp::NameFormat::Map values;
+       values['t'] = "pcm";
+       values['i'] = asset->id();
+       values['r'] = raw_convert<string> (reel_index + 1);
+       values['n'] = raw_convert<string> (reel_count);
+       if (summary) {
+               values['c'] = summary.get();
+       }
+       return Config::instance()->dcp_asset_filename_format().get(values) + ".mxf";
 }
 
 float