diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-02-26 18:41:41 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-02-26 18:41:41 +0000 |
| commit | 2e93ca3670e5581b5523f60130b38594de10d6c3 (patch) | |
| tree | 6ed18ed07bccf77b2d172ef7681fce981956815f | |
| parent | 9ed550de7b98ca2f8467dd134a9c0ad7f1868f23 (diff) | |
| parent | 447cc7ddec5ace7bb47df35192ef02e7c19bf9b3 (diff) | |
Merge master; MXF subtitle stuff not included.
34 files changed, 417 insertions, 275 deletions
diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..f7fb9ff8 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "test/private"] + path = test/private + url = ssh://carlh.dyndns.org/home/carl/git/libdcp-test.git diff --git a/TESTING b/TESTING new file mode 100644 index 00000000..5896f24b --- /dev/null +++ b/TESTING @@ -0,0 +1,4 @@ +libdcp has unit tests which are run with + +run/tests + @@ -1,7 +1,7 @@ import os def dependencies(target): - return (('libcxml', '27780878701f85ad597addacd541f2e897719978'), ('openjpeg-cdist', '9717d8fd0217b3a5e12ed7afbab1fd9d4499fc4d')) + return (('libcxml', '27780878701f85ad597addacd541f2e897719978'), ('openjpeg-cdist', '13b69c2')) def build(target, options): cmd = './waf configure --prefix=%s' % target.work_dir_cscript() diff --git a/run-tests.sh b/run-tests.sh deleted file mode 100755 index fc56b247..00000000 --- a/run-tests.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash -e - -# -# Runs our test suite, which (amongst other things) -# builds a couple of DCPs. -# The outputs are compared against the ones -# in test/ref/DCP, and an error is given -# if anything is different. -# - -if [ ! -e "../libdcp-test" ]; then - echo "Test corpus not found" - exit 1 -fi - -if [ "$1" == "--debug" ]; then - shift - LD_LIBRARY_PATH=build/src:build/asdcplib/src gdb --args build/test/tests -elif [ "$1" == "--valgrind" ]; then - shift - LD_LIBRARY_PATH=build/src:build/asdcplib/src valgrind --tool="memcheck" build/test/tests -else - LD_LIBRARY_PATH=build/src:build/asdcplib/src build/test/tests $* -fi - -diff -ur test/ref/DCP/foo build/test/foo -if [ "$?" != "0" ]; then - echo "FAIL: files differ" - exit 1 -fi - -diff -ur test/ref/DCP/bar build/test/bar -if [ "$?" != "0" ]; then - echo "FAIL: files differ" - exit 1 -fi - -rm -f build/test/info.log - -for d in `find ../libdcp-test -mindepth 1 -maxdepth 1 -type d | sort`; do - if [ `basename $d` != ".git" ]; then - LD_LIBRARY_PATH=build/src:build/asdcplib/src build/tools/dcpinfo -s $d >> build/test/info.log - if [ "$?" != "0" ]; then - echo "FAIL: dcpinfo failed for $d" - exit 1 - fi - fi -done - -diff -q build/test/info.log ../libdcp-test/info.log -if [ "$?" != "0" ]; then - echo "FAIL: dcpinfo output incorrect" - exit 1 -fi - -rm -f build/test/info2.log -rm -rf build/test/libdcp-test - -cp -r ../libdcp-test build/test -for d in `find build/test/libdcp-test -mindepth 1 -maxdepth 1 -type d | sort`; do - if [ `basename $d` != ".git" ]; then - LD_LIBRARY_PATH=build/src:build/asdcplib/src build/test/rewrite_subs $d - LD_LIBRARY_PATH=build/src:build/asdcplib/src build/tools/dcpinfo -s $d >> build/test/info2.log - fi -done - -sed -i "s/DCP: build\/test/DCP: \.\./g" build/test/info2.log - -diff -q build/test/info2.log ../libdcp-test/info.log -if [ "$?" != "0" ]; then - echo "FAIL: dcpinfo output from rewrite incorrect" - exit 1 -fi - -diff build/test/baz/video1.mxf build/test/baz/video2.mxf -if [ "$?" != "0" ]; then - echo "FAIL: MXFs from recovery incorrect" - exit 1 -fi - -echo "PASS" diff --git a/run/tests b/run/tests new file mode 100755 index 00000000..1a028b67 --- /dev/null +++ b/run/tests @@ -0,0 +1,95 @@ +#!/bin/bash -e +# +# Run our test suite, which (amongst other things) +# builds a couple of DCPs. +# The outputs are compared against the ones +# in test/ref/DCP, and an error is given +# if anything is different. + +private=test/private +work=build/test + +export LD_LIBRARY_PATH=build/src:build/asdcplib/src + +# Run the unit tests in test/ +if [ "$1" == "--debug" ]; then + shift + gdb --args $work/tests +elif [ "$1" == "--valgrind" ]; then + shift + valgrind --tool="memcheck" $work/tests +else + $work/tests $* +fi + +if [ ! -e "test/private/info.log" ]; then + echo "Private data not found: some tests will not run" +fi + +# Check the first DCP written by the unit tests +diff -ur test/ref/DCP/foo $work/DCP/foo +if [ "$?" != "0" ]; then + echo "FAIL: files differ" + exit 1 +fi + +# Check the second DCP written by the unit tests +diff -ur test/ref/DCP/bar $work/DCP/bar +if [ "$?" != "0" ]; then + echo "FAIL: files differ" + exit 1 +fi + +# Run dcpinfo on all the DCPs in private/metadata, writing $work/info.log +rm -f $work/info.log +for d in `find $private/metadata -mindepth 1 -maxdepth 1 -type d | sort`; do + if [ `basename $d` != ".git" ]; then + build/tools/dcpinfo -s $d >> $work/info.log + if [ "$?" != "0" ]; then + echo "FAIL: dcpinfo failed for $d" + exit 1 + fi + fi +done + +# Check info.log is what it should be +diff -q $work/info.log $private/info.log +if [ "$?" != "0" ]; then + echo "FAIL: dcpinfo output incorrect" + exit 1 +fi + +# Copy test/private into build/ then re-write the subtitles of every DCP using +# $work/rewrite_subs. This tests round-trip of subtitle reading/writing. +rm -f $work/info2.log +rm -rf $work/private +cp -r $private $work +for d in `find $work/private/metadata -mindepth 1 -maxdepth 1 -type d | sort`; do + if [ `basename $d` != ".git" ]; then + $work/rewrite_subs $d + build/tools/dcpinfo -s $d >> $work/info2.log + fi +done + +# Fudge the output +sed -i "s/DCP: build\/test/DCP: test/g" $work/info2.log + +# And check it +diff -q $work/info2.log $private/info.log +if [ "$?" != "0" ]; then + echo "FAIL: dcpinfo output from rewrite incorrect" + exit 1 +fi + +# Dump the subs of JourneyToJah... (which has MXF-wrapped subtitles) +# and check that they are right +build/tools/dcpinfo -s $private/JourneyToJah_TLR-1_F_EN-DE-FR_CH_51_2K_LOK_20140225_DGL_SMPTE_OV >> $work/jah.log + +# Check a MXF written by the unit tests +diff $work/baz/video1.mxf $work/baz/video2.mxf +if [ "$?" != "0" ]; then + echo "FAIL: MXFs from recovery incorrect" + exit 1 +fi + +echo "PASS" diff --git a/src/asset.cc b/src/asset.cc index f8de10b6..aaa79dc7 100644 --- a/src/asset.cc +++ b/src/asset.cc @@ -60,7 +60,7 @@ Asset::Asset (string id) } void -Asset::write_to_pkl (xmlpp::Node* node) const +Asset::write_to_pkl (xmlpp::Node* node, Standard standard) const { assert (!_file.empty ()); @@ -69,7 +69,7 @@ Asset::write_to_pkl (xmlpp::Node* node) const asset->add_child("AnnotationText")->add_child_text (_id); asset->add_child("Hash")->add_child_text (hash ()); asset->add_child("Size")->add_child_text (lexical_cast<string> (boost::filesystem::file_size (_file))); - asset->add_child("Type")->add_child_text (pkl_type ()); + asset->add_child("Type")->add_child_text (pkl_type (standard)); } void diff --git a/src/asset.h b/src/asset.h index 57143310..bad982f1 100644 --- a/src/asset.h +++ b/src/asset.h @@ -62,8 +62,9 @@ public: /** Write details of the asset to a PKL AssetList node. * @param node Parent node. + * @param standard Standard to use. */ - void write_to_pkl (xmlpp::Node* node) const; + void write_to_pkl (xmlpp::Node* node, Standard standard) const; boost::filesystem::path file () const { return _file; @@ -75,7 +76,7 @@ public: std::string hash (boost::function<void (float)> progress = 0) const; protected: - virtual std::string pkl_type () const = 0; + virtual std::string pkl_type (Standard standard) const = 0; /** The disk file that represents this asset, if one exists */ mutable boost::filesystem::path _file; diff --git a/src/content.h b/src/content.h index e7445d47..2059c8f5 100644 --- a/src/content.h +++ b/src/content.h @@ -71,6 +71,8 @@ public: protected: friend class MXFWriter; + + virtual std::string asdcp_kind () const = 0; Fraction _edit_rate; int64_t _intrinsic_duration; @@ -158,6 +158,7 @@ list<shared_ptr<const Content> > CPL::content () const { list<shared_ptr<const Content> > c; + for (list<shared_ptr<Reel> >::const_iterator i = _reels.begin(); i != _reels.end(); ++i) { if ((*i)->main_picture ()) { c.push_back ((*i)->main_picture()->mxf ()); @@ -251,3 +252,17 @@ CPL::resolve_refs (list<shared_ptr<Object> > objects) (*i)->resolve_refs (objects); } } + +string +CPL::pkl_type (Standard standard) const +{ + switch (standard) { + case INTEROP: + return "text/xml;asdcpKind=CPL"; + case SMPTE: + return "text/xml"; + default: + assert (false); + } +} + @@ -111,9 +111,7 @@ public: protected: /** @return type string for PKLs for this asset */ - std::string pkl_type () const { - return "text/xml"; - } + std::string pkl_type (Standard standard) const; private: std::string _annotation_text; ///< <AnnotationText> @@ -240,7 +240,7 @@ DCP::write_pkl (Standard standard, string pkl_uuid, XMLMetadata metadata, shared xmlpp::Element* asset_list = pkl->add_child("AssetList"); for (list<shared_ptr<Asset> >::const_iterator i = _assets.begin(); i != _assets.end(); ++i) { - (*i)->write_to_pkl (asset_list); + (*i)->write_to_pkl (asset_list, standard); } if (signer) { @@ -258,14 +258,31 @@ void DCP::write_volindex (Standard standard) const { boost::filesystem::path p = _directory; - if (standard == INTEROP) { + switch (standard) { + case INTEROP: p /= "VOLINDEX"; - } else { + break; + case SMPTE: p /= "VOLINDEX.xml"; + break; + default: + assert (false); } xmlpp::Document doc; - xmlpp::Element* root = doc.create_root_node ("VolumeIndex", "http://www.smpte-ra.org/schemas/429-9/2007/AM"); + xmlpp::Element* root; + + switch (standard) { + case INTEROP: + root = doc.create_root_node ("VolumeIndex", "http://www.digicine.com/PROTO-ASDCP-AM-20040311#"); + break; + case SMPTE: + root = doc.create_root_node ("VolumeIndex", "http://www.smpte-ra.org/schemas/429-9/2007/AM"); + break; + default: + assert (false); + } + root->add_child("Index")->add_child_text ("1"); doc.write_to_file (p.string (), "UTF-8"); } @@ -274,32 +291,50 @@ void DCP::write_assetmap (Standard standard, string pkl_uuid, int pkl_length, XMLMetadata metadata) const { boost::filesystem::path p = _directory; - if (standard == INTEROP) { + + switch (standard) { + case INTEROP: p /= "ASSETMAP"; - } else { + break; + case SMPTE: p /= "ASSETMAP.xml"; + break; + default: + assert (false); } xmlpp::Document doc; xmlpp::Element* root; - if (standard == INTEROP) { + + switch (standard) { + case INTEROP: root = doc.create_root_node ("AssetMap", "http://www.digicine.com/PROTO-ASDCP-AM-20040311#"); - } else { + break; + case SMPTE: root = doc.create_root_node ("AssetMap", "http://www.smpte-ra.org/schemas/429-9/2007/AM"); + break; + default: + assert (false); } root->add_child("Id")->add_child_text ("urn:uuid:" + make_uuid()); root->add_child("AnnotationText")->add_child_text ("Created by " + metadata.creator); - if (standard == INTEROP) { + + switch (standard) { + case INTEROP: root->add_child("VolumeCount")->add_child_text ("1"); root->add_child("IssueDate")->add_child_text (metadata.issue_date); root->add_child("Issuer")->add_child_text (metadata.issuer); root->add_child("Creator")->add_child_text (metadata.creator); - } else { + break; + case SMPTE: root->add_child("Creator")->add_child_text (metadata.creator); root->add_child("VolumeCount")->add_child_text ("1"); root->add_child("IssueDate")->add_child_text (metadata.issue_date); root->add_child("Issuer")->add_child_text (metadata.issuer); + break; + default: + assert (false); } xmlpp::Node* asset_list = root->add_child ("AssetList"); @@ -29,6 +29,7 @@ #include "metadata.h" #include "exceptions.h" #include "kdm.h" +#include "compose.hpp" #include <libxml++/nodes/element.h> #include <boost/filesystem.hpp> #include <iostream> @@ -152,3 +153,16 @@ MXF::read_writer_info (ASDCP::WriterInfo const & info) Kumu::bin2UUIDhex (info.AssetUUID, 16, buffer, 64); _id = buffer; } + +string +MXF::pkl_type (Standard standard) const +{ + switch (standard) { + case INTEROP: + return String::compose ("application/x-smpte-mxf;asdcpKind=%1", asdcp_kind ()); + case SMPTE: + return "application/x-smpte-mxf"; + default: + assert (false); + } +} @@ -102,10 +102,7 @@ public: } protected: - std::string pkl_type () const { - return "application/x-smpte-mxf"; - } - + std::string pkl_type (Standard standard) const; void read_writer_info (ASDCP::WriterInfo const &); ASDCP::AESEncContext* _encryption_context; diff --git a/src/picture_mxf.h b/src/picture_mxf.h index 38a1819e..1ce2e7de 100644 --- a/src/picture_mxf.h +++ b/src/picture_mxf.h @@ -103,6 +103,9 @@ protected: private: std::string key_type () const; + std::string asdcp_kind () const { + return "Picture"; + } }; diff --git a/src/signer_chain.cc b/src/signer_chain.cc index 87bacc53..3b75b06c 100644 --- a/src/signer_chain.cc +++ b/src/signer_chain.cc @@ -78,6 +78,7 @@ command (string cmd) delete[] buffer; #else + cmd += " 2> /dev/null"; int const r = system (cmd.c_str ()); int const code = WEXITSTATUS (r); #endif diff --git a/src/sound_mxf.h b/src/sound_mxf.h index 8d1f8db3..50d10957 100644 --- a/src/sound_mxf.h +++ b/src/sound_mxf.h @@ -65,6 +65,9 @@ public: private: std::string key_type () const; + std::string asdcp_kind () const { + return "Sound"; + } int _channels; ///< number of channels int _sampling_rate; ///< sampling rate in Hz diff --git a/src/subtitle_content.cc b/src/subtitle_content.cc index e32118c4..f338517e 100644 --- a/src/subtitle_content.cc +++ b/src/subtitle_content.cc @@ -34,6 +34,7 @@ using std::list; using std::ostream; using std::ofstream; using std::stringstream; +using std::cout; using boost::shared_ptr; using boost::lexical_cast; using boost::optional; @@ -59,7 +60,7 @@ SubtitleContent::SubtitleContent (boost::filesystem::path file) /* Now make Subtitle objects to represent the raw XML nodes in a sane way. */ - + ParseState parse_state; examine_font_nodes (xml, font_nodes, parse_state); } @@ -230,7 +231,7 @@ SubtitleContent::xml_as_string () const if (!_load_font_nodes.empty ()) { xmlpp::Element* load_font = root->add_child("LoadFont"); load_font->set_attribute("Id", _load_font_nodes.front()->id); - load_font->set_attribute("URI", _load_font_nodes.front()->uri); + load_font->set_attribute("URI", _load_font_nodes.front()->uri); } list<shared_ptr<SubtitleString> > sorted = _subtitles; diff --git a/src/subtitle_content.h b/src/subtitle_content.h index c4d0012b..410c5934 100644 --- a/src/subtitle_content.h +++ b/src/subtitle_content.h @@ -67,9 +67,13 @@ public: Glib::ustring xml_as_string () const; protected: - std::string pkl_type () const { + std::string pkl_type (Standard) const { return "text/xml"; } + + std::string asdcp_kind () const { + return "Subtitle"; + } private: std::string font_id_to_name (std::string id) const; diff --git a/test/dcp_test.cc b/test/dcp_test.cc index 07defce0..1736cb60 100644 --- a/test/dcp_test.cc +++ b/test/dcp_test.cc @@ -52,16 +52,16 @@ BOOST_AUTO_TEST_CASE (dcp_test) mxf_meta.product_version = "0.0.25"; /* We're making build/test/foo */ - boost::filesystem::remove_all ("build/test/foo"); - boost::filesystem::create_directories ("build/test/foo"); - dcp::DCP d ("build/test/foo"); + boost::filesystem::remove_all ("build/test/DCP/foo"); + boost::filesystem::create_directories ("build/test/DCP/foo"); + dcp::DCP d ("build/test/DCP/foo"); shared_ptr<dcp::CPL> cpl (new dcp::CPL ("A Test DCP", dcp::FEATURE)); cpl->set_content_version_id ("urn:uri:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00"); cpl->set_content_version_label_text ("81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00"); shared_ptr<dcp::MonoPictureMXF> mp (new dcp::MonoPictureMXF (dcp::Fraction (24, 1))); mp->set_metadata (mxf_meta); - shared_ptr<dcp::PictureMXFWriter> picture_writer = mp->start_write ("build/test/foo/video.mxf", dcp::SMPTE, false); + shared_ptr<dcp::PictureMXFWriter> picture_writer = mp->start_write ("build/test/DCP/foo/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 ()); @@ -70,7 +70,7 @@ BOOST_AUTO_TEST_CASE (dcp_test) shared_ptr<dcp::SoundMXF> ms (new dcp::SoundMXF (dcp::Fraction (24, 1), 48000, 1)); ms->set_metadata (mxf_meta); - shared_ptr<dcp::SoundMXFWriter> sound_writer = ms->start_write ("build/test/foo/audio.mxf", dcp::SMPTE); + shared_ptr<dcp::SoundMXFWriter> sound_writer = ms->start_write ("build/test/DCP/foo/audio.mxf", dcp::SMPTE); SF_INFO info; info.format = 0; @@ -103,5 +103,5 @@ BOOST_AUTO_TEST_CASE (dcp_test) d.write_xml (dcp::SMPTE, xml_meta); - /* build/test/foo is checked against test/ref/DCP/foo by run-tests.sh */ + /* build/test/DCP/foo is checked against test/ref/DCP/foo by run-tests.sh */ } diff --git a/test/decryption_test.cc b/test/decryption_test.cc index 030f0b58..8dfeffa6 100644 --- a/test/decryption_test.cc +++ b/test/decryption_test.cc @@ -46,13 +46,13 @@ get_frame (dcp::DCP const & dcp) /** Decrypt an encrypted test DCP and check that its first frame is the same as the unencrypted version */ BOOST_AUTO_TEST_CASE (decryption_test) { - boost::filesystem::path plaintext_path = test_corpus; + boost::filesystem::path plaintext_path = private_test; plaintext_path /= "TONEPLATES-SMPTE-PLAINTEXT_TST_F_XX-XX_ITL-TD_51-XX_2K_WOE_20111001_WOE_OV"; dcp::DCP plaintext (plaintext_path.string ()); plaintext.read (); BOOST_CHECK_EQUAL (plaintext.encrypted (), false); - boost::filesystem::path encrypted_path = test_corpus; + boost::filesystem::path encrypted_path = private_test; encrypted_path /= "TONEPLATES-SMPTE-ENCRYPTED_TST_F_XX-XX_ITL-TD_51-XX_2K_WOE_20111001_WOE_OV"; dcp::DCP encrypted (encrypted_path.string ()); encrypted.read (); diff --git a/test/encryption_test.cc b/test/encryption_test.cc index a0633b07..b4a89544 100644 --- a/test/encryption_test.cc +++ b/test/encryption_test.cc @@ -64,15 +64,16 @@ BOOST_AUTO_TEST_CASE (encryption_test) boost::filesystem::create_directories ("build/test/DCP/bar"); dcp::DCP d ("build/test/DCP/bar"); + /* Use test/ref/crypt so this test is repeatable */ dcp::CertificateChain chain; - chain.add (shared_ptr<dcp::Certificate> (new dcp::Certificate (boost::filesystem::path ("build/test/signer/ca.self-signed.pem")))); - chain.add (shared_ptr<dcp::Certificate> (new dcp::Certificate (boost::filesystem::path ("build/test/signer/intermediate.signed.pem")))); - chain.add (shared_ptr<dcp::Certificate> (new dcp::Certificate (boost::filesystem::path ("build/test/signer/leaf.signed.pem")))); + chain.add (shared_ptr<dcp::Certificate> (new dcp::Certificate (boost::filesystem::path ("test/ref/crypt/ca.self-signed.pem")))); + chain.add (shared_ptr<dcp::Certificate> (new dcp::Certificate (boost::filesystem::path ("test/ref/crypt/intermediate.signed.pem")))); + chain.add (shared_ptr<dcp::Certificate> (new dcp::Certificate (boost::filesystem::path ("test/ref/crypt/leaf.signed.pem")))); shared_ptr<dcp::Signer> signer ( new dcp::Signer ( chain, - "build/test/signer/leaf.key" + "test/ref/crypt/leaf.key" ) ); @@ -110,12 +111,21 @@ BOOST_AUTO_TEST_CASE (encryption_test) ); kdm.as_xml ("build/test/bar.kdm.xml"); - system ("xmllint --path schema --nonet --noout --schema schema/SMPTE-430-1-2006-Amd-1-2009-KDM.xsd build/test/bar.kdm.xml"); - system ("xmlsec1 verify " - "--pubkey-cert-pem build/test/signer/leaf.signed.pem " - "--trusted-pem build/test/signer/intermediate.signed.pem " - "--trusted-pem build/test/signer/ca.self-signed.pem " + + int r = system ( + "xmllint --path schema --nonet --noout --schema schema/SMPTE-430-1-2006-Amd-1-2009-KDM.xsd build/test/bar.kdm.xml " + "> build/test/xmllint.log 2>&1 < /dev/null" + ); + + BOOST_CHECK_EQUAL (WEXITSTATUS (r), 0); + + r = system ("xmlsec1 verify " + "--pubkey-cert-pem test/ref/crypt/leaf.signed.pem " + "--trusted-pem test/ref/crypt/intermediate.signed.pem " + "--trusted-pem test/ref/crypt/ca.self-signed.pem " "--id-attr:Id http://www.smpte-ra.org/schemas/430-3/2006/ETM:AuthenticatedPublic " "--id-attr:Id http://www.smpte-ra.org/schemas/430-3/2006/ETM:AuthenticatedPrivate " - "build/test/bar.kdm.xml"); + "build/test/bar.kdm.xml > build/test/xmlsec1.log 2>&1 < /dev/null"); + + BOOST_CHECK_EQUAL (WEXITSTATUS (r), 0); } diff --git a/test/private b/test/private new file mode 160000 +Subproject b1b56652bd67e74817e02933412190b33d4823b diff --git a/test/ref/DCP/bar/402c5a88-2512-4465-9c0b-cfa687dbc5d0_pkl.xml b/test/ref/DCP/bar/402c5a88-2512-4465-9c0b-cfa687dbc5d0_pkl.xml deleted file mode 100644 index a87f9e27..00000000 --- a/test/ref/DCP/bar/402c5a88-2512-4465-9c0b-cfa687dbc5d0_pkl.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<PackingList xmlns="http://www.smpte-ra.org/schemas/429-8/2007/PKL"> - <Id>urn:uuid:402c5a88-2512-4465-9c0b-cfa687dbc5d0</Id> - <AnnotationText>A Test DCP</AnnotationText> - <IssueDate>2012-07-17T04:45:18+00:00</IssueDate> - <Issuer>OpenDCP 0.0.25</Issuer> - <Creator>OpenDCP 0.0.25</Creator> - <AssetList> - <Asset> - <Id>urn:uuid:2b9b857f-ab4a-440e-a313-1ace0f1cfc95</Id> - <AnnotationText>video.mxf</AnnotationText> - <Hash>fTMi9Xvr8NzuRhm7LmSTk6k1HYo=</Hash> - <Size>28840</Size> - <Type>application/mxf</Type> - </Asset> - <Asset> - <Id>urn:uuid:aa3fb133-0d18-4083-a039-e441b0788e79</Id> - <AnnotationText>audio.mxf</AnnotationText> - <Hash>2MlsntiFrekkQvwbRPLC2XEMU78=</Hash> - <Size>308398</Size> - <Type>application/mxf</Type> - </Asset> - <Asset> - <Id>urn:uuid:63c3aece-c581-4603-b612-75e43f0c0430</Id> - <Hash>l/g+bdCKF6ofhedin5qrLcObS1E=</Hash> - <Size>1526</Size> - <Type>text/xml</Type> - </Asset> - </AssetList> -</PackingList> diff --git a/test/ref/DCP/bar/63c3aece-c581-4603-b612-75e43f0c0430_cpl.xml b/test/ref/DCP/bar/63c3aece-c581-4603-b612-75e43f0c0430_cpl.xml deleted file mode 100644 index 43edb1b3..00000000 --- a/test/ref/DCP/bar/63c3aece-c581-4603-b612-75e43f0c0430_cpl.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CompositionPlaylist xmlns="http://www.smpte-ra.org/schemas/429-7/2006/CPL"> - <Id>urn:uuid:63c3aece-c581-4603-b612-75e43f0c0430</Id> - <AnnotationText>A Test DCP</AnnotationText> - <IssueDate>2012-07-17T04:45:18+00:00</IssueDate> - <Creator>OpenDCP 0.0.25</Creator> - <ContentTitleText>A Test DCP</ContentTitleText> - <ContentKind>feature</ContentKind> - <ContentVersion> - <Id>urn:uri:63c3aece-c581-4603-b612-75e43f0c0430_2012-07-17T04:45:18+00:00</Id> - <LabelText>63c3aece-c581-4603-b612-75e43f0c0430_2012-07-17T04:45:18+00:00</LabelText> - </ContentVersion> - <RatingList/> - <ReelList> - <Reel> - <Id>urn:uuid:7d861d35-c775-48e6-a4f8-fbfdbfc1556a</Id> - <AssetList> - <MainPicture> - <Id>urn:uuid:2b9b857f-ab4a-440e-a313-1ace0f1cfc95</Id> - <AnnotationText>video.mxf</AnnotationText> - <EditRate>24 1</EditRate> - <IntrinsicDuration>24</IntrinsicDuration> - <EntryPoint>0</EntryPoint> - <Duration>24</Duration> - <FrameRate>24 1</FrameRate> - <ScreenAspectRatio>32 32</ScreenAspectRatio> - </MainPicture> - <MainSound> - <Id>urn:uuid:aa3fb133-0d18-4083-a039-e441b0788e79</Id> - <AnnotationText>audio.mxf</AnnotationText> - <EditRate>24 1</EditRate> - <IntrinsicDuration>24</IntrinsicDuration> - <EntryPoint>0</EntryPoint> - <Duration>24</Duration> - </MainSound> - </AssetList> - </Reel> - </ReelList> -</CompositionPlaylist> diff --git a/test/ref/DCP/bar/7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c_cpl.xml b/test/ref/DCP/bar/7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c_cpl.xml new file mode 100644 index 00000000..2e3c5b29 --- /dev/null +++ b/test/ref/DCP/bar/7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c_cpl.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CompositionPlaylist xmlns="http://www.smpte-ra.org/schemas/429-7/2006/CPL" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><Id>urn:uuid:7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c</Id><AnnotationText>A Test DCP</AnnotationText><IssueDate>2012-07-17T04:45:18+00:00</IssueDate><Issuer>OpenDCP 0.0.25</Issuer><Creator>OpenDCP 0.0.25</Creator><ContentTitleText>A Test DCP</ContentTitleText><ContentKind>feature</ContentKind><ContentVersion><Id>urn:uri:7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c_2012-07-17T04:45:18+00:00</Id><LabelText>7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c_2012-07-17T04:45:18+00:00</LabelText></ContentVersion><RatingList/><ReelList><Reel><Id>urn:uuid:947716dd-c237-4f31-a6d8-f74990b79c73</Id><AssetList><MainPicture><Id>urn:uuid:93182bd2-b1e8-41a3-b5c8-6e6564273bff</Id><AnnotationText>video.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><KeyId>urn:uuid:6af1e0c1-c441-47f8-a502-3efd46b1fa4f</KeyId><FrameRate>24 1</FrameRate><ScreenAspectRatio>32 32</ScreenAspectRatio></MainPicture><MainSound><Id>urn:uuid:822bd341-c751-45b1-94d2-410e4ffcff1b</Id><AnnotationText>audio.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>0</Duration><KeyId>urn:uuid:f28b567b-3b9a-417a-aee4-6fc1a2c6a3af</KeyId></MainSound></AssetList></Reel></ReelList><Signer><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=bmtwThq3srgxIAeRMjX6BFhgLDw=,CN=.smpte-430-2.INTERMEDIATE.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509IssuerName><dsig:X509SerialNumber>7</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509SubjectName>dnQualifier=d95fGDzERNdxfYPgphvAR8A18L4=,CN=CS.smpte-430-2.LEAF.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509SubjectName></dsig:X509Data></Signer><dsig:Signature><dsig:SignedInfo><dsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><dsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><dsig:Reference URI=""><dsig:Transforms><dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><dsig:DigestValue>nxx0sUeTkcxIK9y7+JATMU5MzGg=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>NTsZK+pcfddOjpQC9rkBn0eRDG1D5tVkqvwYd9d577AMj17GxXizxsBa+DadQ3mB +GiWeoiJ8/VVW9PQ8N28uOLRkv0er8Jzl6UXdASrki/FbMLLRIGT1IMmxurahUBQN +hXrk7yphM/cGpIIRwQnAyAuG0xO7L3uDUuMhRftDplwGPU52Qa3opEEX1FtxC9TT +7NrOGIs+Ks3WtUFOe5ZbfLt1McmnYzg6FJdnAEOfv3/AWQCBd1vakONNgoWKmCiK +/kmeDIMBK4slHfGrauBcn7KVPpLS8lSFgXI1erifibRe4iyANql10qJ+NiYVgdxm +udPzL8evhgSC8StQOpAy1g==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=bmtwThq3srgxIAeRMjX6BFhgLDw=,CN=.smpte-430-2.INTERMEDIATE.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509IssuerName><dsig:X509SerialNumber>7</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEezCCA2OgAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBijEUMBIGA1UEChMLZXhh +bXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUub3JnMTUwMwYDVQQDFCwuc21wdGUt +NDMwLTIuSU5URVJNRURJQVRFLk5PVF9GT1JfUFJPRFVDVElPTjElMCMGA1UELhMc +Ym10d1RocTNzcmd4SUFlUk1qWDZCRmhnTER3PTAeFw0xMzA3MDgwOTM5MDBaFw0y +MzA3MDQwOTM5MDBaMIGEMRQwEgYDVQQKEwtleGFtcGxlLm9yZzEUMBIGA1UECxML +ZXhhbXBsZS5vcmcxLzAtBgNVBAMUJkNTLnNtcHRlLTQzMC0yLkxFQUYuTk9UX0ZP +Ul9QUk9EVUNUSU9OMSUwIwYDVQQuExxkOTVmR0R6RVJOZHhmWVBncGh2QVI4QTE4 +TDQ9MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4Ai70YT7amWSvXWO +2LL9HrkNEQkR0HNO4kZS+2v3CnbrlSnSkLgA4rgsmSPNhHHgskr3ljzxH/MugKv3 +tLlSHywcqPxj06SUCvd7aWfUKIGR33XxZwFB9Hc6hCKMcOYxFJISfFxcknSgcmQj +RPnLTbaCc/i/sOHQiLnZXmTVIe43VrE+zzYJO7BBnU7Xnj1MGTzz7ccooL3dp8iS +t4E7E3mGGVMyTndIEE3fx8y1tPFigNKdPKBo1fXD7pFkL7idH+DO5Phwf/OSjS4Z +egBCrb96fRpWvzhh6z7USOe8iKY5xDir5c4UKY15JsVw2ESxkPF9wFpFHCyXt2YS +kDYbHQIDAQABo4HvMIHsMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgWgMB0GA1Ud +DgQWBBR33l8YPMRE13F9g+CmG8BHwDXwvjCBrwYDVR0jBIGnMIGkgBRua3BOGrey +uDEgB5EyNfoEWGAsPKGBiKSBhTCBgjEUMBIGA1UEChMLZXhhbXBsZS5vcmcxFDAS +BgNVBAsTC2V4YW1wbGUub3JnMS0wKwYDVQQDFCQuc21wdGUtNDMwLTIuUk9PVC5O +T1RfRk9SX1BST0RVQ1RJT04xJTAjBgNVBC4THG5kTkQ5QS9jT0RvMnJUZHJiTFZt +ZlFub2FTYz2CAQYwDQYJKoZIhvcNAQELBQADggEBAKTd8vC9j06NL727VdnYZEwa +D4MUTnv1UW5d/FdQR87WpGV+17CKblWGJtLTfFmV9LwcGlys6ZzrLRYpBf+81vYq +VUhl7rrU7askIiacSlfYx4riv9KH5JLmyLdo7sjX4dhfj5IH/ilan7le1shjEl0P +UrEgYX1dt5OOnMpzaIRHU+GWVlkY3M5VDdDfMPstuPJ+MeAP1fH0Ylajhc4O5nmu +hWfXc9qa5bxOLzNDBOsXS8hbnTpUS1qpqzea5NSogdxGIiyk/OluU1ZJJPQhf0iK +K6U6e4+TpHKVvqUwQcPUw9TcBGIDkwJTtLF48ZhFI9Gv016SmSwUobgcDA9e97o=</dsig:X509Certificate></dsig:X509Data><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=ndND9A/cODo2rTdrbLVmfQnoaSc=,CN=.smpte-430-2.ROOT.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509IssuerName><dsig:X509SerialNumber>6</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEfzCCA2egAwIBAgIBBjANBgkqhkiG9w0BAQsFADCBgjEUMBIGA1UEChMLZXhh +bXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUub3JnMS0wKwYDVQQDFCQuc21wdGUt +NDMwLTIuUk9PVC5OT1RfRk9SX1BST0RVQ1RJT04xJTAjBgNVBC4THG5kTkQ5QS9j +T0RvMnJUZHJiTFZtZlFub2FTYz0wHhcNMTMwNzA4MDkzODU5WhcNMjMwNzA1MDkz +ODU5WjCBijEUMBIGA1UEChMLZXhhbXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUu +b3JnMTUwMwYDVQQDFCwuc21wdGUtNDMwLTIuSU5URVJNRURJQVRFLk5PVF9GT1Jf +UFJPRFVDVElPTjElMCMGA1UELhMcYm10d1RocTNzcmd4SUFlUk1qWDZCRmhnTER3 +PTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMrCpaiKl7M/NYtKNQAo +H+zUcnBTNQ6xhRIDxvPAgvcGH4tf0kpXmZ8ppTU/ZZKaFZB+/pIU+9JfiCuuquvw +4EQnLABr61m6aJlE1v+0ygzZsCyHyiRnp6OyOTrJnyL6ygniX/ggp+7zkuh4upAl +QUaCDqNbUfs6Wh9BvmaBllvI3PxfaqDlQVgY53Ar991BA0kcFOdd/4ZLqZwhEiiE +Y1s3ChYLTxlqPM/UxOeRLUphmGmTSKBKc9ppTN+2/04sQJ1Ux+RZ5PmJ4+eAEcW8 +CjKM5EqZAO3EA3u88Do3uZjLXMxSGeJzs3KQX/lVZklFsO5d1eAQm9ZizfCbPPoK +f2kCAwEAAaOB9TCB8jASBgNVHRMBAf8ECDAGAQH/AgECMAsGA1UdDwQEAwIBBjAd +BgNVHQ4EFgQUbmtwThq3srgxIAeRMjX6BFhgLDwwga8GA1UdIwSBpzCBpIAUA7Qg +bb/sj/jyHsjw8TKBB7AIliihgYikgYUwgYIxFDASBgNVBAoTC2V4YW1wbGUub3Jn +MRQwEgYDVQQLEwtleGFtcGxlLm9yZzEtMCsGA1UEAxQkLnNtcHRlLTQzMC0yLlJP +T1QuTk9UX0ZPUl9QUk9EVUNUSU9OMSUwIwYDVQQuExxuZE5EOUEvY09EbzJyVGRy +YkxWbWZRbm9hU2M9ggEFMA0GCSqGSIb3DQEBCwUAA4IBAQBnlzVaMqhuenDQV7Zg +aMa6IisupI3k9J6Z24fiEOGhCfAp0fiulx2oCSrXlYnJFGe6ndeWWer9UN1h+lAc +ozKYwxsJx8jSkgwGYX5v8Cn2Sp2/gV5umCcmpZfIExEOZRmjgKzqyr658EyvmrYJ +nqrig/N8wUWeS5EzMSiE1sVfyIZmUpKhuqmGQUXnftVMCKSrqAh+Au7ndlR77/dm +ZBJzzX79nn4L9XqghdoFCPRt4rx1CMU26MmiuEzNcYJ3uSJc1SSz5tT69JQvp8Fj +InhKTMv0wWysEsfE6+aARPtrqAUJBRAG83oP6L0gdJYWJagGFVoZLfjPf+v9JgYZ +Wo+D</dsig:X509Certificate></dsig:X509Data><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=ndND9A/cODo2rTdrbLVmfQnoaSc=,CN=.smpte-430-2.ROOT.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509IssuerName><dsig:X509SerialNumber>5</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEdzCCA1+gAwIBAgIBBTANBgkqhkiG9w0BAQsFADCBgjEUMBIGA1UEChMLZXhh +bXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUub3JnMS0wKwYDVQQDFCQuc21wdGUt +NDMwLTIuUk9PVC5OT1RfRk9SX1BST0RVQ1RJT04xJTAjBgNVBC4THG5kTkQ5QS9j +T0RvMnJUZHJiTFZtZlFub2FTYz0wHhcNMTMwNzA4MDkzODU4WhcNMjMwNzA2MDkz +ODU4WjCBgjEUMBIGA1UEChMLZXhhbXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUu +b3JnMS0wKwYDVQQDFCQuc21wdGUtNDMwLTIuUk9PVC5OT1RfRk9SX1BST0RVQ1RJ +T04xJTAjBgNVBC4THG5kTkQ5QS9jT0RvMnJUZHJiTFZtZlFub2FTYz0wggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTZ9Xu3AxKzsCf8haW7QtEZEauMUfo +SkbzUmNZUYOwzuOvfhqSzO1BpRVI8/k3ZzkXR7XsWp8SbPsE17s5WPLwo4uDSro9 +XtRDOFFaZ023Ed9o2Zvoc6bwz8CpnKpiBB1XHMw9Bmi3q886f7Kk0SCsbX9OJeUC +5/FUfwDSZUs8qjRkXYd2zjxgFGvYbokKSW1ZwkoLIRoJJhScjSnwTd/aAlcenfcw +DV6ccjOJph4Dsru1NpCm50vi5/PRr00vBXMxdC2YgNyWONM5k8InBiU0uCmWmU5Y +SRSc9A3cVtrKzP1WHE2978TNFqKpjEa8tgOYualSfI2pMtA23EVG14RJAgMBAAGj +gfUwgfIwEgYDVR0TAQH/BAgwBgEB/wIBAzALBgNVHQ8EBAMCAQYwHQYDVR0OBBYE +FAO0IG2/7I/48h7I8PEygQewCJYoMIGvBgNVHSMEgacwgaSAFAO0IG2/7I/48h7I +8PEygQewCJYooYGIpIGFMIGCMRQwEgYDVQQKEwtleGFtcGxlLm9yZzEUMBIGA1UE +CxMLZXhhbXBsZS5vcmcxLTArBgNVBAMUJC5zbXB0ZS00MzAtMi5ST09ULk5PVF9G +T1JfUFJPRFVDVElPTjElMCMGA1UELhMcbmRORDlBL2NPRG8yclRkcmJMVm1mUW5v +YVNjPYIBBTANBgkqhkiG9w0BAQsFAAOCAQEAp2V3npo0m7Vmdhpr6mk5UybM16Hx +M99zoKGUpm6k9PYRk8ysEhD7M8hDuwiiFoRJj1+X8V4HLwNU3JTTQzSl88pMvLg8 +Tyl4ICELg9MN/Eyfnu6iyGDfPzcsuv8xZN53211LobqW+HGK8r+slf5GPDILka8r +GB7sFRjvq3SEGpqupKI9sJFmvHyQplJ1ixrIkSnTEuBFBrDtQj+cjrqlvRw/dReo +3uELGe5GyvBcP0hDgrvZQmTdCLQfo4998MMhLDyxvD9/D4jpRcCrLzs2uB3Tw3kT +1KkAjDA/33J1XCZEkb1ArS2L/I12T0DoSQqb17NE3xccY+6iRFXRMFWDIQ==</dsig:X509Certificate></dsig:X509Data></dsig:KeyInfo></dsig:Signature></CompositionPlaylist> diff --git a/test/ref/DCP/bar/ASSETMAP.xml b/test/ref/DCP/bar/ASSETMAP.xml index 359f453f..6b0ae981 100644 --- a/test/ref/DCP/bar/ASSETMAP.xml +++ b/test/ref/DCP/bar/ASSETMAP.xml @@ -1,55 +1,2 @@ <?xml version="1.0" encoding="UTF-8"?> -<AssetMap xmlns="http://www.smpte-ra.org/schemas/429-9/2007/AM"> - <Id>urn:uuid:58f161a5-16d1-4896-93df-52a5a330082f</Id> - <Creator>OpenDCP 0.0.25</Creator> - <VolumeCount>1</VolumeCount> - <IssueDate>2012-07-17T04:45:18+00:00</IssueDate> - <Issuer>OpenDCP 0.0.25</Issuer> - <AssetList> - <Asset> - <Id>urn:uuid:402c5a88-2512-4465-9c0b-cfa687dbc5d0</Id> - <PackingList>true</PackingList> - <ChunkList> - <Chunk> - <Path>402c5a88-2512-4465-9c0b-cfa687dbc5d0_pkl.xml</Path> - <VolumeIndex>1</VolumeIndex> - <Offset>0</Offset> - <Length>1049</Length> - </Chunk> - </ChunkList> - </Asset> - <Asset> - <Id>urn:uuid:63c3aece-c581-4603-b612-75e43f0c0430</Id> - <ChunkList> - <Chunk> - <Path>63c3aece-c581-4603-b612-75e43f0c0430_cpl.xml</Path> - <VolumeIndex>1</VolumeIndex> - <Offset>0</Offset> - <Length>1526</Length> - </Chunk> - </ChunkList> - </Asset> - <Asset> - <Id>urn:uuid:2b9b857f-ab4a-440e-a313-1ace0f1cfc95</Id> - <ChunkList> - <Chunk> - <Path>video.mxf</Path> - <VolumeIndex>1</VolumeIndex> - <Offset>0</Offset> - <Length>28840</Length> - </Chunk> - </ChunkList> - </Asset> - <Asset> - <Id>urn:uuid:aa3fb133-0d18-4083-a039-e441b0788e79</Id> - <ChunkList> - <Chunk> - <Path>audio.mxf</Path> - <VolumeIndex>1</VolumeIndex> - <Offset>0</Offset> - <Length>308398</Length> - </Chunk> - </ChunkList> - </Asset> - </AssetList> -</AssetMap> +<AssetMap xmlns="http://www.smpte-ra.org/schemas/429-9/2007/AM"><Id>urn:uuid:aa157ca6-e3e3-4b6c-a7b6-50f52fcafb7f</Id><AnnotationText>Created by OpenDCP 0.0.25</AnnotationText><Creator>OpenDCP 0.0.25</Creator><VolumeCount>1</VolumeCount><IssueDate>2012-07-17T04:45:18+00:00</IssueDate><Issuer>OpenDCP 0.0.25</Issuer><AssetList><Asset><Id>urn:uuid:a12d2c1f-0daa-4a30-a4cd-c4266ac172a7</Id><PackingList>true</PackingList><ChunkList><Chunk><Path>a12d2c1f-0daa-4a30-a4cd-c4266ac172a7_pkl.xml</Path><VolumeIndex>1</VolumeIndex><Offset>0</Offset><Length>8019</Length></Chunk></ChunkList></Asset><Asset><Id>urn:uuid:7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c</Id><ChunkList><Chunk><Path>7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c_cpl.xml</Path><VolumeIndex>1</VolumeIndex><Offset>0</Offset><Length>8531</Length></Chunk></ChunkList></Asset><Asset><Id>urn:uuid:822bd341-c751-45b1-94d2-410e4ffcff1b</Id><ChunkList><Chunk><Path>audio.mxf</Path><VolumeIndex>1</VolumeIndex><Offset>0</Offset><Length>308398</Length></Chunk></ChunkList></Asset><Asset><Id>urn:uuid:93182bd2-b1e8-41a3-b5c8-6e6564273bff</Id><ChunkList><Chunk><Path>video.mxf</Path><VolumeIndex>1</VolumeIndex><Offset>0</Offset><Length>28840</Length></Chunk></ChunkList></Asset></AssetList></AssetMap> diff --git a/test/ref/DCP/bar/VOLINDEX.xml b/test/ref/DCP/bar/VOLINDEX.xml index f66c004a..021685e9 100644 --- a/test/ref/DCP/bar/VOLINDEX.xml +++ b/test/ref/DCP/bar/VOLINDEX.xml @@ -1,4 +1,2 @@ <?xml version="1.0" encoding="UTF-8"?> -<VolumeIndex xmlns="http://www.smpte-ra.org/schemas/429-9/2007/AM"> - <Index>1</Index> -</VolumeIndex> +<VolumeIndex xmlns="http://www.smpte-ra.org/schemas/429-9/2007/AM"><Index>1</Index></VolumeIndex> diff --git a/test/ref/DCP/bar/a12d2c1f-0daa-4a30-a4cd-c4266ac172a7_pkl.xml b/test/ref/DCP/bar/a12d2c1f-0daa-4a30-a4cd-c4266ac172a7_pkl.xml new file mode 100644 index 00000000..60bc2042 --- /dev/null +++ b/test/ref/DCP/bar/a12d2c1f-0daa-4a30-a4cd-c4266ac172a7_pkl.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<PackingList xmlns="http://www.smpte-ra.org/schemas/429-8/2007/PKL" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><Id>urn:uuid:a12d2c1f-0daa-4a30-a4cd-c4266ac172a7</Id><AnnotationText>A Test DCP</AnnotationText><IssueDate>2012-07-17T04:45:18+00:00</IssueDate><Issuer>OpenDCP 0.0.25</Issuer><Creator>OpenDCP 0.0.25</Creator><AssetList><Asset><Id>urn:uuid:822bd341-c751-45b1-94d2-410e4ffcff1b</Id><AnnotationText>audio.mxf</AnnotationText><Hash>00dwsDwm9AGtL2ylcUZzm/UH/P8=</Hash><Size>308398</Size><Type>application/mxf</Type></Asset><Asset><Id>urn:uuid:93182bd2-b1e8-41a3-b5c8-6e6564273bff</Id><AnnotationText>video.mxf</AnnotationText><Hash>twmVEuhyyqVkEQo6tQbCN/V4MuY=</Hash><Size>28840</Size><Type>application/mxf</Type></Asset><Asset><Id>urn:uuid:7b6616d2-9afe-4d54-a2bb-4f3f71ac6e0c</Id><Hash>mTFgIKBQeWMqD6y+8CanXIJj7pQ=</Hash><Size>8531</Size><Type>text/xml</Type></Asset></AssetList><Signer><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=bmtwThq3srgxIAeRMjX6BFhgLDw=,CN=.smpte-430-2.INTERMEDIATE.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509IssuerName><dsig:X509SerialNumber>7</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509SubjectName>dnQualifier=d95fGDzERNdxfYPgphvAR8A18L4=,CN=CS.smpte-430-2.LEAF.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509SubjectName></dsig:X509Data></Signer><dsig:Signature><dsig:SignedInfo><dsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><dsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><dsig:Reference URI=""><dsig:Transforms><dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><dsig:DigestValue>/xGgOim2E6rPVUvuWH97evvZ3E0=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>X18JIXvv5fWjLTJPJYPg/KliGBtM1mZvEjaS0m+SUaM26WpTMT52nowtT/6PcGDX +Qd0Klm6j2YZpXnXbVapyhY9hXpm8h2dTDRR8S3r2fC6lVc6LAEPz6WRhW7F0ltZ7 +LFYnOraZOm0hegih1lM2bPin9rbsrtSguSEAYMP7z0SNAHViJ/eiY4b/va8n1eVe +bKqmdjN7CrD5OnxobDRSgBLeO9BqtrudPJlk4rCJmXIOxPrzywdRGd18VpoIqdNZ +hOmkgKZZrCk/QDZGKZLd1pnZ6AxxUl3Qwap+rxuTINNW8rDmKVEO8tLe/swHN/TA +zxrk+JtqOI/nDK5QRci2nQ==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=bmtwThq3srgxIAeRMjX6BFhgLDw=,CN=.smpte-430-2.INTERMEDIATE.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509IssuerName><dsig:X509SerialNumber>7</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEezCCA2OgAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBijEUMBIGA1UEChMLZXhh +bXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUub3JnMTUwMwYDVQQDFCwuc21wdGUt +NDMwLTIuSU5URVJNRURJQVRFLk5PVF9GT1JfUFJPRFVDVElPTjElMCMGA1UELhMc +Ym10d1RocTNzcmd4SUFlUk1qWDZCRmhnTER3PTAeFw0xMzA3MDgwOTM5MDBaFw0y +MzA3MDQwOTM5MDBaMIGEMRQwEgYDVQQKEwtleGFtcGxlLm9yZzEUMBIGA1UECxML +ZXhhbXBsZS5vcmcxLzAtBgNVBAMUJkNTLnNtcHRlLTQzMC0yLkxFQUYuTk9UX0ZP +Ul9QUk9EVUNUSU9OMSUwIwYDVQQuExxkOTVmR0R6RVJOZHhmWVBncGh2QVI4QTE4 +TDQ9MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4Ai70YT7amWSvXWO +2LL9HrkNEQkR0HNO4kZS+2v3CnbrlSnSkLgA4rgsmSPNhHHgskr3ljzxH/MugKv3 +tLlSHywcqPxj06SUCvd7aWfUKIGR33XxZwFB9Hc6hCKMcOYxFJISfFxcknSgcmQj +RPnLTbaCc/i/sOHQiLnZXmTVIe43VrE+zzYJO7BBnU7Xnj1MGTzz7ccooL3dp8iS +t4E7E3mGGVMyTndIEE3fx8y1tPFigNKdPKBo1fXD7pFkL7idH+DO5Phwf/OSjS4Z +egBCrb96fRpWvzhh6z7USOe8iKY5xDir5c4UKY15JsVw2ESxkPF9wFpFHCyXt2YS +kDYbHQIDAQABo4HvMIHsMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgWgMB0GA1Ud +DgQWBBR33l8YPMRE13F9g+CmG8BHwDXwvjCBrwYDVR0jBIGnMIGkgBRua3BOGrey +uDEgB5EyNfoEWGAsPKGBiKSBhTCBgjEUMBIGA1UEChMLZXhhbXBsZS5vcmcxFDAS +BgNVBAsTC2V4YW1wbGUub3JnMS0wKwYDVQQDFCQuc21wdGUtNDMwLTIuUk9PVC5O +T1RfRk9SX1BST0RVQ1RJT04xJTAjBgNVBC4THG5kTkQ5QS9jT0RvMnJUZHJiTFZt +ZlFub2FTYz2CAQYwDQYJKoZIhvcNAQELBQADggEBAKTd8vC9j06NL727VdnYZEwa +D4MUTnv1UW5d/FdQR87WpGV+17CKblWGJtLTfFmV9LwcGlys6ZzrLRYpBf+81vYq +VUhl7rrU7askIiacSlfYx4riv9KH5JLmyLdo7sjX4dhfj5IH/ilan7le1shjEl0P +UrEgYX1dt5OOnMpzaIRHU+GWVlkY3M5VDdDfMPstuPJ+MeAP1fH0Ylajhc4O5nmu +hWfXc9qa5bxOLzNDBOsXS8hbnTpUS1qpqzea5NSogdxGIiyk/OluU1ZJJPQhf0iK +K6U6e4+TpHKVvqUwQcPUw9TcBGIDkwJTtLF48ZhFI9Gv016SmSwUobgcDA9e97o=</dsig:X509Certificate></dsig:X509Data><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=ndND9A/cODo2rTdrbLVmfQnoaSc=,CN=.smpte-430-2.ROOT.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509IssuerName><dsig:X509SerialNumber>6</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEfzCCA2egAwIBAgIBBjANBgkqhkiG9w0BAQsFADCBgjEUMBIGA1UEChMLZXhh +bXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUub3JnMS0wKwYDVQQDFCQuc21wdGUt +NDMwLTIuUk9PVC5OT1RfRk9SX1BST0RVQ1RJT04xJTAjBgNVBC4THG5kTkQ5QS9j +T0RvMnJUZHJiTFZtZlFub2FTYz0wHhcNMTMwNzA4MDkzODU5WhcNMjMwNzA1MDkz +ODU5WjCBijEUMBIGA1UEChMLZXhhbXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUu +b3JnMTUwMwYDVQQDFCwuc21wdGUtNDMwLTIuSU5URVJNRURJQVRFLk5PVF9GT1Jf +UFJPRFVDVElPTjElMCMGA1UELhMcYm10d1RocTNzcmd4SUFlUk1qWDZCRmhnTER3 +PTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMrCpaiKl7M/NYtKNQAo +H+zUcnBTNQ6xhRIDxvPAgvcGH4tf0kpXmZ8ppTU/ZZKaFZB+/pIU+9JfiCuuquvw +4EQnLABr61m6aJlE1v+0ygzZsCyHyiRnp6OyOTrJnyL6ygniX/ggp+7zkuh4upAl +QUaCDqNbUfs6Wh9BvmaBllvI3PxfaqDlQVgY53Ar991BA0kcFOdd/4ZLqZwhEiiE +Y1s3ChYLTxlqPM/UxOeRLUphmGmTSKBKc9ppTN+2/04sQJ1Ux+RZ5PmJ4+eAEcW8 +CjKM5EqZAO3EA3u88Do3uZjLXMxSGeJzs3KQX/lVZklFsO5d1eAQm9ZizfCbPPoK +f2kCAwEAAaOB9TCB8jASBgNVHRMBAf8ECDAGAQH/AgECMAsGA1UdDwQEAwIBBjAd +BgNVHQ4EFgQUbmtwThq3srgxIAeRMjX6BFhgLDwwga8GA1UdIwSBpzCBpIAUA7Qg +bb/sj/jyHsjw8TKBB7AIliihgYikgYUwgYIxFDASBgNVBAoTC2V4YW1wbGUub3Jn +MRQwEgYDVQQLEwtleGFtcGxlLm9yZzEtMCsGA1UEAxQkLnNtcHRlLTQzMC0yLlJP +T1QuTk9UX0ZPUl9QUk9EVUNUSU9OMSUwIwYDVQQuExxuZE5EOUEvY09EbzJyVGRy +YkxWbWZRbm9hU2M9ggEFMA0GCSqGSIb3DQEBCwUAA4IBAQBnlzVaMqhuenDQV7Zg +aMa6IisupI3k9J6Z24fiEOGhCfAp0fiulx2oCSrXlYnJFGe6ndeWWer9UN1h+lAc +ozKYwxsJx8jSkgwGYX5v8Cn2Sp2/gV5umCcmpZfIExEOZRmjgKzqyr658EyvmrYJ +nqrig/N8wUWeS5EzMSiE1sVfyIZmUpKhuqmGQUXnftVMCKSrqAh+Au7ndlR77/dm +ZBJzzX79nn4L9XqghdoFCPRt4rx1CMU26MmiuEzNcYJ3uSJc1SSz5tT69JQvp8Fj +InhKTMv0wWysEsfE6+aARPtrqAUJBRAG83oP6L0gdJYWJagGFVoZLfjPf+v9JgYZ +Wo+D</dsig:X509Certificate></dsig:X509Data><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=ndND9A/cODo2rTdrbLVmfQnoaSc=,CN=.smpte-430-2.ROOT.NOT_FOR_PRODUCTION,OU=example.org,O=example.org</dsig:X509IssuerName><dsig:X509SerialNumber>5</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEdzCCA1+gAwIBAgIBBTANBgkqhkiG9w0BAQsFADCBgjEUMBIGA1UEChMLZXhh +bXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUub3JnMS0wKwYDVQQDFCQuc21wdGUt +NDMwLTIuUk9PVC5OT1RfRk9SX1BST0RVQ1RJT04xJTAjBgNVBC4THG5kTkQ5QS9j +T0RvMnJUZHJiTFZtZlFub2FTYz0wHhcNMTMwNzA4MDkzODU4WhcNMjMwNzA2MDkz +ODU4WjCBgjEUMBIGA1UEChMLZXhhbXBsZS5vcmcxFDASBgNVBAsTC2V4YW1wbGUu +b3JnMS0wKwYDVQQDFCQuc21wdGUtNDMwLTIuUk9PVC5OT1RfRk9SX1BST0RVQ1RJ +T04xJTAjBgNVBC4THG5kTkQ5QS9jT0RvMnJUZHJiTFZtZlFub2FTYz0wggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTZ9Xu3AxKzsCf8haW7QtEZEauMUfo +SkbzUmNZUYOwzuOvfhqSzO1BpRVI8/k3ZzkXR7XsWp8SbPsE17s5WPLwo4uDSro9 +XtRDOFFaZ023Ed9o2Zvoc6bwz8CpnKpiBB1XHMw9Bmi3q886f7Kk0SCsbX9OJeUC +5/FUfwDSZUs8qjRkXYd2zjxgFGvYbokKSW1ZwkoLIRoJJhScjSnwTd/aAlcenfcw +DV6ccjOJph4Dsru1NpCm50vi5/PRr00vBXMxdC2YgNyWONM5k8InBiU0uCmWmU5Y +SRSc9A3cVtrKzP1WHE2978TNFqKpjEa8tgOYualSfI2pMtA23EVG14RJAgMBAAGj +gfUwgfIwEgYDVR0TAQH/BAgwBgEB/wIBAzALBgNVHQ8EBAMCAQYwHQYDVR0OBBYE +FAO0IG2/7I/48h7I8PEygQewCJYoMIGvBgNVHSMEgacwgaSAFAO0IG2/7I/48h7I +8PEygQewCJYooYGIpIGFMIGCMRQwEgYDVQQKEwtleGFtcGxlLm9yZzEUMBIGA1UE +CxMLZXhhbXBsZS5vcmcxLTArBgNVBAMUJC5zbXB0ZS00MzAtMi5ST09ULk5PVF9G +T1JfUFJPRFVDVElPTjElMCMGA1UELhMcbmRORDlBL2NPRG8yclRkcmJMVm1mUW5v +YVNjPYIBBTANBgkqhkiG9w0BAQsFAAOCAQEAp2V3npo0m7Vmdhpr6mk5UybM16Hx +M99zoKGUpm6k9PYRk8ysEhD7M8hDuwiiFoRJj1+X8V4HLwNU3JTTQzSl88pMvLg8 +Tyl4ICELg9MN/Eyfnu6iyGDfPzcsuv8xZN53211LobqW+HGK8r+slf5GPDILka8r +GB7sFRjvq3SEGpqupKI9sJFmvHyQplJ1ixrIkSnTEuBFBrDtQj+cjrqlvRw/dReo +3uELGe5GyvBcP0hDgrvZQmTdCLQfo4998MMhLDyxvD9/D4jpRcCrLzs2uB3Tw3kT +1KkAjDA/33J1XCZEkb1ArS2L/I12T0DoSQqb17NE3xccY+6iRFXRMFWDIQ==</dsig:X509Certificate></dsig:X509Data></dsig:KeyInfo></dsig:Signature></PackingList> diff --git a/test/ref/DCP/bar/audio.mxf b/test/ref/DCP/bar/audio.mxf Binary files differindex 1188e5fc..9fbf73b8 100644 --- a/test/ref/DCP/bar/audio.mxf +++ b/test/ref/DCP/bar/audio.mxf diff --git a/test/ref/DCP/bar/video.mxf b/test/ref/DCP/bar/video.mxf Binary files differindex 20eb6f4a..2aae069f 100644 --- a/test/ref/DCP/bar/video.mxf +++ b/test/ref/DCP/bar/video.mxf diff --git a/test/rewrite_subs.cc b/test/rewrite_subs.cc index fdb41a2c..3b177b21 100644 --- a/test/rewrite_subs.cc +++ b/test/rewrite_subs.cc @@ -33,32 +33,39 @@ using namespace dcp; int main (int argc, char* argv[]) -try { - if (argc < 2) { - cerr << "Syntax: " << argv[0] << " <dcp>\n"; - exit (EXIT_FAILURE); - } - - DCP* dcp = new DCP (argv[1]); - dcp->read (); - - list<shared_ptr<CPL> > cpls = dcp->cpls (); - for (list<boost::shared_ptr<CPL> >::iterator i = cpls.begin(); i != cpls.end(); ++i) { - - list<shared_ptr<Reel> > reels = (*i)->reels (); - for (list<shared_ptr<Reel> >::iterator j = reels.begin(); j != reels.end(); ++j) { - - if ((*j)->main_subtitle()) { - (*j)->main_subtitle()->subtitle_content()->write_xml (); + try { + if (argc < 2) { + cerr << "Syntax: " << argv[0] << " <dcp>\n"; + exit (EXIT_FAILURE); + } + + DCP* dcp = new DCP (argv[1]); + dcp->read (); + + list<shared_ptr<CPL> > cpls = dcp->cpls (); + for (list<boost::shared_ptr<CPL> >::iterator i = cpls.begin(); i != cpls.end(); ++i) { + + list<shared_ptr<Reel> > reels = (*i)->reels (); + for (list<shared_ptr<Reel> >::iterator j = reels.begin(); j != reels.end(); ++j) { + + if ((*j)->main_subtitle()) { + (*j)->main_subtitle()->subtitle_content()->write_xml (); + } } } } + catch (FileError& e) + { + cerr << e.what() << " (" << e.filename() << ") when reading " << argv[1] << "\n"; + exit (EXIT_FAILURE); + } + catch (DCPReadError& e) + { + cerr << e.what() << " when reading " << argv[1] << "\n"; + exit (EXIT_FAILURE); + } + return 0; } -catch (FileError& e) -{ - cerr << e.what() << " (" << e.filename() << ")\n"; - exit (EXIT_FAILURE); -} diff --git a/test/test.cc b/test/test.cc index f30a9db8..0b56b903 100644 --- a/test/test.cc +++ b/test/test.cc @@ -47,5 +47,5 @@ wav (dcp::Channel) return "test/data/1s_24-bit_48k_silence.wav"; } -string test_corpus = "../libdcp-test"; +string private_test = "test/private"; diff --git a/test/test.h b/test/test.h index bc6baccd..f139fa28 100644 --- a/test/test.h +++ b/test/test.h @@ -17,4 +17,4 @@ */ -extern std::string test_corpus; +extern std::string private_test; @@ -119,7 +119,7 @@ def build(bld): bld(source='libdcp%s.pc.in' % bld.env.API_VERSION, version=VERSION, includedir='%s/include/libdcp%s' % (bld.env.PREFIX, bld.env.API_VERSION), - libs="-L${libdir} -ldcp%s -lasdcp-libdcp%s -lkumu-libdcp%s -lboost_system%s" % (API_VERSION, API_VERSION, API_VERSION, boost_lib_suffix), + libs="-L${libdir} -ldcp%s -lasdcp-libdcp%s -lkumu-libdcp%s -lcxml -lboost_system%s" % (API_VERSION, API_VERSION, API_VERSION, boost_lib_suffix), install_path='${LIBDIR}/pkgconfig') bld.recurse('src') |
