Various test fixes.
authorCarl Hetherington <cth@carlh.net>
Tue, 28 Jan 2014 00:44:36 +0000 (00:44 +0000)
committerCarl Hetherington <cth@carlh.net>
Tue, 28 Jan 2014 00:44:36 +0000 (00:44 +0000)
src/cpl.cc
src/cpl.h
src/dcp.cc
src/kdm.cc
src/reel_asset.cc
test/dcp_test.cc
test/encryption_test.cc
test/round_trip_test.cc
test/wscript
wscript

index 96afc0887dadabf2aaaced479ec4493f171c5d3f..99c14d40048a8b138856e259a3fd41dc5e0ff601 100644 (file)
@@ -140,22 +140,22 @@ CPL::write_xml (boost::filesystem::path file, Standard standard, XMLMetadata met
 }
 
 list<shared_ptr<const Content> >
-CPL::assets () const
+CPL::content () const
 {
-       list<shared_ptr<const Content> > a;
+       list<shared_ptr<const Content> > c;
        for (list<shared_ptr<Reel> >::const_iterator i = _reels.begin(); i != _reels.end(); ++i) {
                if ((*i)->main_picture ()) {
-                       a.push_back ((*i)->main_picture()->mxf ());
+                       c.push_back ((*i)->main_picture()->mxf ());
                }
                if ((*i)->main_sound ()) {
-                       a.push_back ((*i)->main_sound()->mxf ());
+                       c.push_back ((*i)->main_sound()->mxf ());
                }
                if ((*i)->main_subtitle ()) {
-                       a.push_back ((*i)->main_subtitle()->subtitle_content ());
+                       c.push_back ((*i)->main_subtitle()->subtitle_content ());
                }
        }
 
-       return a;
+       return c;
 }
        
 bool
index 4c3f9bfa2f2578b13ea83a14c151231cc98075e9..2066130edbba2293005083a50fa8dd0b381de057 100644 (file)
--- a/src/cpl.h
+++ b/src/cpl.h
@@ -82,7 +82,7 @@ public:
                return _reels;
        }
 
-       std::list<boost::shared_ptr<const Content> > assets () const;
+       std::list<boost::shared_ptr<const Content> > content () const;
 
        bool encrypted () const;
 
index 1925ac0be4a77c29a1a830c7070bc13deedf5d87..e4a5678c922600ac79823dd8a1a4ad290dd6f7c8 100644 (file)
@@ -328,17 +328,17 @@ DCP::write_xml (
        shared_ptr<const Signer> signer
        )
 {
-       string const pkl_uuid = make_uuid ();
-       boost::filesystem::path const pkl_path = write_pkl (standard, pkl_uuid, metadata, signer);
-       
-       write_volindex (standard);
-       write_assetmap (standard, pkl_uuid, boost::filesystem::file_size (pkl_path), metadata);
-
        list<shared_ptr<CPL> > cpl = cpls ();
        for (list<shared_ptr<CPL> >::const_iterator i = cpl.begin(); i != cpl.end(); ++i) {
                string const filename = (*i)->id() + "_cpl.xml";
                (*i)->write_xml (_directory / filename, standard, metadata, signer);
        }
+
+       string const pkl_uuid = make_uuid ();
+       boost::filesystem::path const pkl_path = write_pkl (standard, pkl_uuid, metadata, signer);
+       
+       write_volindex (standard);
+       write_assetmap (standard, pkl_uuid, boost::filesystem::file_size (pkl_path), metadata);
 }
 
 list<shared_ptr<CPL> >
index c99fc21a151e5c21656e9966c84a0c7a36828fae..fe7fe393381a8c977dd62e6c71012fb0283f944f 100644 (file)
@@ -130,8 +130,8 @@ KDM::KDM (
        */
        apu.authorized_device_info.device_list.push_back ("2jmj7l5rSw0yVb/vlWAYkK/YBwk=");
 
-       list<shared_ptr<const Content> > assets = cpl->assets ();
-       for (list<shared_ptr<const Content> >::iterator i = assets.begin(); i != assets.end(); ++i) {
+       list<shared_ptr<const Content> > content = cpl->content ();
+       for (list<shared_ptr<const Content> >::iterator i = content.begin(); i != content.end(); ++i) {
                /* XXX: non-MXF assets? */
                shared_ptr<const MXF> mxf = boost::dynamic_pointer_cast<const MXF> (*i);
                if (mxf) {
@@ -144,7 +144,7 @@ KDM::KDM (
 
        /* AuthenticatedPrivate */
 
-       for (list<shared_ptr<const Content> >::iterator i = assets.begin(); i != assets.end(); ++i) {
+       for (list<shared_ptr<const Content> >::iterator i = content.begin(); i != content.end(); ++i) {
                /* XXX: non-MXF assets? */
                shared_ptr<const MXF> mxf = boost::dynamic_pointer_cast<const MXF> (*i);
                if (mxf) {
index 5fa59fc2f02364898da5ef4a9175cea0dc91fb5b..b25aeb15a46a7d23947c2c2e93b222deb42848c1 100644 (file)
@@ -60,7 +60,7 @@ ReelAsset::ReelAsset (boost::shared_ptr<const cxml::Node> node)
        , _intrinsic_duration (node->number_child<int64_t> ("IntrinsicDuration"))
        , _entry_point (node->number_child<int64_t> ("EntryPoint"))
        , _duration (node->number_child<int64_t> ("Duration"))
-       , _hash (node->string_child ("Hash"))
+       , _hash (node->optional_string_child ("Hash").get_value_or (""))
        , _key_id (node->optional_string_child ("KeyId").get_value_or (""))
 {
        if (_id.length() > 9) {
index eccd7ad399dba0381e3f25bffd46db23fe50ba8c..a6f234c5de9abd27a37b68c0a3d0ceb57e0e22cd 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+    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
 
 */
 
-#include <boost/test/unit_test.hpp>
 #include "dcp.h"
 #include "metadata.h"
 #include "cpl.h"
-#include "mono_picture_asset.h"
-#include "sound_asset.h"
+#include "mono_picture_mxf.h"
+#include "picture_mxf_writer.h"
+#include "sound_mxf_writer.h"
+#include "sound_mxf.h"
+#include "subtitle_content.h"
 #include "reel.h"
 #include "test.h"
+#include "file.h"
+#include "reel_mono_picture_asset.h"
+#include "reel_sound_asset.h"
 #include "KM_util.h"
+#include <sndfile.h>
+#include <boost/test/unit_test.hpp>
 
 using boost::shared_ptr;
 
@@ -48,30 +55,51 @@ BOOST_AUTO_TEST_CASE (dcp_test)
        boost::filesystem::remove_all ("build/test/foo");
        boost::filesystem::create_directories ("build/test/foo");
        dcp::DCP d ("build/test/foo");
-       shared_ptr<dcp::CPL> cpl (new dcp::CPL ("build/test/foo", "A Test DCP", dcp::FEATURE, 24, 24));
+       shared_ptr<dcp::CPL> cpl (new dcp::CPL ("A Test DCP", dcp::FEATURE));
 
-       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset ("build/test/foo", "video.mxf"));
+       shared_ptr<dcp::MonoPictureMXF> mp (new dcp::MonoPictureMXF (dcp::Fraction (24, 1)));
        mp->set_progress (&d.Progress);
-       mp->set_edit_rate (24);
-       mp->set_intrinsic_duration (24);
-       mp->set_duration (24);
-       mp->set_size (dcp::Size (32, 32));
        mp->set_metadata (mxf_meta);
-       mp->create (j2c);
+       shared_ptr<dcp::PictureMXFWriter> picture_writer = mp->start_write ("build/test/DCP/bar/video.mxf", dcp::SMPTE, false);
+       dcp::File j2c ("test/data/32x32_red_square.j2c");
+       for (int i = 0; i < 24; ++i) {
+               picture_writer->write (j2c.data (), j2c.size ());
+       }
+       picture_writer->finalize ();
 
-       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset ("build/test/foo", "audio.mxf"));
+       shared_ptr<dcp::SoundMXF> ms (new dcp::SoundMXF (dcp::Fraction (24, 1), 48000, 1));
        ms->set_progress (&d.Progress);
-       ms->set_edit_rate (24);
-       ms->set_intrinsic_duration (24);
-       ms->set_duration (24);
-       ms->set_channels (2);
        ms->set_metadata (mxf_meta);
-       ms->create (wav);
+       shared_ptr<dcp::SoundMXFWriter> sound_writer = ms->start_write ("build/test/DCP/bar/audio.mxf", dcp::SMPTE);
+
+       SF_INFO info;
+       info.format = 0;
+       SNDFILE* sndfile = sf_open ("test/data/1s_24-bit_48k_silence.wav", SFM_READ, &info);
+       BOOST_CHECK (sndfile);
+       float buffer[4096*6];
+       float* channels[1];
+       channels[0] = buffer;
+       while (1) {
+               sf_count_t N = sf_readf_float (sndfile, buffer, 4096);
+               sound_writer->write (channels, N);
+               if (N < 4096) {
+                       break;
+               }
+       }
+       
+       sound_writer->finalize ();
        
-       cpl->add_reel (shared_ptr<dcp::Reel> (new dcp::Reel (mp, ms, shared_ptr<dcp::SubtitleAsset> ())));
-       d.add_cpl (cpl);
+       cpl->add (shared_ptr<dcp::Reel> (
+                         new dcp::Reel (
+                                 shared_ptr<dcp::ReelMonoPictureAsset> (new dcp::ReelMonoPictureAsset (mp, 0)),
+                                 shared_ptr<dcp::ReelSoundAsset> (new dcp::ReelSoundAsset (ms, 0)),
+                                 shared_ptr<dcp::ReelSubtitleAsset> ()
+                                 )
+                         ));
+                 
+       d.add (cpl);
 
-       d.write_xml (false, xml_meta);
+       d.write_xml (dcp::SMPTE, xml_meta);
 
        /* build/test/foo is checked against test/ref/DCP/foo by run-tests.sh */
 }
index 7cd202f22b5df916facca0a2fde10600e0277492..a4e8688bbf87bd55ccf43a104faf3a2b39595533 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+    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
@@ -17,7 +17,6 @@
 
 */
 
-#include <boost/test/unit_test.hpp>
 #include "kdm.h"
 #include "KM_util.h"
 #include "metadata.h"
 #include "dcp.h"
 #include "signer.h"
 #include "cpl.h"
-#include "mono_picture_asset.h"
-#include "sound_asset.h"
+#include "mono_picture_mxf.h"
+#include "picture_mxf_writer.h"
+#include "sound_mxf.h"
 #include "reel.h"
 #include "test.h"
+#include "file.h"
 #include "signer_chain.h"
+#include "subtitle_content.h"
+#include "reel_mono_picture_asset.h"
+#include "reel_sound_asset.h"
+#include <boost/test/unit_test.hpp>
+#include <boost/shared_ptr.hpp>
 
 using boost::shared_ptr;
 
 /* Load a certificate chain from build/test/data/ *.pem and then build
    an encrypted DCP and a KDM using it.
 */
-BOOST_AUTO_TEST_CASE (encryption)
+BOOST_AUTO_TEST_CASE (encryption_test)
 {
        boost::filesystem::remove_all ("build/test/signer");
        boost::filesystem::create_directory ("build/test/signer");
@@ -70,34 +76,29 @@ BOOST_AUTO_TEST_CASE (encryption)
                        )
                );
 
-       shared_ptr<dcp::CPL> cpl (new dcp::CPL ("build/test/DCP/bar", "A Test DCP", dcp::FEATURE, 24, 24));
+       shared_ptr<dcp::CPL> cpl (new dcp::CPL ("A Test DCP", dcp::FEATURE));
 
        dcp::Key key;
        
-       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset ("build/test/DCP/bar", "video.mxf"));
+       shared_ptr<dcp::MonoPictureMXF> mp (new dcp::MonoPictureMXF (dcp::Fraction (24, 1)));
        mp->set_progress (&d.Progress);
-       mp->set_edit_rate (24);
-       mp->set_intrinsic_duration (24);
-       mp->set_duration (24);
-       mp->set_size (dcp::Size (32, 32));
        mp->set_metadata (mxf_metadata);
        mp->set_key (key);
-       mp->create (j2c);
-
-       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset ("build/test/DCP/bar", "audio.mxf"));
-       ms->set_progress (&d.Progress);
-       ms->set_edit_rate (24);
-       ms->set_intrinsic_duration (24);
-       mp->set_duration (24);
-       ms->set_channels (2);
-       ms->set_metadata (mxf_metadata);
-       ms->set_key (key);
-       ms->create (wav);
-       
-       cpl->add_reel (shared_ptr<dcp::Reel> (new dcp::Reel (mp, ms, shared_ptr<dcp::SubtitleAsset> ())));
-       d.add_cpl (cpl);
 
-       d.write_xml (false, xml_metadata, signer);
+       shared_ptr<dcp::PictureMXFWriter> writer = mp->start_write ("build/test/DCP/bar/video.mxf", dcp::SMPTE, false);
+       dcp::File j2c ("test/data/32x32_red_square.j2c");
+       for (int i = 0; i < 24; ++i) {
+               writer->write (j2c.data (), j2c.size ());
+       }
+       writer->finalize ();
+
+       cpl->add (shared_ptr<dcp::Reel> (new dcp::Reel (
+                                                shared_ptr<dcp::ReelMonoPictureAsset> (new dcp::ReelMonoPictureAsset (mp, 0)),
+                                                shared_ptr<dcp::ReelSoundAsset> (),
+                                                shared_ptr<dcp::ReelSubtitleAsset> ()
+                                                )));
+       d.add (cpl);
+       d.write_xml (dcp::SMPTE, xml_metadata, signer);
 
        dcp::KDM kdm (
                cpl,
index 8b1efbd77cef0e9354433733f2416beed88551b3..e94d8c728ef865c5c8db12c19f2ba91f4f3800eb 100644 (file)
@@ -17,8 +17,6 @@
 
 */
 
-#include <iostream>
-#include <boost/test/unit_test.hpp>
 #include "certificates.h"
 #include "kdm.h"
 #include "signer.h"
 #include "signer_chain.h"
 #include "mono_picture_mxf_writer.h"
 #include "reel_picture_asset.h"
+#include "reel_mono_picture_asset.h"
 #include "file.h"
+#include <boost/test/unit_test.hpp>
+#include <iostream>
 
 using std::list;
 using boost::shared_ptr;
@@ -73,7 +74,7 @@ BOOST_AUTO_TEST_CASE (round_trip_test)
 
        shared_ptr<dcp::CPL> cpl (new dcp::CPL ("A Test DCP", dcp::FEATURE));
        shared_ptr<dcp::Reel> reel (new dcp::Reel ());
-       reel->add (shared_ptr<dcp::ReelPictureAsset> (mxf_A, 0));
+       reel->add (shared_ptr<dcp::ReelMonoPictureAsset> (new dcp::ReelMonoPictureAsset (mxf_A, 0)));
        cpl->add (reel);
 
        /* A KDM using our certificate chain's leaf key pair */
@@ -111,6 +112,7 @@ BOOST_AUTO_TEST_CASE (round_trip_test)
                new dcp::MonoPictureMXF (work_dir / "video.mxf")
                );
 
+       BOOST_CHECK (!kdm_B.keys().empty ());
        mxf_B->set_key (kdm_B.keys().front().key());
 
        shared_ptr<dcp::ARGBFrame> frame_A = mxf_A->get_frame(0)->argb_frame ();
index 83232216ec8aefa18b8af6d12977208122ebb200..83253f2bb5ffa204a0b294f190a83e39dd6e98d0 100644 (file)
@@ -18,16 +18,16 @@ def configure(conf):
 def build(bld):
     obj = bld(features='cxx cxxprogram')
     obj.name   = 'tests'
-    obj.uselib = 'BOOST_TEST OPENJPEG CXML XMLSEC1'
+    obj.uselib = 'BOOST_TEST OPENJPEG CXML XMLSEC1 SNDFILE'
     obj.use    = 'libdcp'
-#                 dcp_test.cc
-#                 encryption_test.cc
     obj.source = """
                  certificates_test.cc
                  color_test.cc
                  cpl_sar_test.cc
+                 dcp_test.cc
                  dcp_time_test.cc
                  decryption_test.cc
+                 encryption_test.cc
                  frame_info_test.cc
                  kdm_key_test.cc
                  kdm_test.cc
diff --git a/wscript b/wscript
index baebc72eeec0b3659fc04f69332d564e94d526d2..2b1ae84344e8a1d5263f0c7e34e019659b9be7fa 100644 (file)
--- a/wscript
+++ b/wscript
@@ -35,6 +35,7 @@ def configure(conf):
     # Remove erroneous escaping of quotes from xmlsec1 defines
     conf.env.DEFINES_XMLSEC1 = [f.replace('\\', '') for f in conf.env.DEFINES_XMLSEC1]
     conf.check_cfg(package='', path='Magick++-config', args='--cppflags --cxxflags --libs', uselib_store='MAGICK', mandatory=False)
+    conf.check_cfg(package='sndfile', args='--cflags --libs', uselib_store='SNDFILE', mandatory=False)
 
     if conf.options.static:
         conf.check_cc(fragment="""