Use the set locale for boost::lexical_cast to fix #824.
[dcpomatic.git] / src / lib / util.cc
index 76e76328d861110a5441ce36f95dabcb0982c307..f434f358e38982c1ee7f6c3afe9b830d070c81a3 100644 (file)
@@ -42,6 +42,7 @@
 #include <dcp/subtitle_asset.h>
 extern "C" {
 #include <libavfilter/avfilter.h>
+#include <libavcodec/avcodec.h>
 }
 #include <curl/curl.h>
 #include <glib.h>
@@ -388,6 +389,11 @@ dcpomatic_setup_gettext_i18n (string lang)
 
        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());
@@ -473,7 +479,7 @@ ensure_ui_thread ()
 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
@@ -491,6 +497,10 @@ audio_channel_name (int c)
                _("Right centre"),
                _("Left rear surround"),
                _("Right rear surround"),
+               _("D-BOX primary"),
+               _("D-BOX secondary"),
+               _("Unused"),
+               _("Unused")
        };
 
        return channels[c];
@@ -539,10 +549,10 @@ dcp::Size
 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 *
@@ -555,22 +565,6 @@ wrapped_av_malloc (size_t s)
        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)
 {