diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-05-21 12:56:47 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-05-21 12:56:47 +0100 |
| commit | 5f0f0de782100a5cb558f30c7768c8af0c19bcb7 (patch) | |
| tree | acb5c1624e6b5687f94eca0882c37afb0971018c | |
| parent | 3fc3aad8735903ced3dae65f764eb33e3f5b3f11 (diff) | |
| parent | 47e6b6725168213f2a7db24c2965cfa173f755b4 (diff) | |
Merge master.
47 files changed, 2129 insertions, 674 deletions
@@ -1,3 +1,58 @@ +2013-05-20 Carl Hetherington <cth@carlh.net> + + * Version 0.93 released. + +2013-05-20 Carl Hetherington <cth@carlh.net> + + * Fix another crash on still images with + no audio. + +2013-05-19 Carl Hetherington <cth@carlh.net> + + * Version 0.92 released. + +2013-05-19 Carl Hetherington <cth@carlh.net> + + * Version 0.91 released. + +2013-05-19 Carl Hetherington <cth@carlh.net> + + * Hopefully fix load of decimal values (e.g. frame rates) + in non-English locales on Windows. + +2013-05-17 Carl Hetherington <cth@carlh.net> + + * Version 0.90 released. + +2013-05-17 Carl Hetherington <cth@carlh.net> + + * Write backtrace files when Windows + version crashes. + + * Try to fix crash on stills with no audio. + +2013-05-06 Carl Hetherington <cth@carlh.net> + + * Fix resizing / redraw problems in audio viewer + on Windows. + +2013-05-06 Carl Hetherington <cth@carlh.net> + + * Version 0.89 released. + +2013-05-04 Carl Hetherington <cth@carlh.net> + + * Version 0.89beta1 released. + +2013-05-04 Carl Hetherington <cth@carlh.net> + + * Very simple batch converter added (#127). + + * Add preference for CPL issuer and creator (#122). + + * Add preference for default format and DCP content + type (#133). + 2013-04-28 Carl Hetherington <cth@carlh.net> * Version 0.88 released. @@ -8,7 +8,7 @@ def dependencies(target): else: return (('openjpeg-cdist', None), ('ffmpeg-cdist', '7a23ec9c771184ab563cfe24ad9b427f38368961'), - ('libdcp', 'v0.45')) + ('libdcp', 'v0.49')) def build(env, target): cmd = './waf configure --prefix=%s' % env.work_dir_cscript() @@ -28,7 +28,7 @@ def package(env, target, version): if target.platform == 'windows': shutil.copyfile('build/windows/installer.%s.nsi' % target.bits, 'build/windows/installer2.%s.nsi' % target.bits) env.command('sed -i "s~%%resources%%~%s/windows~g" build/windows/installer2.%s.nsi' % (os.getcwd(), target.bits)) - env.command('sed -i "s~%%deps%%~%s~g" build/windows/installer2.%s.nsi' % (env.windows_prefix(), target.bits)) + env.command('sed -i "s~%%deps%%~%s~g" build/windows/installer2.%s.nsi' % (env.windows_prefix, target.bits)) env.command('sed -i "s~%%binaries%%~%s/build~g" build/windows/installer2.%s.nsi' % (os.getcwd(), target.bits)) env.command('sed -i "s~%%bits%%~32~g" build/windows/installer2.%s.nsi' % target.bits) env.command('makensis build/windows/installer2.%s.nsi' % target.bits) diff --git a/debian/changelog b/debian/changelog index 76e64d1c8..eb6061bdb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,39 @@ +dvdomatic (0.93-1) UNRELEASED; urgency=low + + * New upstream release. + + -- Carl Hetherington <carl@houllier.lan> Mon, 20 May 2013 13:32:29 +0100 + +dvdomatic (0.92-1) UNRELEASED; urgency=low + + * New upstream release. + + -- Carl Hetherington <carl@houllier.lan> Sun, 19 May 2013 12:35:52 +0100 + +dvdomatic (0.91-1) UNRELEASED; urgency=low + + * New upstream release. + + -- Carl Hetherington <carl@houllier.lan> Sun, 19 May 2013 00:11:52 +0100 + +dvdomatic (0.90-1) UNRELEASED; urgency=low + + * New upstream release. + + -- Carl Hetherington <carl@houllier.lan> Fri, 17 May 2013 16:29:58 +0100 + +dvdomatic (0.89-1) UNRELEASED; urgency=low + + * New upstream release. + + -- Carl Hetherington <carl@houllier.lan> Mon, 06 May 2013 02:03:25 +0100 + +dvdomatic (0.89beta1-1) UNRELEASED; urgency=low + + * New upstream release. + + -- Carl Hetherington <carl@houllier.lan> Sat, 04 May 2013 21:15:34 +0100 + dvdomatic (0.88-1) UNRELEASED; urgency=low * New upstream release. diff --git a/dvdomatic_batch.desktop.in b/dvdomatic_batch.desktop.in new file mode 100644 index 000000000..8150fe849 --- /dev/null +++ b/dvdomatic_batch.desktop.in @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Exec=@PREFIX@/bin/dvdomatic_batch +Name=DVD-o-matic Batch Converter +Icon=dvdomatic +Comment=Batch DCP generator +Categories=AudioVideo;Video diff --git a/run/dvdomatic_batch b/run/dvdomatic_batch new file mode 100755 index 000000000..7b6ef93ae --- /dev/null +++ b/run/dvdomatic_batch @@ -0,0 +1,15 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:build/src/wx:build/src/asdcplib/src:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + shift + gdb --args build/src/tools/dvdomatic_batch "$*" +elif [ "$1" == "--valgrind" ]; then + shift + valgrind --tool="memcheck" build/src/tools/dvdomatic_batch $* +elif [ "$1" == "--i18n" ]; then + shift + LANGUAGE=fr_FR.UTF8 LANG=fr_FR.UTF8 build/src/tools/dvdomatic_batch "$*" +else + build/src/tools/dvdomatic_batch +fi diff --git a/run/makedcp b/run/makedcp index f71345b66..2b95ea165 100755 --- a/run/makedcp +++ b/run/makedcp @@ -4,9 +4,12 @@ export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH:build/src if [ "$1" == "--debug" ]; then shift gdb --args build/src/tools/makedcp "$@" -elif [ "$1" == "--valgrind" ]; then +elif [ "$1" == "--memcheck" ]; then shift valgrind --tool="memcheck" --leak-check=full --show-reachable=yes build/src/tools/makedcp "$@" +elif [ "$1" == "--massif" ]; then + shift + valgrind --tool="massif" build/src/tools/makedcp "$@" else build/src/tools/makedcp "$@" fi diff --git a/src/lib/ab_transcoder.cc b/src/lib/ab_transcoder.cc index d8f13dae4..c42f0d241 100644 --- a/src/lib/ab_transcoder.cc +++ b/src/lib/ab_transcoder.cc @@ -62,7 +62,7 @@ ABTranscoder::ABTranscoder ( _db = decoder_factory (_film_b, o); shared_ptr<AudioStream> st = _film_a->audio_stream(); - if (st) { + if (st && st->sample_rate()) { _matcher.reset (new Matcher (_film_a->log(), st->sample_rate(), _film_a->source_frame_rate())); } _delay_line.reset (new DelayLine (_film_a->log(), _film_a->audio_delay() / 1000.0f)); diff --git a/src/lib/config.cc b/src/lib/config.cc index 5dce3748d..8c65e371a 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -26,6 +26,8 @@ #include "server.h" #include "scaler.h" #include "filter.h" +#include "format.h" +#include "dcp_content_type.h" #include "sound_processor.h" #include "i18n.h" @@ -45,6 +47,8 @@ Config::Config () , _reference_scaler (Scaler::from_id (N_("bicubic"))) , _tms_path (N_(".")) , _sound_processor (SoundProcessor::from_id (N_("dolby_cp750"))) + , _default_format (0) + , _default_dcp_content_type (0) { _allowed_dcp_frame_rates.push_back (24); _allowed_dcp_frame_rates.push_back (25); @@ -96,6 +100,16 @@ Config::Config () _sound_processor = SoundProcessor::from_id (v); } else if (k == "language") { _language = v; + } else if (k == "default_format") { + _default_format = Format::from_metadata (v); + } else if (k == "default_dcp_content_type") { + _default_dcp_content_type = DCPContentType::from_dci_name (v); + } else if (k == "dcp_metadata_issuer") { + _dcp_metadata.issuer = v; + } else if (k == "dcp_metadata_creator") { + _dcp_metadata.creator = v; + } else if (k == "dcp_metadata_issue_date") { + _dcp_metadata.issue_date = v; } _default_dci_metadata.read (k, v); @@ -128,32 +142,41 @@ void Config::write () const { ofstream f (file().c_str ()); - f << N_("num_local_encoding_threads ") << _num_local_encoding_threads << N_("\n") - << N_("default_directory ") << _default_directory << N_("\n") - << N_("server_port ") << _server_port << N_("\n"); + f << "num_local_encoding_threads " << _num_local_encoding_threads << "\n" + << "default_directory " << _default_directory << "\n" + << "server_port " << _server_port << "\n"; if (_reference_scaler) { f << "reference_scaler " << _reference_scaler->id () << "\n"; } for (vector<Filter const *>::const_iterator i = _reference_filters.begin(); i != _reference_filters.end(); ++i) { - f << N_("reference_filter ") << (*i)->id () << N_("\n"); + f << "reference_filter " << (*i)->id () << "\n"; } for (vector<ServerDescription*>::const_iterator i = _servers.begin(); i != _servers.end(); ++i) { - f << N_("server ") << (*i)->as_metadata () << N_("\n"); + f << "server " << (*i)->as_metadata () << "\n"; } - f << N_("tms_ip ") << _tms_ip << N_("\n"); - f << N_("tms_path ") << _tms_path << N_("\n"); - f << N_("tms_user ") << _tms_user << N_("\n"); - f << N_("tms_password ") << _tms_password << N_("\n"); + f << "tms_ip " << _tms_ip << "\n"; + f << "tms_path " << _tms_path << "\n"; + f << "tms_user " << _tms_user << "\n"; + f << "tms_password " << _tms_password << "\n"; if (_sound_processor) { f << "sound_processor " << _sound_processor->id () << "\n"; } if (_language) { f << "language " << _language.get() << "\n"; } + if (_default_format) { + f << "default_format " << _default_format->as_metadata() << "\n"; + } + if (_default_dcp_content_type) { + f << "default_dcp_content_type " << _default_dcp_content_type->dci_name() << "\n"; + } + f << "dcp_metadata_issuer " << _dcp_metadata.issuer << "\n"; + f << "dcp_metadata_creator " << _dcp_metadata.creator << "\n"; + f << "dcp_metadata_issue_date " << _dcp_metadata.issue_date << "\n"; _default_dci_metadata.write (f); } diff --git a/src/lib/config.h b/src/lib/config.h index 011ca716f..a59cdcae0 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -27,12 +27,15 @@ #include <vector> #include <boost/shared_ptr.hpp> #include <boost/signals2.hpp> +#include <libdcp/metadata.h> #include "dci_metadata.h" class ServerDescription; class Scaler; class Filter; class SoundProcessor; +class Format; +class DCPContentType; /** @class Config * @brief A singleton class holding configuration. @@ -107,6 +110,18 @@ public: return _language; } + Format const * default_format () const { + return _default_format; + } + + DCPContentType const * default_dcp_content_type () const { + return _default_dcp_content_type; + } + + libdcp::XMLMetadata dcp_metadata () const { + return _dcp_metadata; + } + /** @param n New number of local encoding threads */ void set_num_local_encoding_threads (int n) { _num_local_encoding_threads = n; @@ -169,6 +184,18 @@ public: void unset_language () { _language = boost::none; } + + void set_default_format (Format const * f) { + _default_format = f; + } + + void set_default_dcp_content_type (DCPContentType const * t) { + _default_dcp_content_type = t; + } + + void set_dcp_metadata (libdcp::XMLMetadata m) { + _dcp_metadata = m; + } void write () const; @@ -206,6 +233,9 @@ private: /** Default DCI metadata for newly-created Films */ DCIMetadata _default_dci_metadata; boost::optional<std::string> _language; + Format const * _default_format; + DCPContentType const * _default_dcp_content_type; + libdcp::XMLMetadata _dcp_metadata; /** Singleton instance, or 0 */ static Config* _instance; diff --git a/src/lib/film.cc b/src/lib/film.cc index b0785df34..81c7de77f 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -88,8 +88,8 @@ int const Film::state_version = 4; Film::Film (string d, bool must_exist) : _use_dci_name (true) , _trust_content_header (true) - , _dcp_content_type (0) - , _format (0) + , _dcp_content_type (Config::instance()->default_dcp_content_type ()) + , _format (Config::instance()->default_format ()) , _scaler (Scaler::from_id ("bicubic")) , _trim_start (0) , _trim_end (0) @@ -987,14 +987,7 @@ Film::set_content (string c) } /* Default format */ - switch (content_type()) { - case STILL: - set_format (Format::from_id ("var-185")); - break; - case VIDEO: - set_format (Format::from_id ("185")); - break; - } + set_format (Config::instance()->default_format ()); /* Still image DCPs must use external audio */ if (content_type() == STILL) { diff --git a/src/lib/format.cc b/src/lib/format.cc index 8c3d0d8ad..78e200847 100644 --- a/src/lib/format.cc +++ b/src/lib/format.cc @@ -72,59 +72,63 @@ Format::setup_formats () { /// TRANSLATORS: these are film picture aspect ratios; "Academy" means 1.37, "Flat" 1.85 and "Scope" 2.39. _formats.push_back ( - new FixedFormat (1.19, libdcp::Size (1285, 1080), N_("119"), _("1.19"), N_("F") + new FixedFormat (1.19, libdcp::Size (1285, 1080), "119", _("1.19"), "F" )); _formats.push_back ( - new FixedFormat (4.0 / 3.0, libdcp::Size (1436, 1080), N_("133"), _("4:3"), N_("F") + new FixedFormat (4.0 / 3.0, libdcp::Size (1436, 1080), "133", _("4:3"), "F" )); _formats.push_back ( - new FixedFormat (1.38, libdcp::Size (1485, 1080), N_("138"), _("1.375"), N_("F") + new FixedFormat (1.38, libdcp::Size (1485, 1080), "138", _("1.375"), "F" )); _formats.push_back ( - new FixedFormat (4.0 / 3.0, libdcp::Size (1998, 1080), N_("133-in-flat"), _("4:3 within Flat"), N_("F") + new FixedFormat (4.0 / 3.0, libdcp::Size (1998, 1080), "133-in-flat", _("4:3 within Flat"), "F" )); _formats.push_back ( - new FixedFormat (1.37, libdcp::Size (1480, 1080), N_("137"), _("Academy"), N_("F") + new FixedFormat (1.37, libdcp::Size (1480, 1080), "137", _("Academy"), "F" )); _formats.push_back ( - new FixedFormat (1.66, libdcp::Size (1793, 1080), N_("166"), _("1.66"), N_("F") + new FixedFormat (1.66, libdcp::Size (1793, 1080), "166", _("1.66"), "F" )); _formats.push_back ( - new FixedFormat (1.66, libdcp::Size (1998, 1080), N_("166-in-flat"), _("1.66 within Flat"), N_("F") + new FixedFormat (1.66, libdcp::Size (1998, 1080), "166-in-flat", _("1.66 within Flat"), "F" )); _formats.push_back ( - new FixedFormat (1.78, libdcp::Size (1998, 1080), N_("178-in-flat"), _("16:9 within Flat"), N_("F") + new FixedFormat (1.78, libdcp::Size (1998, 1080), "178-in-flat", _("16:9 within Flat"), "F" )); _formats.push_back ( - new FixedFormat (1.78, libdcp::Size (1920, 1080), N_("178"), _("16:9"), N_("F") + new FixedFormat (1.78, libdcp::Size (1920, 1080), "178", _("16:9"), "F" )); _formats.push_back ( - new FixedFormat (1.85, libdcp::Size (1998, 1080), N_("185"), _("Flat"), N_("F") + new FixedFormat (1.85, libdcp::Size (1998, 1080), "185", _("Flat"), "F" )); _formats.push_back ( - new FixedFormat (1.78, libdcp::Size (2048, 858), N_("178-in-scope"), _("16:9 within Scope"), N_("S") + new FixedFormat (1.78, libdcp::Size (2048, 858), "178-in-scope", _("16:9 within Scope"), "S" )); _formats.push_back ( - new FixedFormat (2.39, libdcp::Size (2048, 858), N_("239"), _("Scope"), N_("S") + new FixedFormat (2.39, libdcp::Size (2048, 858), "239", _("Scope"), "S" + )); + + _formats.push_back ( + new FixedFormat (1.896, libdcp::Size (2048, 1080), "full-frame", _("Full frame"), "C" )); _formats.push_back ( - new VariableFormat (libdcp::Size (1998, 1080), N_("var-185"), _("Flat without stretch"), N_("F") + new VariableFormat (libdcp::Size (1998, 1080), "var-185", _("Flat without stretch"), "F" )); _formats.push_back ( - new VariableFormat (libdcp::Size (2048, 858), N_("var-239"), _("Scope without stretch"), N_("S") + new VariableFormat (libdcp::Size (2048, 858), "var-239", _("Scope without stretch"), "S" )); } diff --git a/src/lib/job.cc b/src/lib/job.cc index 1c66d87d3..9a5812fa7 100644 --- a/src/lib/job.cc +++ b/src/lib/job.cc @@ -26,6 +26,7 @@ #include <libdcp/exceptions.h> #include "job.h" #include "util.h" +#include "cross.h" #include "i18n.h" @@ -155,6 +156,13 @@ Job::finished_cancelled () const return _state == FINISHED_CANCELLED; } +bool +Job::paused () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _state == PAUSED; +} + /** Set the state of this job. * @param s New state. */ @@ -190,6 +198,10 @@ Job::set_progress (float p) _progress_unknown = false; _stack.back().normalised = p; boost::this_thread::interruption_point (); + + if (paused ()) { + dvdomatic_sleep (1); + } } /** @return fractional overall progress, or -1 if not known */ @@ -326,3 +338,19 @@ Job::cancel () _thread->interrupt (); _thread->join (); } + +void +Job::pause () +{ + if (running ()) { + set_state (PAUSED); + } +} + +void +Job::resume () +{ + if (paused ()) { + set_state (RUNNING); + } +} diff --git a/src/lib/job.h b/src/lib/job.h index fd036bce2..37fa56d20 100644 --- a/src/lib/job.h +++ b/src/lib/job.h @@ -47,6 +47,8 @@ public: virtual void run () = 0; void start (); + void pause (); + void resume (); void cancel (); bool is_new () const; @@ -55,6 +57,7 @@ public: bool finished_ok () const; bool finished_in_error () const; bool finished_cancelled () const; + bool paused () const; std::string error_summary () const; std::string error_details () const; @@ -79,6 +82,7 @@ protected: enum State { NEW, ///< the job hasn't been started yet RUNNING, ///< the job is running + PAUSED, ///< the job has been paused FINISHED_OK, ///< the job has finished successfully FINISHED_ERROR, ///< the job has finished in error FINISHED_CANCELLED ///< the job was cancelled diff --git a/src/lib/po/es_ES.po b/src/lib/po/es_ES.po index 1608f3b0c..944505007 100644 --- a/src/lib/po/es_ES.po +++ b/src/lib/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: LIBDVDOMATIC\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-04-02 19:10-0500\n" "Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n" "Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n" @@ -74,7 +74,7 @@ msgstr "Academy" msgid "Advertisement" msgstr "Publicidad" -#: src/lib/job.cc:72 +#: src/lib/job.cc:73 msgid "An error occurred whilst handling the file %1." msgstr "Ha ocurrido un error con el fichero %1." @@ -94,7 +94,7 @@ msgstr "Bicúbico" msgid "Bilinear" msgstr "Bilineal" -#: src/lib/job.cc:306 +#: src/lib/job.cc:318 msgid "Cancelled" msgstr "" @@ -107,7 +107,7 @@ msgid "Cannot resample audio as libswresample is not present" msgstr "" "No se puede redimensionar el sonido porque no se encuentra libswresample" -#: src/lib/util.cc:932 +#: src/lib/util.cc:960 msgid "Centre" msgstr "" @@ -139,16 +139,16 @@ msgstr "No se pudo escribir el fichero remoto (%1)" msgid "Cubic interpolating deinterlacer" msgstr "Desentrelazado por interpolación cúbica" -#: src/lib/util.cc:1007 +#: src/lib/util.cc:1035 msgid "DCP and source have the same rate.\n" msgstr "La fuente y el DCP tienen la misma velocidad.\n" -#: src/lib/util.cc:1017 +#: src/lib/util.cc:1045 #, fuzzy msgid "DCP will run at %1%% of the source speed.\n" msgstr "El DCP se reproducirá al %1%% de la velocidad de la fuente.\n" -#: src/lib/util.cc:1010 +#: src/lib/util.cc:1038 msgid "DCP will use every other frame of the source.\n" msgstr "El DCP usará fotogramas alternos de la fuente.\n" @@ -171,11 +171,11 @@ msgstr "Deringing filter" msgid "Dolby CP750" msgstr "Dolby CP750" -#: src/lib/util.cc:1012 +#: src/lib/util.cc:1040 msgid "Each source frame will be doubled in the DCP.\n" msgstr "Se doblará cada fotograma de la fuente en el DCP.\n" -#: src/lib/job.cc:304 +#: src/lib/job.cc:316 msgid "Error (%1)" msgstr "Error (%1)" @@ -247,7 +247,7 @@ msgstr "Horizontal deblocking filter" msgid "Horizontal deblocking filter A" msgstr "Horizontal deblocking filter A" -#: src/lib/job.cc:96 src/lib/job.cc:105 +#: src/lib/job.cc:97 src/lib/job.cc:106 msgid "" "It is not known what caused this error. The best idea is to report the " "problem to the DVD-o-matic mailing list (dvdomatic@carlh.net)" @@ -263,15 +263,15 @@ msgstr "Kernel deinterlacer" msgid "Lanczos" msgstr "Lanczos" -#: src/lib/util.cc:930 +#: src/lib/util.cc:958 msgid "Left" msgstr "" -#: src/lib/util.cc:934 +#: src/lib/util.cc:962 msgid "Left surround" msgstr "" -#: src/lib/util.cc:933 +#: src/lib/util.cc:961 msgid "Lfe (sub)" msgstr "" @@ -301,7 +301,7 @@ msgstr "Motion compensating deinterlacer" msgid "Noise reduction" msgstr "Reducción de ruido" -#: src/lib/job.cc:302 +#: src/lib/job.cc:314 msgid "OK (ran for %1)" msgstr "OK (ejecución %1)" @@ -321,15 +321,15 @@ msgstr "Anuncio de servicio público" msgid "Rating" msgstr "Clasificación" -#: src/lib/util.cc:500 +#: src/lib/util.cc:513 msgid "Rec 709" msgstr "Rec 709" -#: src/lib/util.cc:931 +#: src/lib/util.cc:959 msgid "Right" msgstr "" -#: src/lib/util.cc:935 +#: src/lib/util.cc:963 msgid "Right surround" msgstr "" @@ -373,7 +373,7 @@ msgstr "Temporal noise reducer" msgid "Test" msgstr "Test" -#: src/lib/job.cc:78 +#: src/lib/job.cc:79 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -393,7 +393,7 @@ msgstr "Codificar %1" msgid "Transitional" msgstr "Transitional" -#: src/lib/job.cc:104 +#: src/lib/job.cc:105 msgid "Unknown error" msgstr "Error desconocido" @@ -429,7 +429,7 @@ msgstr "Yet Another Deinterlacing Filter" msgid "cannot contain slashes" msgstr "no puede contener barras" -#: src/lib/util.cc:541 +#: src/lib/util.cc:554 msgid "connect timed out" msgstr "tiempo de conexión agotado" @@ -470,7 +470,7 @@ msgstr "no se pudo encontrar decodificador de subtítutlos" msgid "could not find video decoder" msgstr "no se pudo encontrar decodificador de vídeo" -#: src/lib/sndfile_decoder.cc:72 +#: src/lib/sndfile_decoder.cc:67 msgid "could not open external audio file for reading" msgstr "no se pudo leer el fichero externo de audio" @@ -505,11 +505,11 @@ msgstr "no se pudo abrir la sesión SSH" msgid "could not write to file %1 (%2)" msgstr "No se pudo escribir el fichero remoto (%1)" -#: src/lib/sndfile_decoder.cc:94 +#: src/lib/sndfile_decoder.cc:89 msgid "external audio files have differing lengths" msgstr "los ficheros externos de sonido tienen duraciones diferentes" -#: src/lib/sndfile_decoder.cc:76 +#: src/lib/sndfile_decoder.cc:71 msgid "external audio files must be mono" msgstr "los ficheros externos de sonido deben ser mono" @@ -521,23 +521,23 @@ msgstr "formato" msgid "frames per second" msgstr "fotogramas por segundo" -#: src/lib/util.cc:115 +#: src/lib/util.cc:128 msgid "hour" msgstr "hora" -#: src/lib/util.cc:112 src/lib/util.cc:117 +#: src/lib/util.cc:125 src/lib/util.cc:130 msgid "hours" msgstr "horas" -#: src/lib/util.cc:122 +#: src/lib/util.cc:135 msgid "minute" msgstr "minuto" -#: src/lib/util.cc:124 +#: src/lib/util.cc:137 msgid "minutes" msgstr "minutos" -#: src/lib/util.cc:684 +#: src/lib/util.cc:697 msgid "missing key %1 in key-value set" msgstr "falta la clave %1 en el par clave-valor" @@ -563,15 +563,15 @@ msgstr "todavía no se soportan subtítulos que no son en mapas de bits" #. / TRANSLATORS: remaining here follows an amount of time that is remaining #. / on an operation. -#: src/lib/job.cc:299 +#: src/lib/job.cc:311 msgid "remaining" msgstr "pendiente" -#: src/lib/util.cc:498 +#: src/lib/util.cc:511 msgid "sRGB" msgstr "sRGB" -#: src/lib/util.cc:127 +#: src/lib/util.cc:140 msgid "seconds" msgstr "segundos" diff --git a/src/lib/po/fr_FR.po b/src/lib/po/fr_FR.po index d1123d84b..a6a72598f 100644 --- a/src/lib/po/fr_FR.po +++ b/src/lib/po/fr_FR.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: DVD-o-matic FRENCH\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" -"PO-Revision-Date: 2013-03-20 00:39+0100\n" -"Last-Translator: FreeDCP.net <freedcp.net@gmail.com>\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" +"PO-Revision-Date: 2013-05-10 14:33+0100\n" +"Last-Translator: \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" @@ -55,7 +55,7 @@ msgstr "Débruitage 3D" #: src/lib/format.cc:79 msgid "4:3" -msgstr "" +msgstr "4:3" #: src/lib/format.cc:87 msgid "4:3 within Flat" @@ -73,7 +73,7 @@ msgstr "Academy" msgid "Advertisement" msgstr "Advertisement" -#: src/lib/job.cc:72 +#: src/lib/job.cc:73 msgid "An error occurred whilst handling the file %1." msgstr "Une erreur s'est produite lors du traitement du fichier %1." @@ -93,21 +93,21 @@ msgstr "Bicubique" msgid "Bilinear" msgstr "Bilinéaire" -#: src/lib/job.cc:306 +#: src/lib/job.cc:318 msgid "Cancelled" -msgstr "" +msgstr "Annulé" #: src/lib/exceptions.cc:60 msgid "Cannot handle pixel format %1 during %2" -msgstr "" +msgstr "Format du pixel %1 non géré par %2" #: src/lib/encoder.cc:101 msgid "Cannot resample audio as libswresample is not present" msgstr "Ré-échantillonnage du son impossible : libswresample est absent" -#: src/lib/util.cc:932 +#: src/lib/util.cc:960 msgid "Centre" -msgstr "" +msgstr "Centre" #: src/lib/scp_dcp_job.cc:109 msgid "Copy DCP to TMS" @@ -137,27 +137,37 @@ msgstr "Écriture vers fichier distant (%1) impossible" msgid "Cubic interpolating deinterlacer" msgstr "Désentrelacement cubique interpolé" -#: src/lib/util.cc:1007 +#: src/lib/util.cc:1035 msgid "DCP and source have the same rate.\n" msgstr "Le DCP et la source ont les mêmes cadences.\n" -#: src/lib/util.cc:1017 +#: src/lib/util.cc:1045 #, fuzzy msgid "DCP will run at %1%% of the source speed.\n" msgstr "La cadence du DCP sera %1%% par rapport à la source.\n" -#: src/lib/util.cc:1010 +#: src/lib/util.cc:1038 msgid "DCP will use every other frame of the source.\n" msgstr "Le DCP utilisera une image sur deux de la source.\n" -#: src/lib/filter.cc:68 src/lib/filter.cc:69 src/lib/filter.cc:70 -#: src/lib/filter.cc:71 src/lib/filter.cc:72 src/lib/filter.cc:73 +#: src/lib/filter.cc:68 +#: src/lib/filter.cc:69 +#: src/lib/filter.cc:70 +#: src/lib/filter.cc:71 +#: src/lib/filter.cc:72 +#: src/lib/filter.cc:73 msgid "De-blocking" msgstr "De-bloc" -#: src/lib/filter.cc:75 src/lib/filter.cc:76 src/lib/filter.cc:77 -#: src/lib/filter.cc:78 src/lib/filter.cc:79 src/lib/filter.cc:80 -#: src/lib/filter.cc:81 src/lib/filter.cc:82 src/lib/filter.cc:83 +#: src/lib/filter.cc:75 +#: src/lib/filter.cc:76 +#: src/lib/filter.cc:77 +#: src/lib/filter.cc:78 +#: src/lib/filter.cc:79 +#: src/lib/filter.cc:80 +#: src/lib/filter.cc:81 +#: src/lib/filter.cc:82 +#: src/lib/filter.cc:83 msgid "De-interlacing" msgstr "Désentrelacement" @@ -169,11 +179,11 @@ msgstr "Filtre anti bourdonnement" msgid "Dolby CP750" msgstr "Dolby CP750" -#: src/lib/util.cc:1012 +#: src/lib/util.cc:1040 msgid "Each source frame will be doubled in the DCP.\n" msgstr "Chaque image source sera dupliquée dans le DCP.\n" -#: src/lib/job.cc:304 +#: src/lib/job.cc:316 msgid "Error (%1)" msgstr "Erreur (%1)" @@ -245,13 +255,10 @@ msgstr "Filtre dé-bloc horizontal" msgid "Horizontal deblocking filter A" msgstr "Filtre dé-bloc horizontal" -#: src/lib/job.cc:96 src/lib/job.cc:105 -msgid "" -"It is not known what caused this error. The best idea is to report the " -"problem to the DVD-o-matic mailing list (dvdomatic@carlh.net)" -msgstr "" -"Erreur indéterminée. Merci de rapporter le problème à la liste DVD-o-matic " -"(dvdomatic@carlh.net)" +#: src/lib/job.cc:97 +#: src/lib/job.cc:106 +msgid "It is not known what caused this error. The best idea is to report the problem to the DVD-o-matic mailing list (dvdomatic@carlh.net)" +msgstr "Erreur indéterminée. Merci de rapporter le problème à la liste DVD-o-matic (dvdomatic@carlh.net)" #: src/lib/filter.cc:82 msgid "Kernel deinterlacer" @@ -261,15 +268,15 @@ msgstr "Désentrelaceur noyau" msgid "Lanczos" msgstr "Lanczos" -#: src/lib/util.cc:930 +#: src/lib/util.cc:958 msgid "Left" msgstr "Gauche" -#: src/lib/util.cc:934 +#: src/lib/util.cc:962 msgid "Left surround" msgstr "Arrière gauche" -#: src/lib/util.cc:933 +#: src/lib/util.cc:961 msgid "Lfe (sub)" msgstr "Basses fréquences" @@ -285,8 +292,11 @@ msgstr "Désentrelaceur linéaire interpolé" msgid "Median deinterlacer" msgstr "Désentrelaceur médian" -#: src/lib/filter.cc:74 src/lib/filter.cc:85 src/lib/filter.cc:86 -#: src/lib/filter.cc:87 src/lib/filter.cc:90 +#: src/lib/filter.cc:74 +#: src/lib/filter.cc:85 +#: src/lib/filter.cc:86 +#: src/lib/filter.cc:87 +#: src/lib/filter.cc:90 msgid "Misc" msgstr "Divers" @@ -294,12 +304,14 @@ msgstr "Divers" msgid "Motion compensating deinterlacer" msgstr "Désentrelaceur par compensation de mouvement" -#: src/lib/filter.cc:84 src/lib/filter.cc:88 src/lib/filter.cc:89 +#: src/lib/filter.cc:84 +#: src/lib/filter.cc:88 +#: src/lib/filter.cc:89 #: src/lib/filter.cc:91 msgid "Noise reduction" msgstr "Réduction de bruit" -#: src/lib/job.cc:302 +#: src/lib/job.cc:314 msgid "OK (ran for %1)" msgstr "OK (processus %1)" @@ -319,15 +331,15 @@ msgstr "Public Service Announcement" msgid "Rating" msgstr "Classification" -#: src/lib/util.cc:500 +#: src/lib/util.cc:513 msgid "Rec 709" msgstr "Rec 709" -#: src/lib/util.cc:931 +#: src/lib/util.cc:959 msgid "Right" msgstr "Droite" -#: src/lib/util.cc:935 +#: src/lib/util.cc:963 msgid "Right surround" msgstr "Arrière droite" @@ -371,13 +383,9 @@ msgstr "Réduction de bruit temporel" msgid "Test" msgstr "Test" -#: src/lib/job.cc:78 -msgid "" -"The drive that the film is stored on is low in disc space. Free some more " -"space and try again." -msgstr "" -"Le disque contenant le film est plein. Libérez de l'espace et essayez à " -"nouveau." +#: src/lib/job.cc:79 +msgid "The drive that the film is stored on is low in disc space. Free some more space and try again." +msgstr "Le disque contenant le film est plein. Libérez de l'espace et essayez à nouveau." #: src/lib/dcp_content_type.cc:46 msgid "Trailer" @@ -391,7 +399,7 @@ msgstr "Transcodage %1" msgid "Transitional" msgstr "Transitional" -#: src/lib/job.cc:104 +#: src/lib/job.cc:105 msgid "Unknown error" msgstr "Erreur inconnue" @@ -427,7 +435,7 @@ msgstr "Un autre filtre de désentrelacement" msgid "cannot contain slashes" msgstr "slash interdit" -#: src/lib/util.cc:541 +#: src/lib/util.cc:554 msgid "connect timed out" msgstr "temps de connexion expiré" @@ -467,7 +475,7 @@ msgstr "décodeur de sous-titre introuvable" msgid "could not find video decoder" msgstr "décodeur vidéo introuvable" -#: src/lib/sndfile_decoder.cc:72 +#: src/lib/sndfile_decoder.cc:67 msgid "could not open external audio file for reading" msgstr "lecture du fichier audio externe impossible" @@ -481,9 +489,10 @@ msgstr "lecture du fichier impossible" #: src/lib/exceptions.cc:44 msgid "could not read from file %1 (%2)" -msgstr "Création du dossier distant %1 impossible (%2)" +msgstr "création du dossier distant %1 impossible (%2)" -#: src/lib/encoder.cc:137 src/lib/encoder.cc:314 +#: src/lib/encoder.cc:137 +#: src/lib/encoder.cc:314 msgid "could not run sample-rate converter" msgstr "conversion de la fréquence d'échantillonnage impossible" @@ -499,11 +508,11 @@ msgstr "démarrage de session SSH impossible" msgid "could not write to file %1 (%2)" msgstr "Écriture vers fichier distant (%1) impossible (%2)" -#: src/lib/sndfile_decoder.cc:94 +#: src/lib/sndfile_decoder.cc:89 msgid "external audio files have differing lengths" msgstr "Les fichiers audio externes ont des durées différentes" -#: src/lib/sndfile_decoder.cc:76 +#: src/lib/sndfile_decoder.cc:71 msgid "external audio files must be mono" msgstr "les fichiers audio externes doivent être en mono" @@ -515,35 +524,37 @@ msgstr "format" msgid "frames per second" msgstr "images par seconde" -#: src/lib/util.cc:115 +#: src/lib/util.cc:128 msgid "hour" msgstr "heure" -#: src/lib/util.cc:112 src/lib/util.cc:117 +#: src/lib/util.cc:125 +#: src/lib/util.cc:130 msgid "hours" msgstr "heures" -#: src/lib/util.cc:122 +#: src/lib/util.cc:135 msgid "minute" msgstr "minute" -#: src/lib/util.cc:124 +#: src/lib/util.cc:137 msgid "minutes" msgstr "minutes" -#: src/lib/util.cc:684 +#: src/lib/util.cc:697 msgid "missing key %1 in key-value set" msgstr "clé %1 non sélectionnée" #: src/lib/exceptions.cc:54 msgid "missing required setting %1" -msgstr "" +msgstr "paramètre %1 manquant" #: src/lib/subtitle.cc:52 msgid "multi-part subtitles not yet supported" msgstr "sous-titres en plusieurs parties non supportés" -#: src/lib/film.cc:296 src/lib/film.cc:341 +#: src/lib/film.cc:296 +#: src/lib/film.cc:341 msgid "name" msgstr "nom" @@ -557,15 +568,15 @@ msgstr "sous-titres non-bitmap non supportés actuellement" #. / TRANSLATORS: remaining here follows an amount of time that is remaining #. / on an operation. -#: src/lib/job.cc:299 +#: src/lib/job.cc:311 msgid "remaining" msgstr "restant" -#: src/lib/util.cc:498 +#: src/lib/util.cc:511 msgid "sRGB" msgstr "sRGB" -#: src/lib/util.cc:127 +#: src/lib/util.cc:140 msgid "seconds" msgstr "secondes" diff --git a/src/lib/po/it_IT.po b/src/lib/po/it_IT.po index a3d35dec9..6a7486d82 100644 --- a/src/lib/po/it_IT.po +++ b/src/lib/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: IT VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-04-28 10:26+0100\n" "Last-Translator: Maci <macibro@gmail.com>\n" "Language-Team: \n" @@ -73,7 +73,7 @@ msgstr "Academy" msgid "Advertisement" msgstr "Pubblicità" -#: src/lib/job.cc:72 +#: src/lib/job.cc:73 msgid "An error occurred whilst handling the file %1." msgstr "Errore durante l'elaborazione del file %1." @@ -93,7 +93,7 @@ msgstr "Bicubica" msgid "Bilinear" msgstr "Bilineare" -#: src/lib/job.cc:306 +#: src/lib/job.cc:318 msgid "Cancelled" msgstr "Cancellato" @@ -105,7 +105,7 @@ msgstr "Non posso gestire il formato di pixel %1 durante %2" msgid "Cannot resample audio as libswresample is not present" msgstr "Non posso ricampionare l'audio perchè libswresample non è presente" -#: src/lib/util.cc:932 +#: src/lib/util.cc:960 msgid "Centre" msgstr "Centro" @@ -137,15 +137,15 @@ msgstr "Non posso scrivere il file remoto (%1)" msgid "Cubic interpolating deinterlacer" msgstr "Deinterlacciatore cubico interpolato" -#: src/lib/util.cc:1007 +#: src/lib/util.cc:1035 msgid "DCP and source have the same rate.\n" msgstr "Il DCP e il sorgente hanno la stessa frequenza.\n" -#: src/lib/util.cc:1017 +#: src/lib/util.cc:1045 msgid "DCP will run at %1%% of the source speed.\n" msgstr "Il DCP andrà al %1%% della velocità del sorgente.\n" -#: src/lib/util.cc:1010 +#: src/lib/util.cc:1038 msgid "DCP will use every other frame of the source.\n" msgstr "Il DCP userà ogni altro fotogramma del sorgente.\n" @@ -168,11 +168,11 @@ msgstr "Filtro deringing" msgid "Dolby CP750" msgstr "Dolby CP750" -#: src/lib/util.cc:1012 +#: src/lib/util.cc:1040 msgid "Each source frame will be doubled in the DCP.\n" msgstr "Ogni fotogramma del sorgente sarà raddoppiato nel DCP.\n" -#: src/lib/job.cc:304 +#: src/lib/job.cc:316 msgid "Error (%1)" msgstr "Errore (%1)" @@ -244,7 +244,7 @@ msgstr "Filtro sblocco orizzontale" msgid "Horizontal deblocking filter A" msgstr "Filtro A sblocco orizzontale" -#: src/lib/job.cc:96 src/lib/job.cc:105 +#: src/lib/job.cc:97 src/lib/job.cc:106 msgid "" "It is not known what caused this error. The best idea is to report the " "problem to the DVD-o-matic mailing list (dvdomatic@carlh.net)" @@ -260,15 +260,15 @@ msgstr "Deinterlacciatore Kernel" msgid "Lanczos" msgstr "Lanczos" -#: src/lib/util.cc:930 +#: src/lib/util.cc:958 msgid "Left" msgstr "Sinistro" -#: src/lib/util.cc:934 +#: src/lib/util.cc:962 msgid "Left surround" msgstr "Surround sinistro" -#: src/lib/util.cc:933 +#: src/lib/util.cc:961 msgid "Lfe (sub)" msgstr "Lfe(sub)" @@ -298,7 +298,7 @@ msgstr "Dinterlacciatore compensativo di movimento" msgid "Noise reduction" msgstr "Riduzione del rumore" -#: src/lib/job.cc:302 +#: src/lib/job.cc:314 msgid "OK (ran for %1)" msgstr "OK (eseguito in %1)" @@ -318,15 +318,15 @@ msgstr "Annuncio di pubblico servizio" msgid "Rating" msgstr "Punteggio" -#: src/lib/util.cc:500 +#: src/lib/util.cc:513 msgid "Rec 709" msgstr "Rec 709" -#: src/lib/util.cc:931 +#: src/lib/util.cc:959 msgid "Right" msgstr "Destro" -#: src/lib/util.cc:935 +#: src/lib/util.cc:963 msgid "Right surround" msgstr "Surround destro" @@ -370,7 +370,7 @@ msgstr "Riduttore temporale di rumore" msgid "Test" msgstr "Prova" -#: src/lib/job.cc:78 +#: src/lib/job.cc:79 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -390,7 +390,7 @@ msgstr "Transcodifica %1" msgid "Transitional" msgstr "Di transizione" -#: src/lib/job.cc:104 +#: src/lib/job.cc:105 msgid "Unknown error" msgstr "Errore sconosciuto" @@ -426,7 +426,7 @@ msgstr "Altro filtro di deinterlacciamento" msgid "cannot contain slashes" msgstr "non può contenere barre" -#: src/lib/util.cc:541 +#: src/lib/util.cc:554 msgid "connect timed out" msgstr "connessione scaduta" @@ -466,7 +466,7 @@ msgstr "non riesco a trovare il decoder dei sottotitoli" msgid "could not find video decoder" msgstr "non riesco a trovare il decoder video" -#: src/lib/sndfile_decoder.cc:72 +#: src/lib/sndfile_decoder.cc:67 msgid "could not open external audio file for reading" msgstr "non riesco ad aprire il file dell'audio esterno per leggerlo" @@ -498,11 +498,11 @@ msgstr "non posso avviare la sessione SSH" msgid "could not write to file %1 (%2)" msgstr "non posso scrivere il file (%1)" -#: src/lib/sndfile_decoder.cc:94 +#: src/lib/sndfile_decoder.cc:89 msgid "external audio files have differing lengths" msgstr "i files dell'audio esterno hanno durata diversa" -#: src/lib/sndfile_decoder.cc:76 +#: src/lib/sndfile_decoder.cc:71 msgid "external audio files must be mono" msgstr "i files dell'audio esterno devono essere mono" @@ -514,23 +514,23 @@ msgstr "formato" msgid "frames per second" msgstr "fotogrammi al secondo" -#: src/lib/util.cc:115 +#: src/lib/util.cc:128 msgid "hour" msgstr "ora" -#: src/lib/util.cc:112 src/lib/util.cc:117 +#: src/lib/util.cc:125 src/lib/util.cc:130 msgid "hours" msgstr "ore" -#: src/lib/util.cc:122 +#: src/lib/util.cc:135 msgid "minute" msgstr "minuto" -#: src/lib/util.cc:124 +#: src/lib/util.cc:137 msgid "minutes" msgstr "minuti" -#: src/lib/util.cc:684 +#: src/lib/util.cc:697 msgid "missing key %1 in key-value set" msgstr "persa la chiave %1 tra i valori chiave" @@ -556,15 +556,15 @@ msgstr "sottotitoli non-bitmap non ancora supportati" #. / TRANSLATORS: remaining here follows an amount of time that is remaining #. / on an operation. -#: src/lib/job.cc:299 +#: src/lib/job.cc:311 msgid "remaining" msgstr "restano" -#: src/lib/util.cc:498 +#: src/lib/util.cc:511 msgid "sRGB" msgstr "sRGB" -#: src/lib/util.cc:127 +#: src/lib/util.cc:140 msgid "seconds" msgstr "secondi" diff --git a/src/lib/po/sv_SE.po b/src/lib/po/sv_SE.po index 11aeff987..58d336ef8 100644 --- a/src/lib/po/sv_SE.po +++ b/src/lib/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: DVD-o-matic\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-04-10 15:35+0100\n" "Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n" "Language-Team: \n" @@ -73,7 +73,7 @@ msgstr "Academy" msgid "Advertisement" msgstr "Reklam" -#: src/lib/job.cc:72 +#: src/lib/job.cc:73 msgid "An error occurred whilst handling the file %1." msgstr "Ett fel inträffade vid hantering av filen %1" @@ -93,7 +93,7 @@ msgstr "Bikubisk" msgid "Bilinear" msgstr "Bilinjär" -#: src/lib/job.cc:306 +#: src/lib/job.cc:318 msgid "Cancelled" msgstr "Avbruten" @@ -106,7 +106,7 @@ msgid "Cannot resample audio as libswresample is not present" msgstr "" "Kan inte omsampla ljudet eftersom libswresample inte finns tillgängligt" -#: src/lib/util.cc:932 +#: src/lib/util.cc:960 msgid "Centre" msgstr "Mitt" @@ -138,15 +138,15 @@ msgstr "Kunde inte skriva till fjärrfil (%1)" msgid "Cubic interpolating deinterlacer" msgstr "Kubiskt interpolerande avflätare" -#: src/lib/util.cc:1007 +#: src/lib/util.cc:1035 msgid "DCP and source have the same rate.\n" msgstr "DCP och källa har samma bildfrekvens.\n" -#: src/lib/util.cc:1017 +#: src/lib/util.cc:1045 msgid "DCP will run at %1%% of the source speed.\n" msgstr "DCP kommer att köras på %1%% av källans hastighet.\n" -#: src/lib/util.cc:1010 +#: src/lib/util.cc:1038 msgid "DCP will use every other frame of the source.\n" msgstr "DCP kommer att använda varannan bild från källan.\n" @@ -169,11 +169,11 @@ msgstr "Avringningsfilter" msgid "Dolby CP750" msgstr "Dolby CP750" -#: src/lib/util.cc:1012 +#: src/lib/util.cc:1040 msgid "Each source frame will be doubled in the DCP.\n" msgstr "Varje bild från källan kommer att användas två gånger i DCPn.\n" -#: src/lib/job.cc:304 +#: src/lib/job.cc:316 msgid "Error (%1)" msgstr "Fel (%1)" @@ -245,7 +245,7 @@ msgstr "Filter för horisontal kantighetsutjämning" msgid "Horizontal deblocking filter A" msgstr "Filter för horisontal kantighetsutjämning A" -#: src/lib/job.cc:96 src/lib/job.cc:105 +#: src/lib/job.cc:97 src/lib/job.cc:106 msgid "" "It is not known what caused this error. The best idea is to report the " "problem to the DVD-o-matic mailing list (dvdomatic@carlh.net)" @@ -261,15 +261,15 @@ msgstr "Kernel-avflätare" msgid "Lanczos" msgstr "Lanczos" -#: src/lib/util.cc:930 +#: src/lib/util.cc:958 msgid "Left" msgstr "Vänster" -#: src/lib/util.cc:934 +#: src/lib/util.cc:962 msgid "Left surround" msgstr "Vänster surround" -#: src/lib/util.cc:933 +#: src/lib/util.cc:961 msgid "Lfe (sub)" msgstr "Lfe (sub)" @@ -299,7 +299,7 @@ msgstr "Rörelsekompenserande avflätare" msgid "Noise reduction" msgstr "Brusreducering" -#: src/lib/job.cc:302 +#: src/lib/job.cc:314 msgid "OK (ran for %1)" msgstr "OK (kördes %1)" @@ -319,15 +319,15 @@ msgstr "Offentligt Servicemeddelande" msgid "Rating" msgstr "Klassificeringsklipp" -#: src/lib/util.cc:500 +#: src/lib/util.cc:513 msgid "Rec 709" msgstr "Rec 709" -#: src/lib/util.cc:931 +#: src/lib/util.cc:959 msgid "Right" msgstr "Höger" -#: src/lib/util.cc:935 +#: src/lib/util.cc:963 msgid "Right surround" msgstr "Höger surround" @@ -371,7 +371,7 @@ msgstr "Temporal brusreducering" msgid "Test" msgstr "Test" -#: src/lib/job.cc:78 +#: src/lib/job.cc:79 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -391,7 +391,7 @@ msgstr "Konvertera %1" msgid "Transitional" msgstr "Övergångsklipp" -#: src/lib/job.cc:104 +#: src/lib/job.cc:105 msgid "Unknown error" msgstr "Okänt fel" @@ -431,7 +431,7 @@ msgid "cannot contain slashes" msgstr "får inte innehålla snedstreck" # Svengelska -#: src/lib/util.cc:541 +#: src/lib/util.cc:554 #, fuzzy msgid "connect timed out" msgstr "uppkopplingen tajmade ur" @@ -472,7 +472,7 @@ msgstr "kunde inte hitta undertext-avkodare" msgid "could not find video decoder" msgstr "kunde inte hitta video-avkodare" -#: src/lib/sndfile_decoder.cc:72 +#: src/lib/sndfile_decoder.cc:67 msgid "could not open external audio file for reading" msgstr "kunde inte öppna extern audio-fil för läsning" @@ -504,11 +504,11 @@ msgstr "kunde inte starta SSH-session" msgid "could not write to file %1 (%2)" msgstr "kunde inte skriva till fil %1 (%2)" -#: src/lib/sndfile_decoder.cc:94 +#: src/lib/sndfile_decoder.cc:89 msgid "external audio files have differing lengths" msgstr "externa audio-filer har olika längder" -#: src/lib/sndfile_decoder.cc:76 +#: src/lib/sndfile_decoder.cc:71 msgid "external audio files must be mono" msgstr "externa audio-filer måste vara mono" @@ -520,23 +520,23 @@ msgstr "format" msgid "frames per second" msgstr "bilder per sekund" -#: src/lib/util.cc:115 +#: src/lib/util.cc:128 msgid "hour" msgstr "timme" -#: src/lib/util.cc:112 src/lib/util.cc:117 +#: src/lib/util.cc:125 src/lib/util.cc:130 msgid "hours" msgstr "timmar" -#: src/lib/util.cc:122 +#: src/lib/util.cc:135 msgid "minute" msgstr "minut" -#: src/lib/util.cc:124 +#: src/lib/util.cc:137 msgid "minutes" msgstr "minuter" -#: src/lib/util.cc:684 +#: src/lib/util.cc:697 msgid "missing key %1 in key-value set" msgstr "saknad nyckel %1 i nyckel-värde grupp" @@ -562,15 +562,15 @@ msgstr "icke-rastergrafiska undertexter stöds inte ännu" #. / TRANSLATORS: remaining here follows an amount of time that is remaining #. / on an operation. -#: src/lib/job.cc:299 +#: src/lib/job.cc:311 msgid "remaining" msgstr "återstående tid" -#: src/lib/util.cc:498 +#: src/lib/util.cc:511 msgid "sRGB" msgstr "sRGB" -#: src/lib/util.cc:127 +#: src/lib/util.cc:140 msgid "seconds" msgstr "sekunder" diff --git a/src/lib/sndfile_decoder.cc b/src/lib/sndfile_decoder.cc index fdaf2eeaa..7e9e67d0f 100644 --- a/src/lib/sndfile_decoder.cc +++ b/src/lib/sndfile_decoder.cc @@ -96,6 +96,10 @@ SndfileDecoder::SndfileDecoder (shared_ptr<Film> f, DecodeOptions o) bool SndfileDecoder::pass () { + if (_audio_streams.empty ()) { + return true; + } + /* Do things in half second blocks as I think there may be limits to what FFmpeg (and in particular the resampler) can cope with. */ diff --git a/src/lib/stack.cpp b/src/lib/stack.cpp new file mode 100644 index 000000000..20a5c5be7 --- /dev/null +++ b/src/lib/stack.cpp @@ -0,0 +1,463 @@ +/** -*- c-basic-offset: 4; default-tab-width: 4; indent-tabs-mode: nil; -*- */ + +// Copyright 2007 Edd Dawson. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include <cassert> +#include <cstring> +#include <cstdlib> +#include <iomanip> +#include <ostream> +#include <stdexcept> +#include <sstream> + +#include "stack.hpp" + +#if defined(_WIN32) +# include <windows.h> +# include <imagehlp.h> + +# if defined(__MINGW32__) +# define PACKAGE 1 +# define PACKAGE_VERSION 1 +# include <bfd.h> // link against libbfd and libiberty +# include <psapi.h> // link against psapi +# include <cxxabi.h> +# endif + +#elif defined(__GNUC__) +# include <dlfcn.h> +# include <cxxabi.h> +#endif + +namespace +{ + const char * const unknown_function = "[unknown function]"; + const char * const unknown_module = "[unknown module]"; + +#if defined(__GNUC__) + std::string demangle(const char *name) + { + if (!name) + return unknown_function; + + int status = 0; + char *d = 0; + std::string ret = name; + try + { + if ((d = abi::__cxa_demangle(name, 0, 0, &status))) + ret = d; + } + catch (const std::bad_alloc &) { } + + std::free(d); + return ret; + } +#endif + +#if defined(_WIN32) + + // Derive from this to disallow copying of your class. + // c.f. boost::noncopyable + class uncopyable + { + protected: + uncopyable() { } + + private: + uncopyable(const uncopyable &); + uncopyable &operator= (const uncopyable &); + }; + +#if defined(__MINGW32__) + + // Provides a means to translate a program counter offset in to the name of the corresponding function. + class bfd_context : uncopyable + { + private: + struct find_data + { + std::string func; + unsigned int line; + asymbol **symbol_table; + bfd_vma counter; + }; + + public: + bfd_context() : + abfd_(0), + sec_(0), + symbol_table_(0) + { + char procname[MAX_PATH]; + GetModuleFileNameA(NULL, procname, sizeof procname); + + bfd_init(); + abfd_ = bfd_openr(procname, 0); + if (!abfd_) + throw std::runtime_error("Failed to parse object data for the executable"); + + char **formats = 0; + bool b1 = bfd_check_format(abfd_, bfd_object); + bool b2 = bfd_check_format_matches(abfd_, bfd_object, &formats); + bool b3 = bfd_get_file_flags(abfd_) & HAS_SYMS; + + if (!(b1 && b2 && b3)) + { + bfd_close(abfd_); + free(formats); + throw std::runtime_error("Failed to parse object data for the executable"); + } + free(formats); + + // Load symbol table + unsigned dummy = 0; + if (bfd_read_minisymbols(abfd_, FALSE, reinterpret_cast<void **>(&symbol_table_), &dummy) == 0 && + bfd_read_minisymbols(abfd_, TRUE, reinterpret_cast<void **>(&symbol_table_), &dummy) < 0) + { + free(symbol_table_); + bfd_close(abfd_); + throw std::runtime_error("Failed to parse object data for the executable"); + } + } + + ~bfd_context() + { + free(symbol_table_); + bfd_close(abfd_); + } + + std::pair<std::string, unsigned int> get_function_name_and_line(DWORD offset) + { + find_data data; + data.symbol_table = symbol_table_; + data.counter = offset; + + bfd_map_over_sections(abfd_, &find_function_name_in_section, &data); + + return std::make_pair(data.func, data.line); + } + + private: + static void find_function_name_in_section(bfd *abfd, asection *sec, void *opaque_data) + { + assert(sec); + assert(opaque_data); + find_data &data = *static_cast<find_data *>(opaque_data); + + if (!data.func.empty()) return; // already found it + + if (!(bfd_get_section_flags(abfd, sec) & SEC_ALLOC)) return; + + bfd_vma vma = bfd_get_section_vma(abfd, sec); + if (data.counter < vma || vma + bfd_get_section_size(sec) <= data.counter) return; + + const char *func = 0; + const char *file = 0; + unsigned line = 0; + + if (bfd_find_nearest_line(abfd, sec, data.symbol_table, data.counter - vma, &file, &func, &line) && func) { + data.func = demangle(func); + data.line = line; + } + } + + private: + bfd *abfd_; + asection *sec_; + asymbol **symbol_table_; + }; + +#endif // __MINGW32__ + + // g++ spouts warnings if you use {0} to initialize PODs. So we use this instead: + const struct + { + template<typename POD> + operator POD () const { POD p; std::memset(&p, 0, sizeof p); return p; } + } + empty_pod = { }; + + // Wraps a FARPROC. Implicitly convertible to any kind of pointer-to-function. + // Avoids having reinterpret casts all over the place. + struct auto_cast_function_ptr + { + auto_cast_function_ptr(FARPROC f) : fptr_(f) { } + + template<typename FuncPtr> + operator FuncPtr() const { return reinterpret_cast<FuncPtr>(fptr_); } + + FARPROC fptr_; + }; + + // A wrapper around a DLL. Can dynamically get function pointers with the function() function! + class windows_dll : uncopyable + { + public: + explicit windows_dll(const std::string &libname) : + name_(libname), + lib_(LoadLibraryA(name_.c_str())) + { + if (!lib_) throw std::runtime_error("Failed to load dll " + name_); + } + + ~windows_dll() { FreeLibrary(lib_); } + + const std::string &name() const { return name_; } + + auto_cast_function_ptr function(const char *func_name) const + { + FARPROC proc = GetProcAddress(lib_, func_name); + if (!proc) throw std::runtime_error(std::string("failed to load function ") + func_name + " from library " + name_); + + return proc; + } + + private: + std::string name_; + HMODULE lib_; + }; + + // An object that makes sure debugging symbols are available + class symbol_context : uncopyable + { + public: + symbol_context() + { + if (!SymInitialize(GetCurrentProcess(), 0, TRUE)) + throw std::runtime_error("Failed to initialize symbol context"); + } + ~symbol_context() { SymCleanup(GetCurrentProcess()); } + }; + + // A simple Windows mutex class. Use a lock object to lock the mutex for the duration of a scope. + class mutex : uncopyable + { + public: + mutex() { InitializeCriticalSection(&cs_); } + ~mutex() { DeleteCriticalSection(&cs_); } + + private: + friend class lock; + void lock() { EnterCriticalSection(&cs_); } + void unlock() { LeaveCriticalSection(&cs_); } + + CRITICAL_SECTION cs_; + } + g_fill_frames_mtx; + + // A lock for the mutex + class lock : uncopyable + { + public: + lock(mutex &m) : m_(m) { m.lock(); } + ~lock() { m_.unlock(); } + private: + mutex &m_; + }; + + + void fill_frames(std::list<dbg::stack_frame> &frames, dbg::stack::depth_type limit) + { + lock lk(g_fill_frames_mtx); + + symbol_context sc; +#ifdef __MINGW32__ + bfd_context bfdc; +#endif + + STACKFRAME frame = empty_pod; + CONTEXT context = empty_pod; + context.ContextFlags = CONTEXT_FULL; + + windows_dll kernel32("kernel32.dll"); + void (WINAPI *RtlCaptureContext_)(CONTEXT*) = kernel32.function("RtlCaptureContext"); + + RtlCaptureContext_(&context); + +#if defined(_M_AMD64) + frame.AddrPC.Offset = context.Rip; + frame.AddrPC.Mode = AddrModeFlat; + frame.AddrStack.Offset = context.Rsp; + frame.AddrStack.Mode = AddrModeFlat; + frame.AddrFrame.Offset = context.Rbp; + frame.AddrFrame.Mode = AddrModeFlat; +#else + frame.AddrPC.Offset = context.Eip; + frame.AddrPC.Mode = AddrModeFlat; + frame.AddrStack.Offset = context.Esp; + frame.AddrStack.Mode = AddrModeFlat; + frame.AddrFrame.Offset = context.Ebp; + frame.AddrFrame.Mode = AddrModeFlat; +#endif + + HANDLE process = GetCurrentProcess(); + HANDLE thread = GetCurrentThread(); + + bool skip = true; + bool has_limit = limit != 0; + char symbol_buffer[sizeof(IMAGEHLP_SYMBOL) + 255]; + char module_name_raw[MAX_PATH]; + +#if defined(_M_AMD64) + const DWORD machine = IMAGE_FILE_MACHINE_AMD64; +#else + const DWORD machine = IMAGE_FILE_MACHINE_I386; +#endif + + while(StackWalk(machine, process, thread, &frame, &context, 0, SymFunctionTableAccess, SymGetModuleBase, 0)) + { + if (skip) + { + skip = false; + continue; + } + + if (has_limit && limit-- == 0) break; + + IMAGEHLP_SYMBOL *symbol = reinterpret_cast<IMAGEHLP_SYMBOL *>(symbol_buffer); + symbol->SizeOfStruct = (sizeof *symbol) + 255; + symbol->MaxNameLength = 254; + +#if defined(_WIN64) + DWORD64 module_base = SymGetModuleBase(process, frame.AddrPC.Offset); +#else + DWORD module_base = SymGetModuleBase(process, frame.AddrPC.Offset); +#endif + std::string module_name = unknown_module; + if (module_base && GetModuleFileNameA(reinterpret_cast<HINSTANCE>(module_base), module_name_raw, MAX_PATH)) + module_name = module_name_raw; + +#if defined(__MINGW32__) + std::pair<std::string, unsigned int> func_and_line = bfdc.get_function_name_and_line(frame.AddrPC.Offset); + + if (func_and_line.first.empty()) + { +#if defined(_WIN64) + DWORD64 dummy = 0; +#else + DWORD dummy = 0; +#endif + BOOL got_symbol = SymGetSymFromAddr(process, frame.AddrPC.Offset, &dummy, symbol); + func_and_line.first = got_symbol ? symbol->Name : unknown_function; + } +#else + DWORD dummy = 0; + BOOL got_symbol = SymGetSymFromAddr(process, frame.AddrPC.Offset, &dummy, symbol); + std::string func = got_symbol ? symbol->Name : unknown_function; +#endif + + dbg::stack_frame f(reinterpret_cast<const void *>(frame.AddrPC.Offset), func_and_line.first, func_and_line.second, module_name); + frames.push_back(f); + } + } +#elif defined(__GNUC__) +# if defined(__i386__) || defined(__amd64__) + + void fill_frames(std::list<dbg::stack_frame> &frames, dbg::stack::depth_type limit) + { + // Based on code found at: + // http://www.tlug.org.za/wiki/index.php/Obtaining_a_stack_trace_in_C_upon_SIGSEGV + + Dl_info info; + void **frame = static_cast<void **>(__builtin_frame_address(0)); + void **bp = static_cast<void **>(*frame); + void *ip = frame[1]; + + bool has_limit = limit != 0; + bool skip = true; + + while(bp && ip && dladdr(ip, &info)) + { + if (skip) + skip = false; + else + { + if (has_limit && limit-- == 0) break; + frames.push_back(dbg::stack_frame(ip, demangle(info.dli_sname), info.dli_fname)); + + if(info.dli_sname && !std::strcmp(info.dli_sname, "main")) break; + } + + ip = bp[1]; + bp = static_cast<void**>(bp[0]); + } + } + +# elif defined(__ppc__) + + void fill_frames(std::list<dbg::stack_frame> &frames, dbg::stack::depth_type limit) + { + // Based on code found at: + // http://www.informit.com/articles/article.aspx?p=606582&seqNum=4&rl=1 + + void *ip = __builtin_return_address(0); + void **frame = static_cast<void **>(__builtin_frame_address(1)); + bool has_limit = limit != 0; + Dl_info info; + + do + { + if (has_limit && limit-- == 0) break; + + if (dladdr(ip, &info)) + frames.push_back(dbg::stack_frame(ip, demangle(info.dli_sname), info.dli_fname)); + + if (frame && (frame = static_cast<void**>(*frame))) ip = *(frame + 2); + } + while (frame && ip); + } + +# else + // GNU, but not x86, x64 nor PPC +# error "Sorry but dbg::stack is not supported on this architecture" +# endif +#else + // Unsupported compiler +# error "Sorry but dbg::stack is not supported on this compiler" +#endif + +} // close anonymous namespace + + + +namespace dbg +{ + stack_frame::stack_frame(const void *instruction, const std::string &function, unsigned int line, const std::string &module) : + instruction(instruction), + function(function), + line(line), + module(module) + { + } + + std::ostream &operator<< (std::ostream &out, const stack_frame &frame) + { + return out << frame.instruction << ": " << frame.function << ":" << frame.line << " in " << frame.module; + } + + stack::stack(depth_type limit) + { + fill_frames(frames_, limit); + } + + stack::const_iterator stack::begin() const + { + return frames_.begin(); + } + + stack::const_iterator stack::end() const + { + return frames_.end(); + } + + stack::depth_type stack::depth() const + { + return frames_.size(); + } + +} // close namespace dbg + diff --git a/src/lib/stack.hpp b/src/lib/stack.hpp new file mode 100644 index 000000000..2b622d020 --- /dev/null +++ b/src/lib/stack.hpp @@ -0,0 +1,60 @@ +/** -*- c-basic-offset: 4; default-tab-width: 4; indent-tabs-mode: nil; -*- */ + +// Copyright 2007 Edd Dawson. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef STACK_HPP_0022_01092007 +#define STACK_HPP_0022_01092007 + +#include <string> +#include <list> +#include <iosfwd> + +namespace dbg +{ + //! stack_frame objects are collected by a stack object. They contain information about the instruction pointer, + //! the name of the corresponding function and the "module" (executable or library) in which the function resides. + struct stack_frame + { + stack_frame(const void *instruction, const std::string &function, unsigned int line, const std::string &module); + + const void *instruction; + std::string function; + unsigned int line; + std::string module; + }; + + //! Allows you to write a stack_frame object to an std::ostream + std::ostream &operator<< (std::ostream &out, const stack_frame &frame); + + //! Instantiate a dbg::stack object to collect information about the current call stack. Once created, a stack object + //! may be freely copied about and will continue to contain the information about the scope in which collection occurred. + class stack + { + public: + typedef std::list<stack_frame>::size_type depth_type; + typedef std::list<stack_frame>::const_iterator const_iterator; + + //! Collect information about the current call stack. Information on the most recent frames will be collected + //! up to the specified limit. 0 means unlimited. + //! An std::runtime_error may be thrown on failure. + stack(depth_type limit = 0); + + //! Returns an iterator referring to the "top" stack frame + const_iterator begin() const; + + //! Returns an iterator referring to one past the "bottom" stack frame + const_iterator end() const; + + //! Returns the number of frames collected + depth_type depth() const; + + private: + std::list<stack_frame> frames_; + }; + +} // close namespace dbg + +#endif // STACK_HPP_0022_01092007 diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc index faafcaf8b..fcfbb1648 100644 --- a/src/lib/transcoder.cc +++ b/src/lib/transcoder.cc @@ -56,7 +56,7 @@ Transcoder::Transcoder (shared_ptr<Film> f, DecodeOptions o, Job* j, shared_ptr< assert (_encoder); shared_ptr<AudioStream> st = f->audio_stream(); - if (st) { + if (st && st->sample_rate()) { _matcher.reset (new Matcher (f->log(), st->sample_rate(), f->source_frame_rate())); } _delay_line.reset (new DelayLine (f->log(), f->audio_delay() / 1000.0f)); diff --git a/src/lib/util.cc b/src/lib/util.cc index 859aa6de7..2f8be6edd 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -39,6 +39,7 @@ #include <boost/lexical_cast.hpp> #include <boost/thread.hpp> #include <boost/filesystem.hpp> +#include <glib.h> #include <openjpeg.h> #include <openssl/md5.h> #include <magick/MagickCore.h> @@ -60,6 +61,9 @@ extern "C" { #include "filter.h" #include "sound_processor.h" #include "config.h" +#ifdef DVDOMATIC_WINDOWS +#include "stack.hpp" +#endif #include "i18n.h" @@ -75,12 +79,14 @@ using std::min; using std::max; using std::multimap; using std::pair; +using std::ofstream; using boost::shared_ptr; using boost::lexical_cast; using boost::optional; using libdcp::Size; boost::thread::id ui_thread; +boost::filesystem::path backtrace_file; /** Convert some number of seconds to a string representation * in hours, minutes and seconds. @@ -242,12 +248,28 @@ seconds (struct timeval t) return t.tv_sec + (double (t.tv_usec) / 1e6); } +#ifdef DVDOMATIC_WINDOWS +LONG WINAPI exception_handler(struct _EXCEPTION_POINTERS *) +{ + dbg::stack s; + ofstream f (backtrace_file.string().c_str()); + std::copy(s.begin(), s.end(), std::ostream_iterator<dbg::stack_frame>(f, "\n")); + return EXCEPTION_CONTINUE_SEARCH; +} +#endif + /** Call the required functions to set up DVD-o-matic's static arrays, etc. * Must be called from the UI thread, if there is one. */ void dvdomatic_setup () { +#ifdef DVDOMATIC_WINDOWS + backtrace_file /= g_get_user_config_dir (); + backtrace_file /= "backtrace.txt"; + SetUnhandledExceptionFilter(exception_handler); +#endif + avfilter_register_all (); Format::setup_formats (); @@ -274,7 +296,7 @@ mo_path () #endif void -dvdomatic_setup_i18n (string lang) +dvdomatic_setup_gettext_i18n (string lang) { #ifdef DVDOMATIC_POSIX lang += ".UTF8"; @@ -1054,8 +1076,8 @@ LocaleGuard::LocaleGuard () if (old) { _old = strdup (old); - if (strcmp (_old, "POSIX")) { - setlocale (LC_NUMERIC, "POSIX"); + if (strcmp (_old, "C")) { + setlocale (LC_NUMERIC, "C"); } } } diff --git a/src/lib/util.h b/src/lib/util.h index 99670110e..d0c350a56 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -55,7 +55,7 @@ extern void stacktrace (std::ostream &, int); extern std::string dependency_version_summary (); extern double seconds (struct timeval); extern void dvdomatic_setup (); -extern void dvdomatic_setup_i18n (std::string); +extern void dvdomatic_setup_gettext_i18n (std::string); extern std::vector<std::string> split_at_spaces_considering_quotes (std::string); extern std::string md5_digest (std::string); extern std::string md5_digest (void const *, int); diff --git a/src/lib/writer.cc b/src/lib/writer.cc index ad81686d1..177e929ae 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -22,12 +22,14 @@ #include <libdcp/sound_asset.h> #include <libdcp/picture_frame.h> #include <libdcp/reel.h> +#include <libdcp/cpl.h> #include "writer.h" #include "compose.hpp" #include "film.h" #include "format.h" #include "log.h" #include "dcp_video_frame.h" +#include "config.h" #include "i18n.h" @@ -320,7 +322,9 @@ Writer::finish () ) )); - dcp.write_xml (); + libdcp::XMLMetadata meta = Config::instance()->dcp_metadata (); + meta.set_issue_date_now (); + dcp.write_xml (meta); _film->log()->log (String::compose (N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT; %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk)); } diff --git a/src/lib/wscript b/src/lib/wscript index a4b68801f..66207b1e4 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -65,9 +65,13 @@ def build(bld): BOOST_FILESYSTEM BOOST_THREAD BOOST_DATETIME BOOST_SIGNALS2 SNDFILE OPENJPEG POSTPROC TIFF MAGICK SSH DCP GLIB LZMA """ + + obj.source = sources + ' version.cc' + if bld.env.TARGET_WINDOWS: - obj.uselib += ' WINSOCK2' - obj.source = sources + " version.cc" + obj.uselib += ' WINSOCK2 BFD DBGHELP IBERTY' + obj.source += ' stack.cpp' + obj.target = 'dvdomatic' i18n.po_to_mo(os.path.join('src', 'lib'), 'libdvdomatic', bld) diff --git a/src/tools/dvdomatic.cc b/src/tools/dvdomatic.cc index b161ac7e3..ff1560f0e 100644 --- a/src/tools/dvdomatic.cc +++ b/src/tools/dvdomatic.cc @@ -62,7 +62,6 @@ static shared_ptr<Film> film; static std::string log_level; static std::string film_to_load; static wxMenu* jobs_menu = 0; -static wxLocale* locale = 0; static void set_menu_sensitivity (); @@ -225,7 +224,7 @@ public: film_editor = new FilmEditor (film, panel); film_viewer = new FilmViewer (film, panel); - JobManagerView* job_manager_view = new JobManagerView (panel); + JobManagerView* job_manager_view = new JobManagerView (panel, static_cast<JobManagerView::Buttons> (0)); _top_sizer = new wxBoxSizer (wxHORIZONTAL); _top_sizer->Add (film_editor, 0, wxALL, 6); @@ -463,49 +462,6 @@ static const wxCmdLineEntryDesc command_line_description[] = { }; #endif -void -setup_i18n () -{ - int language = wxLANGUAGE_DEFAULT; - - ofstream f ("c:/users/carl hetherington/foo", std::ios::app); - f << "Hello.\n"; - - boost::optional<string> config_lang = Config::instance()->language (); - if (config_lang && !config_lang->empty ()) { - f << "Configured language " << config_lang.get() << "\n"; - wxLanguageInfo const * li = wxLocale::FindLanguageInfo (std_to_wx (config_lang.get ())); - f << "LanguageInfo " << li << "\n"; - if (li) { - language = li->Language; - f << "language=" << language << " cf " << wxLANGUAGE_DEFAULT << " " << wxLANGUAGE_ENGLISH << "\n"; - } - } - - if (wxLocale::IsAvailable (language)) { - f << "Language is available.\n"; - locale = new wxLocale (language, wxLOCALE_LOAD_DEFAULT); - -#ifdef DVDOMATIC_WINDOWS - locale->AddCatalogLookupPathPrefix (std_to_wx (mo_path().string())); -#endif - - locale->AddCatalog (wxT ("libdvdomatic-wx")); - locale->AddCatalog (wxT ("dvdomatic")); - - if (!locale->IsOk()) { - f << "Locale is not ok.\n"; - delete locale; - locale = new wxLocale (wxLANGUAGE_ENGLISH); - language = wxLANGUAGE_ENGLISH; - } - } - - if (locale) { - dvdomatic_setup_i18n (wx_to_std (locale->GetCanonicalName ())); - } -} - class App : public wxApp { bool OnInit () @@ -526,7 +482,7 @@ class App : public wxApp hasn't yet been called and there aren't any scalers, filters etc. set up yet. */ - setup_i18n (); + dvdomatic_setup_i18n (); /* Set things up, including scalers / filters etc. which will now be internationalised correctly. diff --git a/src/tools/dvdomatic_batch.cc b/src/tools/dvdomatic_batch.cc new file mode 100644 index 000000000..7a3d38d9c --- /dev/null +++ b/src/tools/dvdomatic_batch.cc @@ -0,0 +1,239 @@ +/* + Copyright (C) 2013 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 + 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, + 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. + +*/ + +#include <wx/aboutdlg.h> +#include <wx/stdpaths.h> +#include <wx/wx.h> +#include "lib/version.h" +#include "lib/compose.hpp" +#include "lib/config.h" +#include "lib/util.h" +#include "lib/film.h" +#include "lib/job_manager.h" +#include "wx/wx_util.h" +#include "wx/wx_ui_signaller.h" +#include "wx/job_manager_view.h" + +using boost::shared_ptr; + +enum { + ID_file_add_film = 1, + ID_file_quit, + ID_help_about +}; + +void +setup_menu (wxMenuBar* m) +{ + wxMenu* file = new wxMenu; + file->Append (ID_file_add_film, _("&Add Film...")); + file->Append (ID_file_quit, _("&Quit")); + + wxMenu* help = new wxMenu; + help->Append (ID_help_about, _("About")); + + m->Append (file, _("&File")); + m->Append (help, _("&Help")); +} + +class Frame : public wxFrame +{ +public: + Frame (wxString const & title) + : wxFrame (NULL, -1, title) + { + wxMenuBar* bar = new wxMenuBar; + setup_menu (bar); + SetMenuBar (bar); + + Connect (ID_file_add_film, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_add_film)); + Connect (ID_file_quit, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_quit)); + Connect (ID_help_about, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::help_about)); + + wxPanel* panel = new wxPanel (this); + wxSizer* s = new wxBoxSizer (wxHORIZONTAL); + s->Add (panel, 1, wxEXPAND); + SetSizer (s); + + wxSizer* sizer = new wxBoxSizer (wxVERTICAL); + + JobManagerView* job_manager_view = new JobManagerView (panel, JobManagerView::PAUSE); + sizer->Add (job_manager_view, 1, wxALL | wxEXPAND, 6); + + wxSizer* buttons = new wxBoxSizer (wxHORIZONTAL); + wxButton* add = new wxButton (panel, wxID_ANY, _("Add Film...")); + add->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (Frame::add_film)); + buttons->Add (add, 1, wxALL, 6); + + sizer->Add (buttons, 0, wxALL, 6); + + panel->SetSizer (sizer); + + Connect (wxID_ANY, wxEVT_CLOSE_WINDOW, wxCloseEventHandler (Frame::close)); + } + +private: + bool should_close () + { + if (!JobManager::instance()->work_to_do ()) { + return true; + } + + wxMessageDialog* d = new wxMessageDialog ( + 0, + _("There are unfinished jobs; are you sure you want to quit?"), + _("Unfinished jobs"), + wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION + ); + + bool const r = d->ShowModal() == wxID_YES; + d->Destroy (); + return r; + } + + void close (wxCloseEvent& ev) + { + if (!should_close ()) { + ev.Veto (); + return; + } + + ev.Skip (); + } + + void file_add_film (wxCommandEvent& ev) + { + add_film (ev); + } + + void file_quit (wxCommandEvent &) + { + if (should_close ()) { + Close (true); + } + } + + void help_about (wxCommandEvent &) + { + wxAboutDialogInfo info; + info.SetName (_("DVD-o-matic Batch Converter")); + if (strcmp (dvdomatic_git_commit, "release") == 0) { + info.SetVersion (std_to_wx (String::compose ("version %1", dvdomatic_version))); + } else { + info.SetVersion (std_to_wx (String::compose ("version %1 git %2", dvdomatic_version, dvdomatic_git_commit))); + } + info.SetDescription (_("Free, open-source DCP generation from almost anything.")); + info.SetCopyright (_("(C) 2012-2013 Carl Hetherington, Terrence Meiczinger, Paul Davis, Ole Laursen")); + + wxArrayString authors; + authors.Add (wxT ("Carl Hetherington")); + authors.Add (wxT ("Terrence Meiczinger")); + authors.Add (wxT ("Paul Davis")); + authors.Add (wxT ("Ole Laursen")); + info.SetDevelopers (authors); + + wxArrayString translators; + translators.Add (wxT ("Olivier Perriere")); + translators.Add (wxT ("Lilian Lefranc")); + translators.Add (wxT ("Thierry Journet")); + translators.Add (wxT ("Massimiliano Broggi")); + translators.Add (wxT ("Manuel AC")); + translators.Add (wxT ("Adam Klotblixt")); + info.SetTranslators (translators); + + info.SetWebSite (wxT ("http://carlh.net/software/dvdomatic")); + wxAboutBox (info); + } + + void add_film (wxCommandEvent &) + { + wxDirDialog* c = new wxDirDialog (this, _("Select film to open"), wxStandardPaths::Get().GetDocumentsDir(), wxDEFAULT_DIALOG_STYLE | wxDD_DIR_MUST_EXIST); + int r; + while (1) { + r = c->ShowModal (); + if (r == wxID_OK && c->GetPath() == wxStandardPaths::Get().GetDocumentsDir()) { + error_dialog (this, _("You did not select a folder. Make sure that you select a folder before clicking Open.")); + } else { + break; + } + } + + if (r == wxID_OK) { + try { + shared_ptr<Film> film (new Film (wx_to_std (c->GetPath ()))); + film->make_dcp (); + } catch (std::exception& e) { + wxString p = c->GetPath (); + wxCharBuffer b = p.ToUTF8 (); + error_dialog (this, wxString::Format (_("Could not open film at %s (%s)"), p.data(), std_to_wx (e.what()).data())); + } + } + + c->Destroy (); + } +}; + +class App : public wxApp +{ + bool OnInit () + { + if (!wxApp::OnInit()) { + return false; + } + +#ifdef DVDOMATIC_POSIX + unsetenv ("UBUNTU_MENUPROXY"); +#endif + + /* 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. + */ + dvdomatic_setup_i18n (); + + /* Set things up, including scalers / filters etc. + which will now be internationalised correctly. + */ + dvdomatic_setup (); + + /* Force the configuration to be re-loaded correctly next + time it is needed. + */ + Config::drop (); + + Frame* f = new Frame (_("DVD-o-matic Batch Converter")); + SetTopWindow (f); + f->Maximize (); + f->Show (); + + ui_signaller = new wxUISignaller (this); + this->Connect (-1, wxEVT_IDLE, wxIdleEventHandler (App::idle)); + + return true; + } + + void idle (wxIdleEvent &) + { + ui_signaller->ui_idle (); + } +}; + +IMPLEMENT_APP (App) diff --git a/src/tools/makedcp.cc b/src/tools/makedcp.cc index c594991a6..e73930d3c 100644 --- a/src/tools/makedcp.cc +++ b/src/tools/makedcp.cc @@ -20,7 +20,6 @@ #include <iostream> #include <iomanip> #include <getopt.h> -#include <libdcp/test_mode.h> #include <libdcp/version.h> #include "format.h" #include "film.h" @@ -50,7 +49,6 @@ help (string n) << " -v, --version show DVD-o-matic version\n" << " -h, --help show this help\n" << " -d, --deps list DVD-o-matic dependency details and quit\n" - << " -t, --test run in test mode (repeatable UUID generation, timestamps etc.)\n" << " -n, --no-progress do not print progress to stdout\n" << " -r, --no-remote do not use any remote servers\n" << "\n" @@ -61,7 +59,6 @@ int main (int argc, char* argv[]) { string film_dir; - bool test_mode = false; bool progress = true; bool no_remote = false; int log_level = 0; @@ -72,14 +69,13 @@ main (int argc, char* argv[]) { "version", no_argument, 0, 'v'}, { "help", no_argument, 0, 'h'}, { "deps", no_argument, 0, 'd'}, - { "test", no_argument, 0, 't'}, { "no-progress", no_argument, 0, 'n'}, { "no-remote", no_argument, 0, 'r'}, { "log-level", required_argument, 0, 'l' }, { 0, 0, 0, 0 } }; - int c = getopt_long (argc, argv, "vhdtnrl:", long_options, &option_index); + int c = getopt_long (argc, argv, "vhdnrl:", long_options, &option_index); if (c == -1) { break; @@ -95,9 +91,6 @@ main (int argc, char* argv[]) case 'd': cout << dependency_version_summary () << "\n"; exit (EXIT_SUCCESS); - case 't': - test_mode = true; - break; case 'n': progress = false; break; @@ -130,11 +123,6 @@ main (int argc, char* argv[]) } cout << "\n"; - if (test_mode) { - libdcp::enable_test_mode (); - cout << dependency_version_summary() << "\n"; - } - shared_ptr<Film> film; try { film.reset (new Film (film_dir, true)); @@ -150,7 +138,6 @@ main (int argc, char* argv[]) cout << "A/B "; } cout << "DCP for " << film->name() << "\n"; - cout << "Test mode: " << (test_mode ? "yes" : "no") << "\n"; cout << "Content: " << film->content() << "\n"; pair<string, string> const f = Filter::ffmpeg_strings (film->filters ()); cout << "Filters: " << f.first << " " << f.second << "\n"; diff --git a/src/tools/po/es_ES.po b/src/tools/po/es_ES.po index 1739f97cd..30f568c98 100644 --- a/src/tools/po/es_ES.po +++ b/src/tools/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: DVDOMATIC\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-03-23 21:08-0500\n" "Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n" "Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n" @@ -17,113 +17,118 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.5\n" -#: src/tools/dvdomatic.cc:179 +#: src/tools/dvdomatic.cc:178 msgid "&Analyse audio" msgstr "&Analizar audio" -#: src/tools/dvdomatic.cc:185 +#: src/tools/dvdomatic.cc:184 msgid "&Edit" msgstr "&Editar" -#: src/tools/dvdomatic.cc:184 +#: src/tools/dvdomatic.cc:183 msgid "&File" msgstr "&Archivo" -#: src/tools/dvdomatic.cc:187 +#: src/tools/dvdomatic.cc:186 msgid "&Help" msgstr "&Ayuda" -#: src/tools/dvdomatic.cc:186 +#: src/tools/dvdomatic.cc:185 msgid "&Jobs" msgstr "&Tareas" -#: src/tools/dvdomatic.cc:175 +#: src/tools/dvdomatic.cc:174 msgid "&Make DCP" msgstr "&Crear DCP" -#: src/tools/dvdomatic.cc:163 +#: src/tools/dvdomatic.cc:162 msgid "&Open..." msgstr "&Abrir..." -#: src/tools/dvdomatic.cc:172 +#: src/tools/dvdomatic.cc:171 msgid "&Preferences..." msgstr "&Preferencias..." -#: src/tools/dvdomatic.cc:167 +#: src/tools/dvdomatic.cc:166 msgid "&Properties..." msgstr "&Propiedades..." -#: src/tools/dvdomatic.cc:169 +#: src/tools/dvdomatic.cc:168 msgid "&Quit" msgstr "&Salir" -#: src/tools/dvdomatic.cc:165 +#: src/tools/dvdomatic.cc:164 msgid "&Save" msgstr "&Guardar" -#: src/tools/dvdomatic.cc:176 +#: src/tools/dvdomatic.cc:175 msgid "&Send DCP to TMS" msgstr "&Enviar DCP al TMS" -#: src/tools/dvdomatic.cc:419 +#: src/tools/dvdomatic.cc:426 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:182 +#: src/tools/dvdomatic.cc:181 msgid "About" msgstr "Acerca de" -#: src/tools/dvdomatic.cc:538 +#: src/tools/dvdomatic.cc:502 #, fuzzy msgid "Could not load film %1 (%2)" msgstr "No se pudo cargar la película %s (%s)" -#: src/tools/dvdomatic.cc:341 +#: src/tools/dvdomatic.cc:348 #, 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:289 src/tools/dvdomatic.cc:412 -#: src/tools/dvdomatic.cc:542 +#: src/tools/dvdomatic.cc:288 src/tools/dvdomatic.cc:419 +#: src/tools/dvdomatic.cc:506 msgid "DVD-o-matic" msgstr "DVD-o-matic" -#: src/tools/dvdomatic.cc:77 +#: src/tools/dvdomatic.cc:76 msgid "Film changed" msgstr "Película cambiada" -#: src/tools/dvdomatic.cc:418 +#: src/tools/dvdomatic.cc:425 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:162 +#: src/tools/dvdomatic.cc:161 msgid "New..." msgstr "Nuevo..." -#: src/tools/dvdomatic.cc:177 +#: src/tools/dvdomatic.cc:176 msgid "S&how DCP" msgstr "&Mostrar DCP" -#: src/tools/dvdomatic.cc:76 +#: src/tools/dvdomatic.cc:75 #, c-format msgid "Save changes to film \"%s\" before closing?" msgstr "" -#: src/tools/dvdomatic.cc:321 +#: src/tools/dvdomatic.cc:328 msgid "Select film to open" msgstr "Selecciona la película a abrir" -#: src/tools/dvdomatic.cc:305 -#, fuzzy -msgid "The directory %1 already exists." -msgstr "La carpeta %s ya existe." +#: src/tools/dvdomatic.cc:307 +msgid "" +"The directory %1 already exists and is not empty. Are you sure you want to " +"use it?" +msgstr "" -#: src/tools/dvdomatic.cc:326 +#: src/tools/dvdomatic.cc:333 msgid "" "You did not select a folder. Make sure that you select a folder before " "clicking Open." msgstr "" + +#, fuzzy +#~ msgid "The directory %1 already exists." +#~ msgstr "La carpeta %s ya existe." diff --git a/src/tools/po/fr_FR.po b/src/tools/po/fr_FR.po index c1447f7e6..6b8f1e783 100644 --- a/src/tools/po/fr_FR.po +++ b/src/tools/po/fr_FR.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: DVD-o-matic FRENCH\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" -"PO-Revision-Date: 2013-03-13 22:33+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" +"PO-Revision-Date: 2013-05-10 14:09+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: \n" @@ -16,111 +16,111 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/tools/dvdomatic.cc:179 +#: src/tools/dvdomatic.cc:178 msgid "&Analyse audio" msgstr "&Analyser le son" -#: src/tools/dvdomatic.cc:185 +#: src/tools/dvdomatic.cc:184 msgid "&Edit" msgstr "&Edition" -#: src/tools/dvdomatic.cc:184 +#: src/tools/dvdomatic.cc:183 msgid "&File" msgstr "&Fichier" -#: src/tools/dvdomatic.cc:187 +#: src/tools/dvdomatic.cc:186 msgid "&Help" msgstr "&Aide" -#: src/tools/dvdomatic.cc:186 +#: src/tools/dvdomatic.cc:185 msgid "&Jobs" msgstr "&Travaux" -#: src/tools/dvdomatic.cc:175 +#: src/tools/dvdomatic.cc:174 msgid "&Make DCP" msgstr "&Créer le DCP" -#: src/tools/dvdomatic.cc:163 +#: src/tools/dvdomatic.cc:162 msgid "&Open..." msgstr "&Ouvrir..." -#: src/tools/dvdomatic.cc:172 +#: src/tools/dvdomatic.cc:171 msgid "&Preferences..." msgstr "&Préférences..." -#: src/tools/dvdomatic.cc:167 +#: src/tools/dvdomatic.cc:166 msgid "&Properties..." msgstr "&Propriétés..." -#: src/tools/dvdomatic.cc:169 +#: src/tools/dvdomatic.cc:168 msgid "&Quit" msgstr "&Quitter" -#: src/tools/dvdomatic.cc:165 +#: src/tools/dvdomatic.cc:164 msgid "&Save" msgstr "&Enregistrer" -#: src/tools/dvdomatic.cc:176 +#: src/tools/dvdomatic.cc:175 msgid "&Send DCP to TMS" msgstr "&Envoyer le DCP dans le TMS" -#: src/tools/dvdomatic.cc:419 -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:426 +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:182 +#: src/tools/dvdomatic.cc:181 msgid "About" msgstr "A Propos" -#: src/tools/dvdomatic.cc:538 +#: src/tools/dvdomatic.cc:502 #, fuzzy msgid "Could not load film %1 (%2)" msgstr "Impossible de charger le film %s (%s)" -#: src/tools/dvdomatic.cc:341 +#: src/tools/dvdomatic.cc:348 #, c-format msgid "Could not open film at %s (%s)" msgstr "Impossible d'ouvrir le film à %s (%s)" -#: src/tools/dvdomatic.cc:289 src/tools/dvdomatic.cc:412 -#: src/tools/dvdomatic.cc:542 +#: src/tools/dvdomatic.cc:288 +#: src/tools/dvdomatic.cc:419 +#: src/tools/dvdomatic.cc:506 msgid "DVD-o-matic" msgstr "DVD-o-matic" -#: src/tools/dvdomatic.cc:77 +#: src/tools/dvdomatic.cc:76 msgid "Film changed" msgstr "Film changé" -#: src/tools/dvdomatic.cc:418 +#: src/tools/dvdomatic.cc:425 msgid "Free, open-source DCP generation from almost anything." msgstr "Création de DCP libre et open-source à partir de presque tout." -#: src/tools/dvdomatic.cc:162 +#: src/tools/dvdomatic.cc:161 msgid "New..." msgstr "Nouveau..." -#: src/tools/dvdomatic.cc:177 +#: src/tools/dvdomatic.cc:176 msgid "S&how DCP" msgstr "Voir le DCP" -#: src/tools/dvdomatic.cc:76 +#: src/tools/dvdomatic.cc:75 #, c-format msgid "Save changes to film \"%s\" before closing?" -msgstr "" +msgstr "Enregistrer les changements du film \"%s\" avant de fermer ?" -#: src/tools/dvdomatic.cc:321 +#: src/tools/dvdomatic.cc:328 msgid "Select film to open" msgstr "Sélectionner le film à ouvrir" -#: src/tools/dvdomatic.cc:305 -#, fuzzy -msgid "The directory %1 already exists." -msgstr "Le dossier %s existe déjà." +#: src/tools/dvdomatic.cc:307 +msgid "The directory %1 already exists and is not empty. Are you sure you want to use it?" +msgstr "Le dossier %1 existe et n'est pas vide. Etes-vous sûr de vouloir l'utiliser ?" -#: src/tools/dvdomatic.cc:326 -msgid "" -"You did not select a folder. Make sure that you select a folder before " -"clicking Open." -msgstr "" +#: src/tools/dvdomatic.cc:333 +msgid "You did not select a folder. Make sure that you select a folder before clicking Open." +msgstr "Aucun dossier sélectionné. Selectionnez un dossier avant de cliquer sur Ouvrir" + +#, fuzzy +#~ msgid "The directory %1 already exists." +#~ msgstr "Le dossier %s existe déjà." diff --git a/src/tools/po/it_IT.po b/src/tools/po/it_IT.po index f0984946d..d1f0b01bb 100644 --- a/src/tools/po/it_IT.po +++ b/src/tools/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: IT VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-04-28 10:31+0100\n" "Last-Translator: Maci <macibro@gmail.com>\n" "Language-Team: \n" @@ -17,109 +17,114 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.5\n" -#: src/tools/dvdomatic.cc:179 +#: src/tools/dvdomatic.cc:178 msgid "&Analyse audio" msgstr "&Analizza audio" -#: src/tools/dvdomatic.cc:185 +#: src/tools/dvdomatic.cc:184 msgid "&Edit" msgstr "&Modifica" -#: src/tools/dvdomatic.cc:184 +#: src/tools/dvdomatic.cc:183 msgid "&File" msgstr "&File" -#: src/tools/dvdomatic.cc:187 +#: src/tools/dvdomatic.cc:186 msgid "&Help" msgstr "&Aiuto" -#: src/tools/dvdomatic.cc:186 +#: src/tools/dvdomatic.cc:185 msgid "&Jobs" msgstr "&Lavori" -#: src/tools/dvdomatic.cc:175 +#: src/tools/dvdomatic.cc:174 msgid "&Make DCP" msgstr "&Crea DCP" -#: src/tools/dvdomatic.cc:163 +#: src/tools/dvdomatic.cc:162 msgid "&Open..." msgstr "&Apri..." -#: src/tools/dvdomatic.cc:172 +#: src/tools/dvdomatic.cc:171 msgid "&Preferences..." msgstr "&Preferenze..." -#: src/tools/dvdomatic.cc:167 +#: src/tools/dvdomatic.cc:166 msgid "&Properties..." msgstr "&Proprieta'..." -#: src/tools/dvdomatic.cc:169 +#: src/tools/dvdomatic.cc:168 msgid "&Quit" msgstr "&Esci" -#: src/tools/dvdomatic.cc:165 +#: src/tools/dvdomatic.cc:164 msgid "&Save" msgstr "&Salva" -#: src/tools/dvdomatic.cc:176 +#: src/tools/dvdomatic.cc:175 msgid "&Send DCP to TMS" msgstr "&Invia DCP a TMS" -#: src/tools/dvdomatic.cc:419 +#: src/tools/dvdomatic.cc:426 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:182 +#: src/tools/dvdomatic.cc:181 msgid "About" msgstr "Informazioni" -#: src/tools/dvdomatic.cc:538 +#: src/tools/dvdomatic.cc:502 msgid "Could not load film %1 (%2)" msgstr "Non posso caricare il film %s (%s)" -#: src/tools/dvdomatic.cc:341 +#: src/tools/dvdomatic.cc:348 #, c-format msgid "Could not open film at %s (%s)" msgstr "Non posso aprire il film in %s (%s)" -#: src/tools/dvdomatic.cc:289 src/tools/dvdomatic.cc:412 -#: src/tools/dvdomatic.cc:542 +#: src/tools/dvdomatic.cc:288 src/tools/dvdomatic.cc:419 +#: src/tools/dvdomatic.cc:506 msgid "DVD-o-matic" msgstr "DVD-o-matic" -#: src/tools/dvdomatic.cc:77 +#: src/tools/dvdomatic.cc:76 msgid "Film changed" msgstr "Film modificato" -#: src/tools/dvdomatic.cc:418 +#: src/tools/dvdomatic.cc:425 msgid "Free, open-source DCP generation from almost anything." msgstr "Genera DCP da quasi tutto, free e open-source." -#: src/tools/dvdomatic.cc:162 +#: src/tools/dvdomatic.cc:161 msgid "New..." msgstr "Nuovo" -#: src/tools/dvdomatic.cc:177 +#: src/tools/dvdomatic.cc:176 msgid "S&how DCP" msgstr "&Mostra DCP" -#: src/tools/dvdomatic.cc:76 +#: src/tools/dvdomatic.cc:75 #, c-format msgid "Save changes to film \"%s\" before closing?" msgstr "Salvare i cambiamenti del film \"%s\" prima di chiudere?" -#: src/tools/dvdomatic.cc:321 +#: src/tools/dvdomatic.cc:328 msgid "Select film to open" msgstr "Seleziona il film da aprire" -#: src/tools/dvdomatic.cc:305 -msgid "The directory %1 already exists." -msgstr "La directory %s esiste gia'." +#: src/tools/dvdomatic.cc:307 +msgid "" +"The directory %1 already exists and is not empty. Are you sure you want to " +"use it?" +msgstr "" -#: src/tools/dvdomatic.cc:326 +#: src/tools/dvdomatic.cc:333 msgid "" "You did not select a folder. Make sure that you select a folder before " "clicking Open." msgstr "" + +#~ msgid "The directory %1 already exists." +#~ msgstr "La directory %s esiste gia'." diff --git a/src/tools/po/sv_SE.po b/src/tools/po/sv_SE.po index 8ae68853f..7e88f84b1 100644 --- a/src/tools/po/sv_SE.po +++ b/src/tools/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: DVD-o-matic\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-04-09 10:12+0100\n" "Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n" "Language-Team: \n" @@ -17,112 +17,117 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.5\n" -#: src/tools/dvdomatic.cc:179 +#: src/tools/dvdomatic.cc:178 msgid "&Analyse audio" msgstr "&Analysera audio" -#: src/tools/dvdomatic.cc:185 +#: src/tools/dvdomatic.cc:184 msgid "&Edit" msgstr "&Redigera" -#: src/tools/dvdomatic.cc:184 +#: src/tools/dvdomatic.cc:183 msgid "&File" msgstr "&Fil" -#: src/tools/dvdomatic.cc:187 +#: src/tools/dvdomatic.cc:186 msgid "&Help" msgstr "&Hjälp" -#: src/tools/dvdomatic.cc:186 +#: src/tools/dvdomatic.cc:185 msgid "&Jobs" msgstr "&Jobb" -#: src/tools/dvdomatic.cc:175 +#: src/tools/dvdomatic.cc:174 msgid "&Make DCP" msgstr "&Skapa DCP" -#: src/tools/dvdomatic.cc:163 +#: src/tools/dvdomatic.cc:162 msgid "&Open..." msgstr "&Öppna" -#: src/tools/dvdomatic.cc:172 +#: src/tools/dvdomatic.cc:171 msgid "&Preferences..." msgstr "&Inställningar" -#: src/tools/dvdomatic.cc:167 +#: src/tools/dvdomatic.cc:166 msgid "&Properties..." msgstr "&Egenskaper" -#: src/tools/dvdomatic.cc:169 +#: src/tools/dvdomatic.cc:168 msgid "&Quit" msgstr "&Avsluta" -#: src/tools/dvdomatic.cc:165 +#: src/tools/dvdomatic.cc:164 msgid "&Save" msgstr "&Spara" -#: src/tools/dvdomatic.cc:176 +#: src/tools/dvdomatic.cc:175 msgid "&Send DCP to TMS" msgstr "&Skicka DCP till TMS" -#: src/tools/dvdomatic.cc:419 +#: src/tools/dvdomatic.cc:426 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:182 +#: src/tools/dvdomatic.cc:181 msgid "About" msgstr "Om" -#: src/tools/dvdomatic.cc:538 +#: src/tools/dvdomatic.cc:502 msgid "Could not load film %1 (%2)" msgstr "Kunde inte öppna filmen %1 (%2)" -#: src/tools/dvdomatic.cc:341 +#: src/tools/dvdomatic.cc:348 #, c-format msgid "Could not open film at %s (%s)" msgstr "Kunde inte öppna filmen vid %s (%s)" -#: src/tools/dvdomatic.cc:289 src/tools/dvdomatic.cc:412 -#: src/tools/dvdomatic.cc:542 +#: src/tools/dvdomatic.cc:288 src/tools/dvdomatic.cc:419 +#: src/tools/dvdomatic.cc:506 msgid "DVD-o-matic" msgstr "DVD-o-matic" -#: src/tools/dvdomatic.cc:77 +#: src/tools/dvdomatic.cc:76 msgid "Film changed" msgstr "Film ändrad" -#: src/tools/dvdomatic.cc:418 +#: src/tools/dvdomatic.cc:425 msgid "Free, open-source DCP generation from almost anything." msgstr "" "Fri, öppen-källkodsprogramvara för DCP-generering från nästan vad som helst." -#: src/tools/dvdomatic.cc:162 +#: src/tools/dvdomatic.cc:161 msgid "New..." msgstr "Ny..." -#: src/tools/dvdomatic.cc:177 +#: src/tools/dvdomatic.cc:176 msgid "S&how DCP" msgstr "&Visa DCP" -#: src/tools/dvdomatic.cc:76 +#: src/tools/dvdomatic.cc:75 #, fuzzy, c-format msgid "Save changes to film \"%s\" before closing?" msgstr "Spara ändringarna till filmen \"%1\" före avslut?" -#: src/tools/dvdomatic.cc:321 +#: src/tools/dvdomatic.cc:328 msgid "Select film to open" msgstr "Välj film att öppna" -#: src/tools/dvdomatic.cc:305 -msgid "The directory %1 already exists." -msgstr "Katalogen %1 finns redan." +#: src/tools/dvdomatic.cc:307 +msgid "" +"The directory %1 already exists and is not empty. Are you sure you want to " +"use it?" +msgstr "" -#: src/tools/dvdomatic.cc:326 +#: src/tools/dvdomatic.cc:333 msgid "" "You did not select a folder. Make sure that you select a folder before " "clicking Open." msgstr "" "Du har inte valt en folder. Se till att välja en folder innan du klickar på " "Öppna." + +#~ msgid "The directory %1 already exists." +#~ msgstr "Katalogen %1 finns redan." diff --git a/src/tools/wscript b/src/tools/wscript index 9f0f52152..f36f0abef 100644 --- a/src/tools/wscript +++ b/src/tools/wscript @@ -13,7 +13,7 @@ def build(bld): obj.target = t if not bld.env.DISABLE_GUI: - for t in ['dvdomatic', 'servomatic_gui']: + for t in ['dvdomatic', 'dvdomatic_batch', 'servomatic_gui']: obj = bld(features = 'cxx cxxprogram') obj.uselib = 'DCP OPENJPEG AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC' obj.includes = ['..'] diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc index 39650d157..d12b5516f 100644 --- a/src/wx/audio_dialog.cc +++ b/src/wx/audio_dialog.cc @@ -29,7 +29,7 @@ using boost::bind; using boost::optional; AudioDialog::AudioDialog (wxWindow* parent) - : wxDialog (parent, wxID_ANY, _("Audio"), wxDefaultPosition, wxSize (640, 512), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) + : wxDialog (parent, wxID_ANY, _("Audio"), wxDefaultPosition, wxSize (640, 512), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxFULL_REPAINT_ON_RESIZE) , _plot (0) { wxBoxSizer* sizer = new wxBoxSizer (wxHORIZONTAL); diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index c32b03ec0..98657b666 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -18,18 +18,20 @@ */ /** @file src/config_dialog.cc - * @brief A dialogue to edit DVD-o-matic configuration. + * @brief A dialogue to edit DCP-o-matic configuration. */ #include <iostream> #include <boost/lexical_cast.hpp> #include <boost/filesystem.hpp> #include <wx/stdpaths.h> +#include <wx/notebook.h> #include "lib/config.h" #include "lib/server.h" #include "lib/format.h" #include "lib/scaler.h" #include "lib/filter.h" +#include "lib/dcp_content_type.h" #include "config_dialog.h" #include "wx_util.h" #include "filter_dialog.h" @@ -41,14 +43,50 @@ using namespace std; using boost::bind; ConfigDialog::ConfigDialog (wxWindow* parent) - : wxDialog (parent, wxID_ANY, _("DVD-o-matic Preferences"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) + : wxDialog (parent, wxID_ANY, _("DCP-o-matic Preferences"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + _notebook = new wxNotebook (this, wxID_ANY); + s->Add (_notebook, 1); + + make_misc_panel (); + _notebook->AddPage (_misc_panel, _("Miscellaneous"), true); + make_servers_panel (); + _notebook->AddPage (_servers_panel, _("Encoding servers"), false); + make_metadata_panel (); + _notebook->AddPage (_metadata_panel, _("Metadata"), false); + make_tms_panel (); + _notebook->AddPage (_tms_panel, _("TMS"), false); + make_ab_panel (); + _notebook->AddPage (_ab_panel, _("A/B mode"), false); + + wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); + overall_sizer->Add (s, 1, wxEXPAND | wxALL, 6); + + wxSizer* buttons = CreateSeparatedButtonSizer (wxOK); + if (buttons) { + overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); + } + + SetSizer (overall_sizer); + overall_sizer->Layout (); + overall_sizer->SetSizeHints (this); +} + +void +ConfigDialog::make_misc_panel () +{ + _misc_panel = new wxPanel (_notebook); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + _misc_panel->SetSizer (s); + wxFlexGridSizer* table = new wxFlexGridSizer (3, 6, 6); table->AddGrowableCol (1, 1); + s->Add (table, 1, wxALL | wxEXPAND, 8); - _set_language = new wxCheckBox (this, wxID_ANY, _("Set language")); + _set_language = new wxCheckBox (_misc_panel, wxID_ANY, _("Set language")); table->Add (_set_language, 1, wxEXPAND); - _language = new wxChoice (this, wxID_ANY); + _language = new wxChoice (_misc_panel, wxID_ANY); _language->Append (wxT ("English")); _language->Append (wxT ("Français")); _language->Append (wxT ("Italiano")); @@ -57,98 +95,43 @@ ConfigDialog::ConfigDialog (wxWindow* parent) table->Add (_language, 1, wxEXPAND); table->AddSpacer (0); - table->AddSpacer (0); - wxStaticText* restart = add_label_to_sizer (table, this, _("(restart DVD-o-matic to see language changes)")); + wxStaticText* restart = add_label_to_sizer (table, _misc_panel, _("(restart DCP-o-matic to see language changes)")); wxFont font = restart->GetFont(); font.SetStyle (wxFONTSTYLE_ITALIC); font.SetPointSize (font.GetPointSize() - 1); restart->SetFont (font); table->AddSpacer (0); - - add_label_to_sizer (table, this, _("TMS IP address")); - _tms_ip = new wxTextCtrl (this, wxID_ANY); - table->Add (_tms_ip, 1, wxEXPAND); - table->AddSpacer (0); - - add_label_to_sizer (table, this, _("TMS target path")); - _tms_path = new wxTextCtrl (this, wxID_ANY); - table->Add (_tms_path, 1, wxEXPAND); table->AddSpacer (0); - add_label_to_sizer (table, this, _("TMS user name")); - _tms_user = new wxTextCtrl (this, wxID_ANY); - table->Add (_tms_user, 1, wxEXPAND); - table->AddSpacer (0); - - add_label_to_sizer (table, this, _("TMS password")); - _tms_password = new wxTextCtrl (this, wxID_ANY); - table->Add (_tms_password, 1, wxEXPAND); - table->AddSpacer (0); - - add_label_to_sizer (table, this, _("Threads to use for encoding on this host")); - _num_local_encoding_threads = new wxSpinCtrl (this); + add_label_to_sizer (table, _misc_panel, _("Threads to use for encoding on this host")); + _num_local_encoding_threads = new wxSpinCtrl (_misc_panel); table->Add (_num_local_encoding_threads, 1, wxEXPAND); table->AddSpacer (0); - add_label_to_sizer (table, this, _("Default directory for new films")); + add_label_to_sizer (table, _misc_panel, _("Default directory for new films")); #ifdef __WXMSW__ - _default_directory = new DirPickerCtrl (this); + _default_directory = new DirPickerCtrl (_misc_panel); #else - _default_directory = new wxDirPickerCtrl (this, wxDD_DIR_MUST_EXIST); + _default_directory = new wxDirPickerCtrl (_misc_panel, wxDD_DIR_MUST_EXIST); #endif table->Add (_default_directory, 1, wxEXPAND); table->AddSpacer (0); - add_label_to_sizer (table, this, _("Default DCI name details")); - _default_dci_metadata_button = new wxButton (this, wxID_ANY, _("Edit...")); + add_label_to_sizer (table, _misc_panel, _("Default DCI name details")); + _default_dci_metadata_button = new wxButton (_misc_panel, wxID_ANY, _("Edit...")); table->Add (_default_dci_metadata_button); table->AddSpacer (1); - add_label_to_sizer (table, this, _("Reference scaler for A/B")); - _reference_scaler = new wxChoice (this, wxID_ANY); - vector<Scaler const *> const sc = Scaler::all (); - for (vector<Scaler const *>::const_iterator i = sc.begin(); i != sc.end(); ++i) { - _reference_scaler->Append (std_to_wx ((*i)->name ())); - } - - table->Add (_reference_scaler, 1, wxEXPAND); - table->AddSpacer (0); - - { - add_label_to_sizer (table, this, _("Reference filters for A/B")); - wxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _reference_filters = new wxStaticText (this, wxID_ANY, wxT ("")); - s->Add (_reference_filters, 1, wxEXPAND); - _reference_filters_button = new wxButton (this, wxID_ANY, _("Edit...")); - s->Add (_reference_filters_button, 0); - table->Add (s, 1, wxEXPAND); - table->AddSpacer (0); - } - - add_label_to_sizer (table, this, _("Encoding Servers")); - _servers = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxSize (220, 100), wxLC_REPORT | wxLC_SINGLE_SEL); - wxListItem ip; - ip.SetId (0); - ip.SetText (_("IP address")); - ip.SetWidth (120); - _servers->InsertColumn (0, ip); - ip.SetId (1); - ip.SetText (_("Threads")); - ip.SetWidth (80); - _servers->InsertColumn (1, ip); - table->Add (_servers, 1, wxEXPAND | wxALL); + add_label_to_sizer (table, _misc_panel, _("Default format")); + _default_format = new wxChoice (_misc_panel, wxID_ANY); + table->Add (_default_format); + table->AddSpacer (1); - { - wxSizer* s = new wxBoxSizer (wxVERTICAL); - _add_server = new wxButton (this, wxID_ANY, _("Add")); - s->Add (_add_server); - _edit_server = new wxButton (this, wxID_ANY, _("Edit")); - s->Add (_edit_server); - _remove_server = new wxButton (this, wxID_ANY, _("Remove")); - s->Add (_remove_server); - table->Add (s, 0); - } - + add_label_to_sizer (table, _misc_panel, _("Default content type")); + _default_dcp_content_type = new wxChoice (_misc_panel, wxID_ANY); + table->Add (_default_dcp_content_type); + table->AddSpacer (1); + Config* config = Config::instance (); _set_language->SetValue (config->language ()); @@ -169,6 +152,70 @@ ConfigDialog::ConfigDialog (wxWindow* parent) _set_language->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (ConfigDialog::set_language_changed), 0, this); _language->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (ConfigDialog::language_changed), 0, this); + + _num_local_encoding_threads->SetRange (1, 128); + _num_local_encoding_threads->SetValue (config->num_local_encoding_threads ()); + _num_local_encoding_threads->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (ConfigDialog::num_local_encoding_threads_changed), 0, this); + + _default_directory->SetPath (std_to_wx (config->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir())))); + _default_directory->Connect (wxID_ANY, wxEVT_COMMAND_DIRPICKER_CHANGED, wxCommandEventHandler (ConfigDialog::default_directory_changed), 0, this); + + _default_dci_metadata_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (ConfigDialog::edit_default_dci_metadata_clicked), 0, this); + + vector<Format const *> fmt = Format::all (); + int n = 0; + for (vector<Format const *>::iterator i = fmt.begin(); i != fmt.end(); ++i) { + _default_format->Append (std_to_wx ((*i)->name ())); + if (*i == config->default_format ()) { + _default_format->SetSelection (n); + } + ++n; + } + + _default_format->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (ConfigDialog::default_format_changed), 0, this); + + vector<DCPContentType const *> const ct = DCPContentType::all (); + n = 0; + for (vector<DCPContentType const *>::const_iterator i = ct.begin(); i != ct.end(); ++i) { + _default_dcp_content_type->Append (std_to_wx ((*i)->pretty_name ())); + if (*i == config->default_dcp_content_type ()) { + _default_dcp_content_type->SetSelection (n); + } + ++n; + } + + _default_dcp_content_type->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (ConfigDialog::default_dcp_content_type_changed), 0, this); +} + +void +ConfigDialog::make_tms_panel () +{ + _tms_panel = new wxPanel (_notebook); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + _tms_panel->SetSizer (s); + + wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6); + table->AddGrowableCol (1, 1); + s->Add (table, 1, wxALL | wxEXPAND, 8); + + add_label_to_sizer (table, _tms_panel, _("IP address")); + _tms_ip = new wxTextCtrl (_tms_panel, wxID_ANY); + table->Add (_tms_ip, 1, wxEXPAND); + + add_label_to_sizer (table, _tms_panel, _("Target path")); + _tms_path = new wxTextCtrl (_tms_panel, wxID_ANY); + table->Add (_tms_path, 1, wxEXPAND); + + add_label_to_sizer (table, _tms_panel, _("User name")); + _tms_user = new wxTextCtrl (_tms_panel, wxID_ANY); + table->Add (_tms_user, 1, wxEXPAND); + + add_label_to_sizer (table, _tms_panel, _("Password")); + _tms_password = new wxTextCtrl (_tms_panel, wxID_ANY); + table->Add (_tms_password, 1, wxEXPAND); + + Config* config = Config::instance (); + _tms_ip->SetValue (std_to_wx (config->tms_ip ())); _tms_ip->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ConfigDialog::tms_ip_changed), 0, this); _tms_path->SetValue (std_to_wx (config->tms_path ())); @@ -177,22 +224,112 @@ ConfigDialog::ConfigDialog (wxWindow* parent) _tms_user->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ConfigDialog::tms_user_changed), 0, this); _tms_password->SetValue (std_to_wx (config->tms_password ())); _tms_password->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ConfigDialog::tms_password_changed), 0, this); +} - _num_local_encoding_threads->SetRange (1, 128); - _num_local_encoding_threads->SetValue (config->num_local_encoding_threads ()); - _num_local_encoding_threads->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (ConfigDialog::num_local_encoding_threads_changed), 0, this); +void +ConfigDialog::make_metadata_panel () +{ + _metadata_panel = new wxPanel (_notebook); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + _metadata_panel->SetSizer (s); - _default_directory->SetPath (std_to_wx (config->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir())))); - _default_directory->Connect (wxID_ANY, wxEVT_COMMAND_DIRPICKER_CHANGED, wxCommandEventHandler (ConfigDialog::default_directory_changed), 0, this); + wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6); + table->AddGrowableCol (1, 1); + s->Add (table, 1, wxALL | wxEXPAND, 8); - _default_dci_metadata_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (ConfigDialog::edit_default_dci_metadata_clicked), 0, this); + add_label_to_sizer (table, _metadata_panel, _("Issuer")); + _issuer = new wxTextCtrl (_metadata_panel, wxID_ANY); + table->Add (_issuer, 1, wxEXPAND); + add_label_to_sizer (table, _metadata_panel, _("Creator")); + _creator = new wxTextCtrl (_metadata_panel, wxID_ANY); + table->Add (_creator, 1, wxEXPAND); + + Config* config = Config::instance (); + + _issuer->SetValue (std_to_wx (config->dcp_metadata().issuer)); + _issuer->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ConfigDialog::issuer_changed), 0, this); + _creator->SetValue (std_to_wx (config->dcp_metadata().creator)); + _creator->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ConfigDialog::creator_changed), 0, this); +} + +void +ConfigDialog::make_ab_panel () +{ + _ab_panel = new wxPanel (_notebook); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + _ab_panel->SetSizer (s); + + wxFlexGridSizer* table = new wxFlexGridSizer (3, 6, 6); + table->AddGrowableCol (1, 1); + s->Add (table, 1, wxALL, 8); + + add_label_to_sizer (table, _ab_panel, _("Reference scaler")); + _reference_scaler = new wxChoice (_ab_panel, wxID_ANY); + vector<Scaler const *> const sc = Scaler::all (); + for (vector<Scaler const *>::const_iterator i = sc.begin(); i != sc.end(); ++i) { + _reference_scaler->Append (std_to_wx ((*i)->name ())); + } + + table->Add (_reference_scaler, 1, wxEXPAND); + table->AddSpacer (0); + + { + add_label_to_sizer (table, _ab_panel, _("Reference filters")); + wxSizer* s = new wxBoxSizer (wxHORIZONTAL); + _reference_filters = new wxStaticText (_ab_panel, wxID_ANY, wxT ("")); + s->Add (_reference_filters, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, 6); + _reference_filters_button = new wxButton (_ab_panel, wxID_ANY, _("Edit...")); + s->Add (_reference_filters_button, 0); + table->Add (s, 1, wxEXPAND); + table->AddSpacer (0); + } + + Config* config = Config::instance (); + _reference_scaler->SetSelection (Scaler::as_index (config->reference_scaler ())); _reference_scaler->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (ConfigDialog::reference_scaler_changed), 0, this); pair<string, string> p = Filter::ffmpeg_strings (config->reference_filters ()); _reference_filters->SetLabel (std_to_wx (p.first) + N_(" ") + std_to_wx (p.second)); _reference_filters_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (ConfigDialog::edit_reference_filters_clicked), 0, this); +} + +void +ConfigDialog::make_servers_panel () +{ + _servers_panel = new wxPanel (_notebook); + wxBoxSizer* s = new wxBoxSizer (wxVERTICAL); + _servers_panel->SetSizer (s); + + wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6); + table->AddGrowableCol (0, 1); + s->Add (table, 1, wxALL | wxEXPAND, 8); + + Config* config = Config::instance (); + + _servers = new wxListCtrl (_servers_panel, wxID_ANY, wxDefaultPosition, wxSize (220, 100), wxLC_REPORT | wxLC_SINGLE_SEL); + wxListItem ip; + ip.SetId (0); + ip.SetText (_("IP address")); + ip.SetWidth (120); + _servers->InsertColumn (0, ip); + ip.SetId (1); + ip.SetText (_("Threads")); + ip.SetWidth (80); + _servers->InsertColumn (1, ip); + table->Add (_servers, 1, wxEXPAND | wxALL); + + { + wxSizer* s = new wxBoxSizer (wxVERTICAL); + _add_server = new wxButton (_servers_panel, wxID_ANY, _("Add")); + s->Add (_add_server); + _edit_server = new wxButton (_servers_panel, wxID_ANY, _("Edit")); + s->Add (_edit_server); + _remove_server = new wxButton (_servers_panel, wxID_ANY, _("Remove")); + s->Add (_remove_server); + table->Add (s, 0); + } vector<ServerDescription*> servers = config->servers (); for (vector<ServerDescription*>::iterator i = servers.begin(); i != servers.end(); ++i) { @@ -207,18 +344,6 @@ ConfigDialog::ConfigDialog (wxWindow* parent) _servers->Connect (wxID_ANY, wxEVT_COMMAND_LIST_ITEM_DESELECTED, wxListEventHandler (ConfigDialog::server_selection_changed), 0, this); wxListEvent ev; server_selection_changed (ev); - - wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); - overall_sizer->Add (table, 1, wxEXPAND | wxALL, 6); - - wxSizer* buttons = CreateSeparatedButtonSizer (wxOK); - if (buttons) { - overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); - } - - SetSizer (overall_sizer); - overall_sizer->Layout (); - overall_sizer->SetSizeHints (this); } void @@ -400,3 +525,33 @@ ConfigDialog::setup_language_sensitivity () { _language->Enable (_set_language->GetValue ()); } + +void +ConfigDialog::default_format_changed (wxCommandEvent &) +{ + vector<Format const *> fmt = Format::all (); + Config::instance()->set_default_format (fmt[_default_format->GetSelection()]); +} + +void +ConfigDialog::default_dcp_content_type_changed (wxCommandEvent &) +{ + vector<DCPContentType const *> ct = DCPContentType::all (); + Config::instance()->set_default_dcp_content_type (ct[_default_dcp_content_type->GetSelection()]); +} + +void +ConfigDialog::issuer_changed (wxCommandEvent &) +{ + libdcp::XMLMetadata m = Config::instance()->dcp_metadata (); + m.issuer = wx_to_std (_issuer->GetValue ()); + Config::instance()->set_dcp_metadata (m); +} + +void +ConfigDialog::creator_changed (wxCommandEvent &) +{ + libdcp::XMLMetadata m = Config::instance()->dcp_metadata (); + m.creator = wx_to_std (_creator->GetValue ()); + Config::instance()->set_dcp_metadata (m); +} diff --git a/src/wx/config_dialog.h b/src/wx/config_dialog.h index f6f3b3707..526480912 100644 --- a/src/wx/config_dialog.h +++ b/src/wx/config_dialog.h @@ -18,7 +18,7 @@ */ /** @file src/config_dialog.h - * @brief A dialogue to edit DVD-o-matic configuration. + * @brief A dialogue to edit DCP-o-matic configuration. */ #include <wx/wx.h> @@ -27,11 +27,12 @@ #include <wx/filepicker.h> class DirPickerCtrl; +class wxNotebook; class ServerDescription; /** @class ConfigDialog - * @brief A dialogue to edit DVD-o-matic configuration. + * @brief A dialogue to edit DCP-o-matic configuration. */ class ConfigDialog : public wxDialog { @@ -55,12 +56,30 @@ private: void edit_server_clicked (wxCommandEvent &); void remove_server_clicked (wxCommandEvent &); void server_selection_changed (wxListEvent &); + void default_format_changed (wxCommandEvent &); + void default_dcp_content_type_changed (wxCommandEvent &); + void issuer_changed (wxCommandEvent &); + void creator_changed (wxCommandEvent &); void add_server_to_control (ServerDescription *); void setup_language_sensitivity (); + void make_misc_panel (); + void make_tms_panel (); + void make_metadata_panel (); + void make_ab_panel (); + void make_servers_panel (); + + wxNotebook* _notebook; + wxPanel* _misc_panel; + wxPanel* _tms_panel; + wxPanel* _ab_panel; + wxPanel* _servers_panel; + wxPanel* _metadata_panel; wxCheckBox* _set_language; wxChoice* _language; + wxChoice* _default_format; + wxChoice* _default_dcp_content_type; wxTextCtrl* _tms_ip; wxTextCtrl* _tms_path; wxTextCtrl* _tms_user; @@ -79,5 +98,7 @@ private: wxButton* _add_server; wxButton* _edit_server; wxButton* _remove_server; + wxTextCtrl* _issuer; + wxTextCtrl* _creator; }; diff --git a/src/wx/job_manager_view.cc b/src/wx/job_manager_view.cc index f7d2315cc..5cd9f2e15 100644 --- a/src/wx/job_manager_view.cc +++ b/src/wx/job_manager_view.cc @@ -34,15 +34,21 @@ using std::map; using boost::shared_ptr; /** Must be called in the GUI thread */ -JobManagerView::JobManagerView (wxWindow* parent) +JobManagerView::JobManagerView (wxWindow* parent, Buttons buttons) : wxScrolledWindow (parent) + , _buttons (buttons) { _panel = new wxPanel (this); wxSizer* sizer = new wxBoxSizer (wxVERTICAL); sizer->Add (_panel, 1, wxEXPAND); SetSizer (sizer); + + int N = 5; + if (buttons & PAUSE) { + ++N; + } - _table = new wxFlexGridSizer (5, 6, 6); + _table = new wxFlexGridSizer (N, 6, 6); _table->AddGrowableCol (1, 1); _panel->SetSizer (_table); @@ -78,21 +84,33 @@ JobManagerView::update () _table->Insert (index, m, 0, wxALIGN_CENTER_VERTICAL | wxALL, 6); JobRecord r; + int n = 1; r.finalised = false; r.gauge = new wxGauge (_panel, wxID_ANY, 100); - _table->Insert (index + 1, r.gauge, 1, wxEXPAND | wxLEFT | wxRIGHT); + _table->Insert (index + n, r.gauge, 1, wxEXPAND | wxLEFT | wxRIGHT); + ++n; r.message = new wxStaticText (_panel, wxID_ANY, std_to_wx ("")); - _table->Insert (index + 2, r.message, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6); + _table->Insert (index + n, r.message, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6); + ++n; r.cancel = new wxButton (_panel, wxID_ANY, _("Cancel")); r.cancel->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (JobManagerView::cancel_clicked), 0, this); - _table->Insert (index + 3, r.cancel, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6); - + _table->Insert (index + n, r.cancel, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6); + ++n; + + if (_buttons & PAUSE) { + r.pause = new wxButton (_panel, wxID_ANY, _("Pause")); + r.pause->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (JobManagerView::pause_clicked), 0, this); + _table->Insert (index + n, r.pause, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6); + ++n; + } + r.details = new wxButton (_panel, wxID_ANY, _("Details...")); r.details->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (JobManagerView::details_clicked), 0, this); r.details->Enable (false); - _table->Insert (index + 4, r.details, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6); + _table->Insert (index + n, r.details, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6); + ++n; _job_records[*i] = r; } @@ -124,6 +142,9 @@ JobManagerView::update () } index += 5; + if (_buttons & PAUSE) { + ++index; + } } _table->Layout (); @@ -155,3 +176,21 @@ JobManagerView::cancel_clicked (wxCommandEvent& ev) } } } + +void +JobManagerView::pause_clicked (wxCommandEvent& ev) +{ + wxObject* o = ev.GetEventObject (); + for (map<boost::shared_ptr<Job>, JobRecord>::iterator i = _job_records.begin(); i != _job_records.end(); ++i) { + if (i->second.pause == o) { + if (i->first->paused()) { + i->first->resume (); + i->second.pause->SetLabel (_("Pause")); + } else { + i->first->pause (); + i->second.pause->SetLabel (_("Resume")); + } + } + } +} + diff --git a/src/wx/job_manager_view.h b/src/wx/job_manager_view.h index 72ac85c02..fc29eadb4 100644 --- a/src/wx/job_manager_view.h +++ b/src/wx/job_manager_view.h @@ -33,13 +33,18 @@ class Job; class JobManagerView : public wxScrolledWindow { public: - JobManagerView (wxWindow *); + enum Buttons { + PAUSE = 0x1, + }; + + JobManagerView (wxWindow *, Buttons); void update (); private: void periodic (wxTimerEvent &); void cancel_clicked (wxCommandEvent &); + void pause_clicked (wxCommandEvent &); void details_clicked (wxCommandEvent &); boost::shared_ptr<wxTimer> _timer; @@ -49,9 +54,11 @@ private: wxGauge* gauge; wxStaticText* message; wxButton* cancel; + wxButton* pause; wxButton* details; bool finalised; }; std::map<boost::shared_ptr<Job>, JobRecord> _job_records; + Buttons _buttons; }; diff --git a/src/wx/po/es_ES.po b/src/wx/po/es_ES.po index 56c0856bd..efc8436c5 100644 --- a/src/wx/po/es_ES.po +++ b/src/wx/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: libdvdomatic-wx\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-04-02 19:08-0500\n" "Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n" "Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n" @@ -21,8 +21,8 @@ msgstr "" msgid "%" msgstr "%" -#: src/wx/config_dialog.cc:61 -msgid "(restart DVD-o-matic to see language changes)" +#: src/wx/config_dialog.cc:98 +msgid "(restart DCP-o-matic to see language changes)" msgstr "" #: src/wx/film_editor.cc:1276 @@ -33,7 +33,11 @@ msgstr "1 canal" msgid "A/B" msgstr "A/B" -#: src/wx/config_dialog.cc:143 +#: src/wx/config_dialog.cc:61 +msgid "A/B mode" +msgstr "" + +#: src/wx/config_dialog.cc:325 msgid "Add" msgstr "Añadir" @@ -79,7 +83,7 @@ msgstr "pero tengo que usar el fader a" msgid "Calculate..." msgstr "Calcular..." -#: src/wx/job_manager_view.cc:88 +#: src/wx/job_manager_view.cc:97 msgid "Cancel" msgstr "" @@ -123,6 +127,11 @@ msgstr "No se pudo establecer el contenido: %s" msgid "Create in folder" msgstr "Crear en carpeta" +#: src/wx/config_dialog.cc:244 +#, fuzzy +msgid "Creator" +msgstr "Crear en carpeta" + #: src/wx/film_editor.cc:1371 #, c-format msgid "Cropped to %dx%d (%.2f:1)\n" @@ -140,28 +149,38 @@ msgstr "Velocidad DCP" msgid "DCP Name" msgstr "Nombre DCP" -#: src/wx/wx_util.cc:61 +#: src/wx/config_dialog.cc:46 +#, fuzzy +msgid "DCP-o-matic Preferences" +msgstr "Preferencias DVD-o-matic" + +#: src/wx/wx_util.cc:63 src/wx/wx_util.cc:71 msgid "DVD-o-matic" msgstr "DVD-o-matic" -#: src/wx/config_dialog.cc:44 -msgid "DVD-o-matic Preferences" -msgstr "Preferencias DVD-o-matic" - #: src/wx/audio_dialog.cc:101 #, fuzzy, c-format msgid "DVD-o-matic audio - %s" msgstr "Audio DVD-o-matic - %1" -#: src/wx/config_dialog.cc:102 +#: src/wx/config_dialog.cc:120 msgid "Default DCI name details" msgstr "Detalles por defecto del nombre DCI" -#: src/wx/config_dialog.cc:93 +#: src/wx/config_dialog.cc:130 +#, fuzzy +msgid "Default content type" +msgstr "Tipo de contenido" + +#: src/wx/config_dialog.cc:111 msgid "Default directory for new films" msgstr "Carpeta por defecto para nuevas películas" -#: src/wx/film_editor.cc:116 src/wx/job_manager_view.cc:92 +#: src/wx/config_dialog.cc:125 +msgid "Default format" +msgstr "" + +#: src/wx/film_editor.cc:116 src/wx/job_manager_view.cc:109 msgid "Details..." msgstr "Detalles..." @@ -173,17 +192,18 @@ msgstr "Espacio requerido en disco" msgid "Duration" msgstr "Duración" -#: src/wx/config_dialog.cc:145 +#: src/wx/config_dialog.cc:327 msgid "Edit" msgstr "Editar" -#: src/wx/config_dialog.cc:103 src/wx/config_dialog.cc:122 +#: src/wx/config_dialog.cc:121 src/wx/config_dialog.cc:282 #: src/wx/film_editor.cc:312 msgid "Edit..." msgstr "Editar..." -#: src/wx/config_dialog.cc:128 -msgid "Encoding Servers" +#: src/wx/config_dialog.cc:55 +#, fuzzy +msgid "Encoding servers" msgstr "Servidores de codificación" #: src/wx/film_editor.cc:171 @@ -242,10 +262,14 @@ msgstr "Hz" msgid "I want to play this back at fader" msgstr "Quiero reproducir con el fader a" -#: src/wx/config_dialog.cc:132 +#: src/wx/config_dialog.cc:201 src/wx/config_dialog.cc:314 msgid "IP address" msgstr "Dirección IP" +#: src/wx/config_dialog.cc:240 +msgid "Issuer" +msgstr "" + #: src/wx/film_editor.cc:339 msgid "JPEG2000 bandwidth" msgstr "Ancho de banda JPEG2000" @@ -262,6 +286,14 @@ msgstr "Longitud" msgid "MBps" msgstr "MBps" +#: src/wx/config_dialog.cc:57 +msgid "Metadata" +msgstr "" + +#: src/wx/config_dialog.cc:53 +msgid "Miscellaneous" +msgstr "" + #: src/wx/dir_picker_ctrl.cc:52 msgid "My Documents" msgstr "Mis documentos" @@ -296,6 +328,15 @@ msgstr "Tipo de paquete (ej. OV)" msgid "Padded with black to %dx%d (%.2f:1)\n" msgstr "" +#: src/wx/config_dialog.cc:213 +#, fuzzy +msgid "Password" +msgstr "Clave del TMS" + +#: src/wx/job_manager_view.cc:103 src/wx/job_manager_view.cc:188 +msgid "Pause" +msgstr "" + #: src/wx/audio_dialog.cc:60 msgid "Peak" msgstr "Pico" @@ -316,23 +357,29 @@ msgstr "RMS" msgid "Rating (e.g. 15)" msgstr "Clasificación (ej. 16)" -#: src/wx/config_dialog.cc:118 -msgid "Reference filters for A/B" +#: src/wx/config_dialog.cc:278 +#, fuzzy +msgid "Reference filters" msgstr "Filtros de referencia para A/B" -#: src/wx/config_dialog.cc:107 -msgid "Reference scaler for A/B" +#: src/wx/config_dialog.cc:267 +#, fuzzy +msgid "Reference scaler" msgstr "Escalador de referencia para A/B" -#: src/wx/config_dialog.cc:147 +#: src/wx/config_dialog.cc:329 msgid "Remove" msgstr "Quitar" +#: src/wx/job_manager_view.cc:191 +msgid "Resume" +msgstr "" + #: src/wx/film_editor.cc:282 msgid "Right crop" msgstr "Recorte derecha" -#: src/wx/job_manager_view.cc:108 +#: src/wx/job_manager_view.cc:126 msgid "Running" msgstr "Ejecutando" @@ -357,7 +404,7 @@ msgstr "Seleccionar fichero de contenido" msgid "Server" msgstr "Servidor" -#: src/wx/config_dialog.cc:49 +#: src/wx/config_dialog.cc:87 msgid "Set language" msgstr "" @@ -393,27 +440,21 @@ msgstr "Escala del subtítulo" msgid "Subtitles" msgstr "Subtítulos" -#: src/wx/config_dialog.cc:68 -msgid "TMS IP address" -msgstr "Dirección IP del TMS" - -#: src/wx/config_dialog.cc:83 -msgid "TMS password" -msgstr "Clave del TMS" +#: src/wx/config_dialog.cc:59 +#, fuzzy +msgid "TMS" +msgstr "RMS" -#: src/wx/config_dialog.cc:73 -msgid "TMS target path" +#: src/wx/config_dialog.cc:205 +#, fuzzy +msgid "Target path" msgstr "Ruta en el TMS" -#: src/wx/config_dialog.cc:78 -msgid "TMS user name" -msgstr "Usuario del TMS" - #: src/wx/dci_metadata_dialog.cc:41 msgid "Territory (e.g. UK)" msgstr "Territorio (ej. ES)" -#: src/wx/config_dialog.cc:136 +#: src/wx/config_dialog.cc:318 msgid "Threads" msgstr "Hilos" @@ -421,7 +462,7 @@ msgstr "Hilos" msgid "Threads to use" msgstr "Hilos a utilizar" -#: src/wx/config_dialog.cc:88 +#: src/wx/config_dialog.cc:106 msgid "Threads to use for encoding on this host" msgstr "Hilos a utilizar para la codificación en esta máquina" @@ -466,6 +507,11 @@ msgstr "Usar el audio del contenido" msgid "Use external audio" msgstr "Usar audio externo" +#: src/wx/config_dialog.cc:209 +#, fuzzy +msgid "User name" +msgstr "Usar el nombre DCI" + #: src/wx/film_editor.cc:75 msgid "Video" msgstr "Vídeo" @@ -516,5 +562,11 @@ msgstr "s" msgid "unknown" msgstr "desconocido" +#~ msgid "TMS IP address" +#~ msgstr "Dirección IP del TMS" + +#~ msgid "TMS user name" +#~ msgstr "Usuario del TMS" + #~ msgid "Original Size" #~ msgstr "Tamaño original" diff --git a/src/wx/po/fr_FR.po b/src/wx/po/fr_FR.po index c7ef31f5a..ad138d45a 100644 --- a/src/wx/po/fr_FR.po +++ b/src/wx/po/fr_FR.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: DVD-o-matic FRENCH\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" -"PO-Revision-Date: 2013-03-20 00:34+0100\n" -"Last-Translator: FreeDCP.net <freedcp.net@gmail.com>\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" +"PO-Revision-Date: 2013-05-10 14:19+0100\n" +"Last-Translator: \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" @@ -20,9 +20,9 @@ msgstr "" msgid "%" msgstr "%" -#: src/wx/config_dialog.cc:61 -msgid "(restart DVD-o-matic to see language changes)" -msgstr "" +#: src/wx/config_dialog.cc:98 +msgid "(restart DCP-o-matic to see language changes)" +msgstr "(redémarrez DCP-o-matic pour voir les changements de langue)" #: src/wx/film_editor.cc:1276 msgid "1 channel" @@ -32,11 +32,16 @@ msgstr "1 canal" msgid "A/B" msgstr "A/B" -#: src/wx/config_dialog.cc:143 +#: src/wx/config_dialog.cc:61 +msgid "A/B mode" +msgstr "A/B mode" + +#: src/wx/config_dialog.cc:325 msgid "Add" msgstr "Ajouter" -#: src/wx/audio_dialog.cc:32 src/wx/film_editor.cc:77 +#: src/wx/audio_dialog.cc:32 +#: src/wx/film_editor.cc:77 msgid "Audio" msgstr "Audio" @@ -55,7 +60,7 @@ msgstr "Langue audio (ex. FR)" #: src/wx/film_editor.cc:824 #, c-format msgid "Audio will be resampled from %dHz to %dHz\n" -msgstr "" +msgstr "L'audio sera rééchantillonné de %dHz à %dHz\n" #: src/wx/job_wrapper.cc:38 #, c-format @@ -78,7 +83,7 @@ msgstr "Je souhaite utiliser ce volume" msgid "Calculate..." msgstr "Calcul..." -#: src/wx/job_manager_view.cc:88 +#: src/wx/job_manager_view.cc:97 msgid "Cancel" msgstr "Annuler" @@ -122,10 +127,14 @@ msgstr "Sélectionner du contenu impossible : %s" msgid "Create in folder" msgstr "Créer dans le dossier" +#: src/wx/config_dialog.cc:244 +msgid "Creator" +msgstr "Créateur" + #: src/wx/film_editor.cc:1371 #, c-format msgid "Cropped to %dx%d (%.2f:1)\n" -msgstr "" +msgstr "Découpe de %dx%d (%.2f:1)\n" #: src/wx/dci_metadata_dialog.cc:28 msgid "DCI name" @@ -139,28 +148,38 @@ msgstr "Cadence image du DCP" msgid "DCP Name" msgstr "Nom du DCP" -#: src/wx/wx_util.cc:61 +#: src/wx/config_dialog.cc:46 +msgid "DCP-o-matic Preferences" +msgstr "Préférences de DCP-o-matic" + +#: src/wx/wx_util.cc:63 +#: src/wx/wx_util.cc:71 msgid "DVD-o-matic" msgstr "DVD-o-matic" -#: src/wx/config_dialog.cc:44 -msgid "DVD-o-matic Preferences" -msgstr "Préférences DVD-o-matic" - #: src/wx/audio_dialog.cc:101 #, c-format msgid "DVD-o-matic audio - %s" msgstr "Son DVD-o-matic - %s" -#: src/wx/config_dialog.cc:102 +#: src/wx/config_dialog.cc:120 msgid "Default DCI name details" msgstr "Détails du nom DCI par défaut" -#: src/wx/config_dialog.cc:93 +#: src/wx/config_dialog.cc:130 +msgid "Default content type" +msgstr "Type de contenu par défaut" + +#: src/wx/config_dialog.cc:111 msgid "Default directory for new films" msgstr "Dossier par défaut des nouveaux films" -#: src/wx/film_editor.cc:116 src/wx/job_manager_view.cc:92 +#: src/wx/config_dialog.cc:125 +msgid "Default format" +msgstr "Format par défaut" + +#: src/wx/film_editor.cc:116 +#: src/wx/job_manager_view.cc:109 msgid "Details..." msgstr "Détails..." @@ -172,17 +191,19 @@ msgstr "Espace disque requis" msgid "Duration" msgstr "Durée" -#: src/wx/config_dialog.cc:145 +#: src/wx/config_dialog.cc:327 msgid "Edit" msgstr "Édition" -#: src/wx/config_dialog.cc:103 src/wx/config_dialog.cc:122 +#: src/wx/config_dialog.cc:121 +#: src/wx/config_dialog.cc:282 #: src/wx/film_editor.cc:312 msgid "Edit..." msgstr "Éditer..." -#: src/wx/config_dialog.cc:128 -msgid "Encoding Servers" +#: src/wx/config_dialog.cc:55 +#, fuzzy +msgid "Encoding servers" msgstr "Serveurs d'encodage" #: src/wx/film_editor.cc:171 @@ -205,7 +226,8 @@ msgstr "Propriétés du film" msgid "Film name" msgstr "Nom du Film" -#: src/wx/film_editor.cc:307 src/wx/filter_dialog.cc:32 +#: src/wx/film_editor.cc:307 +#: src/wx/filter_dialog.cc:32 msgid "Filters" msgstr "Filtres" @@ -241,10 +263,15 @@ msgstr "Hz" msgid "I want to play this back at fader" msgstr "Je veux le jouer à ce volume" -#: src/wx/config_dialog.cc:132 +#: src/wx/config_dialog.cc:201 +#: src/wx/config_dialog.cc:314 msgid "IP address" msgstr "Adresse IP" +#: src/wx/config_dialog.cc:240 +msgid "Issuer" +msgstr "Emetteur" + #: src/wx/film_editor.cc:339 msgid "JPEG2000 bandwidth" msgstr "Qualité JPEG2000" @@ -261,6 +288,14 @@ msgstr "Longueur / durée" msgid "MBps" msgstr "MBps" +#: src/wx/config_dialog.cc:57 +msgid "Metadata" +msgstr "Métadonnées" + +#: src/wx/config_dialog.cc:53 +msgid "Miscellaneous" +msgstr "Divers" + #: src/wx/dir_picker_ctrl.cc:52 msgid "My Documents" msgstr "Mes Documents" @@ -273,7 +308,8 @@ msgstr "Nom" msgid "New Film" msgstr "Nouveau Film" -#: src/wx/film_editor.cc:309 src/wx/film_editor.cc:671 +#: src/wx/film_editor.cc:309 +#: src/wx/film_editor.cc:671 msgid "None" msgstr "Aucun" @@ -284,7 +320,7 @@ msgstr "Cadence d'images originale" #: src/wx/film_editor.cc:1360 #, c-format msgid "Original video is %dx%d (%.2f:1)\n" -msgstr "" +msgstr "La vidéo originale est %dx%d (%.2f:1)\n" #: src/wx/dci_metadata_dialog.cc:57 msgid "Package Type (e.g. OV)" @@ -293,7 +329,16 @@ msgstr "Type de paquet (ex. OV)" #: src/wx/film_editor.cc:1392 #, c-format msgid "Padded with black to %dx%d (%.2f:1)\n" -msgstr "" +msgstr "Enveloppe noire de %dx%d (%.2f:1)\n" + +#: src/wx/config_dialog.cc:213 +msgid "Password" +msgstr "Mot de passe" + +#: src/wx/job_manager_view.cc:103 +#: src/wx/job_manager_view.cc:188 +msgid "Pause" +msgstr "Pause" #: src/wx/audio_dialog.cc:60 msgid "Peak" @@ -315,30 +360,34 @@ msgstr "RMS" msgid "Rating (e.g. 15)" msgstr "Rating (ex. 15)" -#: src/wx/config_dialog.cc:118 -msgid "Reference filters for A/B" -msgstr "Filtres de référence pour A/B" +#: src/wx/config_dialog.cc:278 +msgid "Reference filters" +msgstr "Filtres de référence" -#: src/wx/config_dialog.cc:107 -msgid "Reference scaler for A/B" -msgstr "Échelle de référence pour A/B" +#: src/wx/config_dialog.cc:267 +msgid "Reference scaler" +msgstr "Échelle de référence" -#: src/wx/config_dialog.cc:147 +#: src/wx/config_dialog.cc:329 msgid "Remove" msgstr "Supprimer" +#: src/wx/job_manager_view.cc:191 +msgid "Resume" +msgstr "Reprendre" + #: src/wx/film_editor.cc:282 msgid "Right crop" msgstr "Découpe droite" -#: src/wx/job_manager_view.cc:108 +#: src/wx/job_manager_view.cc:126 msgid "Running" msgstr "Progression" #: src/wx/film_editor.cc:1384 #, c-format msgid "Scaled to %dx%d (%.2f:1)\n" -msgstr "" +msgstr "Mis à l'échelle de %dx%d (%.2f:1)\n" #: src/wx/film_editor.cc:319 msgid "Scaler" @@ -356,9 +405,9 @@ msgstr "Sélectionner le fichier vidéo" msgid "Server" msgstr "Serveur" -#: src/wx/config_dialog.cc:49 +#: src/wx/config_dialog.cc:87 msgid "Set language" -msgstr "" +msgstr "Selectionnez la langue" #: src/wx/film_editor.cc:368 msgid "Show Audio..." @@ -392,27 +441,20 @@ msgstr "Taille du sous-titre" msgid "Subtitles" msgstr "Sous-titres" -#: src/wx/config_dialog.cc:68 -msgid "TMS IP address" -msgstr "Adresse IP du TMS" - -#: src/wx/config_dialog.cc:83 -msgid "TMS password" -msgstr "Mot de passe du TMS" - -#: src/wx/config_dialog.cc:73 -msgid "TMS target path" -msgstr "Chemin d'accès du TMS" +#: src/wx/config_dialog.cc:59 +#, fuzzy +msgid "TMS" +msgstr "RMS" -#: src/wx/config_dialog.cc:78 -msgid "TMS user name" -msgstr "Nom d'utilisateur du TMS" +#: src/wx/config_dialog.cc:205 +msgid "Target path" +msgstr "Chemin d'accès" #: src/wx/dci_metadata_dialog.cc:41 msgid "Territory (e.g. UK)" msgstr "Territoire (ex. FR)" -#: src/wx/config_dialog.cc:136 +#: src/wx/config_dialog.cc:318 msgid "Threads" msgstr "Processus" @@ -420,7 +462,7 @@ msgstr "Processus" msgid "Threads to use" msgstr "Nombre de processus à utiliser" -#: src/wx/config_dialog.cc:88 +#: src/wx/config_dialog.cc:106 msgid "Threads to use for encoding on this host" msgstr "Nombre de processus à utiliser sur cet hôte" @@ -464,6 +506,10 @@ msgstr "Utiliser le son intégré" msgid "Use external audio" msgstr "Utiliser une source audio externe" +#: src/wx/config_dialog.cc:209 +msgid "User name" +msgstr "Nom d'utilisateur" + #: src/wx/film_editor.cc:75 msgid "Video" msgstr "Vidéo" @@ -492,7 +538,8 @@ msgstr "encoder toutes les images mais lire seulement la sélection" msgid "encode only the subset" msgstr "encoder seulement la sélection" -#: src/wx/film_editor.cc:694 src/wx/film_editor.cc:697 +#: src/wx/film_editor.cc:694 +#: src/wx/film_editor.cc:697 msgid "frames" msgstr "images" @@ -503,16 +550,23 @@ msgstr "ms" #: src/wx/film_editor.cc:440 msgid "pixels" -msgstr "" +msgstr "pixels" #. / TRANSLATORS: `s' here is an abbreviation for seconds, the unit of time #: src/wx/film_editor.cc:197 msgid "s" msgstr "s" -#: src/wx/properties_dialog.cc:62 src/wx/properties_dialog.cc:63 +#: src/wx/properties_dialog.cc:62 +#: src/wx/properties_dialog.cc:63 msgid "unknown" msgstr "inconnu" +#~ msgid "TMS IP address" +#~ msgstr "Adresse IP du TMS" + +#~ msgid "TMS user name" +#~ msgstr "Nom d'utilisateur du TMS" + #~ msgid "Original Size" #~ msgstr "Taille Originale" diff --git a/src/wx/po/it_IT.po b/src/wx/po/it_IT.po index 2d4ee7fd7..37ee492fe 100644 --- a/src/wx/po/it_IT.po +++ b/src/wx/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: IT VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-04-28 10:27+0100\n" "Last-Translator: Maci <macibro@gmail.com>\n" "Language-Team: \n" @@ -21,8 +21,9 @@ msgstr "" msgid "%" msgstr "%" -#: src/wx/config_dialog.cc:61 -msgid "(restart DVD-o-matic to see language changes)" +#: src/wx/config_dialog.cc:98 +#, fuzzy +msgid "(restart DCP-o-matic to see language changes)" msgstr "(riavviare DVD-o-matic per vedere i cambiamenti di lingua)" #: src/wx/film_editor.cc:1276 @@ -33,7 +34,11 @@ msgstr "1 canale" msgid "A/B" msgstr "A/B" -#: src/wx/config_dialog.cc:143 +#: src/wx/config_dialog.cc:61 +msgid "A/B mode" +msgstr "" + +#: src/wx/config_dialog.cc:325 msgid "Add" msgstr "Aggiungi" @@ -79,7 +84,7 @@ msgstr "Ma dovrò riprodurre con il fader a" msgid "Calculate..." msgstr "Calcola..." -#: src/wx/job_manager_view.cc:88 +#: src/wx/job_manager_view.cc:97 msgid "Cancel" msgstr "Annulla" @@ -123,6 +128,11 @@ msgstr "Non posso regolare il contenuto: %s" msgid "Create in folder" msgstr "Crea nella cartella" +#: src/wx/config_dialog.cc:244 +#, fuzzy +msgid "Creator" +msgstr "Crea nella cartella" + #: src/wx/film_editor.cc:1371 #, c-format msgid "Cropped to %dx%d (%.2f:1)\n" @@ -140,28 +150,38 @@ msgstr "Frequenza fotogrammi del DCP" msgid "DCP Name" msgstr "Nome del DCP" -#: src/wx/wx_util.cc:61 +#: src/wx/config_dialog.cc:46 +#, fuzzy +msgid "DCP-o-matic Preferences" +msgstr "Preferenze DVD-o-matic" + +#: src/wx/wx_util.cc:63 src/wx/wx_util.cc:71 msgid "DVD-o-matic" msgstr "DVD-o-matic" -#: src/wx/config_dialog.cc:44 -msgid "DVD-o-matic Preferences" -msgstr "Preferenze DVD-o-matic" - #: src/wx/audio_dialog.cc:101 #, c-format msgid "DVD-o-matic audio - %s" msgstr "Audio DVD-o-matic - %s" -#: src/wx/config_dialog.cc:102 +#: src/wx/config_dialog.cc:120 msgid "Default DCI name details" msgstr "Dettagli del nome di default DCI" -#: src/wx/config_dialog.cc:93 +#: src/wx/config_dialog.cc:130 +#, fuzzy +msgid "Default content type" +msgstr "Tipo di contenuto" + +#: src/wx/config_dialog.cc:111 msgid "Default directory for new films" msgstr "Directory di default per i nuovi films" -#: src/wx/film_editor.cc:116 src/wx/job_manager_view.cc:92 +#: src/wx/config_dialog.cc:125 +msgid "Default format" +msgstr "" + +#: src/wx/film_editor.cc:116 src/wx/job_manager_view.cc:109 msgid "Details..." msgstr "Dettagli" @@ -173,17 +193,18 @@ msgstr "Spazio su disco rischiesto" msgid "Duration" msgstr "Durata" -#: src/wx/config_dialog.cc:145 +#: src/wx/config_dialog.cc:327 msgid "Edit" msgstr "Modifica" -#: src/wx/config_dialog.cc:103 src/wx/config_dialog.cc:122 +#: src/wx/config_dialog.cc:121 src/wx/config_dialog.cc:282 #: src/wx/film_editor.cc:312 msgid "Edit..." msgstr "Modifica..." -#: src/wx/config_dialog.cc:128 -msgid "Encoding Servers" +#: src/wx/config_dialog.cc:55 +#, fuzzy +msgid "Encoding servers" msgstr "Servers di codifica" #: src/wx/film_editor.cc:171 @@ -242,10 +263,14 @@ msgstr "Hz" msgid "I want to play this back at fader" msgstr "Sto usando il fader a" -#: src/wx/config_dialog.cc:132 +#: src/wx/config_dialog.cc:201 src/wx/config_dialog.cc:314 msgid "IP address" msgstr "Indirizzo IP" +#: src/wx/config_dialog.cc:240 +msgid "Issuer" +msgstr "" + #: src/wx/film_editor.cc:339 msgid "JPEG2000 bandwidth" msgstr "Banda passante JPEG2000" @@ -262,6 +287,14 @@ msgstr "Lunghezza" msgid "MBps" msgstr "MBps" +#: src/wx/config_dialog.cc:57 +msgid "Metadata" +msgstr "" + +#: src/wx/config_dialog.cc:53 +msgid "Miscellaneous" +msgstr "" + #: src/wx/dir_picker_ctrl.cc:52 msgid "My Documents" msgstr "Documenti" @@ -296,6 +329,15 @@ msgstr "Tipo di Package (es. OV)" msgid "Padded with black to %dx%d (%.2f:1)\n" msgstr "Riempito con nero a %dx%d (%.2f:1)\n" +#: src/wx/config_dialog.cc:213 +#, fuzzy +msgid "Password" +msgstr "Password del TMS" + +#: src/wx/job_manager_view.cc:103 src/wx/job_manager_view.cc:188 +msgid "Pause" +msgstr "" + #: src/wx/audio_dialog.cc:60 msgid "Peak" msgstr "Picco" @@ -316,23 +358,29 @@ msgstr "RMS" msgid "Rating (e.g. 15)" msgstr "Classificazione (es. 15)" -#: src/wx/config_dialog.cc:118 -msgid "Reference filters for A/B" +#: src/wx/config_dialog.cc:278 +#, fuzzy +msgid "Reference filters" msgstr "Filtri di riferimento A/B" -#: src/wx/config_dialog.cc:107 -msgid "Reference scaler for A/B" +#: src/wx/config_dialog.cc:267 +#, fuzzy +msgid "Reference scaler" msgstr "Scalatura di riferimento A/B" -#: src/wx/config_dialog.cc:147 +#: src/wx/config_dialog.cc:329 msgid "Remove" msgstr "Rimuovi" +#: src/wx/job_manager_view.cc:191 +msgid "Resume" +msgstr "" + #: src/wx/film_editor.cc:282 msgid "Right crop" msgstr "Taglio a destra" -#: src/wx/job_manager_view.cc:108 +#: src/wx/job_manager_view.cc:126 msgid "Running" msgstr "In corso" @@ -357,7 +405,7 @@ msgstr "Seleziona il file con il contenuto" msgid "Server" msgstr "Server" -#: src/wx/config_dialog.cc:49 +#: src/wx/config_dialog.cc:87 msgid "Set language" msgstr "Seleziona la lingua" @@ -393,27 +441,21 @@ msgstr "Scala dei Sottotitoli" msgid "Subtitles" msgstr "Sottotitoli" -#: src/wx/config_dialog.cc:68 -msgid "TMS IP address" -msgstr "Indirizzo IP del TMS" - -#: src/wx/config_dialog.cc:83 -msgid "TMS password" -msgstr "Password del TMS" +#: src/wx/config_dialog.cc:59 +#, fuzzy +msgid "TMS" +msgstr "RMS" -#: src/wx/config_dialog.cc:73 -msgid "TMS target path" +#: src/wx/config_dialog.cc:205 +#, fuzzy +msgid "Target path" msgstr "Percorso di destinazione del TMS" -#: src/wx/config_dialog.cc:78 -msgid "TMS user name" -msgstr "Nome utente del TMS" - #: src/wx/dci_metadata_dialog.cc:41 msgid "Territory (e.g. UK)" msgstr "Nazione (es. UK)" -#: src/wx/config_dialog.cc:136 +#: src/wx/config_dialog.cc:318 msgid "Threads" msgstr "Threads" @@ -421,7 +463,7 @@ msgstr "Threads" msgid "Threads to use" msgstr "Threads da usare" -#: src/wx/config_dialog.cc:88 +#: src/wx/config_dialog.cc:106 msgid "Threads to use for encoding on this host" msgstr "Threads da usare per codificare su questo host" @@ -465,6 +507,11 @@ msgstr "Usa l'audio del contenuto" msgid "Use external audio" msgstr "Usa l'audio esterno" +#: src/wx/config_dialog.cc:209 +#, fuzzy +msgid "User name" +msgstr "Usa nome DCI" + #: src/wx/film_editor.cc:75 msgid "Video" msgstr "Video" @@ -515,5 +562,11 @@ msgstr "s" msgid "unknown" msgstr "sconosciuto" +#~ msgid "TMS IP address" +#~ msgstr "Indirizzo IP del TMS" + +#~ msgid "TMS user name" +#~ msgstr "Nome utente del TMS" + #~ msgid "Original Size" #~ msgstr "Dimensione Originale" diff --git a/src/wx/po/sv_SE.po b/src/wx/po/sv_SE.po index 4127d77f8..7c10aebcb 100644 --- a/src/wx/po/sv_SE.po +++ b/src/wx/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: DVD-o-matic\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-22 15:06+0100\n" +"POT-Creation-Date: 2013-05-09 09:51+0100\n" "PO-Revision-Date: 2013-04-09 10:13+0100\n" "Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n" "Language-Team: \n" @@ -21,8 +21,9 @@ msgstr "" msgid "%" msgstr "%" -#: src/wx/config_dialog.cc:61 -msgid "(restart DVD-o-matic to see language changes)" +#: src/wx/config_dialog.cc:98 +#, fuzzy +msgid "(restart DCP-o-matic to see language changes)" msgstr "(starta om DVD-o-matic för att se språkändringar)" #: src/wx/film_editor.cc:1276 @@ -33,7 +34,11 @@ msgstr "1 kanal" msgid "A/B" msgstr "A/B" -#: src/wx/config_dialog.cc:143 +#: src/wx/config_dialog.cc:61 +msgid "A/B mode" +msgstr "" + +#: src/wx/config_dialog.cc:325 msgid "Add" msgstr "Lägg till" @@ -79,7 +84,7 @@ msgstr "Men jag måste använda mixervolym" msgid "Calculate..." msgstr "Beräkna..." -#: src/wx/job_manager_view.cc:88 +#: src/wx/job_manager_view.cc:97 msgid "Cancel" msgstr "Avbryt" @@ -123,6 +128,11 @@ msgstr "Kunde inte fastställa innehåll: %s" msgid "Create in folder" msgstr "Skapa i katalog" +#: src/wx/config_dialog.cc:244 +#, fuzzy +msgid "Creator" +msgstr "Skapa i katalog" + #: src/wx/film_editor.cc:1371 #, c-format msgid "Cropped to %dx%d (%.2f:1)\n" @@ -140,28 +150,38 @@ msgstr "DCP bildhastighet" msgid "DCP Name" msgstr "DCP Namn" -#: src/wx/wx_util.cc:61 +#: src/wx/config_dialog.cc:46 +#, fuzzy +msgid "DCP-o-matic Preferences" +msgstr "DVD-o-matic Inställningar" + +#: src/wx/wx_util.cc:63 src/wx/wx_util.cc:71 msgid "DVD-o-matic" msgstr "DVD-o-matic" -#: src/wx/config_dialog.cc:44 -msgid "DVD-o-matic Preferences" -msgstr "DVD-o-matic Inställningar" - #: src/wx/audio_dialog.cc:101 #, c-format msgid "DVD-o-matic audio - %s" msgstr "DVD-o-matic audio - %s" -#: src/wx/config_dialog.cc:102 +#: src/wx/config_dialog.cc:120 msgid "Default DCI name details" msgstr "Detaljer om förvalda DCI-namn" -#: src/wx/config_dialog.cc:93 +#: src/wx/config_dialog.cc:130 +#, fuzzy +msgid "Default content type" +msgstr "Innehållstyp" + +#: src/wx/config_dialog.cc:111 msgid "Default directory for new films" msgstr "Förvald katalog för nya filmer" -#: src/wx/film_editor.cc:116 src/wx/job_manager_view.cc:92 +#: src/wx/config_dialog.cc:125 +msgid "Default format" +msgstr "" + +#: src/wx/film_editor.cc:116 src/wx/job_manager_view.cc:109 msgid "Details..." msgstr "Detaljer..." @@ -173,17 +193,18 @@ msgstr "Diskutrymme som krävs" msgid "Duration" msgstr "Längd" -#: src/wx/config_dialog.cc:145 +#: src/wx/config_dialog.cc:327 msgid "Edit" msgstr "Redigera" -#: src/wx/config_dialog.cc:103 src/wx/config_dialog.cc:122 +#: src/wx/config_dialog.cc:121 src/wx/config_dialog.cc:282 #: src/wx/film_editor.cc:312 msgid "Edit..." msgstr "Redigera..." -#: src/wx/config_dialog.cc:128 -msgid "Encoding Servers" +#: src/wx/config_dialog.cc:55 +#, fuzzy +msgid "Encoding servers" msgstr "Kodningsservrar" #: src/wx/film_editor.cc:171 @@ -242,10 +263,14 @@ msgstr "Hz" msgid "I want to play this back at fader" msgstr "Jag vill spela upp detta med mixervolym" -#: src/wx/config_dialog.cc:132 +#: src/wx/config_dialog.cc:201 src/wx/config_dialog.cc:314 msgid "IP address" msgstr "IP-adress" +#: src/wx/config_dialog.cc:240 +msgid "Issuer" +msgstr "" + #: src/wx/film_editor.cc:339 msgid "JPEG2000 bandwidth" msgstr "JPEG2000 bandbredd" @@ -262,6 +287,14 @@ msgstr "Längd" msgid "MBps" msgstr "MBps" +#: src/wx/config_dialog.cc:57 +msgid "Metadata" +msgstr "" + +#: src/wx/config_dialog.cc:53 +msgid "Miscellaneous" +msgstr "" + #: src/wx/dir_picker_ctrl.cc:52 msgid "My Documents" msgstr "Mina Dokument" @@ -296,6 +329,15 @@ msgstr "Förpackningstyp (ex. OV)" msgid "Padded with black to %dx%d (%.2f:1)\n" msgstr "Svarta kanter tillagda för %dx%d (%.2f:1)\n" +#: src/wx/config_dialog.cc:213 +#, fuzzy +msgid "Password" +msgstr "TMS lösenord" + +#: src/wx/job_manager_view.cc:103 src/wx/job_manager_view.cc:188 +msgid "Pause" +msgstr "" + #: src/wx/audio_dialog.cc:60 msgid "Peak" msgstr "Topp" @@ -316,23 +358,29 @@ msgstr "RMS" msgid "Rating (e.g. 15)" msgstr "Klassificering (ex. 15)" -#: src/wx/config_dialog.cc:118 -msgid "Reference filters for A/B" +#: src/wx/config_dialog.cc:278 +#, fuzzy +msgid "Reference filters" msgstr "Referensfilter för A/B" -#: src/wx/config_dialog.cc:107 -msgid "Reference scaler for A/B" +#: src/wx/config_dialog.cc:267 +#, fuzzy +msgid "Reference scaler" msgstr "Referensomskalare för A/B" -#: src/wx/config_dialog.cc:147 +#: src/wx/config_dialog.cc:329 msgid "Remove" msgstr "Ta bort" +#: src/wx/job_manager_view.cc:191 +msgid "Resume" +msgstr "" + #: src/wx/film_editor.cc:282 msgid "Right crop" msgstr "Höger beskärning" -#: src/wx/job_manager_view.cc:108 +#: src/wx/job_manager_view.cc:126 msgid "Running" msgstr "Körs" @@ -357,7 +405,7 @@ msgstr "Välj innehållsfil" msgid "Server" msgstr "Server" -#: src/wx/config_dialog.cc:49 +#: src/wx/config_dialog.cc:87 msgid "Set language" msgstr "Välj språk" @@ -393,27 +441,21 @@ msgstr "Undertext Skalning" msgid "Subtitles" msgstr "Undertexter" -#: src/wx/config_dialog.cc:68 -msgid "TMS IP address" -msgstr "TMS IP-adress" - -#: src/wx/config_dialog.cc:83 -msgid "TMS password" -msgstr "TMS lösenord" +#: src/wx/config_dialog.cc:59 +#, fuzzy +msgid "TMS" +msgstr "RMS" -#: src/wx/config_dialog.cc:73 -msgid "TMS target path" +#: src/wx/config_dialog.cc:205 +#, fuzzy +msgid "Target path" msgstr "TMS målsökväg" -#: src/wx/config_dialog.cc:78 -msgid "TMS user name" -msgstr "TMS användarnamn" - #: src/wx/dci_metadata_dialog.cc:41 msgid "Territory (e.g. UK)" msgstr "Område (ex. SV)" -#: src/wx/config_dialog.cc:136 +#: src/wx/config_dialog.cc:318 msgid "Threads" msgstr "Trådar" @@ -421,7 +463,7 @@ msgstr "Trådar" msgid "Threads to use" msgstr "Antal trådar att använda" -#: src/wx/config_dialog.cc:88 +#: src/wx/config_dialog.cc:106 msgid "Threads to use for encoding on this host" msgstr "Antal trådar att använda vid kodning på denna maskin" @@ -466,6 +508,11 @@ msgstr "Använd innehållets audio" msgid "Use external audio" msgstr "Använd extern audio" +#: src/wx/config_dialog.cc:209 +#, fuzzy +msgid "User name" +msgstr "Använd DCI-namnet" + #: src/wx/film_editor.cc:75 msgid "Video" msgstr "Video" @@ -516,5 +563,11 @@ msgstr "s" msgid "unknown" msgstr "okänt" +#~ msgid "TMS IP address" +#~ msgstr "TMS IP-adress" + +#~ msgid "TMS user name" +#~ msgstr "TMS användarnamn" + #~ msgid "Original Size" #~ msgstr "Ursprunglig Storlek" diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc index 77f5da293..1a7b73faf 100644 --- a/src/wx/wx_util.cc +++ b/src/wx/wx_util.cc @@ -25,6 +25,8 @@ #include <wx/filepicker.h> #include <wx/spinctrl.h> #include "wx_util.h" +#include "config.h" +#include "util.h" using namespace std; using namespace boost; @@ -211,3 +213,39 @@ checked_set (wxRadioButton* widget, bool value) widget->SetValue (value); } } + +void +dvdomatic_setup_i18n () +{ + int language = wxLANGUAGE_DEFAULT; + + boost::optional<string> config_lang = Config::instance()->language (); + if (config_lang && !config_lang->empty ()) { + wxLanguageInfo const * li = wxLocale::FindLanguageInfo (std_to_wx (config_lang.get ())); + if (li) { + language = li->Language; + } + } + + wxLocale* locale = 0; + if (wxLocale::IsAvailable (language)) { + locale = new wxLocale (language, wxLOCALE_LOAD_DEFAULT); + +#ifdef DVDOMATIC_WINDOWS + locale->AddCatalogLookupPathPrefix (std_to_wx (mo_path().string())); +#endif + + locale->AddCatalog (wxT ("libdvdomatic-wx")); + locale->AddCatalog (wxT ("dvdomatic")); + + if (!locale->IsOk()) { + delete locale; + locale = new wxLocale (wxLANGUAGE_ENGLISH); + language = wxLANGUAGE_ENGLISH; + } + } + + if (locale) { + dvdomatic_setup_gettext_i18n (wx_to_std (locale->GetCanonicalName ())); + } +} diff --git a/src/wx/wx_util.h b/src/wx/wx_util.h index b3ab706df..00a625e1c 100644 --- a/src/wx/wx_util.h +++ b/src/wx/wx_util.h @@ -36,6 +36,7 @@ extern wxStaticText* add_label_to_sizer (wxSizer *, wxWindow *, wxString, int pr extern wxStaticText* add_label_to_grid_bag_sizer (wxGridBagSizer *, wxWindow *, wxString, wxGBPosition, wxGBSpan span = wxDefaultSpan); extern std::string wx_to_std (wxString); extern wxString std_to_wx (std::string); +extern void dvdomatic_setup_i18n (); /** @class ThreadedStaticText * diff --git a/windows/installer.nsi.32.in b/windows/installer.nsi.32.in index ac68ac88b..b73e4f345 100644 --- a/windows/installer.nsi.32.in +++ b/windows/installer.nsi.32.in @@ -83,6 +83,7 @@ File "%deps%/bin/libbz2.dll" File "%binaries%/src/wx/dvdomatic-wx.dll" File "%binaries%/src/lib/dvdomatic.dll" File "%binaries%/src/tools/dvdomatic.exe" +File "%binaries%/src/tools/dvdomatic_batch.exe" File "%binaries%/src/tools/servomatic_cli.exe" File "%binaries%/src/tools/servomatic_gui.exe" @@ -111,11 +112,13 @@ File "%binaries%/src/wx/mo/sv_SE/libdvdomatic-wx.mo" File "%binaries%/src/tools/mo/sv_SE/dvdomatic.mo" CreateShortCut "$DESKTOP\DVD-o-matic.lnk" "$INSTDIR\bin\dvdomatic.exe" "" +CreateShortCut "$DESKTOP\DVD-o-matic batch converter.lnk" "$INSTDIR\bin\dvdomatic_batch.exe" "" CreateShortCut "$DESKTOP\DVD-o-matic encode server.lnk" "$INSTDIR\bin\servomatic_gui.exe" "" CreateDirectory "$SMPROGRAMS\DVD-o-matic" CreateShortCut "$SMPROGRAMS\DVD-o-matic\Uninstall DVD-o-matic.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0 CreateShortCut "$SMPROGRAMS\DVD-o-matic\DVD-o-matic.lnk" "$INSTDIR\bin\dvdomatic.exe" "" "$INSTDIR\bin\dvdomatic.exe" 0 +CreateShortCut "$SMPROGRAMS\DVD-o-matic\DVD-o-matic batch converter.lnk" "$INSTDIR\bin\dvdomatic_batch.exe" "" "$INSTDIR\bin\dvdomatic_batch.exe" 0 CreateShortCut "$SMPROGRAMS\DVD-o-matic\DVD-o-matic encode server.lnk" "$INSTDIR\bin\servomatic_gui.exe" "" "$INSTDIR\bin\servomatic_gui.exe" 0 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\DVD-o-matic" "DisplayName" "DVD-o-matic (remove only)" @@ -131,6 +134,7 @@ Section "Uninstall" RMDir /r "$INSTDIR\*.*" RMDir "$INSTDIR" Delete "$DESKTOP\DVD-o-matic.lnk" +Delete "$DESKTOP\DVD-o-matic bach converter.lnk" Delete "$DESKTOP\DVD-o-matic encode server.lnk" Delete "$SMPROGRAMS\DVD-o-matic\*.*" RmDir "$SMPROGRAMS\DVD-o-matic" diff --git a/windows/installer.nsi.64.in b/windows/installer.nsi.64.in index 233d7f65e..f499c46c2 100644 --- a/windows/installer.nsi.64.in +++ b/windows/installer.nsi.64.in @@ -93,6 +93,7 @@ File "%deps%/bin/libbz2.dll" File "%binaries%/src/wx/dvdomatic-wx.dll" File "%binaries%/src/lib/dvdomatic.dll" File "%binaries%/src/tools/dvdomatic.exe" +File "%binaries%/src/tools/dvdomatic_batch.exe" File "%binaries%/src/tools/servomatic_cli.exe" File "%binaries%/src/tools/servomatic_gui.exe" @@ -121,11 +122,13 @@ File "%binaries%/src/wx/mo/sv_SE/libdvdomatic-wx.mo" File "%binaries%/src/tools/mo/sv_SE/dvdomatic.mo" CreateShortCut "$DESKTOP\DVD-o-matic.lnk" "$INSTDIR\bin\dvdomatic.exe" "" +CreateShortCut "$DESKTOP\DVD-o-matic batch converter.lnk" "$INSTDIR\bin\dvdomatic_batch.exe" "" CreateShortCut "$DESKTOP\DVD-o-matic encode server.lnk" "$INSTDIR\bin\servomatic_gui.exe" "" CreateDirectory "$SMPROGRAMS\DVD-o-matic" CreateShortCut "$SMPROGRAMS\DVD-o-matic\Uninstall DVD-o-matic.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0 CreateShortCut "$SMPROGRAMS\DVD-o-matic\DVD-o-matic.lnk" "$INSTDIR\bin\dvdomatic.exe" "" "$INSTDIR\bin\dvdomatic.exe" 0 +CreateShortCut "$SMPROGRAMS\DVD-o-matic\DVD-o-matic batch converter.lnk" "$INSTDIR\bin\dvdomatic.exe" "" "$INSTDIR\bin\dvdomatic_batch.exe" 0 CreateShortCut "$SMPROGRAMS\DVD-o-matic\DVD-o-matic encode server.lnk" "$INSTDIR\bin\servomatic_gui.exe" "" "$INSTDIR\bin\servomatic_gui.exe" 0 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\DVD-o-matic" "DisplayName" "DVD-o-matic (remove only)" @@ -141,6 +144,7 @@ Section "Uninstall" RMDir /r "$INSTDIR\*.*" RMDir "$INSTDIR" Delete "$DESKTOP\DVD-o-matic.lnk" +Delete "$DESKTOP\DVD-o-matic batch converter.lnk" Delete "$DESKTOP\DVD-o-matic encode server.lnk" Delete "$SMPROGRAMS\DVD-o-matic\*.*" RmDir "$SMPROGRAMS\DVD-o-matic" @@ -3,7 +3,7 @@ import os import sys APPNAME = 'dvdomatic' -VERSION = '0.89pre' +VERSION = '0.94pre' def options(opt): opt.load('compiler_cxx') @@ -32,6 +32,9 @@ def configure(conf): conf.env.append_value('CXXFLAGS', ['-mconsole']) conf.env.append_value('LINKFLAGS', ['-mconsole']) conf.check(lib = 'ws2_32', uselib_store = 'WINSOCK2', msg = "Checking for library winsock2") + conf.check(lib = 'bfd', uselib_store = 'BFD', msg = "Checking for library bfd") + conf.check(lib = 'dbghelp', uselib_store = 'DBGHELP', msg = "Checking for library dbghelp") + conf.check(lib = 'iberty', uselib_store = 'IBERTY', msg = "Checking for library iberty") boost_lib_suffix = '-mt' boost_thread = 'boost_thread_win32-mt' else: @@ -55,7 +58,7 @@ def configure(conf): conf.env.append_value('CXXFLAGS', '-O2') if not conf.options.static: - conf.check_cfg(package = 'libdcp', atleast_version = '0.45', args = '--cflags --libs', uselib_store = 'DCP', mandatory = True) + conf.check_cfg(package = 'libdcp', atleast_version = '0.49', args = '--cflags --libs', uselib_store = 'DCP', mandatory = True) conf.check_cfg(package = 'libavformat', args = '--cflags --libs', uselib_store = 'AVFORMAT', mandatory = True) conf.check_cfg(package = 'libavfilter', args = '--cflags --libs', uselib_store = 'AVFILTER', mandatory = True) conf.check_cfg(package = 'libavcodec', args = '--cflags --libs', uselib_store = 'AVCODEC', mandatory = True) @@ -198,7 +201,12 @@ def build(bld): obj.target = 'dvdomatic.desktop' obj.dict = d - bld.install_files('${PREFIX}/share/applications', 'dvdomatic.desktop') + obj = bld(features = 'subst') + obj.source = 'dvdomatic_batch.desktop.in' + obj.target = 'dvdomatic_batch.desktop' + obj.dict = d + + bld.install_files('${PREFIX}/share/applications', ['dvdomatic.desktop', 'dvdomatic_batch.desktop']) for r in ['22x22', '32x32', '48x48', '64x64', '128x128']: bld.install_files('${PREFIX}/share/icons/hicolor/%s/apps' % r, 'icons/%s/dvdomatic.png' % r) |
