Merge master.
authorCarl Hetherington <cth@carlh.net>
Tue, 21 Oct 2014 18:14:58 +0000 (19:14 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 21 Oct 2014 18:14:58 +0000 (19:14 +0100)
30 files changed:
ChangeLog
cscript
debian/changelog
src/lib/dcp_video.cc
src/lib/image.cc
src/lib/image_examiner.cc
src/lib/player_video.cc
src/lib/player_video.h
src/lib/player_video_frame.cc [new file with mode: 0644]
src/lib/util.cc
src/tools/dcpomatic_cli.cc
src/tools/po/de_DE.po
src/tools/po/es_ES.po
src/tools/po/fr_FR.po
src/tools/po/it_IT.po
src/tools/po/nl_NL.po
src/wx/about_dialog.cc
src/wx/audio_panel.cc
src/wx/audio_panel.h
src/wx/film_viewer.cc
src/wx/po/de_DE.po
src/wx/po/es_ES.po
src/wx/po/fr_FR.po
src/wx/po/it_IT.po
src/wx/po/nl_NL.po
src/wx/po/sv_SE.po
src/wx/wscript
test/image_test.cc
test/play_test.cc
wscript

index 0d2b89a59f4a49813c5a23974035afc780535f93..873ad89dffe7361b40e682306fd9abd0c55ebb09 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2014-10-20  Carl Hetherington  <cth@carlh.net>
+
+       * Version 1.76.2 released.
+
+2014-10-19  Carl Hetherington  <cth@carlh.net>
+
+       * Add simple note of what audio resampling
+       will be done to the audio panel.
+
+2014-10-16  Carl Hetherington  <cth@carlh.net>
+
+       * Version 1.75.2 released.
+
+2014-10-16  Carl Hetherington  <cth@carlh.net>
+
+       * Version 1.75.1 released.
+
+2014-10-16  Carl Hetherington  <cth@carlh.net>
+
+       * Version 1.75.0 released.
+
 2014-10-14  Carl Hetherington  <cth@carlh.net>
 
        * Version 1.74.3 released.
diff --git a/cscript b/cscript
index 795cf0a35000f85b6ec96a220d4fa7455b97c203..a5c0900c121fd73a830445c3207206e3682032a9 100644 (file)
--- a/cscript
+++ b/cscript
@@ -8,7 +8,6 @@ deb_build_depends = {'debhelper': '8.0.0',
                      'pkg-config': '0.26',
                      'libssh-dev': '0.5.2',
                      'libsndfile1-dev': '1.0.25',
-                     'libmagick++-dev': '8:6.6.9.7',
                      'libgtk2.0-dev': '2.24.10'}
 
 deb_depends = dict()
@@ -173,7 +172,7 @@ def build(target, options):
             if target.version == '6.5':
                 cmd += ' --target-centos-6 --disable-tests'
             elif target.version == '7':
-                cmd += ' --target-centos-7'
+                cmd += ' --target-centos-7 --disable-tests'
 
     target.command(cmd)
     target.command('./waf')
index 526cae29f07b089ed28a21be132cc2a5ee1f0b50..9842aacb1bde7a3ea88e935d98f511d924fcf1ec 100644 (file)
@@ -189,8 +189,12 @@ dcpomatic (2.0.14-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.
 
- -- Carl Hetherington <carl@d1stkfactory>  Tue, 14 Oct 2014 18:38:17 +0100
+ -- Carl Hetherington <carl@d1stkfactory>  Mon, 20 Oct 2014 22:50:32 +0100
 
 dcpomatic (0.87-1) UNRELEASED; urgency=low
 
index ccfc800c8389f275518b774d3e8e4daa7c1157dd..f6c671fd14774b655acb67708b75084c6a49eaf8 100644 (file)
@@ -125,7 +125,7 @@ DCPVideo::encode_locally ()
        }
 
        shared_ptr<dcp::XYZFrame> xyz = dcp::rgb_to_xyz (
-               _frame->image (_burn_subtitles),
+               _frame->image (AV_PIX_FMT_RGB48LE, _burn_subtitles),
                in_lut,
                dcp::GammaLUT::cache.get (16, 1 / _frame->colour_conversion().output_gamma, false),
                matrix
index 0da2d1e483993ba780896a6398fc04a99963e32a..bc64ba3b82373cb34bce1aff4e0f450d93ce5b29 100644 (file)
@@ -322,6 +322,8 @@ Image::make_black ()
        case PIX_FMT_ABGR:
        case PIX_FMT_BGRA:
        case PIX_FMT_RGB555LE:
+       case PIX_FMT_RGB48LE:
+       case PIX_FMT_RGB48BE:
                memset (data()[0], 0, lines(0) * stride()[0]);
                break;
 
index 004b89e659d47ebd24cb594bc06848d2651585d4..75ccb6a3e91fd3e21207ce26872f69f187b95170 100644 (file)
@@ -37,7 +37,9 @@ ImageExaminer::ImageExaminer (shared_ptr<const Film> film, shared_ptr<const Imag
        : _film (film)
        , _image_content (content)
 {
+#ifdef DCPOMATIC_IMAGE_MAGICK  
        using namespace MagickCore;
+#endif 
        Magick::Image* image = new Magick::Image (content->path(0).string());
        _video_size = dcp::Size (image->columns(), image->rows());
        delete image;
index 2feb52f42e9d2ef158a3dc1ad272079958bb1a48..8e6fcd5f3524f8baf4e00c54f791cc92bf4778a7 100644 (file)
@@ -90,7 +90,7 @@ PlayerVideo::set_subtitle (PositionImage image)
 }
 
 shared_ptr<Image>
-PlayerVideo::image (bool burn_subtitle) const
+PlayerVideo::image (AVPixelFormat pixel_format, bool burn_subtitle) const
 {
        shared_ptr<Image> im = _in->image ();
        
@@ -112,7 +112,7 @@ PlayerVideo::image (bool burn_subtitle) const
                break;
        }
                
-       shared_ptr<Image> out = im->crop_scale_window (total_crop, _inter_size, _out_size, _scaler, PIX_FMT_RGB24, true);
+       shared_ptr<Image> out = im->crop_scale_window (total_crop, _inter_size, _out_size, _scaler, pixel_format, true);
 
        if (burn_subtitle && _subtitle.image) {
                out->alpha_blend (_subtitle.image, _subtitle.position);
index 0f5e83b10298ff93c85f0b1dee3ee5dc388d282e..e9d260972824b10e58c3a4a71e2b2388b8bf97a3 100644 (file)
@@ -18,6 +18,9 @@
 */
 
 #include <boost/shared_ptr.hpp>
+extern "C" {
+#include <libavutil/pixfmt.h>
+}
 #include "types.h"
 #include "position.h"
 #include "colour_conversion.h"
@@ -54,7 +57,7 @@ public:
 
        void set_subtitle (PositionImage);
        
-       boost::shared_ptr<Image> image (bool burn_subtitle) const;
+       boost::shared_ptr<Image> image (AVPixelFormat pix_fmt, bool burn_subtitle) const;
 
        void add_metadata (xmlpp::Node* node, bool send_subtitles) const;
        void send_binary (boost::shared_ptr<Socket> socket, bool send_subtitles) const;
diff --git a/src/lib/player_video_frame.cc b/src/lib/player_video_frame.cc
new file mode 100644 (file)
index 0000000..63ddc63
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+    Copyright (C) 2013-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 <libdcp/raw_convert.h>
+#include "player_video_frame.h"
+#include "image.h"
+#include "image_proxy.h"
+#include "scaler.h"
+
+using std::string;
+using std::cout;
+using boost::shared_ptr;
+using libdcp::raw_convert;
+
+PlayerVideoFrame::PlayerVideoFrame (
+       shared_ptr<const ImageProxy> in,
+       Crop crop,
+       libdcp::Size inter_size,
+       libdcp::Size out_size,
+       Scaler const * scaler,
+       Eyes eyes,
+       Part part,
+       ColourConversion colour_conversion
+       )
+       : _in (in)
+       , _crop (crop)
+       , _inter_size (inter_size)
+       , _out_size (out_size)
+       , _scaler (scaler)
+       , _eyes (eyes)
+       , _part (part)
+       , _colour_conversion (colour_conversion)
+{
+
+}
+
+PlayerVideoFrame::PlayerVideoFrame (shared_ptr<cxml::Node> node, shared_ptr<Socket> socket, shared_ptr<Log> log)
+{
+       _crop = Crop (node);
+
+       _inter_size = libdcp::Size (node->number_child<int> ("InterWidth"), node->number_child<int> ("InterHeight"));
+       _out_size = libdcp::Size (node->number_child<int> ("OutWidth"), node->number_child<int> ("OutHeight"));
+       _scaler = Scaler::from_id (node->string_child ("Scaler"));
+       _eyes = (Eyes) node->number_child<int> ("Eyes");
+       _part = (Part) node->number_child<int> ("Part");
+       _colour_conversion = ColourConversion (node);
+
+       _in = image_proxy_factory (node->node_child ("In"), socket, log);
+
+       if (node->optional_number_child<int> ("SubtitleX")) {
+               
+               _subtitle_position = Position<int> (node->number_child<int> ("SubtitleX"), node->number_child<int> ("SubtitleY"));
+
+               shared_ptr<Image> image (
+                       new Image (PIX_FMT_RGBA, libdcp::Size (node->number_child<int> ("SubtitleWidth"), node->number_child<int> ("SubtitleHeight")), true)
+                       );
+               
+               image->read_from_socket (socket);
+               _subtitle_image = image;
+       }
+}
+
+void
+PlayerVideoFrame::set_subtitle (shared_ptr<const Image> image, Position<int> pos)
+{
+       _subtitle_image = image;
+       _subtitle_position = pos;
+}
+
+shared_ptr<Image>
+PlayerVideoFrame::image (AVPixelFormat pixel_format) const
+{
+       shared_ptr<Image> im = _in->image ();
+       
+       Crop total_crop = _crop;
+       switch (_part) {
+       case PART_LEFT_HALF:
+               total_crop.right += im->size().width / 2;
+               break;
+       case PART_RIGHT_HALF:
+               total_crop.left += im->size().width / 2;
+               break;
+       case PART_TOP_HALF:
+               total_crop.bottom += im->size().height / 2;
+               break;
+       case PART_BOTTOM_HALF:
+               total_crop.top += im->size().height / 2;
+               break;
+       default:
+               break;
+       }
+               
+       shared_ptr<Image> out = im->crop_scale_window (total_crop, _inter_size, _out_size, _scaler, pixel_format, false);
+
+       Position<int> const container_offset ((_out_size.width - _inter_size.width) / 2, (_out_size.height - _inter_size.width) / 2);
+
+       if (_subtitle_image) {
+               out->alpha_blend (_subtitle_image, _subtitle_position);
+       }
+
+       return out;
+}
+
+void
+PlayerVideoFrame::add_metadata (xmlpp::Node* node) const
+{
+       _crop.as_xml (node);
+       _in->add_metadata (node->add_child ("In"));
+       node->add_child("InterWidth")->add_child_text (raw_convert<string> (_inter_size.width));
+       node->add_child("InterHeight")->add_child_text (raw_convert<string> (_inter_size.height));
+       node->add_child("OutWidth")->add_child_text (raw_convert<string> (_out_size.width));
+       node->add_child("OutHeight")->add_child_text (raw_convert<string> (_out_size.height));
+       node->add_child("Scaler")->add_child_text (_scaler->id ());
+       node->add_child("Eyes")->add_child_text (raw_convert<string> (_eyes));
+       node->add_child("Part")->add_child_text (raw_convert<string> (_part));
+       _colour_conversion.as_xml (node);
+       if (_subtitle_image) {
+               node->add_child ("SubtitleWidth")->add_child_text (raw_convert<string> (_subtitle_image->size().width));
+               node->add_child ("SubtitleHeight")->add_child_text (raw_convert<string> (_subtitle_image->size().height));
+               node->add_child ("SubtitleX")->add_child_text (raw_convert<string> (_subtitle_position.x));
+               node->add_child ("SubtitleY")->add_child_text (raw_convert<string> (_subtitle_position.y));
+       }
+}
+
+void
+PlayerVideoFrame::send_binary (shared_ptr<Socket> socket) const
+{
+       _in->send_binary (socket);
+       if (_subtitle_image) {
+               _subtitle_image->write_to_socket (socket);
+       }
+}
index e0db5de2ef2aa71558d2bc8a5b3d701e50ee254d..7a0f1a17aec65008bf2eea3585d0bebb5cf283c9 100644 (file)
 #include <glib.h>
 #include <openjpeg.h>
 #include <pangomm/init.h>
+#ifdef DCPOMATIC_IMAGE_MAGICK
 #include <magick/MagickCore.h>
+#else
+#include <magick/common.h>
+#include <magick/magick_config.h>
+#endif
 #include <magick/version.h>
 #include <dcp/version.h>
 #include <dcp/util.h>
index 8c33b7d83a983f4917bf98ee413bf0cf7186d635..f55a425ce6a521d48719bee761f74a294023d878 100644 (file)
@@ -139,6 +139,17 @@ main (int argc, char* argv[])
                exit (EXIT_FAILURE);
        }
 
+       ContentList content = film->content ();
+       for (ContentList::const_iterator i = content.begin(); i != content.end(); ++i) {
+               vector<boost::filesystem::path> paths = (*i)->paths ();
+               for (vector<boost::filesystem::path>::const_iterator j = paths.begin(); j != paths.end(); ++j) {
+                       if (!boost::filesystem::exists (*j)) {
+                               cerr << argv[0] << ": content file " << *j << " not found.\n";
+                               exit (EXIT_FAILURE);
+                       }
+               }
+       }
+               
        cout << "\nMaking DCP for " << film->name() << "\n";
 
        film->make_dcp ();
index 4f282e3ac64fcbcb7ff33d48cadc7d1fdf86f3eb..ab8f2fca70f20d5fc6efeaf3254a869f5cb6167b 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-07-13 03:04+0100\n"
 "Last-Translator: Carsten Kurz\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
index 8059915819254c17deccfa004b1bb33d8502016f..c4074fb12b69434c066b67a35969dbea0aaa91ac 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: DCPOMATIC\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-04-20 10:21-0500\n"
 "Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
 "Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
index 6d1b211b2cd29cacf2beb6205ec72dc5e65b0ef0..6d426d4327ee16bfa39510aee03d0e41e77d250b 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: DCP-o-matic FRENCH\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-07-14 10:43+0100\n"
 "Last-Translator: Grégoire AUSINA <gregoire@gisele-productions.eu>\n"
 "Language-Team: \n"
index 1885fb7fbacce1bab2ad66a980f11ee11d11e43e..7f7baddaf08eabb73d1c594a5a7e523f41b2a8e8 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: IT VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-02-03 09:36+0100\n"
 "Last-Translator: William Fanelli <william.f@impronte.com>\n"
 "Language-Team: \n"
index e07554b48ca42db115037de3c541c42825c86a22..02eafd9cc2aceccf4c85b53e4eadcfe7e8697340 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: DCP-o-matic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-09-04 20:29+0100\n"
 "Last-Translator: Cherif Ben Brahim <firehc@mac.com>\n"
 "Language-Team: UniversalDV <Tkooijmans@universaldv.nl>\n"
@@ -52,7 +52,7 @@ msgstr "&Help"
 msgid "&Jobs"
 msgstr "&Projecten"
 
-#: src/tools/dcpomatic.cc:634
+#: src/tools/dcpomatic.cc:631
 msgid "&Make DCP\tCtrl-M"
 msgstr "&Maak een DCP\tCtrl-M"
 
index 15b667f9bda20abc897b449663b8f24d63f69c3f..1bbcaba799c65518a6bd65e19b714575c52d034d 100644 (file)
@@ -165,6 +165,7 @@ AboutDialog::AboutDialog (wxWindow* parent)
        supported_by.Add (wxT ("Wolfram Weber"));
        supported_by.Add (wxT ("Frank de Wulf"));
        supported_by.Add (wxT ("Pavel Zhdanko"));
+       supported_by.Add (wxT ("Daniel Židek"));
        add_section (_("Supported by"), supported_by);
 
        wxArrayString tested_by;
index 82604763c8e690b8e3c884703617794b2e475b6f..b7d6979d35f20e0988f0b3135c5f0e0acc6fac5f 100644 (file)
@@ -94,6 +94,15 @@ AudioPanel::AudioPanel (ContentPanel* p)
        
        _mapping = new AudioMappingView (this);
        _sizer->Add (_mapping, 1, wxEXPAND | wxALL, 6);
+       ++r;
+
+       _description = new wxStaticText (this, wxID_ANY, wxT (" \n"), wxDefaultPosition, wxDefaultSize);
+       _sizer->Add (_description, 0, wxALL, 12);
+       wxFont font = _description->GetFont();
+       font.SetStyle (wxFONTSTYLE_ITALIC);
+       font.SetPointSize (font.GetPointSize() - 1);
+       _description->SetFont (font);
+       ++r;
 
        _gain->wrapped()->SetRange (-60, 60);
        _gain->wrapped()->SetDigits (1);
@@ -117,6 +126,9 @@ AudioPanel::film_changed (Film::Property property)
                _mapping->set_channels (_parent->film()->audio_channels ());
                _sizer->Layout ();
                break;
+       case Film::VIDEO_FRAME_RATE:
+               setup_description ();
+               break;
        default:
                break;
        }
@@ -136,6 +148,8 @@ AudioPanel::film_content_changed (int property)
        if (property == AudioContentProperty::AUDIO_MAPPING) {
                _mapping->set (acs ? acs->audio_mapping () : AudioMapping ());
                _sizer->Layout ();
+       } else if (property == AudioContentProperty::AUDIO_FRAME_RATE) {
+               setup_description ();
        } else if (property == FFmpegContentProperty::AUDIO_STREAM) {
                _mapping->set (acs ? acs->audio_mapping () : AudioMapping ());
                _sizer->Layout ();
@@ -245,6 +259,27 @@ AudioPanel::processor_changed ()
        }
 }
 
+void
+AudioPanel::setup_description ()
+{
+       AudioContentList ac = _parent->selected_audio ();
+       if (ac.size () != 1) {
+               _description->SetLabel ("");
+               return;
+       }
+
+       shared_ptr<AudioContent> acs = ac.front ();
+       if (acs->audio_frame_rate() != acs->resampled_audio_frame_rate ()) {
+               _description->SetLabel (wxString::Format (
+                                               _("Audio will be resampled from %.3fkHz to %.3fkHz."),
+                                               acs->audio_frame_rate() / 1000.0,
+                                               acs->resampled_audio_frame_rate() / 1000.0
+                                               ));
+       } else {
+               _description->SetLabel (_("Audio will not be resampled."));
+       }
+}
+
 void
 AudioPanel::mapping_changed (AudioMapping m)
 {
@@ -276,6 +311,7 @@ AudioPanel::content_selection_changed ()
 
        film_content_changed (AudioContentProperty::AUDIO_MAPPING);
        film_content_changed (AudioContentProperty::AUDIO_PROCESSOR);
+       film_content_changed (AudioContentProperty::AUDIO_FRAME_RATE);
        film_content_changed (FFmpegContentProperty::AUDIO_STREAM);
        film_content_changed (FFmpegContentProperty::AUDIO_STREAMS);
 }
index d5821d26abd3446844bff8e8aae1b3022901f187..b0218575a7f0f12ca6c5a6b59f3107626e79dbe7 100644 (file)
@@ -44,6 +44,7 @@ private:
        void mapping_changed (AudioMapping);
        void processor_changed ();
        void setup_processors ();
+       void setup_description ();
 
        ContentSpinCtrlDouble<AudioContent>* _gain;
        wxButton* _gain_calculate_button;
@@ -51,6 +52,8 @@ private:
        ContentSpinCtrl<AudioContent>* _delay;
        wxChoice* _stream;
        wxChoice* _processor;
+       wxStaticText* _stream_description;
        AudioMappingView* _mapping;
+       wxStaticText* _description;
        AudioDialog* _audio_dialog;
 };
index 7ecba1903799d28ae658a7eee917bbce6d624983..a46983a6f9972b0bf41efbc28ef1a4d03372988e 100644 (file)
@@ -172,7 +172,7 @@ FilmViewer::get (DCPTime p, bool accurate)
        list<shared_ptr<PlayerVideo> > pvf = _player->get_video (p, accurate);
        if (!pvf.empty ()) {
                try {
-                       _frame = pvf.front()->image (true);
+                       _frame = pvf.front()->image (PIX_FMT_RGB24, true);
                        _frame = _frame->scale (_frame->size(), Scaler::from_id ("fastbilinear"), PIX_FMT_RGB24, false);
                        _position = pvf.front()->time ();
                        _inter_position = pvf.front()->inter_position ();
index 5050abc0bd3cd79d5f7f403e209b5e5335c164d4..d7353e9144857dcf7a86933968607ae543bab77c 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-07-13 03:08+0100\n"
 "Last-Translator: Carsten Kurz\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1119,7 +1119,7 @@ msgstr "Gebiet (z.B. UK)"
 msgid "Test version "
 msgstr "Test Version"
 
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
 msgid "Tested by"
 msgstr "Getestet von"
 
index ea0ed5ab428e994ebc6860169c6979e2d7da1fec..0191fc503fc9a800403257eb0b16c79bfebfe695 100644 (file)
@@ -1109,7 +1109,7 @@ msgstr "Idioma del subtítulo (ej. EN)"
 msgid "Subtitles"
 msgstr "Subtítulos"
 
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
 msgid "Supported by"
 msgstr "Soportado por"
 
@@ -1134,7 +1134,7 @@ msgstr "Territorio (ej. ES)"
 msgid "Test version "
 msgstr "Versión en prueba"
 
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
 msgid "Tested by"
 msgstr "Comprobado por"
 
index e4c2034ff4eb347bff7593e85945cd11c2298580..46c4822d62be04e774b03a59a0e69521685bae8f 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: DCP-o-matic FRENCH\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-07-14 11:27+0100\n"
 "Last-Translator: Grégoire AUSINA <gregoire@gisele-productions.eu>\n"
 "Language-Team: \n"
@@ -1096,7 +1096,7 @@ msgstr "Langue de sous-titres (ex. FR)"
 msgid "Subtitles"
 msgstr "Sous-titres"
 
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
 msgid "Supported by"
 msgstr "Soutenu par"
 
@@ -1120,7 +1120,7 @@ msgstr "Territoire (ex. FR)"
 msgid "Test version "
 msgstr "Version test"
 
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
 msgid "Tested by"
 msgstr "Testé par"
 
index 35c463d3008e151971557e2626c9ec1818f32ea8..35cb8db88a54ac8b805f07f29e2e98dfb5783df2 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: IT VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-02-03 10:46+0100\n"
 "Last-Translator: William Fanelli <william.f@impronte.com>\n"
 "Language-Team: \n"
@@ -1118,7 +1118,7 @@ msgstr "Lingua dei Sottotitoli (es. FR)"
 msgid "Subtitles"
 msgstr "Sottotitoli"
 
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
 msgid "Supported by"
 msgstr ""
 
@@ -1144,7 +1144,7 @@ msgstr "Nazione (es. UK)"
 msgid "Test version "
 msgstr "Versione di test"
 
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
 msgid "Tested by"
 msgstr ""
 
index aa609f1f08988e331a4521fee1a7995eccd3a272..e792f84be5cc6662db4909f5d11b9415486dafd9 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: DCP-o-matic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-09-04 20:17+0100\n"
 "Last-Translator: Cherif Ben Brahim <firehc@mac.com>\n"
 "Language-Team: UniversalDV <TKooijmans@universaldv.nl>\n"
@@ -1104,7 +1104,7 @@ msgstr "Ondertitel Taal (vb  NL)"
 msgid "Subtitles"
 msgstr "Ondertitels"
 
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
 msgid "Supported by"
 msgstr "Ondersteund door"
 
@@ -1128,7 +1128,7 @@ msgstr "Grondgebied (vb NL)"
 msgid "Test version "
 msgstr "Test Versie"
 
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
 msgid "Tested by"
 msgstr "Getest door"
 
index 497b9a25d03867f04117c2131610bc07a05f9e3a..441643ccef459df953af7a562da4336cb24e434a 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: DCP-o-matic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-10-15 09:37+0100\n"
+"POT-Creation-Date: 2014-10-16 16:38+0100\n"
 "PO-Revision-Date: 2014-01-19 09:14+0100\n"
 "Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
 "Language-Team: \n"
@@ -1131,7 +1131,7 @@ msgstr "Undertextspråk (ex. SV)"
 msgid "Subtitles"
 msgstr "Undertexter"
 
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
 msgid "Supported by"
 msgstr "Stöd från"
 
@@ -1156,7 +1156,7 @@ msgstr "Område (ex. SV)"
 msgid "Test version "
 msgstr "Testversion"
 
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
 #, fuzzy
 msgid "Tested by"
 msgstr "Översatt av"
index 0f39038a5f4873eccac693933faedee72eaeec3c..8801ccc75556c090b05876d91bd94743a1c88c02 100644 (file)
@@ -68,7 +68,6 @@ def configure(conf):
                                     'wx_gtk2u_adv-3.0', 'wx_gtk2u_core-3.0', 'wx_baseu_xml-3.0', 'wx_baseu-3.0']
         conf.env.LIB_WXWIDGETS = ['tiff', 'SM', 'dl', 'jpeg', 'png', 'X11', 'expat']
         if conf.env.TARGET_DEBIAN and conf.env.DEBIAN_UNSTABLE:
-            conf.env.LIB_WXWIDGETS.append('Xxf86vm')
             conf.env.LIB_WXWIDGETS.append('Xext')
             conf.env.LIB_WXWIDGETS.append('X11')
 
index ee4819d6b13998135faf7fd2322874077bd147c6..44d15a8cb2ab18427f79e0d72ab1991548b7e4ca 100644 (file)
@@ -181,16 +181,24 @@ read_file (string file)
 
        boost::shared_ptr<Image> image (new Image (PIX_FMT_RGB24, size, true));
 
+#ifdef DCPOMATIC_IMAGE_MAGICK  
        using namespace MagickCore;
+#endif 
        
        uint8_t* p = image->data()[0];
        for (int y = 0; y < size.height; ++y) {
                uint8_t* q = p;
                for (int x = 0; x < size.width; ++x) {
                        Magick::Color c = magick_image.pixelColor (x, y);
+#ifdef DCPOMATIC_IMAGE_MAGICK                  
                        *q++ = c.redQuantum() * 255 / QuantumRange;
                        *q++ = c.greenQuantum() * 255 / QuantumRange;
                        *q++ = c.blueQuantum() * 255 / QuantumRange;
+#else                  
+                       *q++ = c.redQuantum() * 255 / MaxRGB;
+                       *q++ = c.greenQuantum() * 255 / MaxRGB;
+                       *q++ = c.blueQuantum() * 255 / MaxRGB;
+#endif                 
                }
                p += image->stride()[0];
        }
@@ -202,14 +210,20 @@ static
 void
 write_file (shared_ptr<Image> image, string file)
 {
+#ifdef DCPOMATIC_IMAGE_MAGICK  
        using namespace MagickCore;
+#endif 
        
        Magick::Image magick_image (Magick::Geometry (image->size().width, image->size().height), Magick::Color (0, 0, 0));
        uint8_t*p = image->data()[0];
        for (int y = 0; y < image->size().height; ++y) {
                uint8_t* q = p;
                for (int x = 0; x < image->size().width; ++x) {
+#ifdef DCPOMATIC_IMAGE_MAGICK
                        Magick::Color c (q[0] * QuantumRange / 256, q[1] * QuantumRange / 256, q[2] * QuantumRange / 256);
+#else                  
+                       Magick::Color c (q[0] * MaxRGB / 256, q[1] * MaxRGB / 256, q[2] * MaxRGB / 256);
+#endif                 
                        magick_image.pixelColor (x, y, c);
                        q += 3;
                }
index 067f772ff1f4af6bcaa3541f1ba9f53f64efa383..bbf70781a87d4600526428055228fc54809c1c62 100644 (file)
@@ -51,7 +51,7 @@ public:
        {
                Video v;
                v.content = _player->_last_video;
-               v.image = i->image ();
+               v.image = i->image (PIX_FMT_RGB24);
                v.time = t;
                _queue.push_front (v);
        }
diff --git a/wscript b/wscript
index fccf5324532a58a945a964e933d9a6d9be407444..6b55dbdad09f5aabde6ef3dfaf8f23fcf2145175 100644 (file)
--- a/wscript
+++ b/wscript
@@ -1,6 +1,8 @@
 import subprocess
 import os
 import sys
+import distutils
+import distutils.spawn
 
 APPNAME = 'dcpomatic'
 VERSION = '2.0.14devel'
@@ -28,8 +30,9 @@ def static_ffmpeg(conf):
     conf.check_cfg(package='libavfilter', args='--cflags', uselib_store='AVFILTER', mandatory=True)
     conf.env.STLIB_AVFILTER = ['avfilter', 'swresample']
     conf.check_cfg(package='libavcodec', args='--cflags', uselib_store='AVCODEC', mandatory=True)
+    # lzma link is needed by Centos 7, at least
     conf.env.STLIB_AVCODEC = ['avcodec']
-    conf.env.LIB_AVCODEC = ['z']
+    conf.env.LIB_AVCODEC = ['z', 'lzma']
     conf.check_cfg(package='libavutil', args='--cflags', uselib_store='AVUTIL', mandatory=True)
     conf.env.STLIB_AVUTIL = ['avutil']
     conf.check_cfg(package='libswscale', args='--cflags', uselib_store='SWSCALE', mandatory=True)
@@ -63,7 +66,7 @@ def static_sub(conf):
     conf.env.STLIB_SUB = ['sub']
 
 def static_dcp(conf, static_boost, static_xmlpp, static_xmlsec, static_ssh):
-    conf.check_cfg(package='libdcp-1.0', atleast_version='0.96', args='--cflags', uselib_store='DCP', mandatory=True)
+    conf.check_cfg(package='libdcp-1.0', atleast_version='1.0', args='--cflags', uselib_store='DCP', mandatory=True)
     conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]
     conf.env.STLIB_DCP = ['dcp-1.0', 'asdcp-libdcp-1.0', 'kumu-libdcp-1.0']
     conf.env.LIB_DCP = ['glibmm-2.4', 'ssl', 'crypto', 'bz2', 'xslt']
@@ -339,7 +342,13 @@ def configure(conf):
     # Dependencies which are always dynamically linked
     conf.check_cfg(package='sndfile', args='--cflags --libs', uselib_store='SNDFILE', mandatory=True)
     conf.check_cfg(package='glib-2.0', args='--cflags --libs', uselib_store='GLIB', mandatory=True)
-    conf.check_cfg(package= '', path=conf.options.magickpp_config, args='--cppflags --cxxflags --libs', uselib_store='MAGICK', mandatory=True)
+    if distutils.spawn.find_executable(conf.options.magickpp_config):
+        conf.check_cfg(package='', path=conf.options.magickpp_config, args='--cppflags --cxxflags --libs', uselib_store='MAGICK', mandatory=True)
+        conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_IMAGE_MAGICK')
+    else:
+        conf.check_cfg(package='GraphicsMagick++', args='--cflags --libs', uselib_store='MAGICK', mandatory=True)
+        conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_GRAPHICS_MAGICK')
+        
     conf.check_cfg(package='libzip', args='--cflags --libs', uselib_store='ZIP', mandatory=True)
     conf.check_cfg(package='pangomm-1.4', args='--cflags --libs', uselib_store='PANGOMM', mandatory=True)
     conf.check_cfg(package='cairomm-1.0', args='--cflags --libs', uselib_store='CAIROMM', mandatory=True)