+2014-01-09 Carl Hetherington <cth@carlh.net>
+
+ * Version 1.61.1 released.
+
+2014-01-09 Carl Hetherington <cth@carlh.net>
+
+ * Version 1.61.0 released.
+
+2014-01-09 Carl Hetherington <cth@carlh.net>
+
+ * Hopefully fix somewhat inexplicable inability of Windows to open
+ new files on top of old ones in some circumstances (with audio
+ MXFs).
+
+ * Version 1.60 released.
+
+2014-01-09 Carl Hetherington <cth@carlh.net>
+
+ * More fixes for slow-downs on fast computers.
+
+2014-01-08 Carl Hetherington <cth@carlh.net>
+
+ * Version 1.59 released.
+
+2014-01-07 Carl Hetherington <cth@carlh.net>
+
+ * Version 1.58 released.
+
+2014-01-07 Carl Hetherington <cth@carlh.net>
+
+ * Fix Windows build of FFmpeg to link against zlib, which fixes parsing
+ of some .mov files.
+
+ * Very primitive check-for-updates feature added.
+
+ * Allow still-moving-image sources to have their frame rate specified.
+
2014-01-06 Carl Hetherington <cth@carlh.net>
+ * Basics of per-channel audio gain (#247).
+
+ * Give a warning on make DCP if it seems unlikely that the disk
+ will have enough space to store the finished DCP (#92).
+
* Make sure forced languages override the environment for gettext()
as well as wxWidgets' i18n code (#108).
print >>f,' digital projectors.'
def dependencies(target):
- return (('ffmpeg-cdist', 'a629ea68a20d990b4e61c16067e91563d8d08f50'),
- ('libdcp', 'v0.92'))
+ return (('ffmpeg-cdist', '5ac3a6af077c10f07c31954c372a8f29e4e18e2a'),
+ ('libdcp', '8803a19c6901ab3c3ff85c964343f08458e0824e'))
-def build(target):
+def build(target, options):
cmd = './waf configure --prefix=%s' % target.work_dir_cscript()
if target.platform == 'windows':
cmd += ' --target-windows'
-dcpomatic (1.57-1) UNRELEASED; urgency=low
+dcpomatic (1.61.1-1) UNRELEASED; urgency=low
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
+ * New upstream release.
+ * New upstream release.
+ * New upstream release.
+ * New upstream release.
+ * New upstream release.
- -- Carl Hetherington <carl@d1stkfactory> Sun, 05 Jan 2014 22:41:00 +0000
+ -- Carl Hetherington <carl@d1stkfactory> Thu, 09 Jan 2014 21:22:14 +0000
dcpomatic (0.87-1) UNRELEASED; urgency=low
}
}
-/** Add data from from `from', `from_channel' to our channel `to_channel' */
+/** Add data from from `from', `from_channel' to our channel `to_channel'.
+ * @param gain Linear gain to apply to the data before it is added.
+ */
void
-AudioBuffers::accumulate_channel (AudioBuffers const * from, int from_channel, int to_channel)
+AudioBuffers::accumulate_channel (AudioBuffers const * from, int from_channel, int to_channel, float gain)
{
int const N = frames ();
assert (from->frames() == N);
float* d = _data[to_channel];
for (int i = 0; i < N; ++i) {
- *d++ += *s++;
+ *d++ += (*s++) * gain;
}
}
void copy_from (AudioBuffers const * from, int frames_to_copy, int read_offset, int write_offset);
void move (int from, int to, int frames);
- void accumulate_channel (AudioBuffers const *, int, int);
+ void accumulate_channel (AudioBuffers const *, int, int, float gain = 1);
void accumulate_frames (AudioBuffers const *, int read_offset, int write_offset, int frames);
private:
#include <libxml++/libxml++.h>
#include <libcxml/cxml.h>
#include "audio_mapping.h"
+#include "util.h"
using std::list;
using std::cout;
* @param c Number of channels.
*/
AudioMapping::AudioMapping (int c)
- : _content_channels (c)
{
+ setup (c);
+}
+void
+AudioMapping::setup (int c)
+{
+ _content_channels = c;
+
+ _gain.resize (_content_channels);
+ for (int i = 0; i < _content_channels; ++i) {
+ _gain[i].resize (MAX_AUDIO_CHANNELS);
+ }
}
void
AudioMapping::make_default ()
{
+ for (int i = 0; i < _content_channels; ++i) {
+ for (int j = 0; j < MAX_AUDIO_CHANNELS; ++j) {
+ _gain[i][j] = 0;
+ }
+ }
+
if (_content_channels == 1) {
/* Mono -> Centre */
- add (0, libdcp::CENTRE);
+ set (0, libdcp::CENTRE, 1);
} else {
/* 1:1 mapping */
for (int i = 0; i < _content_channels; ++i) {
- add (i, static_cast<libdcp::Channel> (i));
+ set (i, static_cast<libdcp::Channel> (i), 1);
}
}
}
-AudioMapping::AudioMapping (shared_ptr<const cxml::Node> node)
+AudioMapping::AudioMapping (shared_ptr<const cxml::Node> node, int state_version)
{
- _content_channels = node->number_child<int> ("ContentChannels");
-
- list<cxml::NodePtr> const c = node->node_children ("Map");
- for (list<cxml::NodePtr>::const_iterator i = c.begin(); i != c.end(); ++i) {
- add ((*i)->number_child<int> ("ContentIndex"), static_cast<libdcp::Channel> ((*i)->number_child<int> ("DCP")));
+ setup (node->number_child<int> ("ContentChannels"));
+
+ if (state_version <= 5) {
+ /* Old-style: on/off mapping */
+ list<cxml::NodePtr> const c = node->node_children ("Map");
+ for (list<cxml::NodePtr>::const_iterator i = c.begin(); i != c.end(); ++i) {
+ set ((*i)->number_child<int> ("ContentIndex"), static_cast<libdcp::Channel> ((*i)->number_child<int> ("DCP")), 1);
+ }
+ } else {
+ list<cxml::NodePtr> const c = node->node_children ("Gain");
+ for (list<cxml::NodePtr>::const_iterator i = c.begin(); i != c.end(); ++i) {
+ set (
+ (*i)->number_attribute<int> ("Content"),
+ static_cast<libdcp::Channel> ((*i)->number_attribute<int> ("DCP")),
+ lexical_cast<float> ((*i)->content ())
+ );
+ }
}
}
void
-AudioMapping::add (int c, libdcp::Channel d)
+AudioMapping::set (int c, libdcp::Channel d, float g)
{
- _content_to_dcp.push_back (make_pair (c, d));
+ _gain[c][d] = g;
}
-list<int>
-AudioMapping::dcp_to_content (libdcp::Channel d) const
+float
+AudioMapping::get (int c, libdcp::Channel d) const
{
- list<int> c;
- for (list<pair<int, libdcp::Channel> >::const_iterator i = _content_to_dcp.begin(); i != _content_to_dcp.end(); ++i) {
- if (i->second == d) {
- c.push_back (i->first);
- }
- }
-
- return c;
-}
-
-list<libdcp::Channel>
-AudioMapping::content_to_dcp (int c) const
-{
- assert (c < _content_channels);
-
- list<libdcp::Channel> d;
- for (list<pair<int, libdcp::Channel> >::const_iterator i = _content_to_dcp.begin(); i != _content_to_dcp.end(); ++i) {
- if (i->first == c) {
- d.push_back (i->second);
- }
- }
-
- return d;
+ return _gain[c][d];
}
void
AudioMapping::as_xml (xmlpp::Node* node) const
{
node->add_child ("ContentChannels")->add_child_text (lexical_cast<string> (_content_channels));
-
- for (list<pair<int, libdcp::Channel> >::const_iterator i = _content_to_dcp.begin(); i != _content_to_dcp.end(); ++i) {
- xmlpp::Node* t = node->add_child ("Map");
- t->add_child ("ContentIndex")->add_child_text (lexical_cast<string> (i->first));
- t->add_child ("DCP")->add_child_text (lexical_cast<string> (i->second));
+
+ for (int c = 0; c < _content_channels; ++c) {
+ for (int d = 0; d < MAX_AUDIO_CHANNELS; ++d) {
+ xmlpp::Element* t = node->add_child ("Gain");
+ t->set_attribute ("Content", lexical_cast<string> (c));
+ t->set_attribute ("DCP", lexical_cast<string> (d));
+ t->add_child_text (lexical_cast<string> (get (c, static_cast<libdcp::Channel> (d))));
+ }
}
}
#ifndef DCPOMATIC_AUDIO_MAPPING_H
#define DCPOMATIC_AUDIO_MAPPING_H
-#include <list>
+#include <vector>
#include <libdcp/types.h>
#include <boost/shared_ptr.hpp>
/** A many-to-many mapping from some content channels to DCP channels.
* The number of content channels is set on construction and fixed,
- * and then each of those content channels can be mapped to zero or
- * more DCP channels.
+ * and then each of those content channels are mapped to each DCP channel
+ * by a linear gain.
*/
class AudioMapping
{
public:
AudioMapping ();
AudioMapping (int);
- AudioMapping (boost::shared_ptr<const cxml::Node>);
+ AudioMapping (boost::shared_ptr<const cxml::Node>, int);
/* Default copy constructor is fine */
void as_xml (xmlpp::Node *) const;
- void add (int, libdcp::Channel);
void make_default ();
- std::list<int> dcp_to_content (libdcp::Channel) const;
- std::list<std::pair<int, libdcp::Channel> > content_to_dcp () const {
- return _content_to_dcp;
- }
+ void set (int, libdcp::Channel, float);
+ float get (int, libdcp::Channel) const;
int content_channels () const {
return _content_channels;
}
- std::list<libdcp::Channel> content_to_dcp (int) const;
-
private:
+ void setup (int);
+
int _content_channels;
- std::list<std::pair<int, libdcp::Channel> > _content_to_dcp;
+ std::vector<std::vector<float> > _gain;
};
#endif
, _kdm_email (
_("Dear Projectionist\n\nPlease find attached KDMs for $CPL_NAME.\n\nThe KDMs are valid from $START_TIME until $END_TIME.\n\nBest regards,\nDCP-o-matic")
)
+ , _check_for_updates (false)
+ , _check_for_test_updates (false)
{
_allowed_dcp_frame_rates.push_back (24);
_allowed_dcp_frame_rates.push_back (25);
_mail_password = f.optional_string_child("MailPassword").get_value_or ("");
_kdm_from = f.string_child ("KDMFrom");
_kdm_email = f.string_child ("KDMEmail");
+
+ _check_for_updates = f.optional_bool_child("CheckForUpdates").get_value_or (false);
+ _check_for_test_updates = f.optional_bool_child("CheckForTestUpdates").get_value_or (false);
}
void
root->add_child("KDMFrom")->add_child_text (_kdm_from);
root->add_child("KDMEmail")->add_child_text (_kdm_email);
+ root->add_child("CheckForUpdates")->add_child_text (_check_for_updates ? "1" : "0");
+ root->add_child("CheckForTestUpdates")->add_child_text (_check_for_test_updates ? "1" : "0");
+
doc.write_to_file_formatted (file(false).string ());
}
return _kdm_email;
}
+ bool check_for_updates () const {
+ return _check_for_updates;
+ }
+
+ bool check_for_test_updates () const {
+ return _check_for_test_updates;
+ }
+
/** @param n New number of local encoding threads */
void set_num_local_encoding_threads (int n) {
_num_local_encoding_threads = n;
void set_kdm_email (std::string e) {
_kdm_email = e;
}
+
+ void set_check_for_updates (bool c) {
+ _check_for_updates = c;
+ }
+
+ void set_check_for_test_updates (bool c) {
+ _check_for_test_updates = c;
+ }
void write () const;
std::string _mail_password;
std::string _kdm_from;
std::string _kdm_email;
+ /** true to check for updates on startup */
+ bool _check_for_updates;
+ bool _check_for_test_updates;
/** Singleton instance, or 0 */
static Config* _instance;
{
{
boost::mutex::scoped_lock lm (_mutex);
+ if (p == _position) {
+ return;
+ }
+
_position = p;
}
FFmpegAudioStream::FFmpegAudioStream (shared_ptr<const cxml::Node> node, int version)
: FFmpegStream (node, version)
- , mapping (node->node_child ("Mapping"))
+ , mapping (node->node_child ("Mapping"), version)
{
frame_rate = node->number_child<int> ("FrameRate");
channels = node->number_child<int64_t> ("Channels");
/* Subtitle PTS in seconds (within the source, not taking into account any of the
source that we may have chopped off for the DCP)
*/
- double const packet_time = (static_cast<double> (sub.pts ) / AV_TIME_BASE) + _video_pts_offset;
+ double const packet_time = (static_cast<double> (sub.pts ) / AV_TIME_BASE) + _pts_offset;
/* hence start time for this sub */
ContentTime const from = (packet_time + (double (sub.start_display_time) / 1e3)) * TIME_HZ;
using libdcp::Size;
using libdcp::Signer;
-int const Film::state_version = 5;
+/* 5 -> 6
+ * AudioMapping XML changed.
+ */
+int const Film::state_version = 6;
/** Construct a Film object in a given directory.
*
return kdms;
}
+
+/** @return The approximate disk space required to encode a DCP of this film with the
+ * current settings, in bytes.
+ */
+uint64_t
+Film::required_disk_space () const
+{
+ return uint64_t (j2k_bandwidth() / 8) * length() / TIME_HZ;
+}
+
+/** This method checks the disk that the Film is on and tries to decide whether or not
+ * there will be enough space to make a DCP for it. If so, true is returned; if not,
+ * false is returned and required and availabe are filled in with the amount of disk space
+ * required and available respectively (in Gb).
+ *
+ * Note: the decision made by this method isn't, of course, 100% reliable.
+ */
+bool
+Film::should_be_enough_disk_space (double& required, double& available) const
+{
+ boost::filesystem::space_info s = boost::filesystem::space (internal_video_mxf_dir ());
+ required = double (required_disk_space ()) / 1073741824.0f;
+ available = double (s.available) / 1073741824.0f;
+ return (available - required) > 1;
+}
DCPTime video_frames_to_time (VideoFrame) const;
DCPTime audio_frames_to_time (AudioFrame) const;
+ uint64_t required_disk_space () const;
+ bool should_be_enough_disk_space (double &, double &) const;
+
/* Proxies for some Playlist methods */
ContentList content () const;
{
return number_of_paths() == 1;
}
+
+void
+ImageContent::set_video_frame_rate (float r)
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ if (_video_frame_rate == r) {
+ return;
+ }
+
+ _video_frame_rate = r;
+ }
+
+ signal_changed (VideoContentProperty::VIDEO_FRAME_RATE);
+}
+
void set_video_length (VideoFrame);
bool still () const;
+ void set_video_frame_rate (float);
};
#endif
using boost::lexical_cast;
using boost::bad_lexical_cast;
-ImageExaminer::ImageExaminer (shared_ptr<const Film> film, shared_ptr<const ImageContent> content, shared_ptr<Job> job)
+ImageExaminer::ImageExaminer (shared_ptr<const Film> film, shared_ptr<const ImageContent> content, shared_ptr<Job>)
: _film (film)
, _image_content (content)
, _video_length (0)
/* Remap channels */
shared_ptr<AudioBuffers> dcp_mapped (new AudioBuffers (_film->audio_channels(), audio->data->frames()));
dcp_mapped->make_silent ();
- list<pair<int, libdcp::Channel> > map = content->audio_mapping().content_to_dcp ();
- for (list<pair<int, libdcp::Channel> >::iterator i = map.begin(); i != map.end(); ++i) {
- if (i->first < audio->data->channels() && i->second < dcp_mapped->channels()) {
- dcp_mapped->accumulate_channel (audio->data.get(), i->first, i->second);
+ AudioMapping map = content->audio_mapping ();
+ for (int i = 0; i < map.content_channels(); ++i) {
+ for (int j = 0; j < _film->audio_channels(); ++j) {
+ if (map.get (i, static_cast<libdcp::Channel> (j)) > 0) {
+ dcp_mapped->accumulate_channel (
+ audio->data.get(),
+ i,
+ static_cast<libdcp::Channel> (j),
+ map.get (i, static_cast<libdcp::Channel> (j))
+ );
+ }
}
}
update_subtitle ();
Changed (frequent);
- } else if (property == VideoContentProperty::VIDEO_CROP || property == VideoContentProperty::VIDEO_RATIO) {
+ } else if (
+ property == VideoContentProperty::VIDEO_CROP || property == VideoContentProperty::VIDEO_RATIO ||
+ property == VideoContentProperty::VIDEO_FRAME_RATE
+ ) {
Changed (frequent);
last time we were run.
*/
- if (p == Film::SCALER || p == Film::WITH_SUBTITLES || p == Film::CONTAINER) {
+ if (p == Film::SCALER || p == Film::WITH_SUBTITLES || p == Film::CONTAINER || p == Film::VIDEO_FRAME_RATE) {
Changed (false);
}
}
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2014-01-05 23:06+0100\n"
"Last-Translator: \n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Cannot handle pixel format %1 during %2"
-#: src/lib/util.cc:766
+#: src/lib/util.cc:768
msgid "Centre"
msgstr "Center"
msgid "Checking existing image data"
msgstr "Überprüfe bestehende Bilddateien"
-#: src/lib/writer.cc:401
+#: src/lib/writer.cc:420
msgid "Computing audio digest"
msgstr "Ton berechnen"
msgid "Computing digest"
msgstr "Teil berechnen"
-#: src/lib/writer.cc:398
+#: src/lib/writer.cc:417
msgid "Computing image digest"
msgstr "Bild berechnen"
-#: src/lib/util.cc:796
+#: src/lib/util.cc:798
msgid "Content and DCP have the same rate.\n"
msgstr "Inhalt und DCP haben die selbe Rate.\n"
msgid "Could not open %1 to send"
msgstr "%1 konnte nicht zum senden geöffnet werden"
-#: src/lib/film.cc:949
+#: src/lib/film.cc:952
msgid "Could not read DCP to make KDM for"
msgstr "DCP konnte nicht zur Schlüsselerstellung geöffnet werden"
msgid "Cubic interpolating deinterlacer"
msgstr "Kubisch interpolierender Deinterlacer"
-#: src/lib/util.cc:808
+#: src/lib/util.cc:810
msgid "DCP will run at %1%% of the content speed.\n"
msgstr "DCP läuft mit %1% der Orginal Geschwindigkeit.\n"
-#: src/lib/util.cc:799
+#: src/lib/util.cc:801
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP benutzt jedes ungerade Bild des Inhalts.\n"
msgid "Dolby CP650 and CP750"
msgstr "Dolby CP650 und CP750"
-#: src/lib/util.cc:801
+#: src/lib/util.cc:803
msgid "Each content frame will be doubled in the DCP.\n"
msgstr "Jedes Bild des Inhalts wird im DCP verdoppelt.\n"
-#: src/lib/util.cc:803
+#: src/lib/util.cc:805
msgid "Each content frame will be repeated %1 more times in the DCP.\n"
msgstr "Jedes Bild des Inhalts wird %1 mal im DCP wiederholt.\n"
msgid "Email KDMs for %1"
msgstr "Email KDMs für %1"
-#: src/lib/writer.cc:109
+#: src/lib/writer.cc:112
msgid "Encoding image data"
msgstr "Bilddaten bearbeiten"
msgid "Lanczos"
msgstr "Lanczos"
-#: src/lib/util.cc:764
+#: src/lib/util.cc:766
msgid "Left"
msgstr "Links"
-#: src/lib/util.cc:768
+#: src/lib/util.cc:770
msgid "Left surround"
msgstr "Links Surround"
-#: src/lib/util.cc:767
+#: src/lib/util.cc:769
msgid "Lfe (sub)"
msgstr "LFE (Subwoofer)"
msgid "Rating"
msgstr "Rating"
-#: src/lib/config.cc:81 src/lib/config.cc:165
+#: src/lib/config.cc:83 src/lib/config.cc:167
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/util.cc:765
+#: src/lib/util.cc:767
msgid "Right"
msgstr "Rechts"
-#: src/lib/util.cc:769
+#: src/lib/util.cc:771
msgid "Right surround"
msgstr "Rechts Surround"
"Das Laufwer auf dem der Film gespeichert werden soll hat zu wenig Freien "
"Speicher. Bitte Speicher freigeben und nochmals versuchen."
-#: src/lib/film.cc:372
+#: src/lib/film.cc:375
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Noch ein anderer De-Interlacer"
-#: src/lib/film.cc:276
+#: src/lib/film.cc:279
msgid "You must add some content to the DCP before creating it"
msgstr "Sie müssen einen Inhalt hinzufügen bevor Sie ein DCP erstellen können."
msgid "[still]"
msgstr "[Standbild]"
-#: src/lib/film.cc:237
+#: src/lib/film.cc:240
msgid "cannot contain slashes"
msgstr "Darf keine Schrägstriche enthalten"
-#: src/lib/util.cc:546
+#: src/lib/util.cc:548
msgid "connect timed out"
msgstr "Zeit zur Verbindung abgelaufen"
msgid "connecting"
msgstr "verbinde..."
-#: src/lib/film.cc:272
+#: src/lib/film.cc:275
msgid "container"
msgstr "Container"
-#: src/lib/film.cc:280
+#: src/lib/film.cc:283
msgid "content type"
msgstr "Inhalt Typ"
msgid "could not find video decoder"
msgstr "Bild-Decoder nicht gefunden"
+#: src/lib/writer.cc:387
+msgid "could not move audio MXF into the DCP (%1)"
+msgstr ""
+
#: src/lib/sndfile_decoder.cc:45
msgid "could not open audio file for reading"
msgstr "Tondatei kann nicht zum lesen geöffnet werden."
msgid "could not write to file %1 (%2)"
msgstr "Datei %1 kann nicht geschrieben werden (%2)"
-#: src/lib/util.cc:566
+#: src/lib/util.cc:568
msgid "error during async_accept (%1)"
msgstr "error during async_accept (%1)"
-#: src/lib/util.cc:542
+#: src/lib/util.cc:544
msgid "error during async_connect (%1)"
msgstr "error during async_connect (%1)"
-#: src/lib/util.cc:615
+#: src/lib/util.cc:617
msgid "error during async_read (%1)"
msgstr "error during async_read (%1)"
-#: src/lib/util.cc:587
+#: src/lib/util.cc:589
msgid "error during async_write (%1)"
msgstr "error during async_write (%1)"
-#: src/lib/image_examiner.cc:68
-msgid "first frame in moving image directory is number %1"
-msgstr "Erstes Bild im Bilderordner ist Nummer %1"
-
#: src/lib/transcode_job.cc:94
msgid "frames per second"
msgstr "Bilder pro Sekunde"
msgid "minutes"
msgstr "Minuten"
-#: src/lib/util.cc:687
+#: src/lib/util.cc:689
msgid "missing key %1 in key-value set"
msgstr "Key %1 in Key-value set fehlt"
msgid "multi-part subtitles not yet supported"
msgstr "Multi-Part Untertitel noch nicht unterstützt"
-#: src/lib/film.cc:237 src/lib/film.cc:284
+#: src/lib/film.cc:240 src/lib/film.cc:287
msgid "name"
msgstr "Name"
msgid "remaining"
msgstr "verbleibend"
-#: src/lib/config.cc:79 src/lib/video_content.cc:169
+#: src/lib/config.cc:81 src/lib/video_content.cc:169
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/config.cc:80
+#: src/lib/config.cc:82
msgid "sRGB non-linearised"
msgstr "sRGB nicht linearisiert"
msgid "still"
msgstr "Standbild"
-#: src/lib/image_examiner.cc:72
-msgid "there are %1 images in the directory but the last one is number %2"
-msgstr "Im Ordner sind %1 Bilder aber die letzte Nummer ist %2"
-
#: src/lib/ffmpeg_examiner.cc:169
msgid "unknown"
msgstr "unbekannt"
+
+#~ msgid "first frame in moving image directory is number %1"
+#~ msgstr "Erstes Bild im Bilderordner ist Nummer %1"
+
+#~ msgid "there are %1 images in the directory but the last one is number %2"
+#~ msgstr "Im Ordner sind %1 Bilder aber die letzte Nummer ist %2"
msgstr ""
"Project-Id-Version: LIBDCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-11-09 03:09-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
msgid "Cannot handle pixel format %1 during %2"
msgstr "No se puede usar el formato de pixel %1 para %2"
-#: src/lib/util.cc:766
+#: src/lib/util.cc:768
msgid "Centre"
msgstr "Centro"
msgid "Checking existing image data"
msgstr ""
-#: src/lib/writer.cc:401
+#: src/lib/writer.cc:420
msgid "Computing audio digest"
msgstr ""
msgid "Computing digest"
msgstr ""
-#: src/lib/writer.cc:398
+#: src/lib/writer.cc:417
msgid "Computing image digest"
msgstr ""
-#: src/lib/util.cc:796
+#: src/lib/util.cc:798
#, fuzzy
msgid "Content and DCP have the same rate.\n"
msgstr "La fuente y el DCP tienen la misma velocidad.\n"
msgstr ""
#: src/lib/subtitle_content.cc:65
-#, fuzzy
msgid "Content to be joined must have the same subtitle offset."
msgstr ""
msgid "Could not open %1 to send"
msgstr "No se pudo abrir %1 para enviar"
-#: src/lib/film.cc:949
+#: src/lib/film.cc:952
msgid "Could not read DCP to make KDM for"
msgstr "No se pudo leer el DCP para hacer el KDM"
msgid "Cubic interpolating deinterlacer"
msgstr "Desentrelazado por interpolación cúbica"
-#: src/lib/util.cc:808
+#: src/lib/util.cc:810
#, fuzzy
msgid "DCP will run at %1%% of the content speed.\n"
msgstr "El DCP se reproducirá al %1%% de la velocidad de la fuente.\n"
-#: src/lib/util.cc:799
+#: src/lib/util.cc:801
#, fuzzy
msgid "DCP will use every other frame of the content.\n"
msgstr "El DCP usará fotogramas alternos de la fuente.\n"
msgid "Dolby CP650 and CP750"
msgstr "Dolby CP750"
-#: src/lib/util.cc:801
+#: src/lib/util.cc:803
#, fuzzy
msgid "Each content frame will be doubled in the DCP.\n"
msgstr "Se doblará cada fotograma de la fuente en el DCP.\n"
-#: src/lib/util.cc:803
+#: src/lib/util.cc:805
#, fuzzy
msgid "Each content frame will be repeated %1 more times in the DCP.\n"
msgstr "Se doblará cada fotograma de la fuente en el DCP.\n"
msgid "Email KDMs for %1"
msgstr ""
-#: src/lib/writer.cc:109
+#: src/lib/writer.cc:112
msgid "Encoding image data"
msgstr ""
msgid "Lanczos"
msgstr "Lanczos"
-#: src/lib/util.cc:764
+#: src/lib/util.cc:766
msgid "Left"
msgstr "Izquierda"
-#: src/lib/util.cc:768
+#: src/lib/util.cc:770
msgid "Left surround"
msgstr "Surround izquierda"
-#: src/lib/util.cc:767
+#: src/lib/util.cc:769
msgid "Lfe (sub)"
msgstr ""
msgid "Rating"
msgstr "Clasificación"
-#: src/lib/config.cc:81 src/lib/config.cc:165
+#: src/lib/config.cc:83 src/lib/config.cc:167
#, fuzzy
msgid "Rec. 709"
msgstr "Rec 709"
-#: src/lib/util.cc:765
+#: src/lib/util.cc:767
msgid "Right"
msgstr "Derecha"
-#: src/lib/util.cc:769
+#: src/lib/util.cc:771
msgid "Right surround"
msgstr "Surround derecha"
"En el dispositivo donde se encuentra la pelÃcula queda poco espacio. Libere "
"espacio en el disco y pruebe de nuevo."
-#: src/lib/film.cc:372
+#: src/lib/film.cc:375
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/film.cc:276
+#: src/lib/film.cc:279
msgid "You must add some content to the DCP before creating it"
msgstr "Tienes que añadir contenido al DCP antes de crearlo."
msgid "[still]"
msgstr "imagen fija"
-#: src/lib/film.cc:237
+#: src/lib/film.cc:240
msgid "cannot contain slashes"
msgstr "no puede contener barras"
-#: src/lib/util.cc:546
+#: src/lib/util.cc:548
msgid "connect timed out"
msgstr "tiempo de conexión agotado"
msgid "connecting"
msgstr "conectando"
-#: src/lib/film.cc:272
+#: src/lib/film.cc:275
#, fuzzy
msgid "container"
msgstr "contenido"
-#: src/lib/film.cc:280
+#: src/lib/film.cc:283
msgid "content type"
msgstr "tipo de contenido"
msgid "could not find video decoder"
msgstr "no se pudo encontrar decodificador de vÃdeo"
+#: src/lib/writer.cc:387
+msgid "could not move audio MXF into the DCP (%1)"
+msgstr ""
+
#: src/lib/sndfile_decoder.cc:45
#, fuzzy
msgid "could not open audio file for reading"
msgid "could not write to file %1 (%2)"
msgstr "No se pudo escribir el fichero remoto (%1)"
-#: src/lib/util.cc:566
+#: src/lib/util.cc:568
msgid "error during async_accept (%1)"
msgstr ""
-#: src/lib/util.cc:542
+#: src/lib/util.cc:544
msgid "error during async_connect (%1)"
msgstr ""
-#: src/lib/util.cc:615
+#: src/lib/util.cc:617
msgid "error during async_read (%1)"
msgstr ""
-#: src/lib/util.cc:587
+#: src/lib/util.cc:589
msgid "error during async_write (%1)"
msgstr ""
-#: src/lib/image_examiner.cc:68
-msgid "first frame in moving image directory is number %1"
-msgstr ""
-"primera imagen en el directorio de imagen en movimiento es la número %1"
-
#: src/lib/transcode_job.cc:94
msgid "frames per second"
msgstr "fotogramas por segundo"
msgid "minutes"
msgstr "minutos"
-#: src/lib/util.cc:687
+#: src/lib/util.cc:689
msgid "missing key %1 in key-value set"
msgstr "falta la clave %1 en el par clave-valor"
msgid "multi-part subtitles not yet supported"
msgstr "todavÃa no se soportan subtÃtulos en múltiples partes"
-#: src/lib/film.cc:237 src/lib/film.cc:284
+#: src/lib/film.cc:240 src/lib/film.cc:287
msgid "name"
msgstr "nombre"
msgid "remaining"
msgstr "pendiente"
-#: src/lib/config.cc:79 src/lib/video_content.cc:169
+#: src/lib/config.cc:81 src/lib/video_content.cc:169
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/config.cc:80
+#: src/lib/config.cc:82
msgid "sRGB non-linearised"
msgstr "sRGB no-lineal"
msgid "still"
msgstr "imagen fija"
-#: src/lib/image_examiner.cc:72
-msgid "there are %1 images in the directory but the last one is number %2"
-msgstr "hay %1 imágenes en el directorio, la última es la %2"
-
#: src/lib/ffmpeg_examiner.cc:169
#, fuzzy
msgid "unknown"
msgstr "Error desconocido"
+#~ msgid "first frame in moving image directory is number %1"
+#~ msgstr ""
+#~ "primera imagen en el directorio de imagen en movimiento es la número %1"
+
+#~ msgid "there are %1 images in the directory but the last one is number %2"
+#~ msgstr "hay %1 imágenes en el directorio, la última es la %2"
+
#, fuzzy
#~ msgid "Examining content"
#~ msgstr "Examinar contenido"
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-11-25 19:37+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Format du pixel %1 non géré par %2"
-#: src/lib/util.cc:766
+#: src/lib/util.cc:768
msgid "Centre"
msgstr "Centre"
msgid "Checking existing image data"
msgstr ""
-#: src/lib/writer.cc:401
+#: src/lib/writer.cc:420
msgid "Computing audio digest"
msgstr ""
msgid "Computing digest"
msgstr ""
-#: src/lib/writer.cc:398
+#: src/lib/writer.cc:417
msgid "Computing image digest"
msgstr ""
-#: src/lib/util.cc:796
+#: src/lib/util.cc:798
#, fuzzy
msgid "Content and DCP have the same rate.\n"
msgstr "Le DCP et la source ont les mêmes cadences.\n"
msgid "Could not open %1 to send"
msgstr "Ouverture de %1 pour envoi impossible"
-#: src/lib/film.cc:949
+#: src/lib/film.cc:952
msgid "Could not read DCP to make KDM for"
msgstr "DCP illisible pour fabrication de KDM"
msgid "Cubic interpolating deinterlacer"
msgstr "Désentrelacement cubique interpolé"
-#: src/lib/util.cc:808
+#: src/lib/util.cc:810
#, fuzzy
msgid "DCP will run at %1%% of the content speed.\n"
msgstr "La cadence du DCP sera %1%% par rapport à la source.\n"
-#: src/lib/util.cc:799
+#: src/lib/util.cc:801
#, fuzzy
msgid "DCP will use every other frame of the content.\n"
msgstr "Le DCP utilisera une image sur deux de la source.\n"
msgid "Dolby CP650 and CP750"
msgstr "Dolby CP750"
-#: src/lib/util.cc:801
+#: src/lib/util.cc:803
#, fuzzy
msgid "Each content frame will be doubled in the DCP.\n"
msgstr "Chaque image source sera dupliquée dans le DCP.\n"
-#: src/lib/util.cc:803
+#: src/lib/util.cc:805
#, fuzzy
msgid "Each content frame will be repeated %1 more times in the DCP.\n"
msgstr "Chaque image source sera dupliquée dans le DCP.\n"
msgid "Email KDMs for %1"
msgstr ""
-#: src/lib/writer.cc:109
+#: src/lib/writer.cc:112
msgid "Encoding image data"
msgstr ""
msgid "Lanczos"
msgstr "Lanczos"
-#: src/lib/util.cc:764
+#: src/lib/util.cc:766
msgid "Left"
msgstr "Gauche"
-#: src/lib/util.cc:768
+#: src/lib/util.cc:770
msgid "Left surround"
msgstr "Arrière gauche"
-#: src/lib/util.cc:767
+#: src/lib/util.cc:769
msgid "Lfe (sub)"
msgstr "Basses fréquences"
msgid "Rating"
msgstr "Classification"
-#: src/lib/config.cc:81 src/lib/config.cc:165
+#: src/lib/config.cc:83 src/lib/config.cc:167
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/util.cc:765
+#: src/lib/util.cc:767
msgid "Right"
msgstr "Droite"
-#: src/lib/util.cc:769
+#: src/lib/util.cc:771
msgid "Right surround"
msgstr "Arrière droite"
"Le disque contenant le film est plein. Libérez de l'espace et essayez à "
"nouveau."
-#: src/lib/film.cc:372
+#: src/lib/film.cc:375
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Un autre filtre de désentrelacement"
-#: src/lib/film.cc:276
+#: src/lib/film.cc:279
msgid "You must add some content to the DCP before creating it"
msgstr "Ajoutez un contenu pour créer le DCP"
msgid "[still]"
msgstr "%1 [fixe]"
-#: src/lib/film.cc:237
+#: src/lib/film.cc:240
msgid "cannot contain slashes"
msgstr "slash interdit"
-#: src/lib/util.cc:546
+#: src/lib/util.cc:548
msgid "connect timed out"
msgstr "temps de connexion expiré"
msgid "connecting"
msgstr "connexion"
-#: src/lib/film.cc:272
+#: src/lib/film.cc:275
msgid "container"
msgstr "conteneur"
-#: src/lib/film.cc:280
+#: src/lib/film.cc:283
msgid "content type"
msgstr "type de contenu"
msgid "could not find video decoder"
msgstr "décodeur vidéo introuvable"
+#: src/lib/writer.cc:387
+msgid "could not move audio MXF into the DCP (%1)"
+msgstr ""
+
#: src/lib/sndfile_decoder.cc:45
msgid "could not open audio file for reading"
msgstr "lecture du fichier audio impossible"
msgid "could not write to file %1 (%2)"
msgstr "Écriture vers fichier distant (%1) impossible (%2)"
-#: src/lib/util.cc:566
+#: src/lib/util.cc:568
msgid "error during async_accept (%1)"
msgstr ""
-#: src/lib/util.cc:542
+#: src/lib/util.cc:544
msgid "error during async_connect (%1)"
msgstr ""
-#: src/lib/util.cc:615
+#: src/lib/util.cc:617
msgid "error during async_read (%1)"
msgstr ""
-#: src/lib/util.cc:587
+#: src/lib/util.cc:589
msgid "error during async_write (%1)"
msgstr ""
-#: src/lib/image_examiner.cc:68
-msgid "first frame in moving image directory is number %1"
-msgstr "la première image dans le dossier est la numéro %1"
-
#: src/lib/transcode_job.cc:94
msgid "frames per second"
msgstr "images par seconde"
msgid "minutes"
msgstr "minutes"
-#: src/lib/util.cc:687
+#: src/lib/util.cc:689
msgid "missing key %1 in key-value set"
msgstr "clé %1 non sélectionnée"
msgid "multi-part subtitles not yet supported"
msgstr "sous-titres en plusieurs parties non supportés"
-#: src/lib/film.cc:237 src/lib/film.cc:284
+#: src/lib/film.cc:240 src/lib/film.cc:287
msgid "name"
msgstr "nom"
msgid "remaining"
msgstr "restant"
-#: src/lib/config.cc:79 src/lib/video_content.cc:169
+#: src/lib/config.cc:81 src/lib/video_content.cc:169
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/config.cc:80
+#: src/lib/config.cc:82
msgid "sRGB non-linearised"
msgstr "sRGB non linéarisé"
msgid "still"
msgstr "%1 [fixe]"
-#: src/lib/image_examiner.cc:72
-msgid "there are %1 images in the directory but the last one is number %2"
-msgstr "il y a %1 images dans le dossier mais la dernière est la numéro %2"
-
#: src/lib/ffmpeg_examiner.cc:169
#, fuzzy
msgid "unknown"
msgstr "Erreur inconnue"
+#~ msgid "first frame in moving image directory is number %1"
+#~ msgstr "la première image dans le dossier est la numéro %1"
+
+#~ msgid "there are %1 images in the directory but the last one is number %2"
+#~ msgstr "il y a %1 images dans le dossier mais la dernière est la numéro %2"
+
#, fuzzy
#~ msgid "Examining content"
#~ msgstr "Examen du contenu"
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-04-28 10:26+0100\n"
"Last-Translator: Maci <macibro@gmail.com>\n"
"Language-Team: \n"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Non posso gestire il formato di pixel %1 durante %2"
-#: src/lib/util.cc:766
+#: src/lib/util.cc:768
msgid "Centre"
msgstr "Centro"
msgid "Checking existing image data"
msgstr ""
-#: src/lib/writer.cc:401
+#: src/lib/writer.cc:420
msgid "Computing audio digest"
msgstr ""
msgid "Computing digest"
msgstr ""
-#: src/lib/writer.cc:398
+#: src/lib/writer.cc:417
msgid "Computing image digest"
msgstr ""
-#: src/lib/util.cc:796
+#: src/lib/util.cc:798
#, fuzzy
msgid "Content and DCP have the same rate.\n"
msgstr "Il DCP e il sorgente hanno la stessa frequenza.\n"
msgid "Could not open %1 to send"
msgstr "Non posso aprire %1 da inviare"
-#: src/lib/film.cc:949
+#: src/lib/film.cc:952
msgid "Could not read DCP to make KDM for"
msgstr ""
msgid "Cubic interpolating deinterlacer"
msgstr "Deinterlacciatore cubico interpolato"
-#: src/lib/util.cc:808
+#: src/lib/util.cc:810
#, fuzzy
msgid "DCP will run at %1%% of the content speed.\n"
msgstr "Il DCP andrà al %1%% della velocità del sorgente.\n"
-#: src/lib/util.cc:799
+#: src/lib/util.cc:801
#, fuzzy
msgid "DCP will use every other frame of the content.\n"
msgstr "Il DCP userà ogni altro fotogramma del sorgente.\n"
msgid "Dolby CP650 and CP750"
msgstr "Dolby CP750"
-#: src/lib/util.cc:801
+#: src/lib/util.cc:803
#, fuzzy
msgid "Each content frame will be doubled in the DCP.\n"
msgstr "Ogni fotogramma del sorgente sarà raddoppiato nel DCP.\n"
-#: src/lib/util.cc:803
+#: src/lib/util.cc:805
#, fuzzy
msgid "Each content frame will be repeated %1 more times in the DCP.\n"
msgstr "Ogni fotogramma del sorgente sarà raddoppiato nel DCP.\n"
msgid "Email KDMs for %1"
msgstr ""
-#: src/lib/writer.cc:109
+#: src/lib/writer.cc:112
msgid "Encoding image data"
msgstr ""
msgid "Lanczos"
msgstr "Lanczos"
-#: src/lib/util.cc:764
+#: src/lib/util.cc:766
msgid "Left"
msgstr "Sinistro"
-#: src/lib/util.cc:768
+#: src/lib/util.cc:770
msgid "Left surround"
msgstr "Surround sinistro"
-#: src/lib/util.cc:767
+#: src/lib/util.cc:769
msgid "Lfe (sub)"
msgstr "Lfe(sub)"
msgid "Rating"
msgstr "Punteggio"
-#: src/lib/config.cc:81 src/lib/config.cc:165
+#: src/lib/config.cc:83 src/lib/config.cc:167
#, fuzzy
msgid "Rec. 709"
msgstr "Rec 709"
-#: src/lib/util.cc:765
+#: src/lib/util.cc:767
msgid "Right"
msgstr "Destro"
-#: src/lib/util.cc:769
+#: src/lib/util.cc:771
msgid "Right surround"
msgstr "Surround destro"
"Sul disco dove è memorizzato il film non c'è abbastanza spazio. Liberare "
"altro spazio e riprovare."
-#: src/lib/film.cc:372
+#: src/lib/film.cc:375
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Altro filtro di deinterlacciamento"
-#: src/lib/film.cc:276
+#: src/lib/film.cc:279
msgid "You must add some content to the DCP before creating it"
msgstr ""
msgid "[still]"
msgstr "ancora"
-#: src/lib/film.cc:237
+#: src/lib/film.cc:240
msgid "cannot contain slashes"
msgstr "non può contenere barre"
-#: src/lib/util.cc:546
+#: src/lib/util.cc:548
msgid "connect timed out"
msgstr "connessione scaduta"
msgid "connecting"
msgstr "mi sto connettendo"
-#: src/lib/film.cc:272
+#: src/lib/film.cc:275
#, fuzzy
msgid "container"
msgstr "contenuto"
-#: src/lib/film.cc:280
+#: src/lib/film.cc:283
msgid "content type"
msgstr "tipo di contenuto"
msgid "could not find video decoder"
msgstr "non riesco a trovare il decoder video"
+#: src/lib/writer.cc:387
+msgid "could not move audio MXF into the DCP (%1)"
+msgstr ""
+
#: src/lib/sndfile_decoder.cc:45
#, fuzzy
msgid "could not open audio file for reading"
msgid "could not write to file %1 (%2)"
msgstr "non posso scrivere il file (%1)"
-#: src/lib/util.cc:566
+#: src/lib/util.cc:568
msgid "error during async_accept (%1)"
msgstr ""
-#: src/lib/util.cc:542
+#: src/lib/util.cc:544
msgid "error during async_connect (%1)"
msgstr ""
-#: src/lib/util.cc:615
+#: src/lib/util.cc:617
msgid "error during async_read (%1)"
msgstr ""
-#: src/lib/util.cc:587
+#: src/lib/util.cc:589
msgid "error during async_write (%1)"
msgstr ""
-#: src/lib/image_examiner.cc:68
-msgid "first frame in moving image directory is number %1"
-msgstr ""
-
#: src/lib/transcode_job.cc:94
msgid "frames per second"
msgstr "fotogrammi al secondo"
msgid "minutes"
msgstr "minuti"
-#: src/lib/util.cc:687
+#: src/lib/util.cc:689
msgid "missing key %1 in key-value set"
msgstr "persa la chiave %1 tra i valori chiave"
msgid "multi-part subtitles not yet supported"
msgstr "sottotitoli multi-part non ancora supportati"
-#: src/lib/film.cc:237 src/lib/film.cc:284
+#: src/lib/film.cc:240 src/lib/film.cc:287
msgid "name"
msgstr "nome"
msgid "remaining"
msgstr "restano"
-#: src/lib/config.cc:79 src/lib/video_content.cc:169
+#: src/lib/config.cc:81 src/lib/video_content.cc:169
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/config.cc:80
+#: src/lib/config.cc:82
msgid "sRGB non-linearised"
msgstr ""
msgid "still"
msgstr "ancora"
-#: src/lib/image_examiner.cc:72
-msgid "there are %1 images in the directory but the last one is number %2"
-msgstr ""
-
#: src/lib/ffmpeg_examiner.cc:169
#, fuzzy
msgid "unknown"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-04-10 15:35+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Kan inte hantera pixelformat %1 under %2"
-#: src/lib/util.cc:766
+#: src/lib/util.cc:768
msgid "Centre"
msgstr "Mitt"
msgid "Checking existing image data"
msgstr ""
-#: src/lib/writer.cc:401
+#: src/lib/writer.cc:420
msgid "Computing audio digest"
msgstr ""
msgid "Computing digest"
msgstr ""
-#: src/lib/writer.cc:398
+#: src/lib/writer.cc:417
msgid "Computing image digest"
msgstr ""
-#: src/lib/util.cc:796
+#: src/lib/util.cc:798
#, fuzzy
msgid "Content and DCP have the same rate.\n"
msgstr "DCP och källa har samma bildfrekvens.\n"
msgid "Could not open %1 to send"
msgstr "Kunde inte öppna %1 för att skicka"
-#: src/lib/film.cc:949
+#: src/lib/film.cc:952
msgid "Could not read DCP to make KDM for"
msgstr ""
msgid "Cubic interpolating deinterlacer"
msgstr "Kubiskt interpolerande avflätare"
-#: src/lib/util.cc:808
+#: src/lib/util.cc:810
#, fuzzy
msgid "DCP will run at %1%% of the content speed.\n"
msgstr "DCP kommer att köras på %1%% av källans hastighet.\n"
-#: src/lib/util.cc:799
+#: src/lib/util.cc:801
#, fuzzy
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP kommer att använda varannan bild från källan.\n"
msgid "Dolby CP650 and CP750"
msgstr "Dolby CP750"
-#: src/lib/util.cc:801
+#: src/lib/util.cc:803
#, fuzzy
msgid "Each content 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/util.cc:803
+#: src/lib/util.cc:805
#, fuzzy
msgid "Each content frame will be repeated %1 more times in the DCP.\n"
msgstr "Varje bild från källan kommer att användas två gånger i DCPn.\n"
msgid "Email KDMs for %1"
msgstr ""
-#: src/lib/writer.cc:109
+#: src/lib/writer.cc:112
msgid "Encoding image data"
msgstr ""
msgid "Lanczos"
msgstr "Lanczos"
-#: src/lib/util.cc:764
+#: src/lib/util.cc:766
msgid "Left"
msgstr "Vänster"
-#: src/lib/util.cc:768
+#: src/lib/util.cc:770
msgid "Left surround"
msgstr "Vänster surround"
-#: src/lib/util.cc:767
+#: src/lib/util.cc:769
msgid "Lfe (sub)"
msgstr "Lfe (sub)"
msgid "Rating"
msgstr "Klassificeringsklipp"
-#: src/lib/config.cc:81 src/lib/config.cc:165
+#: src/lib/config.cc:83 src/lib/config.cc:167
#, fuzzy
msgid "Rec. 709"
msgstr "Rec 709"
-#: src/lib/util.cc:765
+#: src/lib/util.cc:767
msgid "Right"
msgstr "Höger"
-#: src/lib/util.cc:769
+#: src/lib/util.cc:771
msgid "Right surround"
msgstr "Höger surround"
"Enheten som filmen lagras på har för lite ledigt utrymme. Frigör utrymme och "
"försök igen."
-#: src/lib/film.cc:372
+#: src/lib/film.cc:375
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/film.cc:276
+#: src/lib/film.cc:279
msgid "You must add some content to the DCP before creating it"
msgstr ""
msgid "[still]"
msgstr "stillbild"
-#: src/lib/film.cc:237
+#: src/lib/film.cc:240
msgid "cannot contain slashes"
msgstr "får inte innehålla snedstreck"
# Svengelska
-#: src/lib/util.cc:546
+#: src/lib/util.cc:548
#, fuzzy
msgid "connect timed out"
msgstr "uppkopplingen tajmade ur"
msgid "connecting"
msgstr "kopplar upp"
-#: src/lib/film.cc:272
+#: src/lib/film.cc:275
#, fuzzy
msgid "container"
msgstr "innehåll"
-#: src/lib/film.cc:280
+#: src/lib/film.cc:283
msgid "content type"
msgstr "innehållstyp"
msgid "could not find video decoder"
msgstr "kunde inte hitta video-avkodare"
+#: src/lib/writer.cc:387
+msgid "could not move audio MXF into the DCP (%1)"
+msgstr ""
+
#: src/lib/sndfile_decoder.cc:45
#, fuzzy
msgid "could not open audio file for reading"
msgid "could not write to file %1 (%2)"
msgstr "kunde inte skriva till fil %1 (%2)"
-#: src/lib/util.cc:566
+#: src/lib/util.cc:568
msgid "error during async_accept (%1)"
msgstr ""
-#: src/lib/util.cc:542
+#: src/lib/util.cc:544
msgid "error during async_connect (%1)"
msgstr ""
-#: src/lib/util.cc:615
+#: src/lib/util.cc:617
msgid "error during async_read (%1)"
msgstr ""
-#: src/lib/util.cc:587
+#: src/lib/util.cc:589
msgid "error during async_write (%1)"
msgstr ""
-#: src/lib/image_examiner.cc:68
-msgid "first frame in moving image directory is number %1"
-msgstr ""
-
#: src/lib/transcode_job.cc:94
msgid "frames per second"
msgstr "bilder per sekund"
msgid "minutes"
msgstr "minuter"
-#: src/lib/util.cc:687
+#: src/lib/util.cc:689
msgid "missing key %1 in key-value set"
msgstr "saknad nyckel %1 i nyckel-värde grupp"
msgid "multi-part subtitles not yet supported"
msgstr "undertexter i flera delar stöds inte ännu"
-#: src/lib/film.cc:237 src/lib/film.cc:284
+#: src/lib/film.cc:240 src/lib/film.cc:287
msgid "name"
msgstr "namn"
msgid "remaining"
msgstr "återstående tid"
-#: src/lib/config.cc:79 src/lib/video_content.cc:169
+#: src/lib/config.cc:81 src/lib/video_content.cc:169
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/config.cc:80
+#: src/lib/config.cc:82
msgid "sRGB non-linearised"
msgstr ""
msgid "still"
msgstr "stillbild"
-#: src/lib/image_examiner.cc:72
-msgid "there are %1 images in the directory but the last one is number %2"
-msgstr ""
-
#: src/lib/ffmpeg_examiner.cc:169
#, fuzzy
msgid "unknown"
}
-SndfileContent::SndfileContent (shared_ptr<const Film> f, shared_ptr<const cxml::Node> node, int)
+SndfileContent::SndfileContent (shared_ptr<const Film> f, shared_ptr<const cxml::Node> node, int version)
: Content (f, node)
, AudioContent (f, node)
- , _audio_mapping (node->node_child ("AudioMapping"))
+ , _audio_mapping (node->node_child ("AudioMapping"), version)
{
_audio_channels = node->number_child<int> ("AudioChannels");
_audio_length = node->number_child<AudioFrame> ("AudioLength");
--- /dev/null
+/*
+ Copyright (C) 2014 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 <string>
+#include <sstream>
+#include <boost/algorithm/string.hpp>
+#include <curl/curl.h>
+#include <libcxml/cxml.h>
+#include "update.h"
+#include "version.h"
+#include "ui_signaller.h"
+
+#define BUFFER_SIZE 1024
+
+using std::cout;
+using std::min;
+using std::string;
+using std::stringstream;
+using boost::lexical_cast;
+
+UpdateChecker* UpdateChecker::_instance = 0;
+
+static size_t
+write_callback_wrapper (void* data, size_t size, size_t nmemb, void* user)
+{
+ return reinterpret_cast<UpdateChecker*>(user)->write_callback (data, size, nmemb);
+}
+
+UpdateChecker::UpdateChecker ()
+ : _buffer (new char[BUFFER_SIZE])
+ , _offset (0)
+ , _curl (0)
+ , _state (NOT_RUN)
+ , _emits (0)
+ , _to_do (0)
+{
+ curl_global_init (CURL_GLOBAL_ALL);
+ _curl = curl_easy_init ();
+
+ curl_easy_setopt (_curl, CURLOPT_URL, "http://dcpomatic.com/update");
+ curl_easy_setopt (_curl, CURLOPT_WRITEFUNCTION, write_callback_wrapper);
+ curl_easy_setopt (_curl, CURLOPT_WRITEDATA, this);
+ curl_easy_setopt (_curl, CURLOPT_TIMEOUT, 20);
+
+ string const agent = "dcpomatic/" + string (dcpomatic_version);
+ curl_easy_setopt (_curl, CURLOPT_USERAGENT, agent.c_str ());
+
+ _thread = new boost::thread (boost::bind (&UpdateChecker::thread, this));
+}
+
+UpdateChecker::~UpdateChecker ()
+{
+ /* We are not cleaning up our thread, but hey well */
+
+ curl_easy_cleanup (_curl);
+ curl_global_cleanup ();
+ delete[] _buffer;
+}
+
+void
+UpdateChecker::run ()
+{
+ boost::mutex::scoped_lock lm (_process_mutex);
+ _to_do++;
+ _condition.notify_one ();
+}
+
+void
+UpdateChecker::thread ()
+{
+ while (1) {
+ boost::mutex::scoped_lock lock (_process_mutex);
+ while (_to_do == 0) {
+ _condition.wait (lock);
+ }
+ --_to_do;
+ lock.unlock ();
+
+ try {
+ _offset = 0;
+
+ int r = curl_easy_perform (_curl);
+ if (r != CURLE_OK) {
+ set_state (FAILED);
+ return;
+ }
+
+ _buffer[_offset] = '\0';
+ stringstream s;
+ s << _buffer;
+ cxml::Document doc ("Update");
+ doc.read_stream (s);
+
+ {
+ boost::mutex::scoped_lock lm (_data_mutex);
+ _stable = doc.string_child ("Stable");
+ _test = doc.string_child ("Test");
+ }
+
+ string current = string (dcpomatic_version);
+ bool current_pre = false;
+ if (boost::algorithm::ends_with (current, "pre")) {
+ current = current.substr (0, current.length() - 3);
+ current_pre = true;
+ }
+
+ float current_float = lexical_cast<float> (current);
+ if (current_pre) {
+ current_float -= 0.005;
+ }
+
+ if (current_float < lexical_cast<float> (_stable)) {
+ set_state (YES);
+ } else {
+ set_state (NO);
+ }
+ } catch (...) {
+ set_state (FAILED);
+ }
+ }
+}
+
+size_t
+UpdateChecker::write_callback (void* data, size_t size, size_t nmemb)
+{
+ size_t const t = min (size * nmemb, size_t (BUFFER_SIZE - _offset - 1));
+ memcpy (_buffer + _offset, data, t);
+ _offset += t;
+ return t;
+}
+
+void
+UpdateChecker::set_state (State s)
+{
+ {
+ boost::mutex::scoped_lock lm (_data_mutex);
+ _state = s;
+ _emits++;
+ }
+
+ ui_signaller->emit (boost::bind (boost::ref (StateChanged)));
+}
+
+UpdateChecker *
+UpdateChecker::instance ()
+{
+ if (!_instance) {
+ _instance = new UpdateChecker ();
+ }
+
+ return _instance;
+}
+
+
--- /dev/null
+/*
+ Copyright (C) 2014 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 <boost/signals2.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/condition.hpp>
+#include <boost/thread.hpp>
+#include <curl/curl.h>
+
+class UpdateChecker
+{
+public:
+ UpdateChecker ();
+ ~UpdateChecker ();
+
+ void run ();
+
+ enum State {
+ YES,
+ FAILED,
+ NO,
+ NOT_RUN
+ };
+
+ State state () {
+ boost::mutex::scoped_lock lm (_data_mutex);
+ return _state;
+ }
+
+ std::string stable () {
+ boost::mutex::scoped_lock lm (_data_mutex);
+ return _stable;
+ }
+
+ std::string test () {
+ boost::mutex::scoped_lock lm (_data_mutex);
+ return _test;
+ }
+
+ /** @return true if the list signal emission was the first */
+ bool last_emit_was_first () const {
+ boost::mutex::scoped_lock lm (_data_mutex);
+ return _emits == 1;
+ }
+
+ size_t write_callback (void *, size_t, size_t);
+
+ boost::signals2::signal<void (void)> StateChanged;
+
+ static UpdateChecker* instance ();
+
+private:
+ static UpdateChecker* _instance;
+
+ void set_state (State);
+ void thread ();
+
+ char* _buffer;
+ int _offset;
+ CURL* _curl;
+
+ /** mutex to protect _state, _stable, _test and _emits */
+ mutable boost::mutex _data_mutex;
+ State _state;
+ std::string _stable;
+ std::string _test;
+ int _emits;
+
+ boost::thread* _thread;
+ boost::mutex _process_mutex;
+ boost::condition _condition;
+ int _to_do;
+};
void take_from_video_examiner (boost::shared_ptr<VideoExaminer>);
VideoFrame _video_length;
+ float _video_frame_rate;
private:
friend class ffmpeg_pts_offset_test;
void setup_default_colour_conversion ();
libdcp::Size _video_size;
- float _video_frame_rate;
VideoFrameType _video_frame_type;
Crop _crop;
Ratio const * _ratio;
using boost::shared_ptr;
using boost::weak_ptr;
-int const Writer::_maximum_frames_in_memory = 8;
+int const Writer::_maximum_frames_in_memory = Config::instance()->num_local_encoding_threads() + 4;
Writer::Writer (shared_ptr<const Film> f, weak_ptr<Job> j)
: _film (f)
_picture_asset_writer = _picture_asset->start_write (_first_nonexistant_frame > 0);
/* Write the sound asset into the film directory so that we leave the creation
- of the DCP directory until the last minute.
+ of the DCP directory until the last minute. Some versions of windows inexplicably
+ don't like overwriting existing files here, so try to remove it using boost.
*/
- _sound_asset.reset (new libdcp::SoundAsset (_film->dir ("."), _film->audio_mxf_filename ()));
+ boost::system::error_code ec;
+ boost::filesystem::remove (_film->file (_film->audio_mxf_filename ()), ec);
+ if (ec) {
+ _film->log()->log (String::compose ("Could not remove existing audio MXF file (%1)", ec.value ()));
+ }
+
+ _sound_asset.reset (new libdcp::SoundAsset (_film->directory (), _film->audio_mxf_filename ()));
_sound_asset->set_edit_rate (_film->video_frame_rate ());
_sound_asset->set_channels (_film->audio_channels ());
_sound_asset->set_sampling_rate (_film->audio_frame_rate ());
_sound_asset_writer->write (audio->data(), audio->frames());
}
-/** This must be called from Writer::thread() with an appropriate lock held,
- * and with _queue sorted.
- */
+/** This must be called from Writer::thread() with an appropriate lock held */
bool
-Writer::have_sequenced_image_at_queue_head () const
+Writer::have_sequenced_image_at_queue_head ()
{
if (_queue.empty ()) {
return false;
}
+ _queue.sort ();
+
/* The queue should contain only EYES_LEFT/EYES_RIGHT pairs or EYES_BOTH */
if (_queue.front().eyes == EYES_BOTH) {
while (1) {
- _queue.sort ();
-
if (_finish || _queued_full_in_memory > _maximum_frames_in_memory || have_sequenced_image_at_queue_head ()) {
break;
}
return;
}
- /* Write any frames that we can write; i.e. those that are in sequence */
+ /* Write any frames that we can write; i.e. those that are in sequence. */
while (have_sequenced_image_at_queue_head ()) {
QueueItem qi = _queue.front ();
_queue.pop_front ();
Write some FULL frames to disk.
*/
- /* Find one */
+ /* Find one from the back of the queue */
+ _queue.sort ();
list<QueueItem>::reverse_iterator i = _queue.rbegin ();
while (i != _queue.rend() && (i->type != QueueItem::FULL || !i->encoded)) {
++i;
_picture_asset->set_file_name (_film->video_mxf_filename ());
/* Move the audio MXF into the DCP */
-
- boost::filesystem::path audio_from;
- audio_from /= _film->dir (".");
- audio_from /= _film->audio_mxf_filename ();
boost::filesystem::path audio_to;
audio_to /= _film->dir (_film->dcp_name ());
audio_to /= _film->audio_mxf_filename ();
- boost::filesystem::rename (audio_from, audio_to, ec);
+ boost::filesystem::rename (_film->file (_film->audio_mxf_filename ()), audio_to, ec);
if (ec) {
- throw FileError (String::compose (_("could not move audio MXF into the DCP (%1)"), ec.value ()), audio_from);
+ throw FileError (
+ String::compose (_("could not move audio MXF into the DCP (%1)"), ec.value ()), _film->file (_film->audio_mxf_filename ())
+ );
}
_sound_asset->set_directory (_film->dir (_film->dcp_name ()));
void thread ();
void check_existing_picture_mxf ();
bool check_existing_picture_mxf_frame (FILE *, int, Eyes);
- bool have_sequenced_image_at_queue_head () const;
+ bool have_sequenced_image_at_queue_head ();
/** our Film */
boost::shared_ptr<const Film> _film;
transcoder.cc
types.cc
ui_signaller.cc
+ update.cc
util.cc
video_content.cc
video_decoder.cc
#include "wx/kdm_dialog.h"
#include "wx/servers_list_dialog.h"
#include "wx/hints_dialog.h"
+#include "wx/update_dialog.h"
#include "lib/film.h"
#include "lib/config.h"
#include "lib/util.h"
#include "lib/kdm.h"
#include "lib/send_kdm_email_job.h"
#include "lib/server_finder.h"
+#include "lib/update.h"
using std::cout;
using std::string;
ID_jobs_show_dcp,
ID_tools_hints,
ID_tools_encoding_servers,
+ ID_tools_check_for_updates
};
void
wxMenu* tools = new wxMenu;
add_item (tools, _("Hints..."), ID_tools_hints, 0);
- add_item (tools, _("Encoding Servers..."), ID_tools_encoding_servers, 0);
+ add_item (tools, _("Encoding servers..."), ID_tools_encoding_servers, 0);
+ add_item (tools, _("Check for updates"), ID_tools_check_for_updates, 0);
wxMenu* help = new wxMenu;
#ifdef __WXOSX__
setup_menu (bar);
SetMenuBar (bar);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_new, this), ID_file_new);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_open, this), ID_file_open);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_save, this), ID_file_save);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_properties, this), ID_file_properties);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_exit, this), wxID_EXIT);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::edit_preferences, this), wxID_PREFERENCES);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_make_dcp, this), ID_jobs_make_dcp);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_make_kdms, this), ID_jobs_make_kdms);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_send_dcp_to_tms, this), ID_jobs_send_dcp_to_tms);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_show_dcp, this), ID_jobs_show_dcp);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_hints, this), ID_tools_hints);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_encoding_servers, this), ID_tools_encoding_servers);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::help_about, this), wxID_ABOUT);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_new, this), ID_file_new);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_open, this), ID_file_open);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_save, this), ID_file_save);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_properties, this), ID_file_properties);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_exit, this), wxID_EXIT);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::edit_preferences, this), wxID_PREFERENCES);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_make_dcp, this), ID_jobs_make_dcp);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_make_kdms, this), ID_jobs_make_kdms);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_send_dcp_to_tms, this), ID_jobs_send_dcp_to_tms);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_show_dcp, this), ID_jobs_show_dcp);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_hints, this), ID_tools_hints);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_encoding_servers, this), ID_tools_encoding_servers);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_check_for_updates, this), ID_tools_check_for_updates);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::help_about, this), wxID_ABOUT);
Bind (wxEVT_CLOSE_WINDOW, boost::bind (&Frame::close, this, _1));
void jobs_make_dcp ()
{
+ double required;
+ double available;
+
+ if (!film->should_be_enough_disk_space (required, available)) {
+ if (!confirm_dialog (this, wxString::Format (_("The DCP for this film will take up about %.1f Gb, and the disk that you are using only has %.1f Gb available. Do you want to continue anyway?"), required, available))) {
+ return;
+ }
+ }
+
JobWrapper::make_dcp (this, film);
}
_servers_list_dialog->Show ();
}
+ void tools_check_for_updates ()
+ {
+ UpdateChecker::instance()->run ();
+ }
+
void help_about ()
{
AboutDialog* d = new AboutDialog (this);
film->set_name (boost::filesystem::path (film_to_create).filename().generic_string ());
}
- Frame* f = new Frame (_("DCP-o-matic"));
- SetTopWindow (f);
- f->Maximize ();
- f->Show ();
+ _frame = new Frame (_("DCP-o-matic"));
+ SetTopWindow (_frame);
+ _frame->Maximize ();
+ _frame->Show ();
ui_signaller = new wxUISignaller (this);
Bind (wxEVT_IDLE, boost::bind (&App::idle, this));
Bind (wxEVT_TIMER, boost::bind (&App::check, this));
_timer.reset (new wxTimer (this));
_timer->Start (1000);
-
+
+ UpdateChecker::instance()->StateChanged.connect (boost::bind (&App::update_checker_state_changed, this));
+ if (Config::instance()->check_for_updates ()) {
+ UpdateChecker::instance()->run ();
+ }
+
return true;
}
catch (exception& e)
}
}
+ void update_checker_state_changed ()
+ {
+ switch (UpdateChecker::instance()->state ()) {
+ case UpdateChecker::YES:
+ {
+ string test;
+ if (Config::instance()->check_for_test_updates ()) {
+ test = UpdateChecker::instance()->test ();
+ }
+ UpdateDialog* dialog = new UpdateDialog (_frame, UpdateChecker::instance()->stable (), test);
+ dialog->ShowModal ();
+ dialog->Destroy ();
+ break;
+ }
+ case UpdateChecker::NO:
+ if (!UpdateChecker::instance()->last_emit_was_first ()) {
+ error_dialog (_frame, _("There are no new versions of DCP-o-matic available."));
+ }
+ break;
+ case UpdateChecker::FAILED:
+ if (!UpdateChecker::instance()->last_emit_was_first ()) {
+ error_dialog (_frame, _("The DCP-o-matic download server could not be contacted."));
+ }
+ default:
+ break;
+ }
+ }
+
+ wxFrame* _frame;
shared_ptr<wxTimer> _timer;
};
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2014-01-02 13:17+0100\n"
"Last-Translator: \n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"X-Generator: Poedit 1.6.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/tools/dcpomatic.cc:361
+#: src/tools/dcpomatic.cc:366
msgid "%1 already exists as a file, so you cannot use it for a new film."
msgstr ""
"%1 existiert bereits als Datei, kann also nicht für einen neuen Film benutzt "
"werden."
-#: src/tools/dcpomatic.cc:237
+#: src/tools/dcpomatic.cc:241
msgid "&Edit"
msgstr "&Bearbeiten"
-#: src/tools/dcpomatic.cc:205
+#: src/tools/dcpomatic.cc:208
msgid "&Exit"
msgstr "%Ende"
-#: src/tools/dcpomatic.cc:235
+#: src/tools/dcpomatic.cc:239
msgid "&File"
msgstr "&Datei"
-#: src/tools/dcpomatic.cc:241
+#: src/tools/dcpomatic.cc:245
msgid "&Help"
msgstr "&Hilfe"
-#: src/tools/dcpomatic.cc:239
+#: src/tools/dcpomatic.cc:243
msgid "&Jobs"
msgstr "&Aufgaben"
-#: src/tools/dcpomatic.cc:219
+#: src/tools/dcpomatic.cc:222
msgid "&Make DCP"
msgstr "&DCP erstellen"
-#: src/tools/dcpomatic.cc:195
+#: src/tools/dcpomatic.cc:198
msgid "&Open..."
msgstr "&Öffnen..."
-#: src/tools/dcpomatic.cc:212 src/tools/dcpomatic.cc:215
+#: src/tools/dcpomatic.cc:215 src/tools/dcpomatic.cc:218
msgid "&Preferences..."
msgstr "&Einstellungen..."
-#: src/tools/dcpomatic.cc:199
+#: src/tools/dcpomatic.cc:202
msgid "&Properties..."
msgstr "&Eigenschaften..."
-#: src/tools/dcpomatic.cc:207
+#: src/tools/dcpomatic.cc:210
msgid "&Quit"
msgstr "&Beenden"
-#: src/tools/dcpomatic.cc:197
+#: src/tools/dcpomatic.cc:200
msgid "&Save"
msgstr "&Speichern"
-#: src/tools/dcpomatic.cc:221
+#: src/tools/dcpomatic.cc:224
msgid "&Send DCP to TMS"
msgstr "&DCP an TMS senden"
-#: src/tools/dcpomatic.cc:240
+#: src/tools/dcpomatic.cc:244
msgid "&Tools"
msgstr "&Werkzeuge"
-#: src/tools/dcpomatic.cc:232
+#: src/tools/dcpomatic.cc:236
msgid "About"
msgstr "Ãœber"
-#: src/tools/dcpomatic.cc:230
+#: src/tools/dcpomatic.cc:234
msgid "About DCP-o-matic"
msgstr "Ãœber DCP-o-matic"
-#: src/tools/dcpomatic.cc:619
+#: src/tools/dcpomatic.cc:230
+msgid "Check for updates"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:638
msgid "Could not load film %1 (%2)"
msgstr "Film %1 (%2) konnte nicht geladen werden"
-#: src/tools/dcpomatic.cc:406
+#: src/tools/dcpomatic.cc:411
#, c-format
msgid "Could not open film at %s (%s)"
msgstr "Der Film konnte nicht bei %s (%s) geöffnet werden"
-#: src/tools/dcpomatic.cc:499
+#: src/tools/dcpomatic.cc:513
msgid "Could not show DCP (could not run konqueror)"
msgstr "DCP kann nicht gezeigt werden (Konqueror konnte nicht geladen werden)"
-#: src/tools/dcpomatic.cc:492
+#: src/tools/dcpomatic.cc:506
msgid "Could not show DCP (could not run nautilus)"
msgstr "DCP Kann nicht gezeigt werden (Nautilus konnte nicht geladen werden)"
-#: src/tools/dcpomatic.cc:332 src/tools/dcpomatic.cc:577
-#: src/tools/dcpomatic.cc:630
+#: src/tools/dcpomatic.cc:337 src/tools/dcpomatic.cc:596
+#: src/tools/dcpomatic.cc:649
msgid "DCP-o-matic"
msgstr "DCP-o-matic"
-#: src/tools/dcpomatic.cc:226
-msgid "Encoding Servers..."
+#: src/tools/dcpomatic.cc:229
+#, fuzzy
+msgid "Encoding servers..."
msgstr "Encoding Server..."
-#: src/tools/dcpomatic.cc:88
+#: src/tools/dcpomatic.cc:90
msgid "Film changed"
msgstr "Film gewechselt"
-#: src/tools/dcpomatic.cc:225
+#: src/tools/dcpomatic.cc:228
msgid "Hints..."
msgstr "Tips..."
-#: src/tools/dcpomatic.cc:220
+#: src/tools/dcpomatic.cc:223
msgid "Make &KDMs..."
msgstr "&KDM erstellen..."
-#: src/tools/dcpomatic.cc:194
+#: src/tools/dcpomatic.cc:197
msgid "New..."
msgstr "Neu..."
-#: src/tools/dcpomatic.cc:222
+#: src/tools/dcpomatic.cc:225
msgid "S&how DCP"
msgstr "Z&eige DCP"
-#: src/tools/dcpomatic.cc:87
+#: src/tools/dcpomatic.cc:89
#, c-format
msgid "Save changes to film \"%s\" before closing?"
msgstr "Änderungen des Films \"%s\" für dem Schließen speichern ?"
-#: src/tools/dcpomatic.cc:381
+#: src/tools/dcpomatic.cc:386
msgid "Select film to open"
msgstr "Zu öffnenden Film auswählen"
-#: src/tools/dcpomatic.cc:351
+#: src/tools/dcpomatic.cc:454
+#, c-format
+msgid ""
+"The DCP for this film will take up about %.1f Gb, and the disk that you are "
+"using only has %.1f Gb available. Do you want to continue anyway?"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:729
+msgid "The DCP-o-matic download server could not be contacted."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:356
msgid ""
"The directory %1 already exists and is not empty. Are you sure you want to "
"use it?"
"Der Ordner %1 existiert bereits und ist nicht leer. Wollen Sie ihn trotzdem "
"benutzen ?"
-#: src/tools/dcpomatic.cc:539
+#: src/tools/dcpomatic.cc:724
+msgid "There are no new versions of DCP-o-matic available."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:558
msgid "There are unfinished jobs; are you sure you want to quit?"
msgstr ""
"Manche Aufgaben sind nicht erledigt; sind Sie sicher dass Sie Beenden "
"wollen ?"
-#: src/tools/dcpomatic.cc:540
+#: src/tools/dcpomatic.cc:559
msgid "Unfinished jobs"
msgstr "Unerledigte Aufgaben"
-#: src/tools/dcpomatic.cc:390
+#: src/tools/dcpomatic.cc:395
msgid ""
"You did not select a folder. Make sure that you select a folder before "
"clicking Open."
msgstr ""
"Project-Id-Version: DCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-11-09 02:47-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.7\n"
-#: src/tools/dcpomatic.cc:361
+#: src/tools/dcpomatic.cc:366
msgid "%1 already exists as a file, so you cannot use it for a new film."
msgstr "%1 ya existe como fichero, no puedes usarlo para una nueva pelÃcula."
-#: src/tools/dcpomatic.cc:237
+#: src/tools/dcpomatic.cc:241
msgid "&Edit"
msgstr "&Editar"
-#: src/tools/dcpomatic.cc:205
+#: src/tools/dcpomatic.cc:208
msgid "&Exit"
msgstr "&Salir"
-#: src/tools/dcpomatic.cc:235
+#: src/tools/dcpomatic.cc:239
msgid "&File"
msgstr "&Archivo"
-#: src/tools/dcpomatic.cc:241
+#: src/tools/dcpomatic.cc:245
msgid "&Help"
msgstr "&Ayuda"
-#: src/tools/dcpomatic.cc:239
+#: src/tools/dcpomatic.cc:243
msgid "&Jobs"
msgstr "&Tareas"
-#: src/tools/dcpomatic.cc:219
+#: src/tools/dcpomatic.cc:222
msgid "&Make DCP"
msgstr "&Crear DCP"
-#: src/tools/dcpomatic.cc:195
+#: src/tools/dcpomatic.cc:198
msgid "&Open..."
msgstr "&Abrir..."
-#: src/tools/dcpomatic.cc:212 src/tools/dcpomatic.cc:215
+#: src/tools/dcpomatic.cc:215 src/tools/dcpomatic.cc:218
msgid "&Preferences..."
msgstr "&Preferencias..."
-#: src/tools/dcpomatic.cc:199
+#: src/tools/dcpomatic.cc:202
msgid "&Properties..."
msgstr "&Propiedades..."
-#: src/tools/dcpomatic.cc:207
+#: src/tools/dcpomatic.cc:210
msgid "&Quit"
msgstr "&Salir"
-#: src/tools/dcpomatic.cc:197
+#: src/tools/dcpomatic.cc:200
msgid "&Save"
msgstr "&Guardar"
-#: src/tools/dcpomatic.cc:221
+#: src/tools/dcpomatic.cc:224
msgid "&Send DCP to TMS"
msgstr "&Enviar DCP al TMS"
-#: src/tools/dcpomatic.cc:240
+#: src/tools/dcpomatic.cc:244
msgid "&Tools"
msgstr ""
-#: src/tools/dcpomatic.cc:232
+#: src/tools/dcpomatic.cc:236
msgid "About"
msgstr "Acerca de"
-#: src/tools/dcpomatic.cc:230
+#: src/tools/dcpomatic.cc:234
#, fuzzy
msgid "About DCP-o-matic"
msgstr "DVD-o-matic"
-#: src/tools/dcpomatic.cc:619
+#: src/tools/dcpomatic.cc:230
+msgid "Check for updates"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:638
#, fuzzy
msgid "Could not load film %1 (%2)"
msgstr "No se pudo cargar la pelÃcula %s (%s)"
-#: src/tools/dcpomatic.cc:406
+#: src/tools/dcpomatic.cc:411
#, c-format
msgid "Could not open film at %s (%s)"
msgstr "No se pudo cargar la pelÃcula en %s (%s)"
-#: src/tools/dcpomatic.cc:499
+#: src/tools/dcpomatic.cc:513
msgid "Could not show DCP (could not run konqueror)"
msgstr "No se pudo mostrar el DCP (no se pudo ejecutar konqueror)"
-#: src/tools/dcpomatic.cc:492
+#: src/tools/dcpomatic.cc:506
msgid "Could not show DCP (could not run nautilus)"
msgstr "No se pudo mostrar el DCP (no se pudo ejecutar nautilus)"
-#: src/tools/dcpomatic.cc:332 src/tools/dcpomatic.cc:577
-#: src/tools/dcpomatic.cc:630
+#: src/tools/dcpomatic.cc:337 src/tools/dcpomatic.cc:596
+#: src/tools/dcpomatic.cc:649
msgid "DCP-o-matic"
msgstr "DCP-o-matic"
-#: src/tools/dcpomatic.cc:226
-msgid "Encoding Servers..."
+#: src/tools/dcpomatic.cc:229
+msgid "Encoding servers..."
msgstr ""
-#: src/tools/dcpomatic.cc:88
+#: src/tools/dcpomatic.cc:90
msgid "Film changed"
msgstr "PelÃcula cambiada"
-#: src/tools/dcpomatic.cc:225
+#: src/tools/dcpomatic.cc:228
msgid "Hints..."
msgstr ""
-#: src/tools/dcpomatic.cc:220
+#: src/tools/dcpomatic.cc:223
msgid "Make &KDMs..."
msgstr "Crear &KDMs..."
-#: src/tools/dcpomatic.cc:194
+#: src/tools/dcpomatic.cc:197
msgid "New..."
msgstr "Nuevo..."
-#: src/tools/dcpomatic.cc:222
+#: src/tools/dcpomatic.cc:225
msgid "S&how DCP"
msgstr "&Mostrar DCP"
-#: src/tools/dcpomatic.cc:87
+#: src/tools/dcpomatic.cc:89
#, c-format
msgid "Save changes to film \"%s\" before closing?"
msgstr "Guardar cambios de la pelÃcula \"%s\" antes de cerrar?"
-#: src/tools/dcpomatic.cc:381
+#: src/tools/dcpomatic.cc:386
msgid "Select film to open"
msgstr "Selecciona la pelÃcula a abrir"
-#: src/tools/dcpomatic.cc:351
+#: src/tools/dcpomatic.cc:454
+#, c-format
+msgid ""
+"The DCP for this film will take up about %.1f Gb, and the disk that you are "
+"using only has %.1f Gb available. Do you want to continue anyway?"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:729
+msgid "The DCP-o-matic download server could not be contacted."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:356
msgid ""
"The directory %1 already exists and is not empty. Are you sure you want to "
"use it?"
msgstr ""
"El directorio %1 ya existe y no está vacÃo. ¿Estás seguro de querer usarlo?"
-#: src/tools/dcpomatic.cc:539
+#: src/tools/dcpomatic.cc:724
+msgid "There are no new versions of DCP-o-matic available."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:558
msgid "There are unfinished jobs; are you sure you want to quit?"
msgstr "Hay trabajos sin finalizar; ¿estás seguro de querer cerrar?"
-#: src/tools/dcpomatic.cc:540
+#: src/tools/dcpomatic.cc:559
msgid "Unfinished jobs"
msgstr "Trabajos sin finalizar"
-#: src/tools/dcpomatic.cc:390
+#: src/tools/dcpomatic.cc:395
msgid ""
"You did not select a folder. Make sure that you select a folder before "
"clicking Open."
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-11-25 18:58+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
-#: src/tools/dcpomatic.cc:361
+#: src/tools/dcpomatic.cc:366
msgid "%1 already exists as a file, so you cannot use it for a new film."
msgstr ""
"Le fichier %1 existe déjà , vous ne pouvez l'utiliser pour un nouveau projet."
-#: src/tools/dcpomatic.cc:237
+#: src/tools/dcpomatic.cc:241
msgid "&Edit"
msgstr "&Edition"
-#: src/tools/dcpomatic.cc:205
+#: src/tools/dcpomatic.cc:208
msgid "&Exit"
msgstr "&Quitter"
-#: src/tools/dcpomatic.cc:235
+#: src/tools/dcpomatic.cc:239
msgid "&File"
msgstr "&Fichier"
-#: src/tools/dcpomatic.cc:241
+#: src/tools/dcpomatic.cc:245
msgid "&Help"
msgstr "&Aide"
-#: src/tools/dcpomatic.cc:239
+#: src/tools/dcpomatic.cc:243
msgid "&Jobs"
msgstr "&Travaux"
-#: src/tools/dcpomatic.cc:219
+#: src/tools/dcpomatic.cc:222
msgid "&Make DCP"
msgstr "&Créer le DCP"
-#: src/tools/dcpomatic.cc:195
+#: src/tools/dcpomatic.cc:198
msgid "&Open..."
msgstr "&Ouvrir..."
-#: src/tools/dcpomatic.cc:212 src/tools/dcpomatic.cc:215
+#: src/tools/dcpomatic.cc:215 src/tools/dcpomatic.cc:218
msgid "&Preferences..."
msgstr "&Préférences..."
-#: src/tools/dcpomatic.cc:199
+#: src/tools/dcpomatic.cc:202
msgid "&Properties..."
msgstr "&Propriétés..."
-#: src/tools/dcpomatic.cc:207
+#: src/tools/dcpomatic.cc:210
msgid "&Quit"
msgstr "&Quitter"
-#: src/tools/dcpomatic.cc:197
+#: src/tools/dcpomatic.cc:200
msgid "&Save"
msgstr "&Enregistrer"
-#: src/tools/dcpomatic.cc:221
+#: src/tools/dcpomatic.cc:224
msgid "&Send DCP to TMS"
msgstr "&Envoyer le DCP dans le TMS"
-#: src/tools/dcpomatic.cc:240
+#: src/tools/dcpomatic.cc:244
msgid "&Tools"
msgstr ""
-#: src/tools/dcpomatic.cc:232
+#: src/tools/dcpomatic.cc:236
msgid "About"
msgstr "A Propos"
-#: src/tools/dcpomatic.cc:230
+#: src/tools/dcpomatic.cc:234
msgid "About DCP-o-matic"
msgstr "À propos de DCP-o-matic"
-#: src/tools/dcpomatic.cc:619
+#: src/tools/dcpomatic.cc:230
+msgid "Check for updates"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:638
msgid "Could not load film %1 (%2)"
msgstr "Impossible de charger le film %1 (%2)"
-#: src/tools/dcpomatic.cc:406
+#: src/tools/dcpomatic.cc:411
#, c-format
msgid "Could not open film at %s (%s)"
msgstr "Impossible d'ouvrir le film à %s (%s)"
-#: src/tools/dcpomatic.cc:499
+#: src/tools/dcpomatic.cc:513
msgid "Could not show DCP (could not run konqueror)"
msgstr "Ouverture du DCP impossible (konqueror est introuvable)"
-#: src/tools/dcpomatic.cc:492
+#: src/tools/dcpomatic.cc:506
msgid "Could not show DCP (could not run nautilus)"
msgstr "Ouverture du DCP impossible (nautilus est introuvable)"
-#: src/tools/dcpomatic.cc:332 src/tools/dcpomatic.cc:577
-#: src/tools/dcpomatic.cc:630
+#: src/tools/dcpomatic.cc:337 src/tools/dcpomatic.cc:596
+#: src/tools/dcpomatic.cc:649
msgid "DCP-o-matic"
msgstr "DCP-o-matic"
-#: src/tools/dcpomatic.cc:226
-msgid "Encoding Servers..."
+#: src/tools/dcpomatic.cc:229
+msgid "Encoding servers..."
msgstr ""
-#: src/tools/dcpomatic.cc:88
+#: src/tools/dcpomatic.cc:90
msgid "Film changed"
msgstr "Film changé"
-#: src/tools/dcpomatic.cc:225
+#: src/tools/dcpomatic.cc:228
msgid "Hints..."
msgstr ""
-#: src/tools/dcpomatic.cc:220
+#: src/tools/dcpomatic.cc:223
msgid "Make &KDMs..."
msgstr "Générer &KDMs..."
-#: src/tools/dcpomatic.cc:194
+#: src/tools/dcpomatic.cc:197
msgid "New..."
msgstr "Nouveau..."
-#: src/tools/dcpomatic.cc:222
+#: src/tools/dcpomatic.cc:225
msgid "S&how DCP"
msgstr "Voir le DCP"
-#: src/tools/dcpomatic.cc:87
+#: src/tools/dcpomatic.cc:89
#, c-format
msgid "Save changes to film \"%s\" before closing?"
msgstr "Enregistrer les changements du film \"%s\" avant de fermer ?"
-#: src/tools/dcpomatic.cc:381
+#: src/tools/dcpomatic.cc:386
msgid "Select film to open"
msgstr "Sélectionner le film à ouvrir"
-#: src/tools/dcpomatic.cc:351
+#: src/tools/dcpomatic.cc:454
+#, c-format
+msgid ""
+"The DCP for this film will take up about %.1f Gb, and the disk that you are "
+"using only has %.1f Gb available. Do you want to continue anyway?"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:729
+msgid "The DCP-o-matic download server could not be contacted."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:356
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/dcpomatic.cc:539
+#: src/tools/dcpomatic.cc:724
+msgid "There are no new versions of DCP-o-matic available."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:558
msgid "There are unfinished jobs; are you sure you want to quit?"
msgstr "Il y a des tâches inachevées ; voulez-vous vraiment quitter ?"
-#: src/tools/dcpomatic.cc:540
+#: src/tools/dcpomatic.cc:559
msgid "Unfinished jobs"
msgstr "Travaux incomplets"
-#: src/tools/dcpomatic.cc:390
+#: src/tools/dcpomatic.cc:395
msgid ""
"You did not select a folder. Make sure that you select a folder before "
"clicking Open."
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-04-28 10:31+0100\n"
"Last-Translator: Maci <macibro@gmail.com>\n"
"Language-Team: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.5\n"
-#: src/tools/dcpomatic.cc:361
+#: src/tools/dcpomatic.cc:366
msgid "%1 already exists as a file, so you cannot use it for a new film."
msgstr ""
-#: src/tools/dcpomatic.cc:237
+#: src/tools/dcpomatic.cc:241
msgid "&Edit"
msgstr "&Modifica"
-#: src/tools/dcpomatic.cc:205
+#: src/tools/dcpomatic.cc:208
msgid "&Exit"
msgstr ""
-#: src/tools/dcpomatic.cc:235
+#: src/tools/dcpomatic.cc:239
msgid "&File"
msgstr "&File"
-#: src/tools/dcpomatic.cc:241
+#: src/tools/dcpomatic.cc:245
msgid "&Help"
msgstr "&Aiuto"
-#: src/tools/dcpomatic.cc:239
+#: src/tools/dcpomatic.cc:243
msgid "&Jobs"
msgstr "&Lavori"
-#: src/tools/dcpomatic.cc:219
+#: src/tools/dcpomatic.cc:222
msgid "&Make DCP"
msgstr "&Crea DCP"
-#: src/tools/dcpomatic.cc:195
+#: src/tools/dcpomatic.cc:198
msgid "&Open..."
msgstr "&Apri..."
-#: src/tools/dcpomatic.cc:212 src/tools/dcpomatic.cc:215
+#: src/tools/dcpomatic.cc:215 src/tools/dcpomatic.cc:218
msgid "&Preferences..."
msgstr "&Preferenze..."
-#: src/tools/dcpomatic.cc:199
+#: src/tools/dcpomatic.cc:202
msgid "&Properties..."
msgstr "&Proprieta'..."
-#: src/tools/dcpomatic.cc:207
+#: src/tools/dcpomatic.cc:210
msgid "&Quit"
msgstr "&Esci"
-#: src/tools/dcpomatic.cc:197
+#: src/tools/dcpomatic.cc:200
msgid "&Save"
msgstr "&Salva"
-#: src/tools/dcpomatic.cc:221
+#: src/tools/dcpomatic.cc:224
msgid "&Send DCP to TMS"
msgstr "&Invia DCP a TMS"
-#: src/tools/dcpomatic.cc:240
+#: src/tools/dcpomatic.cc:244
msgid "&Tools"
msgstr ""
-#: src/tools/dcpomatic.cc:232
+#: src/tools/dcpomatic.cc:236
msgid "About"
msgstr "Informazioni"
-#: src/tools/dcpomatic.cc:230
+#: src/tools/dcpomatic.cc:234
#, fuzzy
msgid "About DCP-o-matic"
msgstr "DVD-o-matic"
-#: src/tools/dcpomatic.cc:619
+#: src/tools/dcpomatic.cc:230
+msgid "Check for updates"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:638
msgid "Could not load film %1 (%2)"
msgstr "Non posso caricare il film %s (%s)"
-#: src/tools/dcpomatic.cc:406
+#: src/tools/dcpomatic.cc:411
#, c-format
msgid "Could not open film at %s (%s)"
msgstr "Non posso aprire il film in %s (%s)"
-#: src/tools/dcpomatic.cc:499
+#: src/tools/dcpomatic.cc:513
msgid "Could not show DCP (could not run konqueror)"
msgstr ""
-#: src/tools/dcpomatic.cc:492
+#: src/tools/dcpomatic.cc:506
msgid "Could not show DCP (could not run nautilus)"
msgstr ""
-#: src/tools/dcpomatic.cc:332 src/tools/dcpomatic.cc:577
-#: src/tools/dcpomatic.cc:630
+#: src/tools/dcpomatic.cc:337 src/tools/dcpomatic.cc:596
+#: src/tools/dcpomatic.cc:649
#, fuzzy
msgid "DCP-o-matic"
msgstr "DVD-o-matic"
-#: src/tools/dcpomatic.cc:226
-msgid "Encoding Servers..."
+#: src/tools/dcpomatic.cc:229
+msgid "Encoding servers..."
msgstr ""
-#: src/tools/dcpomatic.cc:88
+#: src/tools/dcpomatic.cc:90
msgid "Film changed"
msgstr "Film modificato"
-#: src/tools/dcpomatic.cc:225
+#: src/tools/dcpomatic.cc:228
msgid "Hints..."
msgstr ""
-#: src/tools/dcpomatic.cc:220
+#: src/tools/dcpomatic.cc:223
msgid "Make &KDMs..."
msgstr ""
-#: src/tools/dcpomatic.cc:194
+#: src/tools/dcpomatic.cc:197
msgid "New..."
msgstr "Nuovo"
-#: src/tools/dcpomatic.cc:222
+#: src/tools/dcpomatic.cc:225
msgid "S&how DCP"
msgstr "&Mostra DCP"
-#: src/tools/dcpomatic.cc:87
+#: src/tools/dcpomatic.cc:89
#, c-format
msgid "Save changes to film \"%s\" before closing?"
msgstr "Salvare i cambiamenti del film \"%s\" prima di chiudere?"
-#: src/tools/dcpomatic.cc:381
+#: src/tools/dcpomatic.cc:386
msgid "Select film to open"
msgstr "Seleziona il film da aprire"
-#: src/tools/dcpomatic.cc:351
+#: src/tools/dcpomatic.cc:454
+#, c-format
+msgid ""
+"The DCP for this film will take up about %.1f Gb, and the disk that you are "
+"using only has %.1f Gb available. Do you want to continue anyway?"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:729
+msgid "The DCP-o-matic download server could not be contacted."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:356
msgid ""
"The directory %1 already exists and is not empty. Are you sure you want to "
"use it?"
msgstr ""
-#: src/tools/dcpomatic.cc:539
+#: src/tools/dcpomatic.cc:724
+msgid "There are no new versions of DCP-o-matic available."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:558
msgid "There are unfinished jobs; are you sure you want to quit?"
msgstr ""
-#: src/tools/dcpomatic.cc:540
+#: src/tools/dcpomatic.cc:559
msgid "Unfinished jobs"
msgstr ""
-#: src/tools/dcpomatic.cc:390
+#: src/tools/dcpomatic.cc:395
msgid ""
"You did not select a folder. Make sure that you select a folder before "
"clicking Open."
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-04-09 10:12+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.5\n"
-#: src/tools/dcpomatic.cc:361
+#: src/tools/dcpomatic.cc:366
msgid "%1 already exists as a file, so you cannot use it for a new film."
msgstr ""
-#: src/tools/dcpomatic.cc:237
+#: src/tools/dcpomatic.cc:241
msgid "&Edit"
msgstr "&Redigera"
-#: src/tools/dcpomatic.cc:205
+#: src/tools/dcpomatic.cc:208
msgid "&Exit"
msgstr ""
-#: src/tools/dcpomatic.cc:235
+#: src/tools/dcpomatic.cc:239
msgid "&File"
msgstr "&Fil"
-#: src/tools/dcpomatic.cc:241
+#: src/tools/dcpomatic.cc:245
msgid "&Help"
msgstr "&Hjälp"
-#: src/tools/dcpomatic.cc:239
+#: src/tools/dcpomatic.cc:243
msgid "&Jobs"
msgstr "&Jobb"
-#: src/tools/dcpomatic.cc:219
+#: src/tools/dcpomatic.cc:222
msgid "&Make DCP"
msgstr "&Skapa DCP"
-#: src/tools/dcpomatic.cc:195
+#: src/tools/dcpomatic.cc:198
msgid "&Open..."
msgstr "&Öppna"
-#: src/tools/dcpomatic.cc:212 src/tools/dcpomatic.cc:215
+#: src/tools/dcpomatic.cc:215 src/tools/dcpomatic.cc:218
msgid "&Preferences..."
msgstr "&Inställningar"
-#: src/tools/dcpomatic.cc:199
+#: src/tools/dcpomatic.cc:202
msgid "&Properties..."
msgstr "&Egenskaper"
-#: src/tools/dcpomatic.cc:207
+#: src/tools/dcpomatic.cc:210
msgid "&Quit"
msgstr "&Avsluta"
-#: src/tools/dcpomatic.cc:197
+#: src/tools/dcpomatic.cc:200
msgid "&Save"
msgstr "&Spara"
-#: src/tools/dcpomatic.cc:221
+#: src/tools/dcpomatic.cc:224
msgid "&Send DCP to TMS"
msgstr "&Skicka DCP till TMS"
-#: src/tools/dcpomatic.cc:240
+#: src/tools/dcpomatic.cc:244
msgid "&Tools"
msgstr ""
-#: src/tools/dcpomatic.cc:232
+#: src/tools/dcpomatic.cc:236
msgid "About"
msgstr "Om"
-#: src/tools/dcpomatic.cc:230
+#: src/tools/dcpomatic.cc:234
#, fuzzy
msgid "About DCP-o-matic"
msgstr "DVD-o-matic"
-#: src/tools/dcpomatic.cc:619
+#: src/tools/dcpomatic.cc:230
+msgid "Check for updates"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:638
msgid "Could not load film %1 (%2)"
msgstr "Kunde inte öppna filmen %1 (%2)"
-#: src/tools/dcpomatic.cc:406
+#: src/tools/dcpomatic.cc:411
#, c-format
msgid "Could not open film at %s (%s)"
msgstr "Kunde inte öppna filmen vid %s (%s)"
-#: src/tools/dcpomatic.cc:499
+#: src/tools/dcpomatic.cc:513
msgid "Could not show DCP (could not run konqueror)"
msgstr ""
-#: src/tools/dcpomatic.cc:492
+#: src/tools/dcpomatic.cc:506
msgid "Could not show DCP (could not run nautilus)"
msgstr ""
-#: src/tools/dcpomatic.cc:332 src/tools/dcpomatic.cc:577
-#: src/tools/dcpomatic.cc:630
+#: src/tools/dcpomatic.cc:337 src/tools/dcpomatic.cc:596
+#: src/tools/dcpomatic.cc:649
msgid "DCP-o-matic"
msgstr "DCP-o-matic"
-#: src/tools/dcpomatic.cc:226
-msgid "Encoding Servers..."
+#: src/tools/dcpomatic.cc:229
+msgid "Encoding servers..."
msgstr ""
-#: src/tools/dcpomatic.cc:88
+#: src/tools/dcpomatic.cc:90
msgid "Film changed"
msgstr "Film ändrad"
-#: src/tools/dcpomatic.cc:225
+#: src/tools/dcpomatic.cc:228
msgid "Hints..."
msgstr ""
-#: src/tools/dcpomatic.cc:220
+#: src/tools/dcpomatic.cc:223
msgid "Make &KDMs..."
msgstr ""
-#: src/tools/dcpomatic.cc:194
+#: src/tools/dcpomatic.cc:197
msgid "New..."
msgstr "Ny..."
-#: src/tools/dcpomatic.cc:222
+#: src/tools/dcpomatic.cc:225
msgid "S&how DCP"
msgstr "&Visa DCP"
-#: src/tools/dcpomatic.cc:87
+#: src/tools/dcpomatic.cc:89
#, fuzzy, c-format
msgid "Save changes to film \"%s\" before closing?"
msgstr "Spara ändringarna till filmen \"%s\" före avslut?"
-#: src/tools/dcpomatic.cc:381
+#: src/tools/dcpomatic.cc:386
msgid "Select film to open"
msgstr "Välj film att öppna"
-#: src/tools/dcpomatic.cc:351
+#: src/tools/dcpomatic.cc:454
+#, c-format
+msgid ""
+"The DCP for this film will take up about %.1f Gb, and the disk that you are "
+"using only has %.1f Gb available. Do you want to continue anyway?"
+msgstr ""
+
+#: src/tools/dcpomatic.cc:729
+msgid "The DCP-o-matic download server could not be contacted."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:356
msgid ""
"The directory %1 already exists and is not empty. Are you sure you want to "
"use it?"
msgstr ""
-#: src/tools/dcpomatic.cc:539
+#: src/tools/dcpomatic.cc:724
+msgid "There are no new versions of DCP-o-matic available."
+msgstr ""
+
+#: src/tools/dcpomatic.cc:558
msgid "There are unfinished jobs; are you sure you want to quit?"
msgstr ""
-#: src/tools/dcpomatic.cc:540
+#: src/tools/dcpomatic.cc:559
msgid "Unfinished jobs"
msgstr ""
-#: src/tools/dcpomatic.cc:390
+#: src/tools/dcpomatic.cc:395
msgid ""
"You did not select a folder. Make sure that you select a folder before "
"clicking Open."
--- /dev/null
+/*
+ Copyright (C) 2014 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.
+
+*/
+
+class UpdateDialog
+{
+public:
+ UpdateDialog (wxWindow *);
+
+private:
+ wxGauge* _gauge;
+ wxStaticText* _message;
+ boost::thread* _thread;
+ boost::optional<UpdateChecker::Result> _result;
+ std::string _stable;
+};
supported_by.Add (wxT ("Rodolfo Giuliano"));
supported_by.Add (wxT ("Sylvain Mielle"));
supported_by.Add (wxT ("Ivan Pullman"));
+ supported_by.Add (wxT ("Aldo Midali"));
add_section (_("Supported by"), supported_by);
sizer->Add (_notebook, wxSizerFlags().Centre().Border(wxALL, 16).Expand());
--- /dev/null
+/*
+ Copyright (C) 2014 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 <cmath>
+#include <wx/spinctrl.h>
+#include "audio_gain_dialog.h"
+#include "wx_util.h"
+
+AudioGainDialog::AudioGainDialog (wxWindow* parent, int c, int d, float v)
+ : wxDialog (parent, wxID_ANY, _("Channel gain"))
+{
+ wxFlexGridSizer* table = new wxFlexGridSizer (3, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+ table->AddGrowableCol (1, 1);
+
+ add_label_to_sizer (table, this, wxString::Format (_("Gain for content channel %d in DCP channel %d"), c + 1, d + 1), false);
+ _gain = new wxSpinCtrlDouble (this);
+ table->Add (_gain);
+
+ add_label_to_sizer (table, this, _("dB"), false);
+
+ wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
+ overall_sizer->Add (table, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
+
+ wxSizer* buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL);
+ if (buttons) {
+ overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
+ }
+
+ SetSizer (overall_sizer);
+ overall_sizer->Layout ();
+ overall_sizer->SetSizeHints (this);
+
+ _gain->SetRange (-144, 0);
+ _gain->SetDigits (1);
+ _gain->SetIncrement (0.1);
+
+ _gain->SetValue (20 * log10 (v));
+}
+
+float
+AudioGainDialog::value () const
+{
+ if (_gain->GetValue() <= -144) {
+ return 0;
+ }
+
+ return pow (10, _gain->GetValue () / 20);
+}
--- /dev/null
+/*
+ Copyright (C) 2014 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/wx.h>
+
+class wxSpinCtrlDouble;
+
+class AudioGainDialog : public wxDialog
+{
+public:
+ AudioGainDialog (wxWindow *, int, int, float);
+
+ float value () const;
+
+private:
+ wxSpinCtrlDouble* _gain;
+};
#include "lib/util.h"
#include "audio_mapping_view.h"
#include "wx_util.h"
+#include "audio_gain_dialog.h"
using std::cout;
using std::list;
+using std::string;
+using std::max;
using boost::shared_ptr;
+using boost::lexical_cast;
-/* This could go away with wxWidgets 2.9, which has an API call
- to find these values.
-*/
+#define INDICATOR_SIZE 20
-#ifdef __WXMSW__
-#define CHECKBOX_WIDTH 16
-#define CHECKBOX_HEIGHT 16
-#else
-#define CHECKBOX_WIDTH 20
-#define CHECKBOX_HEIGHT 20
-#endif
+enum {
+ ID_off = 1,
+ ID_full = 2,
+ ID_minus3dB = 3,
+ ID_edit = 4
+};
class NoSelectionStringRenderer : public wxGridCellStringRenderer
{
}
};
-class CheckBoxRenderer : public wxGridCellRenderer
+class ValueRenderer : public wxGridCellRenderer
{
public:
void Draw (wxGrid& grid, wxGridCellAttr &, wxDC& dc, const wxRect& rect, int row, int col, bool)
{
- dc.SetPen (*wxThePenList->FindOrCreatePen (wxColour (255, 255, 255), 0, wxPENSTYLE_SOLID));
+ dc.SetPen (*wxThePenList->FindOrCreatePen (wxColour (255, 255, 255), 1, wxPENSTYLE_SOLID));
+ dc.SetBrush (*wxTheBrushList->FindOrCreateBrush (wxColour (255, 255, 255), wxBRUSHSTYLE_SOLID));
dc.DrawRectangle (rect);
+
+ int const xo = (rect.GetWidth() - INDICATOR_SIZE) / 2;
+ int const yo = (rect.GetHeight() - INDICATOR_SIZE) / 2;
+
+ dc.SetPen (*wxThePenList->FindOrCreatePen (wxColour (0, 0, 0), 1, wxPENSTYLE_SOLID));
+ dc.SetBrush (*wxTheBrushList->FindOrCreateBrush (wxColour (255, 255, 255), wxBRUSHSTYLE_SOLID));
+ dc.DrawRectangle (wxRect (rect.GetLeft() + xo, rect.GetTop() + yo, INDICATOR_SIZE, INDICATOR_SIZE));
+
+ float const value = lexical_cast<float> (wx_to_std (grid.GetCellValue (row, col)));
+ float const value_dB = 20 * log10 (value);
+ int const range = 18;
+ int height = 0;
+ if (value_dB > -range) {
+ height = INDICATOR_SIZE * (1 + value_dB / range);
+ }
+
+ height = max (0, height);
- wxRendererNative::Get().DrawCheckBox (
- &grid,
- dc, rect,
- grid.GetCellValue (row, col) == wxT("1") ? static_cast<int>(wxCONTROL_CHECKED) : 0
- );
+ if (value > 0) {
+ /* Make sure we get a little bit of the marker if there is any gain */
+ height = max (3, height);
+ }
+
+ dc.SetBrush (*wxTheBrushList->FindOrCreateBrush (wxColour (0, 255, 0), wxBRUSHSTYLE_SOLID));
+ dc.DrawRectangle (wxRect (rect.GetLeft() + xo, rect.GetTop() + yo + INDICATOR_SIZE - height, INDICATOR_SIZE, height));
}
wxSize GetBestSize (wxGrid &, wxGridCellAttr &, wxDC &, int, int)
{
- return wxSize (CHECKBOX_WIDTH + 4, CHECKBOX_HEIGHT + 4);
+ return wxSize (INDICATOR_SIZE + 4, INDICATOR_SIZE + 4);
}
wxGridCellRenderer* Clone () const
{
- return new CheckBoxRenderer;
+ return new ValueRenderer;
}
};
AudioMappingView::AudioMappingView (wxWindow* parent)
: wxPanel (parent, wxID_ANY)
+ , _menu_row (0)
+ , _menu_column (1)
+ , _last_tooltip_row (0)
+ , _last_tooltip_column (0)
{
_grid = new wxGrid (this, wxID_ANY);
- _grid->CreateGrid (0, 7);
+ _grid->CreateGrid (0, MAX_AUDIO_CHANNELS + 1);
_grid->HideRowLabels ();
_grid->DisableDragRowSize ();
_grid->DisableDragColSize ();
SetSizerAndFit (_sizer);
Bind (wxEVT_GRID_CELL_LEFT_CLICK, boost::bind (&AudioMappingView::left_click, this, _1));
+ Bind (wxEVT_GRID_CELL_RIGHT_CLICK, boost::bind (&AudioMappingView::right_click, this, _1));
+ _grid->GetGridWindow()->Bind (wxEVT_MOTION, boost::bind (&AudioMappingView::mouse_moved, this, _1));
+
+ _menu = new wxMenu;
+ _menu->Append (ID_off, _("Off"));
+ _menu->Append (ID_full, _("Full"));
+ _menu->Append (ID_minus3dB, _("-3dB"));
+ _menu->Append (ID_edit, _("Edit..."));
+
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&AudioMappingView::off, this), ID_off);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&AudioMappingView::full, this), ID_full);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&AudioMappingView::minus3dB, this), ID_minus3dB);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&AudioMappingView::edit, this), ID_edit);
}
+void
+AudioMappingView::map_changed ()
+{
+ update_cells ();
+ Changed (_map);
+ _last_tooltip_column = -1;
+}
+
void
AudioMappingView::left_click (wxGridEvent& ev)
{
if (ev.GetCol() == 0) {
return;
}
+
+ libdcp::Channel d = static_cast<libdcp::Channel> (ev.GetCol() - 1);
- if (_grid->GetCellValue (ev.GetRow(), ev.GetCol()) == wxT("1")) {
- _grid->SetCellValue (ev.GetRow(), ev.GetCol(), wxT("0"));
+ if (_map.get (ev.GetRow(), d) > 0) {
+ _map.set (ev.GetRow(), d, 0);
} else {
- _grid->SetCellValue (ev.GetRow(), ev.GetCol(), wxT("1"));
+ _map.set (ev.GetRow(), d, 1);
}
- _map = AudioMapping (_map.content_channels ());
-
- for (int i = 0; i < _grid->GetNumberRows(); ++i) {
- for (int j = 1; j < _grid->GetNumberCols(); ++j) {
- if (_grid->GetCellValue (i, j) == wxT ("1")) {
- _map.add (i, static_cast<libdcp::Channel> (j - 1));
- }
- }
+ map_changed ();
+}
+
+void
+AudioMappingView::right_click (wxGridEvent& ev)
+{
+ if (ev.GetCol() == 0) {
+ return;
}
- Changed (_map);
+ _menu_row = ev.GetRow ();
+ _menu_column = ev.GetCol ();
+ PopupMenu (_menu, ev.GetPosition ());
+}
+
+void
+AudioMappingView::off ()
+{
+ _map.set (_menu_row, static_cast<libdcp::Channel> (_menu_column - 1), 0);
+ map_changed ();
+}
+
+void
+AudioMappingView::full ()
+{
+ _map.set (_menu_row, static_cast<libdcp::Channel> (_menu_column - 1), 1);
+ map_changed ();
+}
+
+void
+AudioMappingView::minus3dB ()
+{
+ _map.set (_menu_row, static_cast<libdcp::Channel> (_menu_column - 1), 1 / sqrt (2));
+ map_changed ();
+}
+
+void
+AudioMappingView::edit ()
+{
+ libdcp::Channel d = static_cast<libdcp::Channel> (_menu_column - 1);
+
+ AudioGainDialog* dialog = new AudioGainDialog (this, _menu_row, _menu_column - 1, _map.get (_menu_row, d));
+ if (dialog->ShowModal () == wxID_OK) {
+ _map.set (_menu_row, d, dialog->value ());
+ map_changed ();
+ }
+
+ dialog->Destroy ();
}
void
AudioMappingView::set (AudioMapping map)
{
_map = map;
-
+ update_cells ();
+}
+
+void
+AudioMappingView::update_cells ()
+{
if (_grid->GetNumberRows ()) {
_grid->DeleteRows (0, _grid->GetNumberRows ());
}
_grid->InsertRows (0, _map.content_channels ());
- for (int r = 0; r < _map.content_channels(); ++r) {
- for (int c = 1; c < 7; ++c) {
- _grid->SetCellRenderer (r, c, new CheckBoxRenderer);
+ for (int i = 0; i < _map.content_channels(); ++i) {
+ for (int j = 0; j < MAX_AUDIO_CHANNELS; ++j) {
+ _grid->SetCellRenderer (i, j + 1, new ValueRenderer);
}
}
for (int i = 0; i < _map.content_channels(); ++i) {
_grid->SetCellValue (i, 0, wxString::Format (wxT("%d"), i + 1));
- list<libdcp::Channel> const d = _map.content_to_dcp (i);
- for (list<libdcp::Channel>::const_iterator j = d.begin(); j != d.end(); ++j) {
- int const c = static_cast<int>(*j) + 1;
- if (c < _grid->GetNumberCols ()) {
- _grid->SetCellValue (i, c, wxT("1"));
- }
+ for (int j = 1; j < _grid->GetNumberCols(); ++j) {
+ _grid->SetCellValue (i, j, std_to_wx (lexical_cast<string> (_map.get (i, static_cast<libdcp::Channel> (j - 1)))));
}
}
+
+ _grid->AutoSize ();
}
+/** @param c Number of DCP channels */
void
AudioMappingView::set_channels (int c)
{
set_column_labels ();
}
- set (_map);
+ update_cells ();
}
void
_grid->AutoSize ();
}
+
+void
+AudioMappingView::mouse_moved (wxMouseEvent& ev)
+{
+ int xx;
+ int yy;
+ _grid->CalcUnscrolledPosition (ev.GetX(), ev.GetY(), &xx, &yy);
+
+ int const row = _grid->YToRow (yy);
+ int const column = _grid->XToCol (xx);
+
+ if (row < 0 || column < 1) {
+ _grid->GetGridWindow()->SetToolTip ("");
+ _last_tooltip_row = row;
+ _last_tooltip_column = column;
+ }
+
+ if (row != _last_tooltip_row || column != _last_tooltip_column) {
+
+ wxString s;
+ float const gain = _map.get (row, static_cast<libdcp::Channel> (column - 1));
+ if (gain == 0) {
+ s = wxString::Format (_("No audio will be passed from content channel %d to DCP channel %d."), row + 1, column);
+ } else if (gain == 1) {
+ s = wxString::Format (_("Audio will be passed from content channel %d to DCP channel %d unaltered."), row + 1, column);
+ } else {
+ float const dB = 20 * log10 (gain);
+ s = wxString::Format (_("Audio will be passed from content channel %d to DCP channel %d with gain %.1fdB."), row + 1, column, dB);
+ }
+
+ _grid->GetGridWindow()->SetToolTip (s + " " + _("Right click to change gain."));
+ _last_tooltip_row = row;
+ _last_tooltip_column = column;
+ }
+
+ ev.Skip ();
+}
private:
void left_click (wxGridEvent &);
+ void right_click (wxGridEvent &);
+ void mouse_moved (wxMouseEvent &);
void set_column_labels ();
+ void update_cells ();
+ void map_changed ();
+
+ void off ();
+ void full ();
+ void minus3dB ();
+ void edit ();
wxGrid* _grid;
wxSizer* _sizer;
AudioMapping _map;
+
+ wxMenu* _menu;
+ int _menu_row;
+ int _menu_column;
+
+ int _last_tooltip_row;
+ int _last_tooltip_column;
};
grid->Add (_gain_calculate_button, wxGBPosition (r, 3));
++r;
- add_label_to_grid_bag_sizer (grid, this, _("Audio Delay"), false, wxGBPosition (r, 0));
+ add_label_to_grid_bag_sizer (grid, this, _("Audio Delay"), true, wxGBPosition (r, 0));
_delay = new ContentSpinCtrl<AudioContent> (
this,
new wxSpinCtrl (this),
boost::mem_fn (&AudioContent::set_audio_delay)
);
- _delay->add (grid, wxGBPosition (r,1 ));
+ _delay->add (grid, wxGBPosition (r, 1));
/// TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
add_label_to_grid_bag_sizer (grid, this, _("ms"), false, wxGBPosition (r, 2));
++r;
add_label_to_grid_bag_sizer (grid, this, _("Audio Stream"), true, wxGBPosition (r, 0));
_stream = new wxChoice (this, wxID_ANY);
grid->Add (_stream, wxGBPosition (r, 1));
- ++r;
-
- _description = new wxStaticText (this, wxID_ANY, wxT (""));
- grid->Add (_description, wxGBPosition (r, 0));
+ _description = add_label_to_grid_bag_sizer (grid, this, "", false, wxGBPosition (r, 3));
++r;
_mapping = new AudioMappingView (this);
} else if (property == FFmpegContentProperty::AUDIO_STREAM) {
setup_stream_description ();
_mapping->set (acs ? acs->audio_mapping () : AudioMapping ());
+ _sizer->Layout ();
} else if (property == FFmpegContentProperty::AUDIO_STREAMS) {
_stream->Clear ();
if (fcs) {
{
FFmpegContentList fc = _editor->selected_ffmpeg_content ();
if (fc.size() != 1) {
+ _description->SetLabel ("");
return;
}
CinemaDialog::CinemaDialog (wxWindow* parent, string title, string name, string email)
: wxDialog (parent, wxID_ANY, std_to_wx (title))
{
- wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6);
+ wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
table->AddGrowableCol (1, 1);
- add_label_to_sizer (table, this, "Name", true);
+ add_label_to_sizer (table, this, _("Name"), true);
_name = new wxTextCtrl (this, wxID_ANY, std_to_wx (name), wxDefaultPosition, wxSize (256, -1));
table->Add (_name, 1, wxEXPAND);
- add_label_to_sizer (table, this, "Email address for KDM delivery", true);
+ add_label_to_sizer (table, this, _("Email address for KDM delivery"), true);
_email = new wxTextCtrl (this, wxID_ANY, std_to_wx (email), wxDefaultPosition, wxSize (256, -1));
table->Add (_email, 1, wxEXPAND);
add_label_to_sizer (table, _misc_panel, _("From address for KDM emails"), true);
_kdm_from = new wxTextCtrl (_misc_panel, wxID_ANY);
table->Add (_kdm_from, 1, wxEXPAND | wxALL);
+
+ _check_for_updates = new wxCheckBox (_misc_panel, wxID_ANY, _("Check for updates on startup"));
+ table->Add (_check_for_updates, 1, wxEXPAND | wxALL);
+ table->AddSpacer (0);
+
+ _check_for_test_updates = new wxCheckBox (_misc_panel, wxID_ANY, _("Check for testing updates as well as stable ones"));
+ table->Add (_check_for_test_updates, 1, wxEXPAND | wxALL);
+ table->AddSpacer (0);
Config* config = Config::instance ();
_mail_password->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::mail_password_changed, this));
_kdm_from->SetValue (std_to_wx (config->kdm_from ()));
_kdm_from->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ConfigDialog::kdm_from_changed, this));
+ _check_for_updates->SetValue (config->check_for_updates ());
+ _check_for_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&ConfigDialog::check_for_updates_changed, this));
+ _check_for_test_updates->SetValue (config->check_for_test_updates ());
+ _check_for_test_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&ConfigDialog::check_for_test_updates_changed, this));
}
void
{
Config::instance()->set_kdm_email (wx_to_std (_kdm_email->GetValue ()));
}
+
+void
+ConfigDialog::check_for_updates_changed ()
+{
+ Config::instance()->set_check_for_updates (_check_for_updates->GetValue ());
+}
+
+void
+ConfigDialog::check_for_test_updates_changed ()
+{
+ Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ());
+}
void make_colour_conversions_panel ();
void make_kdm_email_panel ();
+ void check_for_updates_changed ();
+ void check_for_test_updates_changed ();
+
wxNotebook* _notebook;
wxPanel* _misc_panel;
wxPanel* _defaults_panel;
wxPanel* _kdm_email_panel;
wxTextCtrl* _kdm_email;
wxCheckBox* _use_any_servers;
+ wxCheckBox* _check_for_updates;
+ wxCheckBox* _check_for_test_updates;
EditableList<std::string, ServerDialog>* _servers_list;
};
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2014-01-05 23:08+0100\n"
"Last-Translator: \n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "(restart DCP-o-matic to see language changes)"
msgstr "(DCP-o-matic zum ändern der Sprache neu starten)"
+#: src/wx/audio_mapping_view.cc:133
+msgid "-3dB"
+msgstr ""
+
#: src/wx/colour_conversion_editor.cc:83
msgid "1 / "
msgstr "1/"
-#: src/wx/audio_panel.cc:237
+#: src/wx/audio_panel.cc:239
msgid "1 channel"
msgstr "1 Kanal"
msgid "4K"
msgstr "4K"
+#: src/wx/update_dialog.cc:34
+msgid "A new version of DCP-o-matic is available."
+msgstr ""
+
#: src/wx/about_dialog.cc:30
msgid "About DCP-o-matic"
msgstr "Ãœber DCP-o-matic"
msgid "Audio channels"
msgstr "Ton Kanäle"
+#: src/wx/audio_mapping_view.cc:321
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d unaltered."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:324
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d with gain "
+"%.1fdB."
+msgstr ""
+
#: src/wx/job_wrapper.cc:38
#, c-format
msgid "Bad setting for %s (%s)"
msgid "But I have to use fader"
msgstr "Aber ich muss diese Lautstärke benutzen"
-#: src/wx/audio_mapping_view.cc:191
+#: src/wx/audio_mapping_view.cc:280
msgid "C"
msgstr "C"
msgid "Cancel"
msgstr "Abbrechen"
+#: src/wx/audio_gain_dialog.cc:26
+#, fuzzy
+msgid "Channel gain"
+msgstr "Kanäle"
+
#: src/wx/audio_dialog.cc:44
msgid "Channels"
msgstr "Kanäle"
+#: src/wx/config_dialog.cc:143
+msgid "Check for testing updates as well as stable ones"
+msgstr ""
+
+#: src/wx/config_dialog.cc:139
+msgid "Check for updates on startup"
+msgstr ""
+
#: src/wx/content_menu.cc:182
msgid "Choose a file"
msgstr "Datei auswählen"
msgid "Content Type"
msgstr "Inhalt Typ"
-#: src/wx/audio_mapping_view.cc:180
+#: src/wx/audio_mapping_view.cc:269
msgid "Content channel"
msgstr "Inhalt Kanal"
msgid "Create in folder"
msgstr "In Ordner erstellen"
-#: src/wx/config_dialog.cc:332
+#: src/wx/config_dialog.cc:344
msgid "Creator"
msgstr "Ersteller"
msgid "DCP-o-matic audio - %s"
msgstr "DCP-o-matic Ton - %s"
-#: src/wx/config_dialog.cc:204
+#: src/wx/config_dialog.cc:216
msgid "Default DCI name details"
msgstr "Standard DCI Name Details"
-#: src/wx/config_dialog.cc:217
+#: src/wx/config_dialog.cc:229
msgid "Default JPEG2000 bandwidth"
msgstr "Standard JPEG2000 Bandbreite"
-#: src/wx/config_dialog.cc:226
+#: src/wx/config_dialog.cc:238
msgid "Default audio delay"
msgstr "Standard Ton Delay"
-#: src/wx/config_dialog.cc:208
+#: src/wx/config_dialog.cc:220
msgid "Default container"
msgstr "Standard Container"
-#: src/wx/config_dialog.cc:212
+#: src/wx/config_dialog.cc:224
msgid "Default content type"
msgstr "Standard Inhalt Typ"
-#: src/wx/config_dialog.cc:196
+#: src/wx/config_dialog.cc:208
msgid "Default directory for new films"
msgstr "Standard Ordner für neue Filme"
-#: src/wx/config_dialog.cc:188
+#: src/wx/config_dialog.cc:200
msgid "Default duration of still images"
msgstr "Satndard Länge der Standbilder"
msgid "Edit Screen..."
msgstr "Saal bearbeiten..."
-#: src/wx/config_dialog.cc:205 src/wx/video_panel.cc:157
-#: src/wx/video_panel.cc:174 src/wx/editable_list.h:63
+#: src/wx/audio_mapping_view.cc:134 src/wx/config_dialog.cc:217
+#: src/wx/video_panel.cc:157 src/wx/video_panel.cc:174
+#: src/wx/editable_list.h:63
msgid "Edit..."
msgstr "Bearbeiten..."
+#: src/wx/cinema_dialog.cc:35
+#, fuzzy
+msgid "Email address for KDM delivery"
+msgstr "Von Adresse für KDM Emails"
+
#: src/wx/servers_list_dialog.cc:30
msgid "Encoding Servers"
msgstr "Encodier Server"
msgid "From address for KDM emails"
msgstr "Von Adresse für KDM Emails"
-#: src/wx/timing_panel.cc:40
+#: src/wx/audio_mapping_view.cc:132
+msgid "Full"
+msgstr ""
+
+#: src/wx/timing_panel.cc:42
msgid "Full length"
msgstr "Ganze Länge"
msgid "Gain Calculator"
msgstr "Lautstärken Rechner"
+#: src/wx/audio_gain_dialog.cc:31
+#, c-format
+msgid "Gain for content channel %d in DCP channel %d"
+msgstr ""
+
#: src/wx/properties_dialog.cc:57
msgid "Gb"
msgstr "Gb"
msgid "Host name or IP address"
msgstr "Host Name oder IP-Adresse"
-#: src/wx/audio_panel.cc:241
+#: src/wx/audio_panel.cc:243
msgid "Hz"
msgstr "Hz"
msgid "I want to play this back at fader"
msgstr "Ich möchte bei dieser Lautstärke spielen"
-#: src/wx/config_dialog.cc:289
+#: src/wx/config_dialog.cc:301
msgid "IP address"
msgstr "IP Adresse"
-#: src/wx/config_dialog.cc:361
+#: src/wx/config_dialog.cc:373
msgid "IP address / host name"
msgstr "IP Adresse / Host Name"
msgid "Interop"
msgstr "Interop"
-#: src/wx/config_dialog.cc:328
+#: src/wx/config_dialog.cc:340
msgid "Issuer"
msgstr "Herausgeber"
msgid "Keep video in sequence"
msgstr "Bildreihenfolge behalten"
-#: src/wx/audio_mapping_view.cc:183
+#: src/wx/audio_mapping_view.cc:272
msgid "L"
msgstr "L"
msgid "Left crop"
msgstr "Links beschneiden"
-#: src/wx/audio_mapping_view.cc:195
+#: src/wx/audio_mapping_view.cc:284
msgid "Lfe"
msgstr "LFE"
msgid "Linearise input gamma curve for low values"
msgstr "Linearisiere Eingangs Gamma für niedrige Werte"
-#: src/wx/audio_mapping_view.cc:199
+#: src/wx/audio_mapping_view.cc:288
msgid "Ls"
msgstr "SL"
-#: src/wx/config_dialog.cc:221 src/wx/film_editor.cc:180
+#: src/wx/config_dialog.cc:233 src/wx/film_editor.cc:180
msgid "MBps"
msgstr "MBps"
msgid "My Documents"
msgstr "Meine Dokumente"
-#: src/wx/config_dialog.cc:527 src/wx/film_editor.cc:111
-#: src/wx/preset_colour_conversion_dialog.cc:38
+#: src/wx/cinema_dialog.cc:31 src/wx/config_dialog.cc:539
+#: src/wx/film_editor.cc:111 src/wx/preset_colour_conversion_dialog.cc:38
msgid "Name"
msgstr "Name"
msgid "New Film"
msgstr "Neuer Film"
+#: src/wx/update_dialog.cc:36
+msgid "New versions of DCP-o-matic are available."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:319
+#, c-format
+msgid "No audio will be passed from content channel %d to DCP channel %d."
+msgstr ""
+
#: src/wx/video_panel.cc:198
msgid "No stretch"
msgstr "Ohne Zerrung"
msgid "None"
msgstr "Kein"
+#: src/wx/audio_mapping_view.cc:131
+msgid "Off"
+msgstr ""
+
#: src/wx/config_dialog.cc:119
msgid "Outgoing mail server"
msgstr "Ausgehender Mail Server"
msgid "Padded with black to %dx%d (%.2f:1)\n"
msgstr "Mit Schwarz gefüllt auf %dx%d (%.2f:1)\n"
-#: src/wx/config_dialog.cc:301
+#: src/wx/config_dialog.cc:313
msgid "Password"
msgstr "Passwort"
msgid "Play"
msgstr "Abspielen"
-#: src/wx/timing_panel.cc:49
+#: src/wx/timing_panel.cc:51
msgid "Play length"
msgstr "Abspiellänge"
msgid "Please wait; audio is being analysed..."
msgstr "Bitte warten; Ton wird analysiert..."
-#: src/wx/timing_panel.cc:37
+#: src/wx/timing_panel.cc:39
msgid "Position"
msgstr "Position"
-#: src/wx/audio_mapping_view.cc:187
+#: src/wx/audio_mapping_view.cc:276
msgid "R"
msgstr "R"
msgid "Resume"
msgstr "Neustart"
+#: src/wx/audio_mapping_view.cc:327
+msgid "Right click to change gain."
+msgstr ""
+
#: src/wx/video_panel.cc:101
msgid "Right crop"
msgstr "Rechts beschneiden"
-#: src/wx/audio_mapping_view.cc:203
+#: src/wx/audio_mapping_view.cc:292
msgid "Rs"
msgstr "SR"
msgid "Server"
msgstr "Server"
-#: src/wx/timecode.cc:65
+#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60
msgid "Set"
msgstr "Setzen"
msgid "Snap"
msgstr "Einschnappen"
+#: src/wx/update_dialog.cc:43
+#, fuzzy
+msgid "Stable version "
+msgstr "Inhalt Version"
+
#: src/wx/film_editor.cc:185
msgid "Standard"
msgstr "Standard"
msgid "Subtitles"
msgstr "Untertitel"
-#: src/wx/about_dialog.cc:131
+#: src/wx/about_dialog.cc:132
msgid "Supported by"
msgstr "Unterstützt durch"
msgid "TMS"
msgstr "TMS"
-#: src/wx/config_dialog.cc:293
+#: src/wx/config_dialog.cc:305
msgid "Target path"
msgstr "Zielpfad"
msgid "Territory (e.g. UK)"
msgstr "Gebiet (z.B. UK)"
+#: src/wx/update_dialog.cc:48
+#, fuzzy
+msgid "Test version "
+msgstr "Inhalt Version"
+
#: src/wx/content_menu.cc:223
msgid ""
"The content file(s) you specified are not the same as those that are "
msgid "Timeline..."
msgstr "Zeitlinie..."
-#: src/wx/timing_panel.cc:32
+#: src/wx/timing_panel.cc:34
msgid "Timing"
msgstr "Timing"
msgid "Translated by"
msgstr "Ãœbersetzt von"
-#: src/wx/timing_panel.cc:46
+#: src/wx/timing_panel.cc:48
msgid "Trim from end"
msgstr "Schnitt vom Ende"
-#: src/wx/timing_panel.cc:43
+#: src/wx/timing_panel.cc:45
msgid "Trim from start"
msgstr "Schnitt vom Anfang"
msgid "Up"
msgstr "Nach oben"
+#: src/wx/update_dialog.cc:27
+msgid "Update"
+msgstr ""
+
#: src/wx/film_editor.cc:126
msgid "Use DCI name"
msgstr "DCI Name benutzen"
-#: src/wx/config_dialog.cc:357
+#: src/wx/config_dialog.cc:369
msgid "Use all servers"
msgstr "Alle Server benutzen"
msgid "Use preset"
msgstr "Preset benutzen"
-#: src/wx/config_dialog.cc:297
+#: src/wx/config_dialog.cc:309
msgid "User name"
msgstr "Benutzer Name"
msgid "Video"
msgstr "Bild"
+#: src/wx/timing_panel.cc:56
+#, fuzzy
+msgid "Video frame rate"
+msgstr "Bild Rate"
+
#: src/wx/subtitle_panel.cc:39
msgid "With Subtitles"
msgstr "Mit Untertitel"
msgid "audio"
msgstr "Ton"
-#: src/wx/audio_panel.cc:239
+#: src/wx/audio_panel.cc:241
msgid "channels"
msgstr "Kanäle"
msgid "counting..."
msgstr "zähle..."
-#: src/wx/audio_panel.cc:62
+#: src/wx/audio_gain_dialog.cc:35 src/wx/audio_panel.cc:62
msgid "dB"
msgstr "dB"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:230
+#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:242
msgid "ms"
msgstr "ms"
-#: src/wx/config_dialog.cc:192
+#: src/wx/config_dialog.cc:204
msgid "s"
msgstr "s"
msgstr ""
"Project-Id-Version: libdcpomatic-wx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-11-09 03:00-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
msgid "(restart DCP-o-matic to see language changes)"
msgstr "(reinicia DCP-o-matic para ver el cambio de idioma)"
+#: src/wx/audio_mapping_view.cc:133
+msgid "-3dB"
+msgstr ""
+
#: src/wx/colour_conversion_editor.cc:83
msgid "1 / "
msgstr ""
-#: src/wx/audio_panel.cc:237
+#: src/wx/audio_panel.cc:239
msgid "1 channel"
msgstr "1 canal"
msgid "4K"
msgstr ""
+#: src/wx/update_dialog.cc:34
+msgid "A new version of DCP-o-matic is available."
+msgstr ""
+
#: src/wx/about_dialog.cc:30
#, fuzzy
msgid "About DCP-o-matic"
msgid "Audio channels"
msgstr "canales"
+#: src/wx/audio_mapping_view.cc:321
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d unaltered."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:324
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d with gain "
+"%.1fdB."
+msgstr ""
+
#: src/wx/job_wrapper.cc:38
#, c-format
msgid "Bad setting for %s (%s)"
msgid "But I have to use fader"
msgstr "pero tengo que usar el fader a"
-#: src/wx/audio_mapping_view.cc:191
+#: src/wx/audio_mapping_view.cc:280
msgid "C"
msgstr ""
msgid "Cancel"
msgstr "Cancelar"
+#: src/wx/audio_gain_dialog.cc:26
+#, fuzzy
+msgid "Channel gain"
+msgstr "Canales"
+
#: src/wx/audio_dialog.cc:44
msgid "Channels"
msgstr "Canales"
+#: src/wx/config_dialog.cc:143
+msgid "Check for testing updates as well as stable ones"
+msgstr ""
+
+#: src/wx/config_dialog.cc:139
+msgid "Check for updates on startup"
+msgstr ""
+
#: src/wx/content_menu.cc:182
#, fuzzy
msgid "Choose a file"
msgid "Content Type"
msgstr "Tipo de contenido"
-#: src/wx/audio_mapping_view.cc:180
+#: src/wx/audio_mapping_view.cc:269
#, fuzzy
msgid "Content channel"
msgstr "1 canal"
msgid "Create in folder"
msgstr "Crear en carpeta"
-#: src/wx/config_dialog.cc:332
+#: src/wx/config_dialog.cc:344
#, fuzzy
msgid "Creator"
msgstr "Crear en carpeta"
msgid "DCP-o-matic audio - %s"
msgstr "Audio DCP-o-matic - %1"
-#: src/wx/config_dialog.cc:204
+#: src/wx/config_dialog.cc:216
msgid "Default DCI name details"
msgstr "Detalles por defecto del nombre DCI"
-#: src/wx/config_dialog.cc:217
+#: src/wx/config_dialog.cc:229
#, fuzzy
msgid "Default JPEG2000 bandwidth"
msgstr "Ancho de banda JPEG2000"
-#: src/wx/config_dialog.cc:226
+#: src/wx/config_dialog.cc:238
#, fuzzy
msgid "Default audio delay"
msgstr "Tipo de contenido"
-#: src/wx/config_dialog.cc:208
+#: src/wx/config_dialog.cc:220
#, fuzzy
msgid "Default container"
msgstr "Tipo de contenido"
-#: src/wx/config_dialog.cc:212
+#: src/wx/config_dialog.cc:224
#, fuzzy
msgid "Default content type"
msgstr "Tipo de contenido"
-#: src/wx/config_dialog.cc:196
+#: src/wx/config_dialog.cc:208
msgid "Default directory for new films"
msgstr "Carpeta por defecto para nuevas pelÃculas"
-#: src/wx/config_dialog.cc:188
+#: src/wx/config_dialog.cc:200
#, fuzzy
msgid "Default duration of still images"
msgstr "Carpeta por defecto para nuevas pelÃculas"
msgid "Edit Screen..."
msgstr "Editar..."
-#: src/wx/config_dialog.cc:205 src/wx/video_panel.cc:157
-#: src/wx/video_panel.cc:174 src/wx/editable_list.h:63
+#: src/wx/audio_mapping_view.cc:134 src/wx/config_dialog.cc:217
+#: src/wx/video_panel.cc:157 src/wx/video_panel.cc:174
+#: src/wx/editable_list.h:63
msgid "Edit..."
msgstr "Editar..."
+#: src/wx/cinema_dialog.cc:35
+#, fuzzy
+msgid "Email address for KDM delivery"
+msgstr "Remitente para los emails de KDM"
+
#: src/wx/servers_list_dialog.cc:30
#, fuzzy
msgid "Encoding Servers"
msgid "From address for KDM emails"
msgstr "Remitente para los emails de KDM"
-#: src/wx/timing_panel.cc:40
+#: src/wx/audio_mapping_view.cc:132
+msgid "Full"
+msgstr ""
+
+#: src/wx/timing_panel.cc:42
msgid "Full length"
msgstr ""
msgid "Gain Calculator"
msgstr "Calculadora de ganancia"
+#: src/wx/audio_gain_dialog.cc:31
+#, c-format
+msgid "Gain for content channel %d in DCP channel %d"
+msgstr ""
+
#: src/wx/properties_dialog.cc:57
msgid "Gb"
msgstr "Gb"
msgid "Host name or IP address"
msgstr "Nombre o dirección IP"
-#: src/wx/audio_panel.cc:241
+#: src/wx/audio_panel.cc:243
msgid "Hz"
msgstr "Hz"
msgid "I want to play this back at fader"
msgstr "Quiero reproducir con el fader a"
-#: src/wx/config_dialog.cc:289
+#: src/wx/config_dialog.cc:301
msgid "IP address"
msgstr "Dirección IP"
-#: src/wx/config_dialog.cc:361
+#: src/wx/config_dialog.cc:373
#, fuzzy
msgid "IP address / host name"
msgstr "Dirección IP"
msgid "Interop"
msgstr ""
-#: src/wx/config_dialog.cc:328
+#: src/wx/config_dialog.cc:340
msgid "Issuer"
msgstr "Emisor"
msgid "Keep video in sequence"
msgstr "Mantener el video secuencia"
-#: src/wx/audio_mapping_view.cc:183
+#: src/wx/audio_mapping_view.cc:272
msgid "L"
msgstr ""
msgid "Left crop"
msgstr "Recorte izquierda"
-#: src/wx/audio_mapping_view.cc:195
+#: src/wx/audio_mapping_view.cc:284
msgid "Lfe"
msgstr ""
msgid "Linearise input gamma curve for low values"
msgstr "Hacer lineal la curva de gamma de entrada para valores bajos"
-#: src/wx/audio_mapping_view.cc:199
+#: src/wx/audio_mapping_view.cc:288
#, fuzzy
msgid "Ls"
msgstr "s"
-#: src/wx/config_dialog.cc:221 src/wx/film_editor.cc:180
+#: src/wx/config_dialog.cc:233 src/wx/film_editor.cc:180
msgid "MBps"
msgstr "MBps"
msgid "My Documents"
msgstr "Mis documentos"
-#: src/wx/config_dialog.cc:527 src/wx/film_editor.cc:111
-#: src/wx/preset_colour_conversion_dialog.cc:38
+#: src/wx/cinema_dialog.cc:31 src/wx/config_dialog.cc:539
+#: src/wx/film_editor.cc:111 src/wx/preset_colour_conversion_dialog.cc:38
msgid "Name"
msgstr "Nombre"
msgid "New Film"
msgstr "Nueva pelÃcula"
+#: src/wx/update_dialog.cc:36
+msgid "New versions of DCP-o-matic are available."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:319
+#, c-format
+msgid "No audio will be passed from content channel %d to DCP channel %d."
+msgstr ""
+
#: src/wx/video_panel.cc:198
msgid "No stretch"
msgstr "Sin deformar"
msgid "None"
msgstr "Ninguno"
+#: src/wx/audio_mapping_view.cc:131
+msgid "Off"
+msgstr ""
+
#: src/wx/config_dialog.cc:119
#, fuzzy
msgid "Outgoing mail server"
msgid "Padded with black to %dx%d (%.2f:1)\n"
msgstr "Completado con negro hasta %dx%d (%.2f:1)\n"
-#: src/wx/config_dialog.cc:301
+#: src/wx/config_dialog.cc:313
#, fuzzy
msgid "Password"
msgstr "Clave del TMS"
msgid "Play"
msgstr "Reproducir"
-#: src/wx/timing_panel.cc:49
+#: src/wx/timing_panel.cc:51
msgid "Play length"
msgstr ""
msgid "Please wait; audio is being analysed..."
msgstr "Por favor espere, el audio está siendo analizado..."
-#: src/wx/timing_panel.cc:37
+#: src/wx/timing_panel.cc:39
msgid "Position"
msgstr "Posición"
-#: src/wx/audio_mapping_view.cc:187
+#: src/wx/audio_mapping_view.cc:276
msgid "R"
msgstr ""
msgid "Resume"
msgstr "Continuar"
+#: src/wx/audio_mapping_view.cc:327
+msgid "Right click to change gain."
+msgstr ""
+
#: src/wx/video_panel.cc:101
msgid "Right crop"
msgstr "Recorte derecha"
-#: src/wx/audio_mapping_view.cc:203
+#: src/wx/audio_mapping_view.cc:292
#, fuzzy
msgid "Rs"
msgstr "s"
msgid "Server"
msgstr "Servidor"
-#: src/wx/timecode.cc:65
+#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60
msgid "Set"
msgstr "Seleccionar"
msgid "Snap"
msgstr ""
+#: src/wx/update_dialog.cc:43
+#, fuzzy
+msgid "Stable version "
+msgstr "Tipo de contenido"
+
#: src/wx/film_editor.cc:185
msgid "Standard"
msgstr "Estandard"
msgid "Subtitles"
msgstr "SubtÃtulos"
-#: src/wx/about_dialog.cc:131
+#: src/wx/about_dialog.cc:132
msgid "Supported by"
msgstr "Soportado por"
msgid "TMS"
msgstr "RMS"
-#: src/wx/config_dialog.cc:293
+#: src/wx/config_dialog.cc:305
#, fuzzy
msgid "Target path"
msgstr "Ruta en el TMS"
msgid "Territory (e.g. UK)"
msgstr "Territorio (ej. ES)"
+#: src/wx/update_dialog.cc:48
+#, fuzzy
+msgid "Test version "
+msgstr "Tipo de contenido"
+
#: src/wx/content_menu.cc:223
msgid ""
"The content file(s) you specified are not the same as those that are "
msgid "Timeline..."
msgstr "Linea de tiempo..."
-#: src/wx/timing_panel.cc:32
+#: src/wx/timing_panel.cc:34
msgid "Timing"
msgstr ""
msgid "Translated by"
msgstr "Traducido por"
-#: src/wx/timing_panel.cc:46
+#: src/wx/timing_panel.cc:48
#, fuzzy
msgid "Trim from end"
msgstr "Recortar fotogramas"
-#: src/wx/timing_panel.cc:43
+#: src/wx/timing_panel.cc:45
#, fuzzy
msgid "Trim from start"
msgstr "Recortar fotogramas"
msgid "Up"
msgstr ""
+#: src/wx/update_dialog.cc:27
+msgid "Update"
+msgstr ""
+
#: src/wx/film_editor.cc:126
msgid "Use DCI name"
msgstr "Usar el nombre DCI"
-#: src/wx/config_dialog.cc:357
+#: src/wx/config_dialog.cc:369
msgid "Use all servers"
msgstr ""
msgid "Use preset"
msgstr "Usar la mejor"
-#: src/wx/config_dialog.cc:297
+#: src/wx/config_dialog.cc:309
#, fuzzy
msgid "User name"
msgstr "Usar el nombre DCI"
msgid "Video"
msgstr "VÃdeo"
+#: src/wx/timing_panel.cc:56
+#, fuzzy
+msgid "Video frame rate"
+msgstr "Velocidad DCP"
+
#: src/wx/subtitle_panel.cc:39
msgid "With Subtitles"
msgstr "Con subtÃtulos"
msgid "audio"
msgstr "Audio"
-#: src/wx/audio_panel.cc:239
+#: src/wx/audio_panel.cc:241
msgid "channels"
msgstr "canales"
msgid "counting..."
msgstr "contando..."
-#: src/wx/audio_panel.cc:62
+#: src/wx/audio_gain_dialog.cc:35 src/wx/audio_panel.cc:62
msgid "dB"
msgstr "dB"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:230
+#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:242
msgid "ms"
msgstr "ms"
-#: src/wx/config_dialog.cc:192
+#: src/wx/config_dialog.cc:204
msgid "s"
msgstr "s"
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-11-25 19:28+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
msgstr ""
"(redémarrez DCP-o-matic pour que les changements de langue prennent effet)"
+#: src/wx/audio_mapping_view.cc:133
+msgid "-3dB"
+msgstr ""
+
#: src/wx/colour_conversion_editor.cc:83
msgid "1 / "
msgstr ""
-#: src/wx/audio_panel.cc:237
+#: src/wx/audio_panel.cc:239
msgid "1 channel"
msgstr "1 canal"
msgid "4K"
msgstr ""
+#: src/wx/update_dialog.cc:34
+msgid "A new version of DCP-o-matic is available."
+msgstr ""
+
#: src/wx/about_dialog.cc:30
msgid "About DCP-o-matic"
msgstr "À propos de DCP-o-matic"
msgid "Audio channels"
msgstr "Canaux audios"
+#: src/wx/audio_mapping_view.cc:321
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d unaltered."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:324
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d with gain "
+"%.1fdB."
+msgstr ""
+
#: src/wx/job_wrapper.cc:38
#, c-format
msgid "Bad setting for %s (%s)"
msgid "But I have to use fader"
msgstr "Je souhaite utiliser ce volume"
-#: src/wx/audio_mapping_view.cc:191
+#: src/wx/audio_mapping_view.cc:280
msgid "C"
msgstr "C"
msgid "Cancel"
msgstr "Annuler"
+#: src/wx/audio_gain_dialog.cc:26
+#, fuzzy
+msgid "Channel gain"
+msgstr "Canaux"
+
#: src/wx/audio_dialog.cc:44
msgid "Channels"
msgstr "Canaux"
+#: src/wx/config_dialog.cc:143
+msgid "Check for testing updates as well as stable ones"
+msgstr ""
+
+#: src/wx/config_dialog.cc:139
+msgid "Check for updates on startup"
+msgstr ""
+
#: src/wx/content_menu.cc:182
#, fuzzy
msgid "Choose a file"
msgid "Content Type"
msgstr "Type de Contenu"
-#: src/wx/audio_mapping_view.cc:180
+#: src/wx/audio_mapping_view.cc:269
msgid "Content channel"
msgstr "Contenu audio"
msgid "Create in folder"
msgstr "Créer dans le dossier"
-#: src/wx/config_dialog.cc:332
+#: src/wx/config_dialog.cc:344
msgid "Creator"
msgstr "Créateur"
msgid "DCP-o-matic audio - %s"
msgstr "Son DCP-o-matic - %s"
-#: src/wx/config_dialog.cc:204
+#: src/wx/config_dialog.cc:216
msgid "Default DCI name details"
msgstr "Détails du nom DCI par défaut"
-#: src/wx/config_dialog.cc:217
+#: src/wx/config_dialog.cc:229
msgid "Default JPEG2000 bandwidth"
msgstr "Qualité JPEG2000 par défaut"
-#: src/wx/config_dialog.cc:226
+#: src/wx/config_dialog.cc:238
#, fuzzy
msgid "Default audio delay"
msgstr "Type de contenu par défaut"
-#: src/wx/config_dialog.cc:208
+#: src/wx/config_dialog.cc:220
msgid "Default container"
msgstr "Type de contenu par défaut"
-#: src/wx/config_dialog.cc:212
+#: src/wx/config_dialog.cc:224
msgid "Default content type"
msgstr "Type de contenu par défaut"
-#: src/wx/config_dialog.cc:196
+#: src/wx/config_dialog.cc:208
msgid "Default directory for new films"
msgstr "Dossier par défaut des nouveaux films"
-#: src/wx/config_dialog.cc:188
+#: src/wx/config_dialog.cc:200
msgid "Default duration of still images"
msgstr "Durée par défaut des images fixes"
msgid "Edit Screen..."
msgstr "Éditer la salle"
-#: src/wx/config_dialog.cc:205 src/wx/video_panel.cc:157
-#: src/wx/video_panel.cc:174 src/wx/editable_list.h:63
+#: src/wx/audio_mapping_view.cc:134 src/wx/config_dialog.cc:217
+#: src/wx/video_panel.cc:157 src/wx/video_panel.cc:174
+#: src/wx/editable_list.h:63
msgid "Edit..."
msgstr "Éditer..."
+#: src/wx/cinema_dialog.cc:35
+msgid "Email address for KDM delivery"
+msgstr ""
+
#: src/wx/servers_list_dialog.cc:30
#, fuzzy
msgid "Encoding Servers"
msgid "From address for KDM emails"
msgstr ""
-#: src/wx/timing_panel.cc:40
+#: src/wx/audio_mapping_view.cc:132
+msgid "Full"
+msgstr ""
+
+#: src/wx/timing_panel.cc:42
msgid "Full length"
msgstr ""
msgid "Gain Calculator"
msgstr "Calculateur de gain"
+#: src/wx/audio_gain_dialog.cc:31
+#, c-format
+msgid "Gain for content channel %d in DCP channel %d"
+msgstr ""
+
#: src/wx/properties_dialog.cc:57
msgid "Gb"
msgstr "Gb"
msgid "Host name or IP address"
msgstr "Nom de l'hôte ou adresse IP"
-#: src/wx/audio_panel.cc:241
+#: src/wx/audio_panel.cc:243
msgid "Hz"
msgstr "Hz"
msgid "I want to play this back at fader"
msgstr "Je veux le jouer à ce volume"
-#: src/wx/config_dialog.cc:289
+#: src/wx/config_dialog.cc:301
msgid "IP address"
msgstr "Adresse IP"
-#: src/wx/config_dialog.cc:361
+#: src/wx/config_dialog.cc:373
#, fuzzy
msgid "IP address / host name"
msgstr "Adresse IP"
msgid "Interop"
msgstr ""
-#: src/wx/config_dialog.cc:328
+#: src/wx/config_dialog.cc:340
msgid "Issuer"
msgstr "Emetteur"
msgid "Keep video in sequence"
msgstr "Garder la vidéo en séquence"
-#: src/wx/audio_mapping_view.cc:183
+#: src/wx/audio_mapping_view.cc:272
msgid "L"
msgstr "L"
msgid "Left crop"
msgstr "Découpe gauche"
-#: src/wx/audio_mapping_view.cc:195
+#: src/wx/audio_mapping_view.cc:284
msgid "Lfe"
msgstr "Lfe"
msgid "Linearise input gamma curve for low values"
msgstr "Linéariser la courbe gamma d'entrée pour les bas niveaux"
-#: src/wx/audio_mapping_view.cc:199
+#: src/wx/audio_mapping_view.cc:288
msgid "Ls"
msgstr "Ls"
-#: src/wx/config_dialog.cc:221 src/wx/film_editor.cc:180
+#: src/wx/config_dialog.cc:233 src/wx/film_editor.cc:180
msgid "MBps"
msgstr "MBps"
msgid "My Documents"
msgstr "Mes Documents"
-#: src/wx/config_dialog.cc:527 src/wx/film_editor.cc:111
-#: src/wx/preset_colour_conversion_dialog.cc:38
+#: src/wx/cinema_dialog.cc:31 src/wx/config_dialog.cc:539
+#: src/wx/film_editor.cc:111 src/wx/preset_colour_conversion_dialog.cc:38
msgid "Name"
msgstr "Nom"
msgid "New Film"
msgstr "Nouveau Film"
+#: src/wx/update_dialog.cc:36
+msgid "New versions of DCP-o-matic are available."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:319
+#, c-format
+msgid "No audio will be passed from content channel %d to DCP channel %d."
+msgstr ""
+
#: src/wx/video_panel.cc:198
msgid "No stretch"
msgstr "Pas d'étirement"
msgid "None"
msgstr "Aucun"
+#: src/wx/audio_mapping_view.cc:131
+msgid "Off"
+msgstr ""
+
#: src/wx/config_dialog.cc:119
msgid "Outgoing mail server"
msgstr "Serveurs de messagerie sortante"
msgid "Padded with black to %dx%d (%.2f:1)\n"
msgstr "Enveloppe noire de %dx%d (%.2f:1)\n"
-#: src/wx/config_dialog.cc:301
+#: src/wx/config_dialog.cc:313
msgid "Password"
msgstr "Mot de passe"
msgid "Play"
msgstr "Lecture"
-#: src/wx/timing_panel.cc:49
+#: src/wx/timing_panel.cc:51
msgid "Play length"
msgstr ""
msgid "Please wait; audio is being analysed..."
msgstr "Merci de patienter ; analyse de la piste son..."
-#: src/wx/timing_panel.cc:37
+#: src/wx/timing_panel.cc:39
msgid "Position"
msgstr "Position"
-#: src/wx/audio_mapping_view.cc:187
+#: src/wx/audio_mapping_view.cc:276
msgid "R"
msgstr "R"
msgid "Resume"
msgstr "Reprendre"
+#: src/wx/audio_mapping_view.cc:327
+msgid "Right click to change gain."
+msgstr ""
+
#: src/wx/video_panel.cc:101
msgid "Right crop"
msgstr "Découpe droite"
-#: src/wx/audio_mapping_view.cc:203
+#: src/wx/audio_mapping_view.cc:292
msgid "Rs"
msgstr "Rs"
msgid "Server"
msgstr "Serveur"
-#: src/wx/timecode.cc:65
+#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60
msgid "Set"
msgstr "Sélection"
msgid "Snap"
msgstr ""
+#: src/wx/update_dialog.cc:43
+#, fuzzy
+msgid "Stable version "
+msgstr "Version du contenu"
+
#: src/wx/film_editor.cc:185
msgid "Standard"
msgstr "Standard"
msgid "Subtitles"
msgstr "Sous-titres"
-#: src/wx/about_dialog.cc:131
+#: src/wx/about_dialog.cc:132
msgid "Supported by"
msgstr "Soutenu par"
msgid "TMS"
msgstr "TMS"
-#: src/wx/config_dialog.cc:293
+#: src/wx/config_dialog.cc:305
msgid "Target path"
msgstr "Chemin d'accès"
msgid "Territory (e.g. UK)"
msgstr "Territoire (ex. FR)"
+#: src/wx/update_dialog.cc:48
+#, fuzzy
+msgid "Test version "
+msgstr "Version du contenu"
+
#: src/wx/content_menu.cc:223
msgid ""
"The content file(s) you specified are not the same as those that are "
msgid "Timeline..."
msgstr "Timeline..."
-#: src/wx/timing_panel.cc:32
+#: src/wx/timing_panel.cc:34
msgid "Timing"
msgstr ""
msgid "Translated by"
msgstr "Traduit par"
-#: src/wx/timing_panel.cc:46
+#: src/wx/timing_panel.cc:48
msgid "Trim from end"
msgstr "Images coupées depuis la fin"
-#: src/wx/timing_panel.cc:43
+#: src/wx/timing_panel.cc:45
msgid "Trim from start"
msgstr "Images coupées depuis le début"
msgid "Up"
msgstr ""
+#: src/wx/update_dialog.cc:27
+msgid "Update"
+msgstr ""
+
#: src/wx/film_editor.cc:126
msgid "Use DCI name"
msgstr "Utiliser le nom DCI"
-#: src/wx/config_dialog.cc:357
+#: src/wx/config_dialog.cc:369
msgid "Use all servers"
msgstr ""
msgid "Use preset"
msgstr "Utiliser le préréglage"
-#: src/wx/config_dialog.cc:297
+#: src/wx/config_dialog.cc:309
msgid "User name"
msgstr "Nom d'utilisateur"
msgid "Video"
msgstr "Vidéo"
+#: src/wx/timing_panel.cc:56
+#, fuzzy
+msgid "Video frame rate"
+msgstr "Cadence image"
+
#: src/wx/subtitle_panel.cc:39
msgid "With Subtitles"
msgstr "Avec sous-titres"
msgid "audio"
msgstr "audio"
-#: src/wx/audio_panel.cc:239
+#: src/wx/audio_panel.cc:241
msgid "channels"
msgstr "canaux"
msgid "counting..."
msgstr "calcul..."
-#: src/wx/audio_panel.cc:62
+#: src/wx/audio_gain_dialog.cc:35 src/wx/audio_panel.cc:62
msgid "dB"
msgstr "dB"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:230
+#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:242
msgid "ms"
msgstr "ms"
-#: src/wx/config_dialog.cc:192
+#: src/wx/config_dialog.cc:204
msgid "s"
msgstr "s"
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-04-28 10:27+0100\n"
"Last-Translator: Maci <macibro@gmail.com>\n"
"Language-Team: \n"
msgid "(restart DCP-o-matic to see language changes)"
msgstr "(riavviare DCP-o-matic per vedere i cambiamenti di lingua)"
+#: src/wx/audio_mapping_view.cc:133
+msgid "-3dB"
+msgstr ""
+
#: src/wx/colour_conversion_editor.cc:83
msgid "1 / "
msgstr ""
-#: src/wx/audio_panel.cc:237
+#: src/wx/audio_panel.cc:239
msgid "1 channel"
msgstr "1 canale"
msgid "4K"
msgstr ""
+#: src/wx/update_dialog.cc:34
+msgid "A new version of DCP-o-matic is available."
+msgstr ""
+
#: src/wx/about_dialog.cc:30
#, fuzzy
msgid "About DCP-o-matic"
msgid "Audio channels"
msgstr "canali"
+#: src/wx/audio_mapping_view.cc:321
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d unaltered."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:324
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d with gain "
+"%.1fdB."
+msgstr ""
+
#: src/wx/job_wrapper.cc:38
#, c-format
msgid "Bad setting for %s (%s)"
msgid "But I have to use fader"
msgstr "Ma dovrò riprodurre con il fader a"
-#: src/wx/audio_mapping_view.cc:191
+#: src/wx/audio_mapping_view.cc:280
msgid "C"
msgstr ""
msgid "Cancel"
msgstr "Annulla"
+#: src/wx/audio_gain_dialog.cc:26
+#, fuzzy
+msgid "Channel gain"
+msgstr "Canali"
+
#: src/wx/audio_dialog.cc:44
msgid "Channels"
msgstr "Canali"
+#: src/wx/config_dialog.cc:143
+msgid "Check for testing updates as well as stable ones"
+msgstr ""
+
+#: src/wx/config_dialog.cc:139
+msgid "Check for updates on startup"
+msgstr ""
+
#: src/wx/content_menu.cc:182
#, fuzzy
msgid "Choose a file"
msgid "Content Type"
msgstr "Tipo di contenuto"
-#: src/wx/audio_mapping_view.cc:180
+#: src/wx/audio_mapping_view.cc:269
#, fuzzy
msgid "Content channel"
msgstr "1 canale"
msgid "Create in folder"
msgstr "Crea nella cartella"
-#: src/wx/config_dialog.cc:332
+#: src/wx/config_dialog.cc:344
#, fuzzy
msgid "Creator"
msgstr "Crea nella cartella"
msgid "DCP-o-matic audio - %s"
msgstr "Audio DCP-o-matic - %s"
-#: src/wx/config_dialog.cc:204
+#: src/wx/config_dialog.cc:216
msgid "Default DCI name details"
msgstr "Dettagli del nome di default DCI"
-#: src/wx/config_dialog.cc:217
+#: src/wx/config_dialog.cc:229
#, fuzzy
msgid "Default JPEG2000 bandwidth"
msgstr "Banda passante JPEG2000"
-#: src/wx/config_dialog.cc:226
+#: src/wx/config_dialog.cc:238
#, fuzzy
msgid "Default audio delay"
msgstr "Tipo di contenuto"
-#: src/wx/config_dialog.cc:208
+#: src/wx/config_dialog.cc:220
#, fuzzy
msgid "Default container"
msgstr "Tipo di contenuto"
-#: src/wx/config_dialog.cc:212
+#: src/wx/config_dialog.cc:224
#, fuzzy
msgid "Default content type"
msgstr "Tipo di contenuto"
-#: src/wx/config_dialog.cc:196
+#: src/wx/config_dialog.cc:208
msgid "Default directory for new films"
msgstr "Directory di default per i nuovi films"
-#: src/wx/config_dialog.cc:188
+#: src/wx/config_dialog.cc:200
#, fuzzy
msgid "Default duration of still images"
msgstr "Directory di default per i nuovi films"
msgid "Edit Screen..."
msgstr "Modifica..."
-#: src/wx/config_dialog.cc:205 src/wx/video_panel.cc:157
-#: src/wx/video_panel.cc:174 src/wx/editable_list.h:63
+#: src/wx/audio_mapping_view.cc:134 src/wx/config_dialog.cc:217
+#: src/wx/video_panel.cc:157 src/wx/video_panel.cc:174
+#: src/wx/editable_list.h:63
msgid "Edit..."
msgstr "Modifica..."
+#: src/wx/cinema_dialog.cc:35
+msgid "Email address for KDM delivery"
+msgstr ""
+
#: src/wx/servers_list_dialog.cc:30
#, fuzzy
msgid "Encoding Servers"
msgid "From address for KDM emails"
msgstr ""
-#: src/wx/timing_panel.cc:40
+#: src/wx/audio_mapping_view.cc:132
+msgid "Full"
+msgstr ""
+
+#: src/wx/timing_panel.cc:42
msgid "Full length"
msgstr ""
msgid "Gain Calculator"
msgstr "Calcolatore del guadagno audio"
+#: src/wx/audio_gain_dialog.cc:31
+#, c-format
+msgid "Gain for content channel %d in DCP channel %d"
+msgstr ""
+
#: src/wx/properties_dialog.cc:57
msgid "Gb"
msgstr "Gb"
msgid "Host name or IP address"
msgstr "Nome dell'Host o indirizzo IP"
-#: src/wx/audio_panel.cc:241
+#: src/wx/audio_panel.cc:243
msgid "Hz"
msgstr "Hz"
msgid "I want to play this back at fader"
msgstr "Sto usando il fader a"
-#: src/wx/config_dialog.cc:289
+#: src/wx/config_dialog.cc:301
msgid "IP address"
msgstr "Indirizzo IP"
-#: src/wx/config_dialog.cc:361
+#: src/wx/config_dialog.cc:373
#, fuzzy
msgid "IP address / host name"
msgstr "Indirizzo IP"
msgid "Interop"
msgstr ""
-#: src/wx/config_dialog.cc:328
+#: src/wx/config_dialog.cc:340
msgid "Issuer"
msgstr ""
msgid "Keep video in sequence"
msgstr ""
-#: src/wx/audio_mapping_view.cc:183
+#: src/wx/audio_mapping_view.cc:272
msgid "L"
msgstr ""
msgid "Left crop"
msgstr "Taglio a sinistra"
-#: src/wx/audio_mapping_view.cc:195
+#: src/wx/audio_mapping_view.cc:284
msgid "Lfe"
msgstr ""
msgid "Linearise input gamma curve for low values"
msgstr ""
-#: src/wx/audio_mapping_view.cc:199
+#: src/wx/audio_mapping_view.cc:288
#, fuzzy
msgid "Ls"
msgstr "s"
-#: src/wx/config_dialog.cc:221 src/wx/film_editor.cc:180
+#: src/wx/config_dialog.cc:233 src/wx/film_editor.cc:180
msgid "MBps"
msgstr "MBps"
msgid "My Documents"
msgstr "Documenti"
-#: src/wx/config_dialog.cc:527 src/wx/film_editor.cc:111
-#: src/wx/preset_colour_conversion_dialog.cc:38
+#: src/wx/cinema_dialog.cc:31 src/wx/config_dialog.cc:539
+#: src/wx/film_editor.cc:111 src/wx/preset_colour_conversion_dialog.cc:38
msgid "Name"
msgstr "Nome"
msgid "New Film"
msgstr "Nuovo Film"
+#: src/wx/update_dialog.cc:36
+msgid "New versions of DCP-o-matic are available."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:319
+#, c-format
+msgid "No audio will be passed from content channel %d to DCP channel %d."
+msgstr ""
+
#: src/wx/video_panel.cc:198
msgid "No stretch"
msgstr ""
msgid "None"
msgstr "Nessuno"
+#: src/wx/audio_mapping_view.cc:131
+msgid "Off"
+msgstr ""
+
#: src/wx/config_dialog.cc:119
#, fuzzy
msgid "Outgoing mail server"
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:301
+#: src/wx/config_dialog.cc:313
#, fuzzy
msgid "Password"
msgstr "Password del TMS"
msgid "Play"
msgstr "Riproduci"
-#: src/wx/timing_panel.cc:49
+#: src/wx/timing_panel.cc:51
msgid "Play length"
msgstr ""
msgid "Please wait; audio is being analysed..."
msgstr "Attendere prego; sto analizzando l'audio..."
-#: src/wx/timing_panel.cc:37
+#: src/wx/timing_panel.cc:39
msgid "Position"
msgstr ""
-#: src/wx/audio_mapping_view.cc:187
+#: src/wx/audio_mapping_view.cc:276
msgid "R"
msgstr ""
msgid "Resume"
msgstr ""
+#: src/wx/audio_mapping_view.cc:327
+msgid "Right click to change gain."
+msgstr ""
+
#: src/wx/video_panel.cc:101
msgid "Right crop"
msgstr "Taglio a destra"
-#: src/wx/audio_mapping_view.cc:203
+#: src/wx/audio_mapping_view.cc:292
#, fuzzy
msgid "Rs"
msgstr "s"
msgid "Server"
msgstr "Server"
-#: src/wx/timecode.cc:65
+#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60
msgid "Set"
msgstr ""
msgid "Snap"
msgstr ""
+#: src/wx/update_dialog.cc:43
+#, fuzzy
+msgid "Stable version "
+msgstr "Tipo di contenuto"
+
#: src/wx/film_editor.cc:185
msgid "Standard"
msgstr ""
msgid "Subtitles"
msgstr "Sottotitoli"
-#: src/wx/about_dialog.cc:131
+#: src/wx/about_dialog.cc:132
msgid "Supported by"
msgstr ""
msgid "TMS"
msgstr "RMS"
-#: src/wx/config_dialog.cc:293
+#: src/wx/config_dialog.cc:305
#, fuzzy
msgid "Target path"
msgstr "Percorso di destinazione del TMS"
msgid "Territory (e.g. UK)"
msgstr "Nazione (es. UK)"
+#: src/wx/update_dialog.cc:48
+#, fuzzy
+msgid "Test version "
+msgstr "Tipo di contenuto"
+
#: src/wx/content_menu.cc:223
msgid ""
"The content file(s) you specified are not the same as those that are "
msgid "Timeline..."
msgstr ""
-#: src/wx/timing_panel.cc:32
+#: src/wx/timing_panel.cc:34
msgid "Timing"
msgstr ""
msgid "Translated by"
msgstr ""
-#: src/wx/timing_panel.cc:46
+#: src/wx/timing_panel.cc:48
#, fuzzy
msgid "Trim from end"
msgstr "Taglia fotogrammi"
-#: src/wx/timing_panel.cc:43
+#: src/wx/timing_panel.cc:45
#, fuzzy
msgid "Trim from start"
msgstr "Taglia fotogrammi"
msgid "Up"
msgstr ""
+#: src/wx/update_dialog.cc:27
+msgid "Update"
+msgstr ""
+
#: src/wx/film_editor.cc:126
msgid "Use DCI name"
msgstr "Usa nome DCI"
-#: src/wx/config_dialog.cc:357
+#: src/wx/config_dialog.cc:369
msgid "Use all servers"
msgstr ""
msgid "Use preset"
msgstr "Usa la migliore"
-#: src/wx/config_dialog.cc:297
+#: src/wx/config_dialog.cc:309
#, fuzzy
msgid "User name"
msgstr "Usa nome DCI"
msgid "Video"
msgstr "Video"
+#: src/wx/timing_panel.cc:56
+#, fuzzy
+msgid "Video frame rate"
+msgstr "Frequenza fotogrammi del DCP"
+
#: src/wx/subtitle_panel.cc:39
msgid "With Subtitles"
msgstr "Con sottotitoli"
msgid "audio"
msgstr "Audio"
-#: src/wx/audio_panel.cc:239
+#: src/wx/audio_panel.cc:241
msgid "channels"
msgstr "canali"
msgid "counting..."
msgstr "conteggio..."
-#: src/wx/audio_panel.cc:62
+#: src/wx/audio_gain_dialog.cc:35 src/wx/audio_panel.cc:62
msgid "dB"
msgstr "dB"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:230
+#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:242
msgid "ms"
msgstr "ms"
-#: src/wx/config_dialog.cc:192
+#: src/wx/config_dialog.cc:204
msgid "s"
msgstr "s"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-05 18:00+0000\n"
+"POT-Creation-Date: 2014-01-07 20:01+0000\n"
"PO-Revision-Date: 2013-04-09 10:13+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
msgid "(restart DCP-o-matic to see language changes)"
msgstr "(starta om DCP-o-matic för att se språkändringar)"
+#: src/wx/audio_mapping_view.cc:133
+msgid "-3dB"
+msgstr ""
+
#: src/wx/colour_conversion_editor.cc:83
msgid "1 / "
msgstr ""
-#: src/wx/audio_panel.cc:237
+#: src/wx/audio_panel.cc:239
msgid "1 channel"
msgstr "1 kanal"
msgid "4K"
msgstr ""
+#: src/wx/update_dialog.cc:34
+msgid "A new version of DCP-o-matic is available."
+msgstr ""
+
#: src/wx/about_dialog.cc:30
#, fuzzy
msgid "About DCP-o-matic"
msgid "Audio channels"
msgstr "kanaler"
+#: src/wx/audio_mapping_view.cc:321
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d unaltered."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:324
+#, c-format
+msgid ""
+"Audio will be passed from content channel %d to DCP channel %d with gain "
+"%.1fdB."
+msgstr ""
+
#: src/wx/job_wrapper.cc:38
#, c-format
msgid "Bad setting for %s (%s)"
msgid "But I have to use fader"
msgstr "Men jag måste använda mixervolym"
-#: src/wx/audio_mapping_view.cc:191
+#: src/wx/audio_mapping_view.cc:280
msgid "C"
msgstr ""
msgid "Cancel"
msgstr "Avbryt"
+#: src/wx/audio_gain_dialog.cc:26
+#, fuzzy
+msgid "Channel gain"
+msgstr "Kanaler"
+
#: src/wx/audio_dialog.cc:44
msgid "Channels"
msgstr "Kanaler"
+#: src/wx/config_dialog.cc:143
+msgid "Check for testing updates as well as stable ones"
+msgstr ""
+
+#: src/wx/config_dialog.cc:139
+msgid "Check for updates on startup"
+msgstr ""
+
#: src/wx/content_menu.cc:182
#, fuzzy
msgid "Choose a file"
msgid "Content Type"
msgstr "Innehållstyp"
-#: src/wx/audio_mapping_view.cc:180
+#: src/wx/audio_mapping_view.cc:269
#, fuzzy
msgid "Content channel"
msgstr "1 kanal"
msgid "Create in folder"
msgstr "Skapa i katalog"
-#: src/wx/config_dialog.cc:332
+#: src/wx/config_dialog.cc:344
#, fuzzy
msgid "Creator"
msgstr "Skapa i katalog"
msgid "DCP-o-matic audio - %s"
msgstr "DCP-o-matic audio - %s"
-#: src/wx/config_dialog.cc:204
+#: src/wx/config_dialog.cc:216
msgid "Default DCI name details"
msgstr "Detaljer om förvalda DCI-namn"
-#: src/wx/config_dialog.cc:217
+#: src/wx/config_dialog.cc:229
#, fuzzy
msgid "Default JPEG2000 bandwidth"
msgstr "JPEG2000 bandbredd"
-#: src/wx/config_dialog.cc:226
+#: src/wx/config_dialog.cc:238
#, fuzzy
msgid "Default audio delay"
msgstr "Innehållstyp"
-#: src/wx/config_dialog.cc:208
+#: src/wx/config_dialog.cc:220
#, fuzzy
msgid "Default container"
msgstr "Innehållstyp"
-#: src/wx/config_dialog.cc:212
+#: src/wx/config_dialog.cc:224
#, fuzzy
msgid "Default content type"
msgstr "Innehållstyp"
-#: src/wx/config_dialog.cc:196
+#: src/wx/config_dialog.cc:208
msgid "Default directory for new films"
msgstr "Förvald katalog för nya filmer"
-#: src/wx/config_dialog.cc:188
+#: src/wx/config_dialog.cc:200
#, fuzzy
msgid "Default duration of still images"
msgstr "Förvald katalog för nya filmer"
msgid "Edit Screen..."
msgstr "Redigera..."
-#: src/wx/config_dialog.cc:205 src/wx/video_panel.cc:157
-#: src/wx/video_panel.cc:174 src/wx/editable_list.h:63
+#: src/wx/audio_mapping_view.cc:134 src/wx/config_dialog.cc:217
+#: src/wx/video_panel.cc:157 src/wx/video_panel.cc:174
+#: src/wx/editable_list.h:63
msgid "Edit..."
msgstr "Redigera..."
+#: src/wx/cinema_dialog.cc:35
+msgid "Email address for KDM delivery"
+msgstr ""
+
#: src/wx/servers_list_dialog.cc:30
#, fuzzy
msgid "Encoding Servers"
msgid "From address for KDM emails"
msgstr ""
-#: src/wx/timing_panel.cc:40
+#: src/wx/audio_mapping_view.cc:132
+msgid "Full"
+msgstr ""
+
+#: src/wx/timing_panel.cc:42
msgid "Full length"
msgstr ""
msgid "Gain Calculator"
msgstr "Volym Kalkylator"
+#: src/wx/audio_gain_dialog.cc:31
+#, c-format
+msgid "Gain for content channel %d in DCP channel %d"
+msgstr ""
+
#: src/wx/properties_dialog.cc:57
msgid "Gb"
msgstr "Gb"
msgid "Host name or IP address"
msgstr "Värd-namn eller IP-adress"
-#: src/wx/audio_panel.cc:241
+#: src/wx/audio_panel.cc:243
msgid "Hz"
msgstr "Hz"
msgid "I want to play this back at fader"
msgstr "Jag vill spela upp detta med mixervolym"
-#: src/wx/config_dialog.cc:289
+#: src/wx/config_dialog.cc:301
msgid "IP address"
msgstr "IP-adress"
-#: src/wx/config_dialog.cc:361
+#: src/wx/config_dialog.cc:373
#, fuzzy
msgid "IP address / host name"
msgstr "IP-adress"
msgid "Interop"
msgstr ""
-#: src/wx/config_dialog.cc:328
+#: src/wx/config_dialog.cc:340
msgid "Issuer"
msgstr ""
msgid "Keep video in sequence"
msgstr ""
-#: src/wx/audio_mapping_view.cc:183
+#: src/wx/audio_mapping_view.cc:272
msgid "L"
msgstr ""
msgid "Left crop"
msgstr "Vänster beskärning"
-#: src/wx/audio_mapping_view.cc:195
+#: src/wx/audio_mapping_view.cc:284
msgid "Lfe"
msgstr ""
msgid "Linearise input gamma curve for low values"
msgstr ""
-#: src/wx/audio_mapping_view.cc:199
+#: src/wx/audio_mapping_view.cc:288
#, fuzzy
msgid "Ls"
msgstr "s"
-#: src/wx/config_dialog.cc:221 src/wx/film_editor.cc:180
+#: src/wx/config_dialog.cc:233 src/wx/film_editor.cc:180
msgid "MBps"
msgstr "MBps"
msgid "My Documents"
msgstr "Mina Dokument"
-#: src/wx/config_dialog.cc:527 src/wx/film_editor.cc:111
-#: src/wx/preset_colour_conversion_dialog.cc:38
+#: src/wx/cinema_dialog.cc:31 src/wx/config_dialog.cc:539
+#: src/wx/film_editor.cc:111 src/wx/preset_colour_conversion_dialog.cc:38
msgid "Name"
msgstr "Namn"
msgid "New Film"
msgstr "Ny Film"
+#: src/wx/update_dialog.cc:36
+msgid "New versions of DCP-o-matic are available."
+msgstr ""
+
+#: src/wx/audio_mapping_view.cc:319
+#, c-format
+msgid "No audio will be passed from content channel %d to DCP channel %d."
+msgstr ""
+
#: src/wx/video_panel.cc:198
msgid "No stretch"
msgstr ""
msgid "None"
msgstr "Inget"
+#: src/wx/audio_mapping_view.cc:131
+msgid "Off"
+msgstr ""
+
#: src/wx/config_dialog.cc:119
#, fuzzy
msgid "Outgoing mail server"
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:301
+#: src/wx/config_dialog.cc:313
#, fuzzy
msgid "Password"
msgstr "TMS lösenord"
msgid "Play"
msgstr "Spela"
-#: src/wx/timing_panel.cc:49
+#: src/wx/timing_panel.cc:51
msgid "Play length"
msgstr ""
msgid "Please wait; audio is being analysed..."
msgstr "Vänligen vänta; audio analyseras..."
-#: src/wx/timing_panel.cc:37
+#: src/wx/timing_panel.cc:39
msgid "Position"
msgstr ""
-#: src/wx/audio_mapping_view.cc:187
+#: src/wx/audio_mapping_view.cc:276
msgid "R"
msgstr ""
msgid "Resume"
msgstr ""
+#: src/wx/audio_mapping_view.cc:327
+msgid "Right click to change gain."
+msgstr ""
+
#: src/wx/video_panel.cc:101
msgid "Right crop"
msgstr "Höger beskärning"
-#: src/wx/audio_mapping_view.cc:203
+#: src/wx/audio_mapping_view.cc:292
#, fuzzy
msgid "Rs"
msgstr "s"
msgid "Server"
msgstr "Server"
-#: src/wx/timecode.cc:65
+#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60
msgid "Set"
msgstr ""
msgid "Snap"
msgstr ""
+#: src/wx/update_dialog.cc:43
+#, fuzzy
+msgid "Stable version "
+msgstr "Innehållstyp"
+
#: src/wx/film_editor.cc:185
msgid "Standard"
msgstr ""
msgid "Subtitles"
msgstr "Undertexter"
-#: src/wx/about_dialog.cc:131
+#: src/wx/about_dialog.cc:132
msgid "Supported by"
msgstr ""
msgid "TMS"
msgstr "RMS"
-#: src/wx/config_dialog.cc:293
+#: src/wx/config_dialog.cc:305
#, fuzzy
msgid "Target path"
msgstr "TMS målsökväg"
msgid "Territory (e.g. UK)"
msgstr "Område (ex. SV)"
+#: src/wx/update_dialog.cc:48
+#, fuzzy
+msgid "Test version "
+msgstr "Innehållstyp"
+
#: src/wx/content_menu.cc:223
msgid ""
"The content file(s) you specified are not the same as those that are "
msgid "Timeline..."
msgstr ""
-#: src/wx/timing_panel.cc:32
+#: src/wx/timing_panel.cc:34
msgid "Timing"
msgstr ""
msgid "Translated by"
msgstr ""
-#: src/wx/timing_panel.cc:46
+#: src/wx/timing_panel.cc:48
#, fuzzy
msgid "Trim from end"
msgstr "Skippa bilder"
-#: src/wx/timing_panel.cc:43
+#: src/wx/timing_panel.cc:45
#, fuzzy
msgid "Trim from start"
msgstr "Skippa bilder"
msgid "Up"
msgstr ""
+#: src/wx/update_dialog.cc:27
+msgid "Update"
+msgstr ""
+
#: src/wx/film_editor.cc:126
msgid "Use DCI name"
msgstr "Använd DCI-namnet"
-#: src/wx/config_dialog.cc:357
+#: src/wx/config_dialog.cc:369
msgid "Use all servers"
msgstr ""
msgid "Use preset"
msgstr "Använd bästa"
-#: src/wx/config_dialog.cc:297
+#: src/wx/config_dialog.cc:309
#, fuzzy
msgid "User name"
msgstr "Använd DCI-namnet"
msgid "Video"
msgstr "Video"
+#: src/wx/timing_panel.cc:56
+#, fuzzy
+msgid "Video frame rate"
+msgstr "DCP bildhastighet"
+
#: src/wx/subtitle_panel.cc:39
msgid "With Subtitles"
msgstr "Med Undertexter"
msgid "audio"
msgstr "Audio"
-#: src/wx/audio_panel.cc:239
+#: src/wx/audio_panel.cc:241
msgid "channels"
msgstr "kanaler"
msgid "counting..."
msgstr "räknar..."
-#: src/wx/audio_panel.cc:62
+#: src/wx/audio_gain_dialog.cc:35 src/wx/audio_panel.cc:62
msgid "dB"
msgstr "dB"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:230
+#: src/wx/audio_panel.cc:78 src/wx/config_dialog.cc:242
msgid "ms"
msgstr "ms"
-#: src/wx/config_dialog.cc:192
+#: src/wx/config_dialog.cc:204
msgid "s"
msgstr "s"
_table->Add (_encoded, 1, wxALIGN_CENTER_VERTICAL);
_frames->SetLabel (std_to_wx (lexical_cast<string> (_film->time_to_video_frames (_film->length()))));
- double const disk = ((double) _film->j2k_bandwidth() / 8) * _film->length() / (TIME_HZ * 1073741824.0f);
+ double const disk = double (_film->required_disk_space()) / 1073741824.0f;
stringstream s;
s << fixed << setprecision (1) << disk << wx_to_std (_("Gb"));
_disk->SetLabel (std_to_wx (s.str ()));
using std::cout;
using boost::lexical_cast;
-DCPTimecode::DCPTimecode (wxWindow* parent)
+Timecode::Timecode (wxWindow* parent)
: wxPanel (parent)
{
wxClientDC dc (parent);
_fixed = add_label_to_sizer (_sizer, this, wxT ("42"), false);
- _hours->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&DCPTimecode::changed, this));
- _minutes->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&DCPTimecode::changed, this));
- _seconds->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&DCPTimecode::changed, this));
- _frames->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&DCPTimecode::changed, this));
- _set_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&DCPTimecode::set_clicked, this));
+ _hours->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&Timecode::changed, this));
+ _minutes->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&Timecode::changed, this));
+ _seconds->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&Timecode::changed, this));
+ _frames->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&Timecode::changed, this));
+ _set_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&Timecode::set_clicked, this));
_set_button->Enable (false);
}
void
-DCPTimecode::set (DCPTime t, int fps)
+Timecode::set (DCPTime t, int fps)
{
int const h = t / (3600 * TIME_HZ);
t -= h * 3600 * TIME_HZ;
}
DCPTime
-DCPTimecode::get (int fps) const
+Timecode::get (int fps) const
{
DCPTime t = 0;
string const h = wx_to_std (_hours->GetValue ());
}
void
-DCPTimecode::changed ()
+Timecode::changed ()
{
_set_button->Enable (true);
}
void
-DCPTimecode::set_clicked ()
+Timecode::set_clicked ()
{
Changed ();
_set_button->Enable (false);
}
void
-DCPTimecode::set_editable (bool e)
+Timecode::set_editable (bool e)
{
_editable->Show (e);
_fixed->Show (!e);
#include <wx/wx.h>
#include "lib/types.h"
-class DCPTimecode : public wxPanel
+class Timecode : public wxPanel
{
public:
- DCPTimecode (wxWindow *);
+ Timecode (wxWindow *);
void set (DCPTime, int);
DCPTime get (int) const;
#include "film_editor.h"
using std::cout;
+using std::string;
using boost::shared_ptr;
using boost::dynamic_pointer_cast;
+using boost::lexical_cast;
TimingPanel::TimingPanel (FilmEditor* e)
: FilmEditorPanel (e, _("Timing"))
_sizer->Add (grid, 0, wxALL, 8);
add_label_to_sizer (grid, this, _("Position"), true);
- _position = new DCPTimecode (this);
+ _position = new Timecode (this);
grid->Add (_position);
add_label_to_sizer (grid, this, _("Full length"), true);
- _full_length = new DCPTimecode (this);
+ _full_length = new Timecode (this);
grid->Add (_full_length);
add_label_to_sizer (grid, this, _("Trim from start"), true);
- _trim_start = new DCPTimecode (this);
+ _trim_start = new Timecode (this);
grid->Add (_trim_start);
add_label_to_sizer (grid, this, _("Trim from end"), true);
- _trim_end = new DCPTimecode (this);
+ _trim_end = new Timecode (this);
grid->Add (_trim_end);
add_label_to_sizer (grid, this, _("Play length"), true);
- _play_length = new DCPTimecode (this);
+ _play_length = new Timecode (this);
grid->Add (_play_length);
+ {
+ add_label_to_sizer (grid, this, _("Video frame rate"), true);
+ wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+ _video_frame_rate = new wxTextCtrl (this, wxID_ANY);
+ s->Add (_video_frame_rate, 1, wxEXPAND);
+ _set_video_frame_rate = new wxButton (this, wxID_ANY, _("Set"));
+ _set_video_frame_rate->Enable (false);
+ s->Add (_set_video_frame_rate, 0, wxLEFT | wxRIGHT, 8);
+ grid->Add (s, 1, wxEXPAND);
+ }
+
_position->Changed.connect (boost::bind (&TimingPanel::position_changed, this));
_full_length->Changed.connect (boost::bind (&TimingPanel::full_length_changed, this));
_trim_start->Changed.connect (boost::bind (&TimingPanel::trim_start_changed, this));
_trim_end->Changed.connect (boost::bind (&TimingPanel::trim_end_changed, this));
_play_length->Changed.connect (boost::bind (&TimingPanel::play_length_changed, this));
+ _video_frame_rate->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&TimingPanel::video_frame_rate_changed, this));
+ _set_video_frame_rate->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&TimingPanel::set_video_frame_rate, this));
}
void
} else {
_position->set (0, 24);
}
- } else if (property == ContentProperty::LENGTH) {
+ } else if (property == ContentProperty::LENGTH || property == VideoContentProperty::VIDEO_FRAME_RATE) {
if (content) {
_full_length->set (content->full_length (), _editor->film()->video_frame_rate ());
_play_length->set (content->length_after_trim (), _editor->film()->video_frame_rate ());
_trim_end->set (0, 24);
_play_length->set (0, 24);
}
- }
+ }
+
+ if (property == VideoContentProperty::VIDEO_FRAME_RATE) {
+ if (content) {
+ shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (content);
+ if (vc) {
+ _video_frame_rate->SetValue (std_to_wx (lexical_cast<string> (vc->video_frame_rate ())));
+ } else {
+ _video_frame_rate->SetValue ("24");
+ }
+ } else {
+ _video_frame_rate->SetValue ("24");
+ }
+ }
shared_ptr<ImageContent> ic = dynamic_pointer_cast<ImageContent> (content);
_full_length->set_editable (ic && ic->still ());
_play_length->set_editable (!ic || !ic->still ());
+ _video_frame_rate->Enable (ic && !ic->still ());
+ _set_video_frame_rate->Enable (false);
}
void
}
}
+void
+TimingPanel::video_frame_rate_changed ()
+{
+ _set_video_frame_rate->Enable (true);
+}
+
+void
+TimingPanel::set_video_frame_rate ()
+{
+ ContentList c = _editor->selected_content ();
+ if (c.size() == 1) {
+ shared_ptr<ImageContent> ic = dynamic_pointer_cast<ImageContent> (c.front ());
+ if (ic) {
+ ic->set_video_frame_rate (lexical_cast<float> (wx_to_std (_video_frame_rate->GetValue ())));
+ _set_video_frame_rate->Enable (false);
+ }
+ }
+}
+
void
TimingPanel::content_selection_changed ()
{
_trim_start->Enable (single);
_trim_end->Enable (single);
_play_length->Enable (single);
+ _video_frame_rate->Enable (single);
film_content_changed (ContentProperty::POSITION);
film_content_changed (ContentProperty::LENGTH);
film_content_changed (ContentProperty::TRIM_START);
film_content_changed (ContentProperty::TRIM_END);
+ film_content_changed (VideoContentProperty::VIDEO_FRAME_RATE);
}
#include "film_editor_panel.h"
-class DCPTimecode;
+class Timecode;
class TimingPanel : public FilmEditorPanel
{
void trim_start_changed ();
void trim_end_changed ();
void play_length_changed ();
+ void video_frame_rate_changed ();
+ void set_video_frame_rate ();
- DCPTimecode* _position;
- DCPTimecode* _full_length;
- DCPTimecode* _trim_start;
- DCPTimecode* _trim_end;
- DCPTimecode* _play_length;
+ Timecode* _position;
+ Timecode* _full_length;
+ Timecode* _trim_start;
+ Timecode* _trim_end;
+ Timecode* _play_length;
+ wxTextCtrl* _video_frame_rate;
+ wxButton* _set_video_frame_rate;
};
--- /dev/null
+/*
+ Copyright (C) 2012 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/hyperlink.h>
+#include "update_dialog.h"
+#include "wx_util.h"
+
+using std::string;
+
+UpdateDialog::UpdateDialog (wxWindow* parent, string stable, string test)
+ : wxDialog (parent, wxID_ANY, _("Update"))
+{
+ wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
+
+ wxStaticText* message;
+
+ if (test.empty ()) {
+ message = new wxStaticText (this, wxID_ANY, _("A new version of DCP-o-matic is available."));
+ } else {
+ message = new wxStaticText (this, wxID_ANY, _("New versions of DCP-o-matic are available."));
+ }
+
+ overall_sizer->Add (message, 1, wxTOP | wxLEFT | wxRIGHT, DCPOMATIC_DIALOG_BORDER);
+
+ wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+
+ add_label_to_sizer (table, this, _("Stable version ") + std_to_wx (stable), true);
+ wxHyperlinkCtrl* h = new wxHyperlinkCtrl (this, wxID_ANY, "dcpomatic.com/download", "http://dcpomatic.com/download");
+ table->Add (h);
+
+ if (!test.empty ()) {
+ add_label_to_sizer (table, this, _("Test version ") + std_to_wx (test), true);
+ wxHyperlinkCtrl* h = new wxHyperlinkCtrl (this, wxID_ANY, "dcpomatic.com/test-download", "http://dcpomatic.com/test-download");
+ table->Add (h);
+ }
+
+ overall_sizer->Add (table, 1, wxEXPAND | wxLEFT | wxRIGHT, DCPOMATIC_DIALOG_BORDER);
+
+ wxSizer* buttons = CreateButtonSizer (wxOK);
+ if (buttons) {
+ overall_sizer->Add (buttons, 1, wxEXPAND | wxALL);
+ }
+
+ SetSizerAndFit (overall_sizer);
+}
--- /dev/null
+/*
+ Copyright (C) 2014 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/wx.h>
+
+class UpdateDialog : public wxDialog
+{
+public:
+ UpdateDialog (wxWindow *, std::string, std::string);
+};
+
sources = """
about_dialog.cc
audio_dialog.cc
+ audio_gain_dialog.cc
audio_mapping_view.cc
audio_panel.cc
audio_plot.cc
timeline.cc
timeline_dialog.cc
timing_panel.cc
+ update_dialog.cc
video_panel.cc
wx_util.cc
wx_ui_signaller.cc
--- /dev/null
+/*
+ Copyright (C) 2014 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 <boost/test/unit_test.hpp>
+#include "lib/audio_mapping.h"
+#include "lib/util.h"
+
+/* Basic tests of the AudioMapping class, which itself
+ doesn't really do much.
+*/
+BOOST_AUTO_TEST_CASE (audio_mapping_test)
+{
+ AudioMapping none;
+ BOOST_CHECK_EQUAL (none.content_channels(), 0);
+
+ AudioMapping four (4);
+ BOOST_CHECK_EQUAL (four.content_channels(), 4);
+ four.make_default ();
+
+ for (int i = 0; i < 4; ++i) {
+ for (int j = 0; j < MAX_AUDIO_CHANNELS; ++j) {
+ BOOST_CHECK_EQUAL (four.get (i, static_cast<libdcp::Channel> (j)), i == j ? 1 : 0);
+ }
+ }
+
+ four.set (0, libdcp::RIGHT, 1);
+ BOOST_CHECK_EQUAL (four.get (0, libdcp::RIGHT), 1);
+}
root->add_child("Id")->add_child_text ("4");
root->add_child("FrameRate")->add_child_text ("44100");
root->add_child("Channels")->add_child_text ("2");
+
+ /* This is the state file version 5 description of the mapping */
+
xmlpp::Element* mapping = root->add_child("Mapping");
mapping->add_child("ContentChannels")->add_child_text ("2");
{
map->add_child("DCP")->add_child_text ("2");
}
- FFmpegAudioStream a (shared_ptr<cxml::Node> (new cxml::Node (root)), Film::state_version);
+ FFmpegAudioStream a (shared_ptr<cxml::Node> (new cxml::Node (root)), 5);
BOOST_CHECK_EQUAL (a.id, 4);
BOOST_CHECK_EQUAL (a.frame_rate, 44100);
BOOST_CHECK_EQUAL (a.channels, 2);
BOOST_CHECK_EQUAL (a.name, "hello there world");
BOOST_CHECK_EQUAL (a.mapping.content_channels(), 2);
- BOOST_CHECK_EQUAL (a.mapping.content_to_dcp().size(), 4);
-
- list<pair<int, libdcp::Channel> > m = a.mapping.content_to_dcp ();
- list<pair<int, libdcp::Channel> >::iterator i = m.begin();
-
- BOOST_CHECK_EQUAL (i->first, 0);
- BOOST_CHECK_EQUAL (i->second, libdcp::LEFT);
- ++i;
-
- BOOST_CHECK_EQUAL (i->first, 0);
- BOOST_CHECK_EQUAL (i->second, libdcp::CENTRE);
- ++i;
-
- BOOST_CHECK_EQUAL (i->first, 1);
- BOOST_CHECK_EQUAL (i->second, libdcp::RIGHT);
- ++i;
- BOOST_CHECK_EQUAL (i->first, 1);
- BOOST_CHECK_EQUAL (i->second, libdcp::CENTRE);
- ++i;
+ BOOST_CHECK_EQUAL (a.mapping.get (0, libdcp::LEFT), 1);
+ BOOST_CHECK_EQUAL (a.mapping.get (0, libdcp::RIGHT), 0);
+ BOOST_CHECK_EQUAL (a.mapping.get (0, libdcp::CENTRE), 1);
+ BOOST_CHECK_EQUAL (a.mapping.get (1, libdcp::LEFT), 0);
+ BOOST_CHECK_EQUAL (a.mapping.get (1, libdcp::RIGHT), 1);
+ BOOST_CHECK_EQUAL (a.mapping.get (1, libdcp::CENTRE), 1);
}
4k_test.cc
audio_analysis_test.cc
audio_delay_test.cc
+ audio_mapping_test.cc
audio_merger_test.cc
black_fill_test.cc
client_server_test.cc
import sys
APPNAME = 'dcpomatic'
-VERSION = '1.58pre'
+VERSION = '1.61.2pre'
def options(opt):
opt.load('compiler_cxx')
opt.add_option('--static', action='store_true', default=False, help='build statically, and link statically to libdcp and FFmpeg')
opt.add_option('--magickpp-config', action='store', default='Magick++-config', help='path to Magick++-config')
opt.add_option('--wx-config', action='store', default='wx-config', help='path to wx-config')
+ opt.add_option('--address-sanitizer', action='store_true', default=False, help='build with address sanitizer')
def pkg_config_args(conf):
if conf.env.STATIC:
else:
conf.env.append_value('CXXFLAGS', '-O2')
+ if conf.options.address_sanitizer:
+ conf.env.append_value('CXXFLAGS', ['-fsanitize=address', '-fno-omit-frame-pointer'])
+ conf.env.append_value('LINKFLAGS', ['-fsanitize=address'])
+
# Windows-specific
if conf.env.TARGET_WINDOWS:
conf.env.append_value('CXXFLAGS', ['-DDCPOMATIC_WINDOWS', '-DWIN32_LEAN_AND_MEAN', '-DBOOST_USE_WINDOWS_H', '-DUNICODE', '-DBOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN'])