/*
Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
- This program is free software; you can redistribute it and/or modify
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ DCP-o-matic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
*/
#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 <dcp/util.h>
#include <dcp/picture_asset.h>
#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>
int h = m / 60;
m -= (h * 60);
- SafeStringStream hms;
- hms << h << N_(":");
- hms.width (2);
- hms << setfill ('0') << m << N_(":");
- hms.width (2);
- hms << setfill ('0') << s;
-
- return hms.str ();
+ char buffer[64];
+ snprintf (buffer, sizeof(buffer), "%d:%02d:%02d", h, m, s);
+ return buffer;
}
/** @param s Number of seconds.
int h = m / 60;
m -= (h * 60);
- SafeStringStream ap;
+ string 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) {
/// TRANSLATORS: h here is an abbreviation for hours
- ap << (h + 1) << _("h");
+ ap += raw_convert<string>(h + 1) + _("h");
} else {
/// TRANSLATORS: h here is an abbreviation for hours
- ap << h << _("h");
+ ap += raw_convert<string>(h) + _("h");
}
- if (minutes | seconds) {
- ap << N_(" ");
+ if (minutes || seconds) {
+ ap += N_(" ");
}
}
/* Minutes */
if (s > 30 && !seconds) {
/// TRANSLATORS: m here is an abbreviation for minutes
- ap << (m + 1) << _("m");
+ ap += raw_convert<string>(m + 1) + _("m");
} else {
/// TRANSLATORS: m here is an abbreviation for minutes
- ap << m << _("m");
+ ap += raw_convert<string>(m) + _("m");
}
if (seconds) {
- ap << N_(" ");
+ ap += N_(" ");
}
}
if (seconds) {
/* Seconds */
/// TRANSLATORS: s here is an abbreviation for seconds
- ap << s << _("s");
+ ap += raw_convert<string>(s) + _("s");
}
- return ap.str ();
+ return ap;
}
double
curl_global_init (CURL_GLOBAL_ALL);
+#ifdef DCPOMATIC_GRAPHICS_MAGICK
+ Magick::InitializeMagick (0);
+#endif
+
ui_thread = boost::this_thread::get_id ();
}
setlocale (LC_ALL, "");
textdomain ("libdcpomatic2");
- /* This sets up the locale to be used by lexical_cast (and probably other stuff);
- used by e.g. the audio gain calculator dialogue where we lexical_cast floating
- point values.
- */
- std::locale::global (std::locale (""));
#if defined(DCPOMATIC_WINDOWS) || defined(DCPOMATIC_OSX)
bindtextdomain ("libdcpomatic2", mo_path().string().c_str());
/** 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;
}
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
return lexical_cast<float> (s);
}
}
+
+bool
+string_not_empty (string s)
+{
+ return !s.empty ();
+}