summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-05-21 12:56:47 +0100
committerCarl Hetherington <cth@carlh.net>2013-05-21 12:56:47 +0100
commit5f0f0de782100a5cb558f30c7768c8af0c19bcb7 (patch)
treeacb5c1624e6b5687f94eca0882c37afb0971018c
parent3fc3aad8735903ced3dae65f764eb33e3f5b3f11 (diff)
parent47e6b6725168213f2a7db24c2965cfa173f755b4 (diff)
Merge master.
-rw-r--r--ChangeLog55
-rw-r--r--cscript4
-rw-r--r--debian/changelog36
-rw-r--r--dvdomatic_batch.desktop.in10
-rwxr-xr-xrun/dvdomatic_batch15
-rwxr-xr-xrun/makedcp5
-rw-r--r--src/lib/ab_transcoder.cc2
-rw-r--r--src/lib/config.cc41
-rw-r--r--src/lib/config.h30
-rw-r--r--src/lib/film.cc13
-rw-r--r--src/lib/format.cc32
-rw-r--r--src/lib/job.cc28
-rw-r--r--src/lib/job.h4
-rw-r--r--src/lib/po/es_ES.po62
-rw-r--r--src/lib/po/fr_FR.po133
-rw-r--r--src/lib/po/it_IT.po62
-rw-r--r--src/lib/po/sv_SE.po62
-rw-r--r--src/lib/sndfile_decoder.cc4
-rw-r--r--src/lib/stack.cpp463
-rw-r--r--src/lib/stack.hpp60
-rw-r--r--src/lib/transcoder.cc2
-rw-r--r--src/lib/util.cc28
-rw-r--r--src/lib/util.h2
-rw-r--r--src/lib/writer.cc6
-rw-r--r--src/lib/wscript8
-rw-r--r--src/tools/dvdomatic.cc48
-rw-r--r--src/tools/dvdomatic_batch.cc239
-rw-r--r--src/tools/makedcp.cc15
-rw-r--r--src/tools/po/es_ES.po65
-rw-r--r--src/tools/po/fr_FR.po80
-rw-r--r--src/tools/po/it_IT.po63
-rw-r--r--src/tools/po/sv_SE.po63
-rw-r--r--src/tools/wscript2
-rw-r--r--src/wx/audio_dialog.cc2
-rw-r--r--src/wx/config_dialog.cc343
-rw-r--r--src/wx/config_dialog.h25
-rw-r--r--src/wx/job_manager_view.cc53
-rw-r--r--src/wx/job_manager_view.h9
-rw-r--r--src/wx/po/es_ES.po132
-rw-r--r--src/wx/po/fr_FR.po170
-rw-r--r--src/wx/po/it_IT.po133
-rw-r--r--src/wx/po/sv_SE.po133
-rw-r--r--src/wx/wx_util.cc38
-rw-r--r--src/wx/wx_util.h1
-rw-r--r--windows/installer.nsi.32.in4
-rw-r--r--windows/installer.nsi.64.in4
-rw-r--r--wscript14
47 files changed, 2129 insertions, 674 deletions
diff --git a/ChangeLog b/ChangeLog
index 5d4d60c98..0dd326ecf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/cscript b/cscript
index e8154e9f3..521bc54f9 100644
--- a/cscript
+++ b/cscript
@@ -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"
diff --git a/wscript b/wscript
index e10c68639..b5676ba5b 100644
--- a/wscript
+++ b/wscript
@@ -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)