Merge master.
authorCarl Hetherington <cth@carlh.net>
Wed, 15 Jan 2014 16:36:28 +0000 (16:36 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 15 Jan 2014 16:36:28 +0000 (16:36 +0000)
20 files changed:
ChangeLog
cscript
debian/changelog
src/lib/encoder.cc
src/lib/ffmpeg_decoder.cc
src/lib/ffmpeg_examiner.cc
src/lib/film.cc
src/lib/player.cc
src/lib/po/de_DE.po
src/lib/ratio.cc
src/lib/transcode_job.cc
src/lib/writer.cc
src/lib/writer.h
src/tools/dcpomatic.cc
src/tools/po/de_DE.po
src/wx/audio_mapping_view.cc
src/wx/new_film_dialog.cc
src/wx/po/de_DE.po
test/ratio_test.cc
wscript

index 7b5a548b8a53310d88a19cd1a33bfafac187f5d4..d2c10fb5561bfb6f8f513ffb484437131a5a68de 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,64 @@
+2014-01-15  Carl Hetherington  <cth@carlh.net>
+
+       * Hopefully fix badly-labelled MXFs when in Interop mode.
+
+2014-01-14  Carl Hetherington  <cth@carlh.net>
+
+       * Version 1.63.2 released.
+
+2014-01-14  Carl Hetherington  <cth@carlh.net>
+
+       * Fix problems with adding new soundtracks to FFmpeg content with
+       no audio track.
+
+       * Updated de_DE translation from Markus Raab.
+
+       * Version 1.63.1 released.
+
+2014-01-14  Carl Hetherington  <cth@carlh.net>
+
+       * Try to fix subtitle problems when the video frame rate is being changed
+       from content to DCP.
+
+2014-01-13  Carl Hetherington  <cth@carlh.net>
+
+       * Change 4:3 and 5:3 ratios to be precise rather than 1.33:1 and 1.66:1, and
+       also tweak 1.19:1 (#306).
+
+       * Version 1.63.0 released.
+
+2014-01-12  Carl Hetherington  <cth@carlh.net>
+
+       * Fix crashes when using -3dB options in locales with a , decimal separator.
+
+       * Version 1.62.3 released.
+
+2014-01-11  Carl Hetherington  <cth@carlh.net>
+
+       * Hopefully fix error on restarting a cancelled transcode job
+       on Windows.
+
+2014-01-10  Carl Hetherington  <cth@carlh.net>
+
+       * Version 1.62.2 released.
+
+2014-01-10  Carl Hetherington  <cth@carlh.net>
+
+       * Version 1.62.1 released.
+
+2014-01-10  Carl Hetherington  <cth@carlh.net>
+
+       * Version 1.62.0 released.
+
+2014-01-10  Carl Hetherington  <cth@carlh.net>
+
+       * Try to stop the queue of things to write filling up excessively
+       on fast CPUs.
+
+       * Try to fix double "are you sure" prompt on quitting with active jobs.
+
+       * Version 1.61.2 released.
+
 2014-01-09  Carl Hetherington  <cth@carlh.net>
 
        * Version 1.61.1 released.
diff --git a/cscript b/cscript
index 5f36d9622e454c77615c11ff3ba98788de41625c..e2a55fd5627c6ed31e9cacf6caf6261619c73f13 100644 (file)
--- a/cscript
+++ b/cscript
@@ -115,7 +115,7 @@ def make_control(version, bits, filename):
 
 def dependencies(target):
     return (('ffmpeg-cdist', '5ac3a6af077c10f07c31954c372a8f29e4e18e2a'),
-            ('libdcp', '8803a19c6901ab3c3ff85c964343f08458e0824e'))
+            ('libdcp', '120bc84676be775e49a2ac94689ff33dce814f53'))
 
 def build(target, options):
     cmd = './waf configure --prefix=%s' % target.work_dir_cscript()
index 1dd6076b784c0a3def398835cc99dbb46565feb0..1aec0f6495b0ee16e917cb5571a70a81190cc841 100644 (file)
@@ -1,4 +1,4 @@
-dcpomatic (1.61.1-1) UNRELEASED; urgency=low
+dcpomatic (1.63.2-1) UNRELEASED; urgency=low
 
   * New upstream release.
   * New upstream release.
@@ -66,8 +66,16 @@ dcpomatic (1.61.1-1) UNRELEASED; urgency=low
   * New upstream release.
   * New upstream release.
   * New upstream release.
+  * New upstream release.
+  * New upstream release.
+  * New upstream release.
+  * New upstream release.
+  * New upstream release.
+  * New upstream release.
+  * New upstream release.
+  * New upstream release.
 
- -- Carl Hetherington <carl@d1stkfactory>  Thu, 09 Jan 2014 21:22:14 +0000
+ -- Carl Hetherington <carl@d1stkfactory>  Tue, 14 Jan 2014 22:41:33 +0000
 
 dcpomatic (0.87-1) UNRELEASED; urgency=low
 
index ca9134c04d29e52400579330eb34d4fa75a5196e..d26f776148c74fd34c0ff35abd264857b87e9266 100644 (file)
@@ -68,9 +68,6 @@ Encoder::Encoder (shared_ptr<const Film> f, weak_ptr<Job> j)
 Encoder::~Encoder ()
 {
        terminate_threads ();
-       if (_writer) {
-               _writer->finish ();
-       }
 }
 
 /** Add a worker thread for a each thread on a remote server.  Caller must hold
index 8742c48ecd6360021bcb309636ba376a300ccc28..52afe2a271e79360cf8fea54257f3e6b239495c9 100644 (file)
@@ -160,8 +160,6 @@ FFmpegDecoder::pass ()
                return true;
        }
 
-       avcodec_get_frame_defaults (_frame);
-
        shared_ptr<const Film> film = _film.lock ();
        assert (film);
 
@@ -561,8 +559,13 @@ 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)
        */
+<<<<<<< HEAD
        double const packet_time = (static_cast<double> (sub.pts ) / AV_TIME_BASE) + _pts_offset;
        
+=======
+       double const packet_time = (static_cast<double> (sub.pts ) / AV_TIME_BASE) + _video_pts_offset;
+
+>>>>>>> master
        /* hence start time for this sub */
        ContentTime const from = (packet_time + (double (sub.start_display_time) / 1e3)) * TIME_HZ;
        ContentTime const to = (packet_time + (double (sub.end_display_time) / 1e3)) * TIME_HZ;
index e86a82fad72d5b98bac507a2111d3a2bf4e90a3a..38dd678bbfa91da1f80562f3dac0d7fcf78c0829 100644 (file)
@@ -70,7 +70,6 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c)
                }
 
                int frame_finished;
-               avcodec_get_frame_defaults (_frame);
 
                AVCodecContext* context = _format_context->streams[_packet.stream_index]->codec;
 
index 57d23ec4eed51e3596e89f0abad5376c53f0b75f..099bacfdcb7b5513358f968555e03a864703e338 100644 (file)
@@ -265,6 +265,14 @@ Film::make_dcp ()
 #else
        log()->log ("libdcp built in optimised mode.");
 #endif
+
+#ifdef DCPOMATIC_WINDOWS
+       OSVERSIONINFO info;
+       info.dwOSVersionInfoSize = sizeof (info);
+       GetVersionEx (&info);
+       log()->log (String::compose ("Windows version %1.%2.%3 SP %4", info.dwMajorVersion, info.dwMinorVersion, info.dwBuildNumber, info.szCSDVersion));
+#endif 
+       
        log()->log (String::compose ("CPU: %1, %2 processors", cpu_info(), boost::thread::hardware_concurrency ()));
        list<pair<string, string> > const m = mount_info ();
        for (list<pair<string, string> >::const_iterator i = m.begin(); i != m.end(); ++i) {
index 260476242fcb91acacebb87a1cb50b61d90367bc..77630f0e3c8e4e5d4f442351ae05e876d7d78f00 100644 (file)
@@ -291,6 +291,7 @@ Player::emit_video (weak_ptr<Piece> weak_piece, shared_ptr<DecodedVideo> video)
 
                pi->set_subtitle (_out_subtitle.image, _out_subtitle.position + container_offset);
        }
+               
                                            
 #ifdef DCPOMATIC_DEBUG
        _last_video = piece->content;
@@ -661,8 +662,22 @@ Player::update_subtitle ()
                true
                );
 
+<<<<<<< HEAD
        _out_subtitle.from = _in_subtitle.subtitle->dcp_time;
        _out_subtitle.to = _in_subtitle.subtitle->dcp_time_to;
+=======
+       /* XXX: hack */
+       Time from = _in_subtitle.from;
+       Time to = _in_subtitle.to;
+       shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (piece->content);
+       if (vc) {
+               from = rint (from * vc->video_frame_rate() / _film->video_frame_rate());
+               to = rint (to * vc->video_frame_rate() / _film->video_frame_rate());
+       }
+       
+       _out_subtitle.from = from * piece->content->position ();
+       _out_subtitle.to = to + piece->content->position ();
+>>>>>>> master
 }
 
 /** Re-emit the last frame that was emitted, using current settings for crop, ratio, scaler and subtitles.
index 3d8a26f668acb9d47c430b056641f4647155561f..acb66609938ee562a24cc2a8143f9f44795ac6cc 100644 (file)
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-01-07 20:01+0000\n"
-"PO-Revision-Date: 2014-01-05 23:06+0100\n"
+"PO-Revision-Date: 2014-01-14 19:45+0100\n"
 "Last-Translator: \n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: de\n"
@@ -603,7 +603,7 @@ msgstr "Bild-Decoder nicht gefunden"
 
 #: src/lib/writer.cc:387
 msgid "could not move audio MXF into the DCP (%1)"
-msgstr ""
+msgstr "Ton MXF kann nicht in das DCP verschoben werden (%1)"
 
 #: src/lib/sndfile_decoder.cc:45
 msgid "could not open audio file for reading"
index 41abbb76020667df16d93e24f0aef17f8986ed9e..a47b2101e54a175ae983025852f9d16a7c81ca9a 100644 (file)
@@ -32,11 +32,11 @@ vector<Ratio const *> Ratio::_ratios;
 void
 Ratio::setup_ratios ()
 {
-       _ratios.push_back (new Ratio (float(1285) / 1080, "119", _("1.19"), "F"));
-       _ratios.push_back (new Ratio (float(1436) / 1080, "133", _("4:3"), "F"));
+       _ratios.push_back (new Ratio (float(1290) / 1080, "119", _("1.19"), "F"));
+       _ratios.push_back (new Ratio (float(1440) / 1080, "133", _("4:3"), "F"));
        _ratios.push_back (new Ratio (float(1480) / 1080, "137", _("Academy"), "F"));
        _ratios.push_back (new Ratio (float(1485) / 1080, "138", _("1.375"), "F"));
-       _ratios.push_back (new Ratio (float(1793) / 1080, "166", _("1.66"), "F"));
+       _ratios.push_back (new Ratio (float(1800) / 1080, "166", _("1.66"), "F"));
        _ratios.push_back (new Ratio (float(1920) / 1080, "178", _("16:9"), "F"));
        _ratios.push_back (new Ratio (float(1998) / 1080, "185", _("Flat"), "F"));
        _ratios.push_back (new Ratio (float(2048) /  858, "239", _("Scope"), "S"));
index fe07ba2f656af010c1ff989a53a4f1e088822ed6..8820726895446e449b12090b8f7e221a45f1b619 100644 (file)
@@ -64,12 +64,11 @@ TranscodeJob::run ()
 
                _film->log()->log (N_("Transcode job completed successfully"));
 
-       } catch (std::exception& e) {
-
+       } catch (...) {
                set_progress (1);
                set_state (FINISHED_ERROR);
-               _film->log()->log (String::compose (N_("Transcode job failed (%1)"), e.what()));
-
+               _film->log()->log (N_("Transcode job failed or cancelled"));
+               _transcoder.reset ();
                throw;
        }
 }
@@ -78,7 +77,7 @@ string
 TranscodeJob::status () const
 {
        if (!_transcoder) {
-               return _("0%");
+               return Job::status ();
        }
 
        float const fps = _transcoder->current_encoding_rate ();
index 320528682a84a7d452770397b5fe95df5a2257b6..c2a6c981bc8f31a2629affe444df88c225ae7ddc 100644 (file)
@@ -45,6 +45,7 @@ using std::pair;
 using std::string;
 using std::list;
 using std::cout;
+using std::stringstream;
 using boost::shared_ptr;
 using boost::weak_ptr;
 
@@ -86,6 +87,7 @@ Writer::Writer (shared_ptr<const Film> f, weak_ptr<Job> j)
 
        _picture_asset->set_edit_rate (_film->video_frame_rate ());
        _picture_asset->set_size (fit_ratio_within (_film->container()->ratio(), _film->full_frame ()));
+       _picture_asset->set_interop (_film->interop ());
 
        if (_film->encrypted ()) {
                _picture_asset->set_key (_film->key ());
@@ -93,25 +95,19 @@ 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.  Some versions of windows inexplicably
-          don't like overwriting existing files here, so try to remove it using boost.
-       */
-       boost::system::error_code ec;
-       boost::filesystem::remove (_film->file (_film->audio_mxf_filename ()), ec);
-       if (ec) {
-               _film->log()->log (String::compose ("Could not remove existing audio MXF file (%1)", ec.value ()));
-       }
-
        _sound_asset.reset (new libdcp::SoundAsset (_film->directory (), _film->audio_mxf_filename ()));
        _sound_asset->set_edit_rate (_film->video_frame_rate ());
        _sound_asset->set_channels (_film->audio_channels ());
        _sound_asset->set_sampling_rate (_film->audio_frame_rate ());
+       _sound_asset->set_interop (_film->interop ());
 
        if (_film->encrypted ()) {
                _sound_asset->set_key (_film->key ());
        }
        
+       /* Write the sound asset into the film directory so that we leave the creation
+          of the DCP directory until the last minute.
+       */
        _sound_asset_writer = _sound_asset->start_write ();
 
        _thread = new boost::thread (boost::bind (&Writer::thread, this));
@@ -119,11 +115,20 @@ Writer::Writer (shared_ptr<const Film> f, weak_ptr<Job> j)
        job->sub (_("Encoding image data"));
 }
 
+Writer::~Writer ()
+{
+       terminate_thread (false);
+}
+
 void
 Writer::write (shared_ptr<const EncodedData> encoded, int frame, Eyes eyes)
 {
        boost::mutex::scoped_lock lock (_mutex);
 
+       while (_queued_full_in_memory > _maximum_frames_in_memory) {
+               _full_condition.wait (lock);
+       }
+
        QueueItem qi;
        qi.type = QueueItem::FULL;
        qi.encoded = encoded;
@@ -143,7 +148,7 @@ Writer::write (shared_ptr<const EncodedData> encoded, int frame, Eyes eyes)
                ++_queued_full_in_memory;
        }
        
-       _condition.notify_all ();
+       _empty_condition.notify_all ();
 }
 
 void
@@ -151,6 +156,10 @@ Writer::fake_write (int frame, Eyes eyes)
 {
        boost::mutex::scoped_lock lock (_mutex);
 
+       while (_queued_full_in_memory > _maximum_frames_in_memory) {
+               _full_condition.wait (lock);
+       }
+       
        FILE* ifi = fopen_boost (_film->info_path (frame, eyes), "r");
        libdcp::FrameInfo info (ifi);
        fclose (ifi);
@@ -169,7 +178,7 @@ Writer::fake_write (int frame, Eyes eyes)
                _queue.push_back (qi);
        }
 
-       _condition.notify_all ();
+       _empty_condition.notify_all ();
 }
 
 /** This method is not thread safe */
@@ -224,7 +233,7 @@ try
                        }
 
                        TIMING (N_("writer sleeps with a queue of %1"), _queue.size());
-                       _condition.wait (lock);
+                       _empty_condition.wait (lock);
                        TIMING (N_("writer wakes with a queue of %1"), _queue.size());
                }
 
@@ -324,6 +333,8 @@ try
                        qi.encoded.reset ();
                        --_queued_full_in_memory;
                }
+
+               _full_condition.notify_all ();
        }
 }
 catch (...)
@@ -332,22 +343,35 @@ catch (...)
 }
 
 void
-Writer::finish ()
+Writer::terminate_thread (bool can_throw)
 {
-       if (!_thread) {
+       boost::mutex::scoped_lock lock (_mutex);
+       if (_thread == 0) {
                return;
        }
        
-       boost::mutex::scoped_lock lock (_mutex);
        _finish = true;
-       _condition.notify_all ();
+       _empty_condition.notify_all ();
+       _full_condition.notify_all ();
        lock.unlock ();
 
-       _thread->join ();
-       rethrow ();
+       _thread->join ();
+       if (can_throw) {
+               rethrow ();
+       }
        
        delete _thread;
        _thread = 0;
+}      
+
+void
+Writer::finish ()
+{
+       if (!_thread) {
+               return;
+       }
+       
+       terminate_thread (true);
 
        _picture_asset_writer->finalize ();
        _sound_asset_writer->finalize ();
@@ -428,7 +452,9 @@ Writer::finish ()
        meta.set_issue_date_now ();
        dcp.write_xml (_film->interop (), meta, _film->is_signed() ? make_signer () : shared_ptr<const libdcp::Signer> ());
 
-       _film->log()->log (String::compose (N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT; %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk));
+       _film->log()->log (
+               String::compose (N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT; %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk)
+               );
 }
 
 /** Tell the writer that frame `f' should be a repeat of the frame before it */
@@ -437,6 +463,10 @@ Writer::repeat (int f, Eyes e)
 {
        boost::mutex::scoped_lock lock (_mutex);
 
+       while (_queued_full_in_memory > _maximum_frames_in_memory) {
+               _full_condition.wait (lock);
+       }
+       
        QueueItem qi;
        qi.type = QueueItem::REPEAT;
        qi.frame = f;
@@ -450,7 +480,7 @@ Writer::repeat (int f, Eyes e)
                _queue.push_back (qi);
        }
 
-       _condition.notify_all ();
+       _empty_condition.notify_all ();
 }
 
 bool
index 842d6a55d3079474a03b7feab81757c6b5313711..7af79a417ed193780931e805eda92d5ca1d58515 100644 (file)
@@ -71,6 +71,7 @@ class Writer : public ExceptionStore, public boost::noncopyable
 {
 public:
        Writer (boost::shared_ptr<const Film>, boost::weak_ptr<Job>);
+       ~Writer ();
 
        bool can_fake_write (int) const;
        
@@ -83,6 +84,7 @@ public:
 private:
 
        void thread ();
+       void terminate_thread (bool);
        void check_existing_picture_mxf ();
        bool check_existing_picture_mxf_frame (FILE *, int, Eyes);
        bool have_sequenced_image_at_queue_head ();
@@ -103,8 +105,10 @@ private:
        int _queued_full_in_memory;
        /** mutex for thread state */
        mutable boost::mutex _mutex;
-       /** condition to manage thread wakeups */
-       boost::condition _condition;
+       /** condition to manage thread wakeups when we have nothing to do  */
+       boost::condition _empty_condition;
+       /** condition to manage thread wakeups when we have too much to do */
+       boost::condition _full_condition;
        /** the data of the last written frame, or 0 if there isn't one */
        boost::shared_ptr<const EncodedData> _last_written[EYES_COUNT];
        /** the index of the last written frame */
index 111b5769d313baa3a226eb8684e2bdbbf395f426..1e60d96903d3569fe8182e3777c32fd08980f902 100644 (file)
@@ -429,11 +429,6 @@ private:
        
        void file_exit ()
        {
-               if (!should_close ()) {
-                       return;
-               }
-               
-               maybe_save_then_delete_film ();
                Close (true);
        }
 
index 8604e2a4ce2b7bc0ea09662bd95e118b13cb78df..2de6cb8712f2d2f803f7bd29cdc5ea688737d117 100644 (file)
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-01-07 20:01+0000\n"
-"PO-Revision-Date: 2014-01-02 13:17+0100\n"
+"PO-Revision-Date: 2014-01-14 19:49+0100\n"
 "Last-Translator: \n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: de\n"
@@ -86,7 +86,7 @@ msgstr "Über DCP-o-matic"
 
 #: src/tools/dcpomatic.cc:230
 msgid "Check for updates"
-msgstr ""
+msgstr "Auf Updates überprüfen"
 
 #: src/tools/dcpomatic.cc:638
 msgid "Could not load film %1 (%2)"
@@ -111,7 +111,6 @@ msgid "DCP-o-matic"
 msgstr "DCP-o-matic"
 
 #: src/tools/dcpomatic.cc:229
-#, fuzzy
 msgid "Encoding servers..."
 msgstr "Encoding Server..."
 
@@ -150,10 +149,12 @@ 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 ""
+"Das DCP für diesen Film wird etwa %.1f GB groß. Auf dem ausgewählten "
+"Laufwerk sind aber nur %.1f GB frei. Möchten Sie trotzdem weitermachen ?"
 
 #: src/tools/dcpomatic.cc:729
 msgid "The DCP-o-matic download server could not be contacted."
-msgstr ""
+msgstr "Der DCP-o-matic Download Server ist nicht erreichbar."
 
 #: src/tools/dcpomatic.cc:356
 msgid ""
@@ -165,7 +166,7 @@ msgstr ""
 
 #: src/tools/dcpomatic.cc:724
 msgid "There are no new versions of DCP-o-matic available."
-msgstr ""
+msgstr "Es ist keine neue Version des DCP-o-matic verfügbar."
 
 #: src/tools/dcpomatic.cc:558
 msgid "There are unfinished jobs; are you sure you want to quit?"
index 9fa57a1b10b2f21dc0aa54674d1ea543e6284289..c08da091241b2c92e75dbd0c159d3688fccda9fb 100644 (file)
@@ -58,6 +58,8 @@ public:
 
        void Draw (wxGrid& grid, wxGridCellAttr &, wxDC& dc, const wxRect& rect, int row, int col, bool)
        {
+               LocaleGuard lg;
+       
                dc.SetPen (*wxThePenList->FindOrCreatePen (wxColour (255, 255, 255), 1, wxPENSTYLE_SOLID));
                dc.SetBrush (*wxTheBrushList->FindOrCreateBrush (wxColour (255, 255, 255), wxBRUSHSTYLE_SOLID));
                dc.DrawRectangle (rect);
@@ -222,6 +224,8 @@ AudioMappingView::set (AudioMapping map)
 void
 AudioMappingView::update_cells ()
 {
+       LocaleGuard lg;
+       
        if (_grid->GetNumberRows ()) {
                _grid->DeleteRows (0, _grid->GetNumberRows ());
        }
index be5af999e86ca42861f1b9fd73e8563962037dab..e0ad2c457625d08fd188fb829ac50bc6d0b68f3a 100644 (file)
@@ -67,6 +67,8 @@ NewFilmDialog::NewFilmDialog (wxWindow* parent)
 
        overall_sizer->Layout ();
        overall_sizer->SetSizeHints (this);
+
+       _name->SetFocus ();
 }
 
 NewFilmDialog::~NewFilmDialog ()
index 5a1046524b713ef1eb8924c861e079a7de1fb2de..58923196d22209690754a15674388bdaba55026a 100644 (file)
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-01-07 20:01+0000\n"
-"PO-Revision-Date: 2014-01-05 23:08+0100\n"
+"PO-Revision-Date: 2014-01-14 20:00+0100\n"
 "Last-Translator: \n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: de\n"
@@ -38,7 +38,7 @@ msgstr "(DCP-o-matic zum ändern der Sprache neu starten)"
 
 #: src/wx/audio_mapping_view.cc:133
 msgid "-3dB"
-msgstr ""
+msgstr "-3dB"
 
 #: src/wx/colour_conversion_editor.cc:83
 msgid "1 / "
@@ -74,7 +74,7 @@ msgstr "4K"
 
 #: src/wx/update_dialog.cc:34
 msgid "A new version of DCP-o-matic is available."
-msgstr ""
+msgstr "Es ist eine neue Version von DCP-o-matic verfügbar."
 
 #: src/wx/about_dialog.cc:30
 msgid "About DCP-o-matic"
@@ -129,6 +129,7 @@ msgstr "Ton Kanäle"
 msgid ""
 "Audio will be passed from content channel %d to DCP channel %d unaltered."
 msgstr ""
+"Der Ton von Kanal %d wird ohne Veränderung an das DCP Kanal %d weitergegeben."
 
 #: src/wx/audio_mapping_view.cc:324
 #, c-format
@@ -136,6 +137,8 @@ msgid ""
 "Audio will be passed from content channel %d to DCP channel %d with gain "
 "%.1fdB."
 msgstr ""
+"Der Ton von Kanal %d wird wird an das DCP Kanal %d mit %.1fdB Pegel "
+"weitergegeben."
 
 #: src/wx/job_wrapper.cc:38
 #, c-format
@@ -167,9 +170,8 @@ msgid "Cancel"
 msgstr "Abbrechen"
 
 #: src/wx/audio_gain_dialog.cc:26
-#, fuzzy
 msgid "Channel gain"
-msgstr "Kanäle"
+msgstr "Kanal Pegel"
 
 #: src/wx/audio_dialog.cc:44
 msgid "Channels"
@@ -177,11 +179,11 @@ msgstr "Kanäle"
 
 #: src/wx/config_dialog.cc:143
 msgid "Check for testing updates as well as stable ones"
-msgstr ""
+msgstr "Überprüfung auf Updates auch für Test-Versionen."
 
 #: src/wx/config_dialog.cc:139
 msgid "Check for updates on startup"
-msgstr ""
+msgstr "Beim Starten auf Updates überprüfen."
 
 #: src/wx/content_menu.cc:182
 msgid "Choose a file"
@@ -349,9 +351,8 @@ msgid "Edit..."
 msgstr "Bearbeiten..."
 
 #: src/wx/cinema_dialog.cc:35
-#, fuzzy
 msgid "Email address for KDM delivery"
-msgstr "Von Adresse für KDM Emails"
+msgstr "Email Adresse für KDM Zustellung"
 
 #: src/wx/servers_list_dialog.cc:30
 msgid "Encoding Servers"
@@ -411,7 +412,7 @@ msgstr "Von Adresse für KDM Emails"
 
 #: src/wx/audio_mapping_view.cc:132
 msgid "Full"
-msgstr ""
+msgstr "Ein"
 
 #: src/wx/timing_panel.cc:42
 msgid "Full length"
@@ -424,7 +425,7 @@ msgstr "Lautstärken Rechner"
 #: src/wx/audio_gain_dialog.cc:31
 #, c-format
 msgid "Gain for content channel %d in DCP channel %d"
-msgstr ""
+msgstr "Pegel des Kanals %d im DCP Kanal %d"
 
 #: src/wx/properties_dialog.cc:57
 msgid "Gb"
@@ -557,12 +558,12 @@ msgstr "Neuer Film"
 
 #: src/wx/update_dialog.cc:36
 msgid "New versions of DCP-o-matic are available."
-msgstr ""
+msgstr "Eine neue Version von DCP-o-matic ist verfügbar."
 
 #: src/wx/audio_mapping_view.cc:319
 #, c-format
 msgid "No audio will be passed from content channel %d to DCP channel %d."
-msgstr ""
+msgstr "Der Ton von Kanal %d wird nicht an das DCP Kanal %d weitergegeben."
 
 #: src/wx/video_panel.cc:198
 msgid "No stretch"
@@ -574,7 +575,7 @@ msgstr "Kein"
 
 #: src/wx/audio_mapping_view.cc:131
 msgid "Off"
-msgstr ""
+msgstr "Aus"
 
 #: src/wx/config_dialog.cc:119
 msgid "Outgoing mail server"
@@ -668,7 +669,7 @@ msgstr "Neustart"
 
 #: src/wx/audio_mapping_view.cc:327
 msgid "Right click to change gain."
-msgstr ""
+msgstr "Rechtsklick für Pegeländerung"
 
 #: src/wx/video_panel.cc:101
 msgid "Right crop"
@@ -732,9 +733,8 @@ msgid "Snap"
 msgstr "Einschnappen"
 
 #: src/wx/update_dialog.cc:43
-#, fuzzy
 msgid "Stable version "
-msgstr "Inhalt Version"
+msgstr "Stabile Version"
 
 #: src/wx/film_editor.cc:185
 msgid "Standard"
@@ -781,9 +781,8 @@ msgid "Territory (e.g. UK)"
 msgstr "Gebiet (z.B. UK)"
 
 #: src/wx/update_dialog.cc:48
-#, fuzzy
 msgid "Test version "
-msgstr "Inhalt Version"
+msgstr "Test Version"
 
 #: src/wx/content_menu.cc:223
 msgid ""
@@ -853,7 +852,7 @@ msgstr "Nach oben"
 
 #: src/wx/update_dialog.cc:27
 msgid "Update"
-msgstr ""
+msgstr "Update"
 
 #: src/wx/film_editor.cc:126
 msgid "Use DCI name"
@@ -880,9 +879,8 @@ msgid "Video"
 msgstr "Bild"
 
 #: src/wx/timing_panel.cc:56
-#, fuzzy
 msgid "Video frame rate"
-msgstr "Bild Rate"
+msgstr "Bildwiederholrate"
 
 #: src/wx/subtitle_panel.cc:39
 msgid "With Subtitles"
index 1a39040fbe2079bf61def7282b0c9d1b8f9ee8cb..082a6ff11eed1b651b451b4bbb537ee2e84674bd 100644 (file)
@@ -46,7 +46,7 @@ BOOST_AUTO_TEST_CASE (ratio_test)
 
        r = Ratio::from_id ("133");
        BOOST_CHECK (r);
-       BOOST_CHECK_EQUAL (fit_ratio_within (r->ratio(), libdcp::Size (2048, 1080)), libdcp::Size (1436, 1080));
+       BOOST_CHECK_EQUAL (fit_ratio_within (r->ratio(), libdcp::Size (2048, 1080)), libdcp::Size (1440, 1080));
 
        r = Ratio::from_id ("137");
        BOOST_CHECK (r);
@@ -58,7 +58,7 @@ BOOST_AUTO_TEST_CASE (ratio_test)
 
        r = Ratio::from_id ("166");
        BOOST_CHECK (r);
-       BOOST_CHECK_EQUAL (fit_ratio_within (r->ratio(), libdcp::Size (2048, 1080)), libdcp::Size (1793, 1080));
+       BOOST_CHECK_EQUAL (fit_ratio_within (r->ratio(), libdcp::Size (2048, 1080)), libdcp::Size (1800, 1080));
 
        r = Ratio::from_id ("178");
        BOOST_CHECK (r);
diff --git a/wscript b/wscript
index 3f7427cd2aa14c78e892523f52050b3f3d185a40..d722524590e75d137a484fff21071ee6c58f8c08 100644 (file)
--- a/wscript
+++ b/wscript
@@ -3,7 +3,7 @@ import os
 import sys
 
 APPNAME = 'dcpomatic'
-VERSION = '1.61.2pre'
+VERSION = '1.63.2devel'
 
 def options(opt):
     opt.load('compiler_cxx')