+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.
'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()
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')
* 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
}
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
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;
: _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;
}
shared_ptr<Image>
-PlayerVideo::image (bool burn_subtitle) const
+PlayerVideo::image (AVPixelFormat pixel_format, bool burn_subtitle) const
{
shared_ptr<Image> im = _in->image ();
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);
*/
#include <boost/shared_ptr.hpp>
+extern "C" {
+#include <libavutil/pixfmt.h>
+}
#include "types.h"
#include "position.h"
#include "colour_conversion.h"
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;
--- /dev/null
+/*
+ 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);
+ }
+}
#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>
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 ();
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"
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"
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"
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"
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"
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"
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;
_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);
_mapping->set_channels (_parent->film()->audio_channels ());
_sizer->Layout ();
break;
+ case Film::VIDEO_FRAME_RATE:
+ setup_description ();
+ break;
default:
break;
}
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 ();
}
}
+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)
{
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);
}
void mapping_changed (AudioMapping);
void processor_changed ();
void setup_processors ();
+ void setup_description ();
ContentSpinCtrlDouble<AudioContent>* _gain;
wxButton* _gain_calculate_button;
ContentSpinCtrl<AudioContent>* _delay;
wxChoice* _stream;
wxChoice* _processor;
+ wxStaticText* _stream_description;
AudioMappingView* _mapping;
+ wxStaticText* _description;
AudioDialog* _audio_dialog;
};
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 ();
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"
msgid "Test version "
msgstr "Test Version"
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
msgid "Tested by"
msgstr "Getestet von"
msgid "Subtitles"
msgstr "Subtítulos"
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
msgid "Supported by"
msgstr "Soportado por"
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"
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"
msgid "Subtitles"
msgstr "Sous-titres"
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
msgid "Supported by"
msgstr "Soutenu par"
msgid "Test version "
msgstr "Version test"
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
msgid "Tested by"
msgstr "Testé par"
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"
msgid "Subtitles"
msgstr "Sottotitoli"
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
msgid "Supported by"
msgstr ""
msgid "Test version "
msgstr "Versione di test"
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
msgid "Tested by"
msgstr ""
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"
msgid "Subtitles"
msgstr "Ondertitels"
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
msgid "Supported by"
msgstr "Ondersteund door"
msgid "Test version "
msgstr "Test Versie"
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
msgid "Tested by"
msgstr "Getest door"
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"
msgid "Subtitles"
msgstr "Undertexter"
-#: src/wx/about_dialog.cc:168
+#: src/wx/about_dialog.cc:165
msgid "Supported by"
msgstr "Stöd från"
msgid "Test version "
msgstr "Testversion"
-#: src/wx/about_dialog.cc:213
+#: src/wx/about_dialog.cc:210
#, fuzzy
msgid "Tested by"
msgstr "Översatt av"
'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')
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];
}
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;
}
{
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);
}
import subprocess
import os
import sys
+import distutils
+import distutils.spawn
APPNAME = 'dcpomatic'
VERSION = '2.0.14devel'
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)
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']
# 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)