diff options
Diffstat (limited to 'src')
57 files changed, 2147 insertions, 773 deletions
diff --git a/src/lib/audio_buffers.cc b/src/lib/audio_buffers.cc index e80142b8e..a1c9b81ac 100644 --- a/src/lib/audio_buffers.cc +++ b/src/lib/audio_buffers.cc @@ -210,9 +210,11 @@ AudioBuffers::move (int from, int to, int frames) } } -/** 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); @@ -222,7 +224,7 @@ AudioBuffers::accumulate_channel (AudioBuffers const * from, int from_channel, i float* d = _data[to_channel]; for (int i = 0; i < N; ++i) { - *d++ += *s++; + *d++ += (*s++) * gain; } } diff --git a/src/lib/audio_buffers.h b/src/lib/audio_buffers.h index 75bc686f8..c9030dbfa 100644 --- a/src/lib/audio_buffers.h +++ b/src/lib/audio_buffers.h @@ -61,7 +61,7 @@ public: 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: diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc index 362000125..ae7702998 100644 --- a/src/lib/audio_mapping.cc +++ b/src/lib/audio_mapping.cc @@ -21,6 +21,7 @@ #include <libxml++/libxml++.h> #include <libcxml/cxml.h> #include "audio_mapping.h" +#include "util.h" using std::list; using std::cout; @@ -41,77 +42,86 @@ AudioMapping::AudioMapping () * @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)))); + } } } diff --git a/src/lib/audio_mapping.h b/src/lib/audio_mapping.h index 9a507b550..26087bfff 100644 --- a/src/lib/audio_mapping.h +++ b/src/lib/audio_mapping.h @@ -20,7 +20,7 @@ #ifndef DCPOMATIC_AUDIO_MAPPING_H #define DCPOMATIC_AUDIO_MAPPING_H -#include <list> +#include <vector> #include <libdcp/types.h> #include <boost/shared_ptr.hpp> @@ -34,37 +34,34 @@ namespace cxml { /** 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 diff --git a/src/lib/config.cc b/src/lib/config.cc index 454b03e3a..5a9e1619a 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -68,6 +68,8 @@ Config::Config () , _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); @@ -180,6 +182,9 @@ Config::read () _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 @@ -354,6 +359,9 @@ Config::write () const 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 ()); } diff --git a/src/lib/config.h b/src/lib/config.h index 67d293884..791e41e8f 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -171,6 +171,14 @@ public: 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; @@ -284,6 +292,14 @@ public: 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; @@ -341,6 +357,9 @@ private: 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; diff --git a/src/lib/content.cc b/src/lib/content.cc index ab666db3c..ea1c19acd 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -150,6 +150,10 @@ Content::set_position (DCPTime p) { { boost::mutex::scoped_lock lm (_mutex); + if (p == _position) { + return; + } + _position = p; } diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index eb873fe65..394c16aa5 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -373,7 +373,7 @@ FFmpegStream::as_xml (xmlpp::Node* root) const 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"); diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index a2b3e5d3b..8742c48ec 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -561,7 +561,7 @@ FFmpegDecoder::decode_subtitle_packet () /* 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; diff --git a/src/lib/film.cc b/src/lib/film.cc index 932048d8b..57d23ec4e 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -81,7 +81,10 @@ using boost::optional; 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. * @@ -980,3 +983,28 @@ Film::make_kdms ( 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; +} diff --git a/src/lib/film.h b/src/lib/film.h index 24ddad0bd..5d83ec6ed 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -108,6 +108,9 @@ public: 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; diff --git a/src/lib/image_content.cc b/src/lib/image_content.cc index 87276ce4d..a7f951bea 100644 --- a/src/lib/image_content.cc +++ b/src/lib/image_content.cc @@ -144,3 +144,19 @@ ImageContent::still () 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); +} + diff --git a/src/lib/image_content.h b/src/lib/image_content.h index ef2bc0447..f929e2b6f 100644 --- a/src/lib/image_content.h +++ b/src/lib/image_content.h @@ -47,6 +47,7 @@ public: void set_video_length (VideoFrame); bool still () const; + void set_video_frame_rate (float); }; #endif diff --git a/src/lib/image_examiner.cc b/src/lib/image_examiner.cc index 17064fd45..12fe2b8a6 100644 --- a/src/lib/image_examiner.cc +++ b/src/lib/image_examiner.cc @@ -36,7 +36,7 @@ using boost::shared_ptr; 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) diff --git a/src/lib/player.cc b/src/lib/player.cc index 3db2fe6c9..260476242 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -334,10 +334,17 @@ Player::emit_audio (weak_ptr<Piece> weak_piece, shared_ptr<DecodedAudio> audio) /* 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)) + ); + } } } @@ -528,7 +535,10 @@ Player::content_changed (weak_ptr<Content> w, int property, bool frequent) 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); @@ -599,7 +609,7 @@ Player::film_changed (Film::Property p) 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); } } diff --git a/src/lib/po/de_DE.po b/src/lib/po/de_DE.po index 2eacedf57..3d8a26f66 100644 --- a/src/lib/po/de_DE.po +++ b/src/lib/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -102,7 +102,7 @@ msgstr "Abgebrochen" 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" @@ -110,7 +110,7 @@ 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" @@ -118,11 +118,11 @@ 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" @@ -194,7 +194,7 @@ msgstr "%1 konnte nicht geöffnet werden." 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" @@ -210,11 +210,11 @@ msgstr "Remote Datei (%1) kann nicht gespeichert 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" @@ -265,11 +265,11 @@ msgstr "De-Ringer" 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" @@ -277,7 +277,7 @@ 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" @@ -365,15 +365,15 @@ msgstr "Kernel De-Interlacer" 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)" @@ -431,15 +431,15 @@ msgstr "Werbung" 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" @@ -487,7 +487,7 @@ msgstr "" "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 " @@ -545,7 +545,7 @@ msgstr "X" 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." @@ -557,11 +557,11 @@ msgstr "[Bewegte Bilder]" 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" @@ -569,11 +569,11 @@ 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" @@ -601,6 +601,10 @@ msgstr "Untertitel-Decoder nicht gefunden" 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." @@ -641,26 +645,22 @@ msgstr "SSH Session kann nicht gestartet 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" @@ -681,7 +681,7 @@ msgstr "Minute" 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" @@ -697,7 +697,7 @@ msgstr "wird verschoben" 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" @@ -711,11 +711,11 @@ msgstr "Nur Bitmap Untertitel werden unterstützt" 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" @@ -727,10 +727,12 @@ msgstr "Sekunden" 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" diff --git a/src/lib/po/es_ES.po b/src/lib/po/es_ES.po index 42a5d9397..054fef215 100644 --- a/src/lib/po/es_ES.po +++ b/src/lib/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -103,7 +103,7 @@ msgstr "Cancelado" 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" @@ -111,7 +111,7 @@ msgstr "Centro" msgid "Checking existing image data" msgstr "" -#: src/lib/writer.cc:401 +#: src/lib/writer.cc:420 msgid "Computing audio digest" msgstr "" @@ -119,11 +119,11 @@ 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" @@ -153,7 +153,6 @@ msgid "Content to be joined must have the same ratio." msgstr "" #: src/lib/subtitle_content.cc:65 -#, fuzzy msgid "Content to be joined must have the same subtitle offset." msgstr "" @@ -198,7 +197,7 @@ msgstr "no se pudo abrir el fichero para lectura" 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" @@ -214,12 +213,12 @@ msgstr "No se pudo escribir el fichero remoto (%1)" 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" @@ -264,12 +263,12 @@ msgstr "Deringing filter" 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" @@ -278,7 +277,7 @@ 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 "" @@ -366,15 +365,15 @@ msgstr "Kernel deinterlacer" 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 "" @@ -432,16 +431,16 @@ msgstr "Anuncio de servicio público" 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" @@ -489,7 +488,7 @@ msgstr "" "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 " @@ -547,7 +546,7 @@ msgstr "X" 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." @@ -560,11 +559,11 @@ msgstr "" 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" @@ -572,12 +571,12 @@ 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" @@ -606,6 +605,10 @@ msgstr "no se pudo encontrar decodificador de subtítutlos" msgid "could not find video decoder" msgstr "no se pudo encontrar decodificador de vídeo" +#: src/lib/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" @@ -652,27 +655,22 @@ msgstr "no se pudo abrir la sesión SSH" msgid "could not write to file %1 (%2)" msgstr "No se pudo escribir el fichero remoto (%1)" -#: src/lib/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" @@ -693,7 +691,7 @@ msgstr "minuto" 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" @@ -709,7 +707,7 @@ msgstr "" 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" @@ -723,11 +721,11 @@ msgstr "todavía no se soportan subtítulos que no son en mapas de bits" 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" @@ -740,15 +738,18 @@ msgstr "segundos" 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" diff --git a/src/lib/po/fr_FR.po b/src/lib/po/fr_FR.po index 3e33e761a..8789b8738 100644 --- a/src/lib/po/fr_FR.po +++ b/src/lib/po/fr_FR.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -102,7 +102,7 @@ msgstr "Annulé" 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" @@ -110,7 +110,7 @@ msgstr "Centre" msgid "Checking existing image data" msgstr "" -#: src/lib/writer.cc:401 +#: src/lib/writer.cc:420 msgid "Computing audio digest" msgstr "" @@ -118,11 +118,11 @@ 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" @@ -195,7 +195,7 @@ msgstr "lecture du fichier %1 impossible" 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" @@ -211,12 +211,12 @@ msgstr "Écriture vers fichier distant (%1) impossible" 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" @@ -259,12 +259,12 @@ msgstr "Filtre anti bourdonnement" 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" @@ -273,7 +273,7 @@ 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 "" @@ -361,15 +361,15 @@ msgstr "Désentrelaceur noyau" 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" @@ -427,15 +427,15 @@ msgstr "Public Service Announcement" 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" @@ -483,7 +483,7 @@ msgstr "" "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 " @@ -541,7 +541,7 @@ msgstr "X" 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" @@ -555,11 +555,11 @@ msgstr "%1 [diaporama]" 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é" @@ -567,11 +567,11 @@ 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" @@ -599,6 +599,10 @@ msgstr "décodeur de sous-titre introuvable" 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" @@ -640,26 +644,22 @@ msgstr "démarrage de session SSH impossible" msgid "could not write to file %1 (%2)" msgstr "Écriture vers fichier distant (%1) impossible (%2)" -#: src/lib/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" @@ -680,7 +680,7 @@ msgstr "minute" 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" @@ -696,7 +696,7 @@ msgstr "" 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" @@ -710,11 +710,11 @@ msgstr "sous-titres non-bitmap non supportés actuellement" 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é" @@ -727,15 +727,17 @@ msgstr "secondes" 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" diff --git a/src/lib/po/it_IT.po b/src/lib/po/it_IT.po index f4828103e..a1cbb19fb 100644 --- a/src/lib/po/it_IT.po +++ b/src/lib/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: IT VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 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" @@ -103,7 +103,7 @@ msgstr "Cancellato" 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" @@ -111,7 +111,7 @@ msgstr "Centro" msgid "Checking existing image data" msgstr "" -#: src/lib/writer.cc:401 +#: src/lib/writer.cc:420 msgid "Computing audio digest" msgstr "" @@ -119,11 +119,11 @@ 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" @@ -197,7 +197,7 @@ msgstr "non riesco ad aprire %1" 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 "" @@ -213,12 +213,12 @@ msgstr "Non posso scrivere il file remoto (%1)" 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" @@ -261,12 +261,12 @@ msgstr "Filtro deringing" 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" @@ -275,7 +275,7 @@ 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 "" @@ -363,15 +363,15 @@ msgstr "Deinterlacciatore Kernel" 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)" @@ -429,16 +429,16 @@ msgstr "Annuncio di pubblico servizio" 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" @@ -486,7 +486,7 @@ msgstr "" "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 " @@ -541,7 +541,7 @@ msgstr "X" 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 "" @@ -554,11 +554,11 @@ 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" @@ -566,12 +566,12 @@ 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" @@ -599,6 +599,10 @@ msgstr "non riesco a trovare il decoder dei sottotitoli" msgid "could not find video decoder" msgstr "non riesco a trovare il decoder video" +#: src/lib/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" @@ -642,26 +646,22 @@ msgstr "non posso avviare la sessione SSH" 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" @@ -682,7 +682,7 @@ msgstr "minuto" 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" @@ -698,7 +698,7 @@ msgstr "" 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" @@ -712,11 +712,11 @@ msgstr "sottotitoli non-bitmap non ancora supportati" 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 "" @@ -729,10 +729,6 @@ msgstr "secondi" 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" diff --git a/src/lib/po/sv_SE.po b/src/lib/po/sv_SE.po index fcd4564ba..3d0b5f546 100644 --- a/src/lib/po/sv_SE.po +++ b/src/lib/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -103,7 +103,7 @@ msgstr "Avbruten" 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" @@ -111,7 +111,7 @@ msgstr "Mitt" msgid "Checking existing image data" msgstr "" -#: src/lib/writer.cc:401 +#: src/lib/writer.cc:420 msgid "Computing audio digest" msgstr "" @@ -119,11 +119,11 @@ 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" @@ -197,7 +197,7 @@ msgstr "kunde inte öppna fil %1" 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 "" @@ -213,12 +213,12 @@ msgstr "Kunde inte skriva till fjärrfil (%1)" 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" @@ -261,12 +261,12 @@ msgstr "Avringningsfilter" 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" @@ -275,7 +275,7 @@ 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 "" @@ -363,15 +363,15 @@ msgstr "Kernel-avflätare" 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)" @@ -429,16 +429,16 @@ msgstr "Offentligt Servicemeddelande" 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" @@ -486,7 +486,7 @@ msgstr "" "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 " @@ -544,7 +544,7 @@ msgstr "X" 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 "" @@ -557,12 +557,12 @@ 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" @@ -571,12 +571,12 @@ 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" @@ -604,6 +604,10 @@ msgstr "kunde inte hitta undertext-avkodare" 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" @@ -647,26 +651,22 @@ msgstr "kunde inte starta SSH-session" 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" @@ -687,7 +687,7 @@ msgstr "minut" 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" @@ -703,7 +703,7 @@ msgstr "" 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" @@ -717,11 +717,11 @@ msgstr "icke-rastergrafiska undertexter stöds inte ännu" 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 "" @@ -734,10 +734,6 @@ msgstr "sekunder" 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" diff --git a/src/lib/sndfile_content.cc b/src/lib/sndfile_content.cc index 48bdb56ec..d3acc7d2e 100644 --- a/src/lib/sndfile_content.cc +++ b/src/lib/sndfile_content.cc @@ -43,10 +43,10 @@ SndfileContent::SndfileContent (shared_ptr<const Film> f, boost::filesystem::pat } -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"); diff --git a/src/lib/update.cc b/src/lib/update.cc new file mode 100644 index 000000000..a98ee5b5d --- /dev/null +++ b/src/lib/update.cc @@ -0,0 +1,170 @@ +/* + 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; +} + + diff --git a/src/lib/update.h b/src/lib/update.h new file mode 100644 index 000000000..e96ccec31 --- /dev/null +++ b/src/lib/update.h @@ -0,0 +1,89 @@ +/* + 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; +}; diff --git a/src/lib/video_content.h b/src/lib/video_content.h index d03aa9ce4..8d901cbcd 100644 --- a/src/lib/video_content.h +++ b/src/lib/video_content.h @@ -129,6 +129,7 @@ protected: void take_from_video_examiner (boost::shared_ptr<VideoExaminer>); VideoFrame _video_length; + float _video_frame_rate; private: friend class ffmpeg_pts_offset_test; @@ -139,7 +140,6 @@ private: void setup_default_colour_conversion (); libdcp::Size _video_size; - float _video_frame_rate; VideoFrameType _video_frame_type; Crop _crop; Ratio const * _ratio; diff --git a/src/lib/writer.cc b/src/lib/writer.cc index 5fc848195..320528682 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -48,7 +48,7 @@ using std::cout; 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) @@ -94,9 +94,16 @@ Writer::Writer (shared_ptr<const Film> f, weak_ptr<Job> j) _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 ()); @@ -172,16 +179,16 @@ Writer::write (shared_ptr<const AudioBuffers> audio) _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) { @@ -212,8 +219,6 @@ try while (1) { - _queue.sort (); - if (_finish || _queued_full_in_memory > _maximum_frames_in_memory || have_sequenced_image_at_queue_head ()) { break; } @@ -227,7 +232,7 @@ try 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 (); @@ -293,7 +298,8 @@ try 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; @@ -373,18 +379,16 @@ Writer::finish () _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 ())); diff --git a/src/lib/writer.h b/src/lib/writer.h index 17ce42572..842d6a55d 100644 --- a/src/lib/writer.h +++ b/src/lib/writer.h @@ -85,7 +85,7 @@ private: 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; diff --git a/src/lib/wscript b/src/lib/wscript index 25186a3d3..81a55a160 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -57,6 +57,7 @@ sources = """ transcoder.cc types.cc ui_signaller.cc + update.cc util.cc video_content.cc video_decoder.cc diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 891c4623c..111b5769d 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -42,6 +42,7 @@ #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" @@ -55,6 +56,7 @@ #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; @@ -185,6 +187,7 @@ enum { ID_jobs_show_dcp, ID_tools_hints, ID_tools_encoding_servers, + ID_tools_check_for_updates }; void @@ -223,7 +226,8 @@ setup_menu (wxMenuBar* m) 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__ @@ -269,19 +273,20 @@ public: 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)); @@ -442,6 +447,15 @@ private: 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); } @@ -521,6 +535,11 @@ private: _servers_list_dialog->Show (); } + void tools_check_for_updates () + { + UpdateChecker::instance()->run (); + } + void help_about () { AboutDialog* d = new AboutDialog (this); @@ -627,10 +646,10 @@ class App : public wxApp 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)); @@ -638,7 +657,12 @@ class App : public wxApp 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) @@ -685,6 +709,35 @@ class App : public wxApp } } + 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; }; diff --git a/src/tools/po/de_DE.po b/src/tools/po/de_DE.po index bdedf2695..8604e2a4c 100644 --- a/src/tools/po/de_DE.po +++ b/src/tools/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -18,128 +18,144 @@ msgstr "" "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?" @@ -147,17 +163,21 @@ msgstr "" "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." diff --git a/src/tools/po/es_ES.po b/src/tools/po/es_ES.po index 3a859935a..60eaf9030 100644 --- a/src/tools/po/es_ES.po +++ b/src/tools/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -17,143 +17,162 @@ msgstr "" "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." diff --git a/src/tools/po/fr_FR.po b/src/tools/po/fr_FR.po index 74e72d6aa..f4f5fba34 100644 --- a/src/tools/po/fr_FR.po +++ b/src/tools/po/fr_FR.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -17,142 +17,161 @@ msgstr "" "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." diff --git a/src/tools/po/it_IT.po b/src/tools/po/it_IT.po index f01b0c9bd..8be4e0c10 100644 --- a/src/tools/po/it_IT.po +++ b/src/tools/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: IT VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 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" @@ -17,142 +17,161 @@ msgstr "" "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." diff --git a/src/tools/po/sv_SE.po b/src/tools/po/sv_SE.po index b5bc43572..6a4f1c9bf 100644 --- a/src/tools/po/sv_SE.po +++ b/src/tools/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -17,141 +17,160 @@ msgstr "" "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." diff --git a/src/tools/update_dialog.cc b/src/tools/update_dialog.cc new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/tools/update_dialog.cc diff --git a/src/tools/update_dialog.h b/src/tools/update_dialog.h new file mode 100644 index 000000000..8b499ebcc --- /dev/null +++ b/src/tools/update_dialog.h @@ -0,0 +1,31 @@ +/* + 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; +}; diff --git a/src/wx/about_dialog.cc b/src/wx/about_dialog.cc index 5ded69339..5f801bfe4 100644 --- a/src/wx/about_dialog.cc +++ b/src/wx/about_dialog.cc @@ -128,6 +128,7 @@ AboutDialog::AboutDialog (wxWindow* parent) 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()); diff --git a/src/wx/audio_gain_dialog.cc b/src/wx/audio_gain_dialog.cc new file mode 100644 index 000000000..7622e443e --- /dev/null +++ b/src/wx/audio_gain_dialog.cc @@ -0,0 +1,64 @@ +/* + 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); +} diff --git a/src/wx/audio_gain_dialog.h b/src/wx/audio_gain_dialog.h new file mode 100644 index 000000000..370e9f1bc --- /dev/null +++ b/src/wx/audio_gain_dialog.h @@ -0,0 +1,33 @@ +/* + 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; +}; diff --git a/src/wx/audio_mapping_view.cc b/src/wx/audio_mapping_view.cc index 3136b8679..9fa57a1b1 100644 --- a/src/wx/audio_mapping_view.cc +++ b/src/wx/audio_mapping_view.cc @@ -25,22 +25,23 @@ #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 { @@ -51,40 +52,64 @@ public: } }; -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 (); @@ -99,64 +124,128 @@ AudioMappingView::AudioMappingView (wxWindow* parent) 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) { @@ -169,7 +258,7 @@ AudioMappingView::set_channels (int c) set_column_labels (); } - set (_map); + update_cells (); } void @@ -205,3 +294,40 @@ AudioMappingView::set_column_labels () _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 (); +} diff --git a/src/wx/audio_mapping_view.h b/src/wx/audio_mapping_view.h index 80534a613..26f1746e0 100644 --- a/src/wx/audio_mapping_view.h +++ b/src/wx/audio_mapping_view.h @@ -34,9 +34,25 @@ public: 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; }; diff --git a/src/wx/audio_panel.cc b/src/wx/audio_panel.cc index 6b30c0dd2..ba458f1ff 100644 --- a/src/wx/audio_panel.cc +++ b/src/wx/audio_panel.cc @@ -64,7 +64,7 @@ AudioPanel::AudioPanel (FilmEditor* e) 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), @@ -73,7 +73,7 @@ AudioPanel::AudioPanel (FilmEditor* e) 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; @@ -81,10 +81,7 @@ AudioPanel::AudioPanel (FilmEditor* e) 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); @@ -131,6 +128,7 @@ AudioPanel::film_content_changed (int property) } 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) { @@ -224,6 +222,7 @@ AudioPanel::setup_stream_description () { FFmpegContentList fc = _editor->selected_ffmpeg_content (); if (fc.size() != 1) { + _description->SetLabel (""); return; } diff --git a/src/wx/cinema_dialog.cc b/src/wx/cinema_dialog.cc index 2c0b0b4a4..e663fc3b8 100644 --- a/src/wx/cinema_dialog.cc +++ b/src/wx/cinema_dialog.cc @@ -25,14 +25,14 @@ using std::string; 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); diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index 52c08018f..2b07dd1dc 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -135,6 +135,14 @@ ConfigDialog::make_misc_panel () 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 (); @@ -171,6 +179,10 @@ ConfigDialog::make_misc_panel () _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 @@ -578,3 +590,15 @@ ConfigDialog::kdm_email_changed () { 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 ()); +} diff --git a/src/wx/config_dialog.h b/src/wx/config_dialog.h index 49b466bcb..8a17de58d 100644 --- a/src/wx/config_dialog.h +++ b/src/wx/config_dialog.h @@ -76,6 +76,9 @@ private: 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; @@ -110,6 +113,8 @@ private: 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; }; diff --git a/src/wx/po/de_DE.po b/src/wx/po/de_DE.po index 83d82ae62..5a1046524 100644 --- a/src/wx/po/de_DE.po +++ b/src/wx/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -36,11 +36,15 @@ msgstr "(Passwort wird in Klartext gespeichert)" 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" @@ -68,6 +72,10 @@ msgstr "3D Oben/Unten" 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" @@ -116,6 +124,19 @@ msgstr "Tonspur" 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)" @@ -133,7 +154,7 @@ msgstr "Durchsuchen..." 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" @@ -145,10 +166,23 @@ msgstr "Berechne..." 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" @@ -182,7 +216,7 @@ msgstr "Inhalt" 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" @@ -218,7 +252,7 @@ msgstr "DCP konnte nicht erstellt werden: %s" msgid "Create in folder" msgstr "In Ordner erstellen" -#: src/wx/config_dialog.cc:332 +#: src/wx/config_dialog.cc:344 msgid "Creator" msgstr "Ersteller" @@ -256,31 +290,31 @@ msgstr "DCP-o-matic Einstellungen" 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" @@ -308,11 +342,17 @@ msgstr "Kino bearbeiten..." 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" @@ -369,7 +409,11 @@ msgstr "Von" 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" @@ -377,6 +421,11 @@ 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" @@ -393,7 +442,7 @@ msgstr "Host" 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" @@ -401,11 +450,11 @@ 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" @@ -417,7 +466,7 @@ msgstr "Eingangs Gamma" msgid "Interop" msgstr "Interop" -#: src/wx/config_dialog.cc:328 +#: src/wx/config_dialog.cc:340 msgid "Issuer" msgstr "Herausgeber" @@ -437,7 +486,7 @@ msgstr "KDM Email" 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" @@ -445,7 +494,7 @@ 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" @@ -453,11 +502,11 @@ 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" @@ -497,8 +546,8 @@ msgstr "Mehrere Inhalte ausgewählt" 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" @@ -506,6 +555,15 @@ 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" @@ -514,6 +572,10 @@ 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" @@ -531,7 +593,7 @@ msgstr "Paket Typ (e.g. OV)" 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" @@ -547,7 +609,7 @@ msgstr "Spitze" msgid "Play" msgstr "Abspielen" -#: src/wx/timing_panel.cc:49 +#: src/wx/timing_panel.cc:51 msgid "Play length" msgstr "Abspiellänge" @@ -555,11 +617,11 @@ 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" @@ -604,11 +666,15 @@ msgstr "Auflösung" 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" @@ -641,7 +707,7 @@ msgstr "Per Email senden" msgid "Server" msgstr "Server" -#: src/wx/timecode.cc:65 +#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60 msgid "Set" msgstr "Setzen" @@ -665,6 +731,11 @@ msgstr "Glätten" 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" @@ -693,7 +764,7 @@ msgstr "Untertitel Spur" msgid "Subtitles" msgstr "Untertitel" -#: src/wx/about_dialog.cc:131 +#: src/wx/about_dialog.cc:132 msgid "Supported by" msgstr "Unterstützt durch" @@ -701,7 +772,7 @@ 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" @@ -709,6 +780,11 @@ 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 " @@ -743,7 +819,7 @@ msgstr "Zeitlinie" msgid "Timeline..." msgstr "Zeitlinie..." -#: src/wx/timing_panel.cc:32 +#: src/wx/timing_panel.cc:34 msgid "Timing" msgstr "Timing" @@ -755,11 +831,11 @@ msgstr "Oben beschneiden" 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" @@ -775,11 +851,15 @@ msgstr "Bis" 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" @@ -791,7 +871,7 @@ msgstr "Beste 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" @@ -799,6 +879,11 @@ 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" @@ -850,7 +935,7 @@ msgstr "" msgid "audio" msgstr "Ton" -#: src/wx/audio_panel.cc:239 +#: src/wx/audio_panel.cc:241 msgid "channels" msgstr "Kanäle" @@ -858,16 +943,16 @@ 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" diff --git a/src/wx/po/es_ES.po b/src/wx/po/es_ES.po index 7db715459..c85405549 100644 --- a/src/wx/po/es_ES.po +++ b/src/wx/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -36,11 +36,15 @@ msgstr "" 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" @@ -68,6 +72,10 @@ msgstr "" 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" @@ -119,6 +127,19 @@ msgstr "Retardo del audio" 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)" @@ -136,7 +157,7 @@ msgstr "Explorar..." 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 "" @@ -148,10 +169,23 @@ msgstr "Calcular..." 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" @@ -188,7 +222,7 @@ msgstr "Contenido" 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" @@ -226,7 +260,7 @@ msgstr "No se pudo crear el DCP: %s" 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" @@ -265,35 +299,35 @@ msgstr "Preferencias DCP-o-matic" 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" @@ -324,11 +358,17 @@ msgstr "Editar..." 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" @@ -389,7 +429,11 @@ msgstr "De" 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 "" @@ -397,6 +441,11 @@ 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" @@ -413,7 +462,7 @@ msgstr "" 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" @@ -421,11 +470,11 @@ 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" @@ -438,7 +487,7 @@ msgstr "Gamma de entrada" msgid "Interop" msgstr "" -#: src/wx/config_dialog.cc:328 +#: src/wx/config_dialog.cc:340 msgid "Issuer" msgstr "Emisor" @@ -458,7 +507,7 @@ msgstr "Email KDM" 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 "" @@ -466,7 +515,7 @@ msgstr "" msgid "Left crop" msgstr "Recorte izquierda" -#: src/wx/audio_mapping_view.cc:195 +#: src/wx/audio_mapping_view.cc:284 msgid "Lfe" msgstr "" @@ -474,12 +523,12 @@ 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" @@ -522,8 +571,8 @@ msgstr "Tipo de contenido" 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" @@ -531,6 +580,15 @@ 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" @@ -539,6 +597,10 @@ 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" @@ -557,7 +619,7 @@ msgstr "Tipo de paquete (ej. OV)" 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" @@ -574,7 +636,7 @@ msgstr "Pico" msgid "Play" msgstr "Reproducir" -#: src/wx/timing_panel.cc:49 +#: src/wx/timing_panel.cc:51 msgid "Play length" msgstr "" @@ -582,11 +644,11 @@ 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 "" @@ -634,11 +696,15 @@ msgstr "Resolución" 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" @@ -674,7 +740,7 @@ msgstr "Enviar por email" msgid "Server" msgstr "Servidor" -#: src/wx/timecode.cc:65 +#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60 msgid "Set" msgstr "Seleccionar" @@ -698,6 +764,11 @@ msgstr "Suavizado" 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" @@ -727,7 +798,7 @@ msgstr "Escala del subtítulo" msgid "Subtitles" msgstr "Subtítulos" -#: src/wx/about_dialog.cc:131 +#: src/wx/about_dialog.cc:132 msgid "Supported by" msgstr "Soportado por" @@ -736,7 +807,7 @@ 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" @@ -745,6 +816,11 @@ 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 " @@ -777,7 +853,7 @@ msgstr "Tiempo" msgid "Timeline..." msgstr "Linea de tiempo..." -#: src/wx/timing_panel.cc:32 +#: src/wx/timing_panel.cc:34 msgid "Timing" msgstr "" @@ -789,12 +865,12 @@ msgstr "Recortar arriba" 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" @@ -811,11 +887,15 @@ msgstr "Hasta" 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 "" @@ -828,7 +908,7 @@ msgstr "Usar la mejor" 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" @@ -837,6 +917,11 @@ 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" @@ -880,7 +965,7 @@ msgstr "" msgid "audio" msgstr "Audio" -#: src/wx/audio_panel.cc:239 +#: src/wx/audio_panel.cc:241 msgid "channels" msgstr "canales" @@ -888,16 +973,16 @@ 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" diff --git a/src/wx/po/fr_FR.po b/src/wx/po/fr_FR.po index 4af528c15..f8460ba46 100644 --- a/src/wx/po/fr_FR.po +++ b/src/wx/po/fr_FR.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -37,11 +37,15 @@ msgid "(restart DCP-o-matic to see language changes)" 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" @@ -69,6 +73,10 @@ msgstr "" 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" @@ -117,6 +125,19 @@ msgstr "Flux audio" 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)" @@ -134,7 +155,7 @@ msgstr "Parcourir..." 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" @@ -146,10 +167,23 @@ msgstr "Calcul..." 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" @@ -184,7 +218,7 @@ msgstr "Contenu" 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" @@ -220,7 +254,7 @@ msgstr "Impossible de créer le DCP : %s" 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" @@ -258,32 +292,32 @@ msgstr "Préférences DCP-o-matic" 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" @@ -312,11 +346,16 @@ msgstr "Éditer le cinéma" 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" @@ -374,7 +413,11 @@ msgstr "À partir du" 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 "" @@ -382,6 +425,11 @@ 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" @@ -398,7 +446,7 @@ msgstr "" 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" @@ -406,11 +454,11 @@ 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" @@ -423,7 +471,7 @@ msgstr "Gamma d'entrée" msgid "Interop" msgstr "" -#: src/wx/config_dialog.cc:328 +#: src/wx/config_dialog.cc:340 msgid "Issuer" msgstr "Emetteur" @@ -443,7 +491,7 @@ msgstr "e-mail des KDM" 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" @@ -451,7 +499,7 @@ 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" @@ -459,11 +507,11 @@ 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" @@ -506,8 +554,8 @@ msgstr "Type de contenu par défaut" 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" @@ -515,6 +563,15 @@ 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" @@ -523,6 +580,10 @@ 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" @@ -540,7 +601,7 @@ msgstr "Type de paquet (ex. OV)" 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" @@ -556,7 +617,7 @@ msgstr "Crête" msgid "Play" msgstr "Lecture" -#: src/wx/timing_panel.cc:49 +#: src/wx/timing_panel.cc:51 msgid "Play length" msgstr "" @@ -564,11 +625,11 @@ 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" @@ -613,11 +674,15 @@ msgstr "Résolution" 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" @@ -650,7 +715,7 @@ msgstr "Envoyé par e-mail" 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" @@ -674,6 +739,11 @@ msgstr "Lissage" 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" @@ -702,7 +772,7 @@ msgstr "Flux de sous-titre" msgid "Subtitles" msgstr "Sous-titres" -#: src/wx/about_dialog.cc:131 +#: src/wx/about_dialog.cc:132 msgid "Supported by" msgstr "Soutenu par" @@ -710,7 +780,7 @@ 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" @@ -718,6 +788,11 @@ 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 " @@ -749,7 +824,7 @@ msgstr "Timeline" msgid "Timeline..." msgstr "Timeline..." -#: src/wx/timing_panel.cc:32 +#: src/wx/timing_panel.cc:34 msgid "Timing" msgstr "" @@ -761,11 +836,11 @@ msgstr "Découpe haut" 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" @@ -781,11 +856,15 @@ msgstr "Jusqu'au" 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 "" @@ -797,7 +876,7 @@ msgstr "Automatique" 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" @@ -805,6 +884,11 @@ 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" @@ -847,7 +931,7 @@ msgstr "" msgid "audio" msgstr "audio" -#: src/wx/audio_panel.cc:239 +#: src/wx/audio_panel.cc:241 msgid "channels" msgstr "canaux" @@ -855,16 +939,16 @@ 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" diff --git a/src/wx/po/it_IT.po b/src/wx/po/it_IT.po index bd7f5f136..553971039 100644 --- a/src/wx/po/it_IT.po +++ b/src/wx/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: IT VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 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" @@ -34,11 +34,15 @@ msgstr "" 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" @@ -66,6 +70,10 @@ msgstr "" 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" @@ -117,6 +125,19 @@ msgstr "Ritardo dell'audio" 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)" @@ -134,7 +155,7 @@ msgstr "Sfoglia..." 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 "" @@ -146,10 +167,23 @@ msgstr "Calcola..." 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" @@ -186,7 +220,7 @@ msgstr "Contenuto" 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" @@ -224,7 +258,7 @@ msgstr "Non posso creare il DCP: %s" 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" @@ -263,35 +297,35 @@ msgstr "Preferenze DCP-o-matic" 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" @@ -322,11 +356,16 @@ msgstr "Modifica..." 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" @@ -386,7 +425,11 @@ msgstr "" 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 "" @@ -394,6 +437,11 @@ 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" @@ -410,7 +458,7 @@ msgstr "" 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" @@ -418,11 +466,11 @@ 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" @@ -435,7 +483,7 @@ msgstr "" msgid "Interop" msgstr "" -#: src/wx/config_dialog.cc:328 +#: src/wx/config_dialog.cc:340 msgid "Issuer" msgstr "" @@ -455,7 +503,7 @@ msgstr "" msgid "Keep video in sequence" msgstr "" -#: src/wx/audio_mapping_view.cc:183 +#: src/wx/audio_mapping_view.cc:272 msgid "L" msgstr "" @@ -463,7 +511,7 @@ 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 "" @@ -471,12 +519,12 @@ 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" @@ -519,8 +567,8 @@ msgstr "Tipo di contenuto" 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" @@ -528,6 +576,15 @@ 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 "" @@ -536,6 +593,10 @@ 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" @@ -554,7 +615,7 @@ msgstr "Tipo di Package (es. OV)" msgid "Padded with black to %dx%d (%.2f:1)\n" msgstr "Riempito con nero a %dx%d (%.2f:1)\n" -#: src/wx/config_dialog.cc:301 +#: src/wx/config_dialog.cc:313 #, fuzzy msgid "Password" msgstr "Password del TMS" @@ -571,7 +632,7 @@ msgstr "Picco" msgid "Play" msgstr "Riproduci" -#: src/wx/timing_panel.cc:49 +#: src/wx/timing_panel.cc:51 msgid "Play length" msgstr "" @@ -579,11 +640,11 @@ 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 "" @@ -631,11 +692,15 @@ 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" @@ -671,7 +736,7 @@ msgstr "" msgid "Server" msgstr "Server" -#: src/wx/timecode.cc:65 +#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60 msgid "Set" msgstr "" @@ -695,6 +760,11 @@ msgstr "Levigatura" 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 "" @@ -724,7 +794,7 @@ msgstr "Scala dei Sottotitoli" msgid "Subtitles" msgstr "Sottotitoli" -#: src/wx/about_dialog.cc:131 +#: src/wx/about_dialog.cc:132 msgid "Supported by" msgstr "" @@ -733,7 +803,7 @@ 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" @@ -742,6 +812,11 @@ 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 " @@ -774,7 +849,7 @@ msgstr "Tempo" msgid "Timeline..." msgstr "" -#: src/wx/timing_panel.cc:32 +#: src/wx/timing_panel.cc:34 msgid "Timing" msgstr "" @@ -786,12 +861,12 @@ msgstr "Taglio in alto" 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" @@ -808,11 +883,15 @@ msgstr "" 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 "" @@ -825,7 +904,7 @@ msgstr "Usa la migliore" 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" @@ -834,6 +913,11 @@ 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" @@ -877,7 +961,7 @@ msgstr "" msgid "audio" msgstr "Audio" -#: src/wx/audio_panel.cc:239 +#: src/wx/audio_panel.cc:241 msgid "channels" msgstr "canali" @@ -885,16 +969,16 @@ 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" diff --git a/src/wx/po/sv_SE.po b/src/wx/po/sv_SE.po index 23fed1074..b57f19e31 100644 --- a/src/wx/po/sv_SE.po +++ b/src/wx/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" 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" @@ -34,11 +34,15 @@ msgstr "" 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" @@ -66,6 +70,10 @@ msgstr "" 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" @@ -117,6 +125,19 @@ msgstr "Audio Fördröjning" 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)" @@ -134,7 +155,7 @@ msgstr "Bläddra..." 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 "" @@ -146,10 +167,23 @@ msgstr "Beräkna..." 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" @@ -186,7 +220,7 @@ msgstr "Innehåll" 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" @@ -224,7 +258,7 @@ msgstr "Kunde inte skapa DCP: %s" 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" @@ -263,35 +297,35 @@ msgstr "DCP-o-matic Inställningar" 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" @@ -322,11 +356,16 @@ msgstr "Redigera..." 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" @@ -386,7 +425,11 @@ msgstr "" 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 "" @@ -394,6 +437,11 @@ 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" @@ -410,7 +458,7 @@ msgstr "" 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" @@ -418,11 +466,11 @@ 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" @@ -435,7 +483,7 @@ msgstr "" msgid "Interop" msgstr "" -#: src/wx/config_dialog.cc:328 +#: src/wx/config_dialog.cc:340 msgid "Issuer" msgstr "" @@ -455,7 +503,7 @@ msgstr "" msgid "Keep video in sequence" msgstr "" -#: src/wx/audio_mapping_view.cc:183 +#: src/wx/audio_mapping_view.cc:272 msgid "L" msgstr "" @@ -463,7 +511,7 @@ 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 "" @@ -471,12 +519,12 @@ 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" @@ -519,8 +567,8 @@ msgstr "Innehållstyp" 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" @@ -528,6 +576,15 @@ 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 "" @@ -536,6 +593,10 @@ 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" @@ -554,7 +615,7 @@ msgstr "Förpackningstyp (ex. OV)" msgid "Padded with black to %dx%d (%.2f:1)\n" msgstr "Svarta kanter tillagda för %dx%d (%.2f:1)\n" -#: src/wx/config_dialog.cc:301 +#: src/wx/config_dialog.cc:313 #, fuzzy msgid "Password" msgstr "TMS lösenord" @@ -571,7 +632,7 @@ msgstr "Topp" msgid "Play" msgstr "Spela" -#: src/wx/timing_panel.cc:49 +#: src/wx/timing_panel.cc:51 msgid "Play length" msgstr "" @@ -579,11 +640,11 @@ 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 "" @@ -631,11 +692,15 @@ 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" @@ -671,7 +736,7 @@ msgstr "" msgid "Server" msgstr "Server" -#: src/wx/timecode.cc:65 +#: src/wx/timecode.cc:65 src/wx/timing_panel.cc:60 msgid "Set" msgstr "" @@ -695,6 +760,11 @@ msgstr "Utjämning" 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 "" @@ -724,7 +794,7 @@ msgstr "Undertext Skalning" msgid "Subtitles" msgstr "Undertexter" -#: src/wx/about_dialog.cc:131 +#: src/wx/about_dialog.cc:132 msgid "Supported by" msgstr "" @@ -733,7 +803,7 @@ 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" @@ -742,6 +812,11 @@ 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 " @@ -774,7 +849,7 @@ msgstr "Tid" msgid "Timeline..." msgstr "" -#: src/wx/timing_panel.cc:32 +#: src/wx/timing_panel.cc:34 msgid "Timing" msgstr "" @@ -786,12 +861,12 @@ msgstr "Övre beskärning" 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" @@ -808,11 +883,15 @@ msgstr "" 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 "" @@ -825,7 +904,7 @@ msgstr "Använd bästa" 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" @@ -834,6 +913,11 @@ 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" @@ -877,7 +961,7 @@ msgstr "" msgid "audio" msgstr "Audio" -#: src/wx/audio_panel.cc:239 +#: src/wx/audio_panel.cc:241 msgid "channels" msgstr "kanaler" @@ -885,16 +969,16 @@ 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" diff --git a/src/wx/properties_dialog.cc b/src/wx/properties_dialog.cc index f3f841a43..11510cd0f 100644 --- a/src/wx/properties_dialog.cc +++ b/src/wx/properties_dialog.cc @@ -52,7 +52,7 @@ PropertiesDialog::PropertiesDialog (wxWindow* parent, shared_ptr<Film> film) _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 ())); diff --git a/src/wx/timecode.cc b/src/wx/timecode.cc index b23ff2a39..493650aae 100644 --- a/src/wx/timecode.cc +++ b/src/wx/timecode.cc @@ -26,7 +26,7 @@ using std::string; using std::cout; using boost::lexical_cast; -DCPTimecode::DCPTimecode (wxWindow* parent) +Timecode::Timecode (wxWindow* parent) : wxPanel (parent) { wxClientDC dc (parent); @@ -69,11 +69,11 @@ DCPTimecode::DCPTimecode (wxWindow* 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); @@ -83,7 +83,7 @@ DCPTimecode::DCPTimecode (wxWindow* parent) } 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; @@ -102,7 +102,7 @@ DCPTimecode::set (DCPTime t, int fps) } DCPTime -DCPTimecode::get (int fps) const +Timecode::get (int fps) const { DCPTime t = 0; string const h = wx_to_std (_hours->GetValue ()); @@ -118,20 +118,20 @@ DCPTimecode::get (int fps) const } 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); diff --git a/src/wx/timecode.h b/src/wx/timecode.h index f95740255..b13e8c3c0 100644 --- a/src/wx/timecode.h +++ b/src/wx/timecode.h @@ -21,10 +21,10 @@ #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; diff --git a/src/wx/timing_panel.cc b/src/wx/timing_panel.cc index 08334da4b..34702463c 100644 --- a/src/wx/timing_panel.cc +++ b/src/wx/timing_panel.cc @@ -25,8 +25,10 @@ #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")) @@ -35,26 +37,39 @@ TimingPanel::TimingPanel (FilmEditor* e) _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 @@ -72,7 +87,7 @@ TimingPanel::film_content_changed (int property) } 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 ()); @@ -96,11 +111,26 @@ TimingPanel::film_content_changed (int property) _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 @@ -153,6 +183,25 @@ TimingPanel::play_length_changed () } 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 () { ContentList sel = _editor->selected_content (); @@ -164,9 +213,11 @@ 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); } diff --git a/src/wx/timing_panel.h b/src/wx/timing_panel.h index 7fea45eb5..d9696a201 100644 --- a/src/wx/timing_panel.h +++ b/src/wx/timing_panel.h @@ -19,7 +19,7 @@ #include "film_editor_panel.h" -class DCPTimecode; +class Timecode; class TimingPanel : public FilmEditorPanel { @@ -35,10 +35,14 @@ private: 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; }; diff --git a/src/wx/update_dialog.cc b/src/wx/update_dialog.cc new file mode 100644 index 000000000..271c4174c --- /dev/null +++ b/src/wx/update_dialog.cc @@ -0,0 +1,61 @@ +/* + 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); +} diff --git a/src/wx/update_dialog.h b/src/wx/update_dialog.h new file mode 100644 index 000000000..d9c7b855d --- /dev/null +++ b/src/wx/update_dialog.h @@ -0,0 +1,27 @@ +/* + 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); +}; + diff --git a/src/wx/wscript b/src/wx/wscript index dc8a07b99..9de32d39e 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -6,6 +6,7 @@ import i18n sources = """ about_dialog.cc audio_dialog.cc + audio_gain_dialog.cc audio_mapping_view.cc audio_panel.cc audio_plot.cc @@ -38,6 +39,7 @@ sources = """ timeline.cc timeline_dialog.cc timing_panel.cc + update_dialog.cc video_panel.cc wx_util.cc wx_ui_signaller.cc |
