--- /dev/null
+[submodule "test/private"]
+ path = test/private
+ url = ssh://carlh.dyndns.org/home/carl/git/libdcp-test.git
--- /dev/null
+libdcp has unit tests which are run with
+
+run/tests
+
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()
+++ /dev/null
-#!/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"
--- /dev/null
+#!/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"
}
void
-Asset::write_to_pkl (xmlpp::Node* node) const
+Asset::write_to_pkl (xmlpp::Node* node, Standard standard) const
{
assert (!_file.empty ());
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
/** 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;
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;
protected:
friend class MXFWriter;
+
+ virtual std::string asdcp_kind () const = 0;
Fraction _edit_rate;
int64_t _intrinsic_duration;
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 ());
(*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);
+ }
+}
+
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>
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) {
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");
}
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");
#include "metadata.h"
#include "exceptions.h"
#include "kdm.h"
+#include "compose.hpp"
#include <libxml++/nodes/element.h>
#include <boost/filesystem.hpp>
#include <iostream>
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);
+ }
+}
}
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;
private:
std::string key_type () const;
+ std::string asdcp_kind () const {
+ return "Picture";
+ }
};
delete[] buffer;
#else
+ cmd += " 2> /dev/null";
int const r = system (cmd.c_str ());
int const code = WEXITSTATUS (r);
#endif
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
using std::ostream;
using std::ofstream;
using std::stringstream;
+using std::cout;
using boost::shared_ptr;
using boost::lexical_cast;
using boost::optional;
/* 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);
}
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;
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;
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 ());
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;
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 */
}
/** 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 ();
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"
)
);
);
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);
}
--- /dev/null
+Subproject commit b1b56652bd67e74817e02933412190b33d4823b6
+++ /dev/null
-<?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>
+++ /dev/null
-<?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>
--- /dev/null
+<?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>
<?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>
<?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>
--- /dev/null
+<?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>
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);
-}
return "test/data/1s_24-bit_48k_silence.wav";
}
-string test_corpus = "../libdcp-test";
+string private_test = "test/private";
*/
-extern std::string test_corpus;
+extern std::string private_test;
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')