/*
- Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "md5_digester.h"
#include "audio_processor.h"
#include "safe_stringstream.h"
+#include "compose.hpp"
#include <dcp/util.h>
#include <dcp/picture_asset.h>
#include <dcp/sound_asset.h>
#include <dcp/subtitle_asset.h>
+extern "C" {
+#include <libavfilter/avfilter.h>
+#include <libavcodec/avcodec.h>
+}
#include <curl/curl.h>
#include <glib.h>
#include <pangomm/init.h>
#include <boost/algorithm/string.hpp>
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
#include <boost/thread.hpp>
#include <boost/filesystem.hpp>
#ifdef DCPOMATIC_WINDOWS
using boost::shared_ptr;
using boost::thread;
using boost::optional;
+using boost::lexical_cast;
+using boost::bad_lexical_cast;
using dcp::Size;
/** Path to our executable, required by the stacktrace stuff and filled
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());
string
audio_channel_name (int c)
{
- DCPOMATIC_ASSERT (MAX_DCP_AUDIO_CHANNELS == 12);
+ DCPOMATIC_ASSERT (MAX_DCP_AUDIO_CHANNELS == 16);
/// TRANSLATORS: these are the names of audio channels; Lfe (sub) is the low-frequency
/// enhancement channel (sub-woofer). HI is the hearing-impaired audio track and
_("Right centre"),
_("Left rear surround"),
_("Right rear surround"),
+ _("D-BOX primary"),
+ _("D-BOX secondary"),
+ _("Unused"),
+ _("Unused")
};
return channels[c];
fit_ratio_within (float ratio, dcp::Size full_frame)
{
if (ratio < full_frame.ratio ()) {
- return dcp::Size (rint (full_frame.height * ratio), full_frame.height);
+ return dcp::Size (lrintf (full_frame.height * ratio), full_frame.height);
}
- return dcp::Size (full_frame.width, rint (full_frame.width / ratio));
+ return dcp::Size (full_frame.width, lrintf (full_frame.width / ratio));
}
void *
return p;
}
-FFmpegSubtitlePeriod
-subtitle_period (AVSubtitle const & sub)
-{
- ContentTime const packet_time = ContentTime::from_seconds (static_cast<double> (sub.pts) / AV_TIME_BASE);
-
- if (sub.end_display_time == static_cast<uint32_t> (-1)) {
- /* End time is not known */
- return FFmpegSubtitlePeriod (packet_time + ContentTime::from_seconds (sub.start_display_time / 1e3));
- }
-
- return FFmpegSubtitlePeriod (
- packet_time + ContentTime::from_seconds (sub.start_display_time / 1e3),
- packet_time + ContentTime::from_seconds (sub.end_display_time / 1e3)
- );
-}
-
map<string, string>
split_get_request (string url)
{
{
return "pcm_" + asset->id() + ".mxf";
}
+
+float
+relaxed_string_to_float (string s)
+{
+ try {
+ boost::algorithm::replace_all (s, ",", ".");
+ return lexical_cast<float> (s);
+ } catch (bad_lexical_cast) {
+ boost::algorithm::replace_all (s, ".", ",");
+ return lexical_cast<float> (s);
+ }
+}
+
+bool
+string_not_empty (string s)
+{
+ return !s.empty ();
+}