Use libdcp.
authorCarl Hetherington <cth@carlh.net>
Tue, 17 Jul 2012 19:29:24 +0000 (20:29 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 17 Jul 2012 19:29:24 +0000 (20:29 +0100)
13 files changed:
src/gtk/film_editor.cc
src/lib/dcp_content_type.cc
src/lib/dcp_content_type.h
src/lib/film.cc
src/lib/make_dcp_job.cc
src/lib/make_dcp_job.h
src/lib/make_mxf_job.cc [deleted file]
src/lib/make_mxf_job.h [deleted file]
src/lib/util.cc
src/lib/wscript
src/tools/makedcp.cc
src/wscript
wscript

index 0e410aa6bab5a0d4835a46bc697f283333a49786..3367c9a706829ee37a2a5f23b90b1804d2a70154 100644 (file)
@@ -31,7 +31,6 @@
 #include "lib/exceptions.h"
 #include "lib/ab_transcode_job.h"
 #include "lib/thumbs_job.h"
-#include "lib/make_mxf_job.h"
 #include "lib/job_manager.h"
 #include "lib/filter.h"
 #include "lib/screen.h"
index 321aa61da494c2a9955e3b6a128f13e994ba4a5c..03712cb0de7a5272b4de0393cbc37c8feb6af85d 100644 (file)
@@ -28,9 +28,9 @@ using namespace std;
 
 vector<DCPContentType const *> DCPContentType::_dcp_content_types;
 
-DCPContentType::DCPContentType (string p, string d)
+DCPContentType::DCPContentType (string p, libdcp::DCP::ContentType c)
        : _pretty_name (p)
-       , _dcp_name (d)
+       , _libdcp_type (c)
 {
 
 }
@@ -38,16 +38,16 @@ DCPContentType::DCPContentType (string p, string d)
 void
 DCPContentType::setup_dcp_content_types ()
 {
-       _dcp_content_types.push_back (new DCPContentType ("Feature", "feature"));
-       _dcp_content_types.push_back (new DCPContentType ("Short", "short"));
-       _dcp_content_types.push_back (new DCPContentType ("Trailer", "trailer"));
-       _dcp_content_types.push_back (new DCPContentType ("Test", "test"));
-       _dcp_content_types.push_back (new DCPContentType ("Transitional", "transitional"));
-       _dcp_content_types.push_back (new DCPContentType ("Rating", "rating"));
-       _dcp_content_types.push_back (new DCPContentType ("Teaser", "teaster"));
-       _dcp_content_types.push_back (new DCPContentType ("Policy", "policy"));
-       _dcp_content_types.push_back (new DCPContentType ("Public Service Announcement", "psa"));
-       _dcp_content_types.push_back (new DCPContentType ("Advertisement", "advertisement"));
+       _dcp_content_types.push_back (new DCPContentType ("Feature", libdcp::DCP::FEATURE));
+       _dcp_content_types.push_back (new DCPContentType ("Short", libdcp::DCP::SHORT));
+       _dcp_content_types.push_back (new DCPContentType ("Trailer", libdcp::DCP::TRAILER));
+       _dcp_content_types.push_back (new DCPContentType ("Test", libdcp::DCP::TEST));
+       _dcp_content_types.push_back (new DCPContentType ("Transitional", libdcp::DCP::TRANSITIONAL));
+       _dcp_content_types.push_back (new DCPContentType ("Rating", libdcp::DCP::RATING));
+       _dcp_content_types.push_back (new DCPContentType ("Teaser", libdcp::DCP::TEASER));
+       _dcp_content_types.push_back (new DCPContentType ("Policy", libdcp::DCP::POLICY));
+       _dcp_content_types.push_back (new DCPContentType ("Public Service Announcement", libdcp::DCP::PUBLIC_SERVICE_ANNOUNCEMENT));
+       _dcp_content_types.push_back (new DCPContentType ("Advertisement", libdcp::DCP::ADVERTISEMENT));
 }
 
 DCPContentType const *
index aba3054490ad89aaf1ebc9e27a82c9bf5fcdab3c..2c6d1879be59fd7f35dd7bf7f4e391f937d44cc4 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <string>
 #include <vector>
+#include <libdcp/dcp.h>
 
 /** @class DCPContentType
  *  @brief A description of the type of content for a DCP (e.g. feature, trailer etc.)
 class DCPContentType
 {
 public:
-       DCPContentType (std::string, std::string);
+       DCPContentType (std::string, libdcp::DCP::ContentType);
 
        /** @return user-visible `pretty' name */
        std::string pretty_name () const {
                return _pretty_name;
        }
 
-       /** @return name as written to a DCP */
-       std::string dcp_name () const {
-               return _dcp_name;
+       libdcp::DCP::ContentType libdcp_type () const {
+               return _libdcp_type;
        }
 
        static DCPContentType const * from_pretty_name (std::string);
@@ -50,7 +50,7 @@ public:
 
 private:
        std::string _pretty_name;
-       std::string _dcp_name;
+       libdcp::DCP::ContentType _libdcp_type;
 
        /** All available DCP content types */
        static std::vector<DCPContentType const *> _dcp_content_types;
index 3eea41c2547430a74b2ebb1eecb4d65087b15f0e..6bf8fee84d6e4f189f29ac67c5812e77bc2dc369 100644 (file)
@@ -36,7 +36,6 @@
 #include "job_manager.h"
 #include "ab_transcode_job.h"
 #include "transcode_job.h"
-#include "make_mxf_job.h"
 #include "scp_dcp_job.h"
 #include "copy_from_dvd_job.h"
 #include "make_dcp_job.h"
@@ -518,10 +517,6 @@ Film::make_dcp (bool transcode, int freq)
                }
        }
        
-       JobManager::instance()->add (shared_ptr<Job> (new MakeMXFJob (fs, o, log (), MakeMXFJob::VIDEO)));
-       if (audio_channels() > 0) {
-               JobManager::instance()->add (shared_ptr<Job> (new MakeMXFJob (fs, o, log (), MakeMXFJob::AUDIO)));
-       }
        JobManager::instance()->add (shared_ptr<Job> (new MakeDCPJob (fs, o, log ())));
 }
 
index 998d1f9c350dc8c91c375ebd452797c4f0bb1b6f..b0b8a2a1af0d5a959d1c74f26a53dbc79a273605 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 #include <boost/filesystem.hpp>
+#include <libdcp/dcp.h>
 extern "C" {
 #include <libavutil/pixdesc.h>
 }
@@ -29,6 +30,7 @@ extern "C" {
 #include "film_state.h"
 #include "dcp_content_type.h"
 #include "exceptions.h"
+#include "options.h"
 
 using namespace std;
 using namespace boost;
@@ -54,45 +56,43 @@ MakeDCPJob::name () const
 void
 MakeDCPJob::run ()
 {
-       set_progress_unknown ();
-
        string const dcp_path = _fs->dir (_fs->name);
-       
-       /* Check that we have our prerequisites */
-
-       if (!filesystem::exists (filesystem::path (_fs->file ("video.mxf")))) {
-               throw EncodeError ("missing video.mxf");
-       }
-
-       bool const have_audio = filesystem::exists (filesystem::path (_fs->file ("audio.mxf")));
 
        /* Remove any old DCP */
        filesystem::remove_all (dcp_path);
 
-       DCP dcp (_fs->dir (_fs->name()));
-       dcp.add_asset (
-               shared_ptr<MainPictureAsset> (new MainPictureAsset ("video.mxf", rint (_fs->frames_per_second), _fs->length, _opt->out_size))
-               );
+       libdcp::DCP dcp (_fs->dir (_fs->name), _fs->name, _fs->dcp_content_type->libdcp_type (), rint (_fs->frames_per_second), _fs->length);
+       dcp.Progress.connect (sigc::mem_fun (*this, &MakeDCPJob::dcp_progress));
 
-       if (filesystem::exists (filesystem::path (_fs->file ("audio.mxf")))) {
-               dcp.add_asset (
-                       shared_ptr<MainSoundAsset> (new MainSoundAsset ("audio.mxf", rint (_fs->frames_per_second), _fs->length))
-                       );
+       list<string> j2cs;
+       int f = _fs->dcp_frames ? _fs->dcp_frames : _fs->length;
+       for (int i = 0; i < f; ++i) {
+               j2cs.push_back (_opt->frame_out_path (i, false));
        }
-                                                                   
-       dcp.write_xml ();
-
 
-       add_pkl ();
-       add_cpl (pkl[0]);
+       descend (0.9);
+       dcp.add_picture_asset (j2cs, _opt->out_size.width, _opt->out_size.height);
+       ascend ();
 
-       add_reel (pkl[0].cpl[0]);
+       list<string> wavs;
+       for (int i = 0; i < _fs->audio_channels; ++i) {
+               wavs.push_back (_opt->multichannel_audio_out_path (i, false));
+       }
 
-       write_cpl ();
-       write_pkl ();
-       write_volindex ();
-       write_assetmap ();
+       if (!wavs.empty ()) {
+               descend (0.1);
+               dcp.add_sound_asset (wavs);
+               ascend ();
+       }
 
+       dcp.write_xml ();
 
        set_progress (1);
+       set_state (FINISHED_OK);
+}
+
+void
+MakeDCPJob::dcp_progress (float p)
+{
+       set_progress (p);
 }
index 98cb2d8c37fb681ed2327dc9f161555b18a522e5..fc7da6c8920542fb10cb9d737a7e14c1620ae9c2 100644 (file)
@@ -21,7 +21,7 @@
  *  @brief A job to create DCPs.
  */
 
-#include "shell_command_job.h"
+#include "job.h"
 
 /** @class MakeDCPJob
  *  @brief A job to create DCPs
@@ -33,5 +33,8 @@ public:
 
        std::string name () const;
        void run ();
+
+private:
+       void dcp_progress (float);
 };
 
diff --git a/src/lib/make_mxf_job.cc b/src/lib/make_mxf_job.cc
deleted file mode 100644 (file)
index ac4c61e..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
-    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.
-
-*/
-
-/** @file  src/make_mxf_job.cc
- *  @brief A job that creates a MXF file from some data.
- */
-
-#include <iostream>
-#include <boost/filesystem.hpp>
-#include "AS_DCP.h"
-#include "KM_fileio.h"
-#include "make_mxf_job.h"
-#include "film.h"
-#include "film_state.h"
-#include "options.h"
-#include "exceptions.h"
-
-using namespace std;
-using namespace boost;
-
-/** @class MakeMXFJob
- *  @brief A job that creates a MXF file from some data.
- */
-
-MakeMXFJob::MakeMXFJob (shared_ptr<const FilmState> s, shared_ptr<const Options> o, Log* l, Type t)
-       : Job (s, o, l)
-       , _type (t)
-{
-
-}
-
-string
-MakeMXFJob::name () const
-{
-       stringstream s;
-       switch (_type) {
-       case VIDEO:
-               s << "Make video MXF for " << _fs->name;
-               break;
-       case AUDIO:
-               s << "Make audio MXF for " << _fs->name;
-               break;
-       }
-       
-       return s.str ();
-}
-
-void
-MakeMXFJob::run ()
-{
-       set_progress (0);
-
-       string dir;
-       switch (_type) {
-       case VIDEO:
-               dir = _opt->frame_out_path ();
-               break;
-       case AUDIO:
-               dir = _opt->multichannel_audio_out_path ();
-               break;
-       }
-
-       list<string> files;
-        for (filesystem::directory_iterator i = filesystem::directory_iterator (dir); i != filesystem::directory_iterator(); ++i) {
-               files.push_back (filesystem::path (*i).string());
-       }
-
-       if (files.empty ()) {
-               throw EncodeError ("no input files found for MXF");
-       }
-
-       files.sort ();
-
-       switch (_type) {
-       case VIDEO:
-               j2k (files, _fs->file ("video.mxf"));
-               break;
-       case AUDIO:
-               wav (files, _fs->file ("audio.mxf"));
-               break;
-       default:
-               throw EncodeError ("unknown essence type");
-       }
-       
-       set_progress (1);
-}
-
-void
-MakeMXFJob::wav (list<string> const & files, string const & mxf)
-{
-       /* XXX: we round for DCP: not sure if this is right */
-       ASDCP::Rational fps (rintf (_fs->frames_per_second), 1);
-       
-       ASDCP::PCM::WAVParser pcm_parser_channel[files.size()];
-       if (pcm_parser_channel[0].OpenRead (files.front().c_str(), fps)) {
-               throw EncodeError ("could not open WAV file for reading");
-       }
-       
-       ASDCP::PCM::AudioDescriptor audio_desc;
-       pcm_parser_channel[0].FillAudioDescriptor (audio_desc);
-       audio_desc.ChannelCount = 0;
-       audio_desc.BlockAlign = 0;
-       audio_desc.EditRate = fps;
-       audio_desc.AvgBps = audio_desc.AvgBps * files.size ();
-
-       ASDCP::PCM::FrameBuffer frame_buffer_channel[files.size()];
-       ASDCP::PCM::AudioDescriptor audio_desc_channel[files.size()];
-       
-       int j = 0;
-       for (list<string>::const_iterator i = files.begin(); i != files.end(); ++i) {
-               
-               if (ASDCP_FAILURE (pcm_parser_channel[j].OpenRead (i->c_str(), fps))) {
-                       throw EncodeError ("could not open WAV file for reading");
-               }
-
-               pcm_parser_channel[j].FillAudioDescriptor (audio_desc_channel[j]);
-               frame_buffer_channel[j].Capacity (ASDCP::PCM::CalcFrameBufferSize (audio_desc_channel[j]));
-
-               audio_desc.ChannelCount += audio_desc_channel[j].ChannelCount;
-               audio_desc.BlockAlign += audio_desc_channel[j].BlockAlign;
-               ++j;
-       }
-
-       ASDCP::PCM::FrameBuffer frame_buffer;
-       frame_buffer.Capacity (ASDCP::PCM::CalcFrameBufferSize (audio_desc));
-       frame_buffer.Size (ASDCP::PCM::CalcFrameBufferSize (audio_desc));
-
-       ASDCP::WriterInfo writer_info;
-       fill_writer_info (&writer_info);
-
-       ASDCP::PCM::MXFWriter mxf_writer;
-       if (ASDCP_FAILURE (mxf_writer.OpenWrite (mxf.c_str(), writer_info, audio_desc))) {
-               throw EncodeError ("could not open audio MXF for writing");
-       }
-
-       for (int i = 0; i < _fs->length; ++i) {
-
-               byte_t *data_s = frame_buffer.Data();
-               byte_t *data_e = data_s + frame_buffer.Capacity();
-               byte_t sample_size = ASDCP::PCM::CalcSampleSize (audio_desc_channel[0]);
-               int offset = 0;
-
-               for (list<string>::size_type j = 0; j < files.size(); ++j) {
-                       memset (frame_buffer_channel[j].Data(), 0, frame_buffer_channel[j].Capacity());
-                       if (ASDCP_FAILURE (pcm_parser_channel[j].ReadFrame (frame_buffer_channel[j]))) {
-                               throw EncodeError ("could not read audio frame");
-                       }
-                       
-                       if (frame_buffer_channel[j].Size() != frame_buffer_channel[j].Capacity()) {
-                               throw EncodeError ("short audio frame");
-                       }
-               }
-
-               while (data_s < data_e) {
-                       for (list<string>::size_type j = 0; j < files.size(); ++j) {
-                               byte_t* frame = frame_buffer_channel[j].Data() + offset;
-                               memcpy (data_s, frame, sample_size);
-                               data_s += sample_size;
-                       }
-                       offset += sample_size;
-               }
-
-               if (ASDCP_FAILURE (mxf_writer.WriteFrame (frame_buffer, 0, 0))) {
-                       throw EncodeError ("could not write audio MXF frame");
-               }
-
-               set_progress (float (i) / _fs->length);
-       }
-
-       if (ASDCP_FAILURE (mxf_writer.Finalize())) {
-               throw EncodeError ("could not finalise audio MXF");
-       }
-
-       set_progress (1);
-       set_state (FINISHED_OK);
-}
-
-void
-MakeMXFJob::j2k (list<string> const & files, string const & mxf)
-{
-       ASDCP::JP2K::CodestreamParser j2k_parser;
-       ASDCP::JP2K::FrameBuffer frame_buffer (4 * Kumu::Megabyte);
-       if (ASDCP_FAILURE (j2k_parser.OpenReadFrame (files.front().c_str(), frame_buffer))) {
-               throw EncodeError ("could not open J2K file for reading");
-       }
-       
-       ASDCP::JP2K::PictureDescriptor picture_desc;
-       j2k_parser.FillPictureDescriptor (picture_desc);
-       /* XXX: we round for DCP: not sure if this is right */
-       picture_desc.EditRate = ASDCP::Rational (rintf (_fs->frames_per_second), 1);
-       
-       ASDCP::WriterInfo writer_info;
-       fill_writer_info (&writer_info);
-       
-       ASDCP::JP2K::MXFWriter mxf_writer;
-       if (ASDCP_FAILURE (mxf_writer.OpenWrite (mxf.c_str(), writer_info, picture_desc))) {
-               throw EncodeError ("could not open MXF for writing");
-       }
-
-       int j = 0;
-       for (list<string>::const_iterator i = files.begin(); i != files.end(); ++i) {
-               if (ASDCP_FAILURE (j2k_parser.OpenReadFrame (i->c_str(), frame_buffer))) {
-                       throw EncodeError ("could not open J2K file for reading");
-               }
-
-               /* XXX: passing 0 to WriteFrame ok? */
-               if (ASDCP_FAILURE (mxf_writer.WriteFrame (frame_buffer, 0, 0))) {
-                       throw EncodeError ("error in writing video MXF");
-               }
-               
-               ++j;
-               set_progress (float (j) / files.size ());
-       }
-       
-       if (ASDCP_FAILURE (mxf_writer.Finalize())) {
-               throw EncodeError ("error in finalising video MXF");
-       }
-       
-       set_progress (1);
-       set_state (FINISHED_OK);
-}
-
-void
-MakeMXFJob::fill_writer_info (ASDCP::WriterInfo* writer_info)
-{
-       writer_info->ProductVersion = DVDOMATIC_VERSION;
-       writer_info->CompanyName = "dvd-o-matic";
-       writer_info->ProductName = "dvd-o-matic";
-
-       /* set the label type */
-       writer_info->LabelSetType = ASDCP::LS_MXF_SMPTE;
-
-       /* generate a random UUID for this essence */
-       Kumu::GenRandomUUID (writer_info->AssetUUID);
-}
diff --git a/src/lib/make_mxf_job.h b/src/lib/make_mxf_job.h
deleted file mode 100644 (file)
index 9054256..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-    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.
-
-*/
-
-/** @file  src/make_mxf_job.h
- *  @brief A job that creates a MXF file from some data.
- */
-
-#include "shell_command_job.h"
-
-namespace ASDCP {
-       class WriterInfo;
-}
-
-class FilmState;
-class Options;
-
-/** @class MakeMXFJob
- *  @brief A job that creates a MXF file from some data.
- */
-class MakeMXFJob : public Job
-{
-public:
-       enum Type {
-               AUDIO,
-               VIDEO
-       };
-       
-       MakeMXFJob (boost::shared_ptr<const FilmState>, boost::shared_ptr<const Options>, Log *, Type);
-
-       std::string name () const;
-       void run ();
-
-private:
-       void j2k (std::list<std::string> const &, std::string const &);
-       void wav (std::list<std::string> const &, std::string const &);
-       void fill_writer_info (ASDCP::WriterInfo *);
-       
-       Type _type;
-};
-
index b8531e26b6cd5e53b27d04564d4e39b6160a3375..1348d307e9c3d50296d8e0b2cbabf2122c101d20 100644 (file)
@@ -216,37 +216,6 @@ audio_sample_format_from_string (string s)
        return AV_SAMPLE_FMT_NONE;
 }
 
-/** @return Version of OpenDCP that is on the path (and hence that we will use) */
-static string
-opendcp_version ()
-{
-       FILE* f = popen ("opendcp_xml", "r");
-       if (f == 0) {
-               throw EncodeError ("could not run opendcp_xml to check version");
-       }
-
-       string version = "unknown";
-       
-       while (!feof (f)) {
-               char* buf = 0;
-               size_t n = 0;
-               ssize_t const r = getline (&buf, &n, f);
-               if (r > 0) {
-                       string s (buf);
-                       vector<string> b;
-                       split (b, s, is_any_of (" "));
-                       if (b.size() >= 3 && b[0] == "OpenDCP" && b[1] == "version") {
-                               version = b[2];
-                       }
-                       free (buf);
-               }
-       }
-
-       pclose (f);
-
-       return version;
-}
-
 /** @return Version of vobcopy that is on the path (and hence that we will use) */
 static string
 vobcopy_version ()
@@ -295,7 +264,6 @@ dependency_version_summary ()
 {
        stringstream s;
        s << "libopenjpeg " << opj_version () << ", "
-         << "opendcp " << opendcp_version () << ", "
          << "vobcopy " << vobcopy_version() << ", "
          << "libswresample " << ffmpeg_version_to_string (swresample_version()) << ", "
          << "libavcodec " << ffmpeg_version_to_string (avcodec_version()) << ", "
index 406697f9ce57b2d42c8e291baa4c01ca1309470d..cee0a47e79929570625803760810e3502c1ac407 100644 (file)
@@ -7,8 +7,7 @@ def build(bld):
     obj = bld(features = 'cxx cxxshlib')
     obj.name = 'libdvdomatic'
     obj.export_includes = ['.']
-    obj.uselib = 'AVCODEC AVUTIL AVFORMAT AVFILTER SWSCALE SWRESAMPLE SNDFILE BOOST_FILESYSTEM BOOST_THREAD OPENJPEG POSTPROC TIFF SIGC++ MAGICK SSH'
-    obj.use = 'libasdcp-dvdomatic'
+    obj.uselib = 'AVCODEC AVUTIL AVFORMAT AVFILTER SWSCALE SWRESAMPLE SNDFILE BOOST_FILESYSTEM BOOST_THREAD OPENJPEG POSTPROC TIFF SIGC++ MAGICK SSH DCP'
     if bld.env.DEBUG_HASH:
         obj.uselib += ' MHASH'
     obj.source = """
@@ -39,7 +38,6 @@ def build(bld):
                 log.cc
                 lut.cc
                 make_dcp_job.cc
-                make_mxf_job.cc
                  player.cc
                  player_manager.cc
                 scaler.cc
index 76cda8202bf3ccfbf87ee614087f11c2530982c1..15880cae9c1ce20a5c157218998dde56b36db9dd 100644 (file)
@@ -24,7 +24,6 @@
 #include "film.h"
 #include "filter.h"
 #include "transcode_job.h"
-#include "make_mxf_job.h"
 #include "make_dcp_job.h"
 #include "job_manager.h"
 #include "ab_transcode_job.h"
index f864e1ce184c3145f26c343d06c07f3a166752b4..2ddd90f5c2cc89c511aaa67503af390f5d8b4d18 100644 (file)
@@ -1,6 +1,5 @@
 def configure(conf):
     conf.recurse('lib')
-    conf.recurse('asdcplib')
     if not conf.env.DISABLE_GUI:
         conf.recurse('gtk')
 
diff --git a/wscript b/wscript
index f10f225a2b530a6853b188669d716dae6ceaef25..e6ff18d93fabb977f26f9e2b4c59fb5248d9fdd6 100644 (file)
--- a/wscript
+++ b/wscript
@@ -31,6 +31,7 @@ def configure(conf):
     conf.check_cfg(package = 'libswresample', args = '--cflags --libs', uselib_store = 'SWRESAMPLE', mandatory = True)
     conf.check_cfg(package = 'libpostproc', args = '--cflags --libs', uselib_store = 'POSTPROC', mandatory = True)
     conf.check_cfg(package = 'sndfile', args = '--cflags --libs', uselib_store = 'SNDFILE', mandatory = True)
+    conf.check_cfg(package = 'libdcp', args = '--cflags --libs', uselib_store = 'DCP', mandatory = True)
     conf.check_cfg(package = '', path = 'Magick++-config', args = '--cppflags --cxxflags --libs', uselib_store = 'MAGICK', mandatory = True)
     conf.check_cc(msg = 'Checking for library libtiff', function_name = 'TIFFOpen', header_name = 'tiffio.h', lib = 'tiff', uselib_store = 'TIFF')
     conf.check_cc(fragment  = """