summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/config.cc7
-rw-r--r--src/lib/config.h1
-rw-r--r--src/lib/image.cc32
-rw-r--r--src/lib/util.cc31
-rw-r--r--src/lib/util.h4
-rw-r--r--src/tools/dvdomatic.cc32
-rw-r--r--src/tools/po/es_ES.po117
7 files changed, 206 insertions, 18 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc
index ad132437a..5dce3748d 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -167,3 +167,10 @@ Config::default_directory_or (string a) const
return _default_directory;
}
+
+void
+Config::drop ()
+{
+ delete _instance;
+ _instance = 0;
+}
diff --git a/src/lib/config.h b/src/lib/config.h
index 0e9c4a60a..ee46166e6 100644
--- a/src/lib/config.h
+++ b/src/lib/config.h
@@ -169,6 +169,7 @@ public:
void write () const;
static Config* instance ();
+ static void drop ();
private:
Config ();
diff --git a/src/lib/image.cc b/src/lib/image.cc
index 268c08173..2355d22e5 100644
--- a/src/lib/image.cc
+++ b/src/lib/image.cc
@@ -75,6 +75,7 @@ Image::lines (int n) const
case PIX_FMT_YUV444P9LE:
case PIX_FMT_YUV444P10BE:
case PIX_FMT_YUV444P10LE:
+ case PIX_FMT_UYVY422:
return size().height;
default:
throw PixelFormatError (N_("lines()"), _pixel_format);
@@ -99,6 +100,7 @@ Image::components () const
return 3;
case PIX_FMT_RGB24:
case PIX_FMT_RGBA:
+ case PIX_FMT_UYVY422:
return 1;
default:
throw PixelFormatError (N_("components()"), _pixel_format);
@@ -211,6 +213,7 @@ Image::post_process (string pp, bool aligned) const
break;
case PIX_FMT_YUV422P10LE:
case PIX_FMT_YUV422P:
+ case PIX_FMT_UYVY422:
pp_format = PP_FORMAT_422;
break;
case PIX_FMT_YUV444P:
@@ -291,6 +294,9 @@ Image::swap_16 (uint16_t v)
void
Image::make_black ()
{
+ /* U/V black value for 8-bit colour */
+ static uint8_t const eight_bit_uv = (1 << 7) - 1;
+
/* U/V black value for 9-bit colour */
static uint16_t const nine_bit_uv = (1 << 8) - 1;
@@ -302,8 +308,8 @@ Image::make_black ()
case PIX_FMT_YUV422P:
case PIX_FMT_YUV444P:
memset (data()[0], 0, lines(0) * stride()[0]);
- memset (data()[1], 0x7f, lines(1) * stride()[1]);
- memset (data()[2], 0x7f, lines(2) * stride()[2]);
+ memset (data()[1], eight_bit_uv, lines(1) * stride()[1]);
+ memset (data()[2], eight_bit_uv, lines(2) * stride()[2]);
break;
case PIX_FMT_YUV422P9LE:
@@ -329,8 +335,24 @@ Image::make_black ()
memset (data()[0], 0, lines(0) * stride()[0]);
break;
+ case PIX_FMT_UYVY422:
+ {
+ int const Y = lines(0);
+ int const X = line_size()[0];
+ uint8_t* p = data()[0];
+ for (int y = 0; y < Y; ++y) {
+ for (int x = 0; x < X / 4; ++x) {
+ *p++ = eight_bit_uv; // Cb
+ *p++ = 0; // Y0
+ *p++ = eight_bit_uv; // Cr
+ *p++ = 0; // Y1
+ }
+ }
+ break;
+ }
+
default:
- assert (false);
+ throw PixelFormatError (N_("make_black()"), _pixel_format);
}
}
@@ -428,6 +450,8 @@ Image::bytes_per_pixel (int c) const
} else {
return 1;
}
+ case PIX_FMT_UYVY422:
+ return 2;
case PIX_FMT_YUV444P:
return 3;
case PIX_FMT_YUV444P9BE:
@@ -436,7 +460,7 @@ Image::bytes_per_pixel (int c) const
case PIX_FMT_YUV444P10BE:
return 6;
default:
- assert (false);
+ throw PixelFormatError (N_("bytes_per_pixel()"), _pixel_format);
}
return 0;
diff --git a/src/lib/util.cc b/src/lib/util.cc
index abbc35749..593d0e760 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -235,8 +235,6 @@ seconds (struct timeval t)
void
dvdomatic_setup ()
{
- bindtextdomain ("libdvdomatic", LOCALE_PREFIX);
-
avfilter_register_all ();
Format::setup_formats ();
@@ -248,11 +246,36 @@ dvdomatic_setup ()
ui_thread = this_thread::get_id ();
}
+#ifdef DVDOMATIC_WINDOWS
+boost::filesystem::path
+mo_path ()
+{
+ wchar_t buffer[512];
+ GetModuleFileName (0, buffer, 512 * sizeof(wchar_t));
+ boost::filesystem::path p (buffer);
+ p = p.parent_path ();
+ p = p.parent_path ();
+ p /= "locale";
+ return p;
+}
+#endif
+
void
dvdomatic_setup_i18n (string lang)
{
- bindtextdomain ("libdvdomatic", LOCALE_PREFIX);
- setlocale (LC_ALL, lang.c_str ());
+ setlocale (LC_ALL, "");
+ textdomain ("libdvdomatic");
+
+#ifdef DVDOMATIC_WINDOWS
+ string const e = "LANGUAGE=" + lang;
+ putenv (e.c_str());
+
+ bindtextdomain ("libdvdomatic", mo_path().string().c_str());
+#endif
+
+#ifdef DVDOMATIC_POSIX
+ bindtextdomain ("libdvdomatic", POSIX_LOCALE_PREFIX);
+#endif
}
/** @param start Start position for the crop within the image.
diff --git a/src/lib/util.h b/src/lib/util.h
index 60498be5a..3d251cf06 100644
--- a/src/lib/util.h
+++ b/src/lib/util.h
@@ -30,6 +30,7 @@
#include <boost/shared_ptr.hpp>
#include <boost/asio.hpp>
#include <boost/optional.hpp>
+#include <boost/filesystem.hpp>
#include <libdcp/util.h>
extern "C" {
#include <libavcodec/avcodec.h>
@@ -60,6 +61,9 @@ extern std::string md5_digest (std::string);
extern std::string md5_digest (void const *, int);
extern void ensure_ui_thread ();
extern std::string audio_channel_name (int);
+#ifdef DVDOMATIC_WINDOWS
+extern boost::filesystem::path mo_path ();
+#endif
typedef int SourceFrame;
diff --git a/src/tools/dvdomatic.cc b/src/tools/dvdomatic.cc
index aa936523d..4a778100c 100644
--- a/src/tools/dvdomatic.cc
+++ b/src/tools/dvdomatic.cc
@@ -416,10 +416,11 @@ private:
info.SetDevelopers (authors);
wxArrayString translators;
- translators.Add (wxT ("Olivier Perriere (freedcp.net)"));
+ translators.Add (wxT ("Olivier Perriere"));
translators.Add (wxT ("Lilian Lefranc"));
translators.Add (wxT ("Thierry Journet"));
translators.Add (wxT ("Massimiliano Broggi"));
+ translators.Add (wxT ("Manuel Acevedo"));
info.SetTranslators (translators);
info.SetWebSite (wxT ("http://carlh.net/software/dvdomatic"));
@@ -456,9 +457,9 @@ setup_i18n ()
if (wxLocale::IsAvailable (language)) {
locale = new wxLocale (language, wxLOCALE_LOAD_DEFAULT);
-#ifdef __WXGTK__
- locale->AddCatalogLookupPathPrefix (wxT (LOCALE_PREFIX "/locale"));
-#endif
+#ifdef DVDOMATIC_WINDOWS
+ locale->AddCatalogLookupPathPrefix (std_to_wx (mo_path().string()));
+#endif
locale->AddCatalog (wxT ("libdvdomatic-wx"));
locale->AddCatalog (wxT ("dvdomatic"));
@@ -485,15 +486,26 @@ class App : public wxApp
unsetenv ("UBUNTU_MENUPROXY");
#endif
- /* This needs to be before setup_i18n, as setup_i18n() will
- create a Config object, which needs Scalers to have
- been created.
+ wxInitAllImageHandlers ();
+
+ /* Enable i18n; this will create a Config object
+ to look for a force-configured language. This Config
+ object will be wrong, however, because dvdomatic_setup
+ hasn't yet been called and there aren't any scalers, filters etc.
+ set up yet.
+ */
+ setup_i18n ();
+
+ /* Set things up, including scalers / filters etc.
+ which will now be internationalised correctly.
*/
dvdomatic_setup ();
- wxInitAllImageHandlers ();
- setup_i18n ();
-
+ /* Force the configuration to be re-loaded correctly next
+ time it is needed.
+ */
+ Config::drop ();
+
if (!film_to_load.empty() && boost::filesystem::is_directory (film_to_load)) {
try {
film.reset (new Film (film_to_load));
diff --git a/src/tools/po/es_ES.po b/src/tools/po/es_ES.po
new file mode 100644
index 000000000..78eecb306
--- /dev/null
+++ b/src/tools/po/es_ES.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: DVDOMATIC\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-03-15 08:39+0000\n"
+"PO-Revision-Date: 2013-03-20 17:05-0500\n"
+"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
+"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.5\n"
+"Language: ES-ES\n"
+
+#: src/tools/dvdomatic.cc:177
+msgid "&Analyse audio"
+msgstr "&Analizar sonido"
+
+#: src/tools/dvdomatic.cc:183
+msgid "&Edit"
+msgstr "&Editar"
+
+#: src/tools/dvdomatic.cc:182
+msgid "&File"
+msgstr "&Archivo"
+
+#: src/tools/dvdomatic.cc:185
+msgid "&Help"
+msgstr "&Ayuda"
+
+#: src/tools/dvdomatic.cc:184
+msgid "&Jobs"
+msgstr "&Tareas"
+
+#: src/tools/dvdomatic.cc:173
+msgid "&Make DCP"
+msgstr "&Hacer DCP"
+
+#: src/tools/dvdomatic.cc:161
+msgid "&Open..."
+msgstr "&Abrir..."
+
+#: src/tools/dvdomatic.cc:170
+msgid "&Preferences..."
+msgstr "&Preferencias..."
+
+#: src/tools/dvdomatic.cc:165
+msgid "&Properties..."
+msgstr "&Propiedades..."
+
+#: src/tools/dvdomatic.cc:167
+msgid "&Quit"
+msgstr "&Salir"
+
+#: src/tools/dvdomatic.cc:163
+msgid "&Save"
+msgstr "&Guardar"
+
+#: src/tools/dvdomatic.cc:174
+msgid "&Send DCP to TMS"
+msgstr "&Enviar DCP al TMS"
+
+#: src/tools/dvdomatic.cc:409
+msgid ""
+"(C) 2012-2013 Carl Hetherington, Terrence Meiczinger, Paul Davis, Ole Laursen"
+msgstr ""
+"(C) 2012-2013 Carl Hetherington, Terrence Meiczinger, Paul Davis, Ole Laursen"
+
+#: src/tools/dvdomatic.cc:180
+msgid "About"
+msgstr "Acerca de"
+
+#: src/tools/dvdomatic.cc:497
+msgid "Could not load film %1 (%2)"
+msgstr "No se pudo cargar la película %1 (%2)"
+
+#: src/tools/dvdomatic.cc:331
+#, c-format
+msgid "Could not open film at %s (%s)"
+msgstr "No se pudo cargar la película en %s (%s)"
+
+#: src/tools/dvdomatic.cc:287 src/tools/dvdomatic.cc:402
+#: src/tools/dvdomatic.cc:501
+msgid "DVD-o-matic"
+msgstr "DVD-o-matic"
+
+#: src/tools/dvdomatic.cc:75
+msgid "Film changed"
+msgstr "Película cambiada"
+
+#: src/tools/dvdomatic.cc:408
+msgid "Free, open-source DCP generation from almost anything."
+msgstr ""
+"Generación de DCP a partir de casi cualquier fuente, libre y de código "
+"abierto."
+
+#: src/tools/dvdomatic.cc:160
+msgid "New..."
+msgstr "Nuevo..."
+
+#: src/tools/dvdomatic.cc:175
+msgid "S&how DCP"
+msgstr "&Mostrar DCP"
+
+#: src/tools/dvdomatic.cc:319
+msgid "Select film to open"
+msgstr "Selecciona la película a abrir"
+
+#: src/tools/dvdomatic.cc:303
+#, c-format
+msgid "The directory %s already exists."
+msgstr "La carpeta %s ya existe."