summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-05-24 23:02:38 +0100
committerCarl Hetherington <cth@carlh.net>2016-05-24 23:02:38 +0100
commitcb7c3db37d196b6e9ddad60937bd5314a95eadb2 (patch)
treeb686e05142b39208e4af8ab0a01e3b47c5256378
parent096b175a661234d9e02a852cce9f56c4577b8259 (diff)
parent85c699d29aab7ca7f7218b3f7f859e10c9025e37 (diff)
Merge branch '1.0' of ssh://main.carlh.net/home/carl/git/libdcp into 1.0
-rw-r--r--src/colour_conversion.cc38
-rw-r--r--src/colour_conversion.h2
-rw-r--r--src/cpl.cc15
-rw-r--r--src/cpl.h7
-rw-r--r--src/dcp.cc43
-rw-r--r--src/dcp.h8
-rw-r--r--src/exceptions.cc6
-rw-r--r--src/exceptions.h6
-rw-r--r--src/modified_gamma_transfer_function.h7
-rw-r--r--test/read_dcp_test.cc22
-rw-r--r--test/ref/DCP/dcp_test1/audio.mxfbin161326 -> 161326 bytes
-rw-r--r--test/ref/DCP/dcp_test1/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml2
-rw-r--r--test/ref/DCP/dcp_test1/pkl_18be072e-5a0f-44e1-b2eb-c8a52ae12789.xml2
-rw-r--r--test/ref/DCP/dcp_test1/video.mxfbin26080 -> 26080 bytes
-rw-r--r--test/ref/DCP/dcp_test2/audio.mxfbin161326 -> 161326 bytes
-rw-r--r--test/ref/DCP/dcp_test2/cpl_74e205d0-d145-42d2-8c49-7b55d058ca55.xml2
-rw-r--r--test/ref/DCP/dcp_test2/pkl_6d857146-24c9-4626-bc7a-3971b15f1ba4.xml2
-rw-r--r--test/ref/DCP/dcp_test2/video.mxfbin35032 -> 35032 bytes
-rw-r--r--test/ref/DCP/dcp_test3/ASSETMAP2
-rw-r--r--test/ref/DCP/dcp_test3/VOLINDEX2
-rw-r--r--test/ref/DCP/dcp_test3/cpl_cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296.xml76
-rw-r--r--test/ref/DCP/dcp_test3/j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxfbin0 -> 561776 bytes
-rw-r--r--test/ref/DCP/dcp_test3/pcm_69cf9eaf-9a99-4776-b022-6902208626c3.mxfbin0 -> 881174 bytes
-rw-r--r--test/ref/DCP/dcp_test3/pkl_d87a950c-bd6f-41f6-90cc-56ccd673e131.xml76
-rw-r--r--test/ref/DCP/encryption_test/audio.mxfbin165454 -> 165454 bytes
-rw-r--r--test/ref/DCP/encryption_test/cpl_cdecf5ab-b688-4842-bd60-0c9f5ce56e8c.xml12
-rw-r--r--test/ref/DCP/encryption_test/pkl_abf9d74a-c344-40a0-a929-21add8a3bd6e.xml12
-rw-r--r--test/ref/DCP/encryption_test/video.mxfbin29896 -> 29896 bytes
28 files changed, 314 insertions, 28 deletions
diff --git a/src/colour_conversion.cc b/src/colour_conversion.cc
index 8c48c2e1..46bc717e 100644
--- a/src/colour_conversion.cc
+++ b/src/colour_conversion.cc
@@ -97,6 +97,44 @@ ColourConversion::p3_to_xyz ()
return *c;
}
+ColourConversion const &
+ColourConversion::rec1886_to_xyz ()
+{
+ /* According to Olivier on DCP-o-matic bug #832, Rec. 1886 is Rec. 709 with
+ 2.4 gamma, so here goes ...
+ */
+ static ColourConversion* c = new ColourConversion (
+ shared_ptr<const TransferFunction> (new GammaTransferFunction (2.4)),
+ YUV_TO_RGB_REC709,
+ Chromaticity (0.64, 0.33),
+ Chromaticity (0.3, 0.6),
+ Chromaticity (0.15, 0.06),
+ /* D65 */
+ Chromaticity (0.3127, 0.329),
+ optional<Chromaticity> (),
+ shared_ptr<const TransferFunction> (new GammaTransferFunction (2.6))
+ );
+ return *c;
+}
+
+ColourConversion const &
+ColourConversion::rec2020_to_xyz ()
+{
+ /* From Wikipedia */
+ static ColourConversion* c = new ColourConversion (
+ shared_ptr<const TransferFunction> (new ModifiedGammaTransferFunction (1 / 0.45, 0.08145, 0.0993, 4.5)),
+ YUV_TO_RGB_REC709,
+ Chromaticity (0.708, 0.292),
+ Chromaticity (0.170, 0.797),
+ Chromaticity (0.131, 0.046),
+ /* D65 */
+ Chromaticity (0.3127, 0.329),
+ optional<Chromaticity> (),
+ shared_ptr<const TransferFunction> (new GammaTransferFunction (2.6))
+ );
+ return *c;
+}
+
ColourConversion::ColourConversion (
shared_ptr<const TransferFunction> in,
YUVToRGB yuv_to_rgb,
diff --git a/src/colour_conversion.h b/src/colour_conversion.h
index 47071dd1..f974a182 100644
--- a/src/colour_conversion.h
+++ b/src/colour_conversion.h
@@ -139,6 +139,8 @@ public:
static ColourConversion const & rec601_to_xyz ();
static ColourConversion const & rec709_to_xyz ();
static ColourConversion const & p3_to_xyz ();
+ static ColourConversion const & rec1886_to_xyz ();
+ static ColourConversion const & rec2020_to_xyz ();
protected:
/** Input transfer function (probably a gamma function, or something similar) */
diff --git a/src/cpl.cc b/src/cpl.cc
index c408fe97..0d8221e2 100644
--- a/src/cpl.cc
+++ b/src/cpl.cc
@@ -45,6 +45,9 @@ using boost::optional;
using boost::dynamic_pointer_cast;
using namespace dcp;
+static string const cpl_interop_ns = "http://www.digicine.com/PROTO-ASDCP-CPL-20040511#";
+static string const cpl_smpte_ns = "http://www.smpte-ra.org/schemas/429-7/2006/CPL";
+
CPL::CPL (string annotation_text, ContentKind content_kind)
: _annotation_text (annotation_text)
/* default _content_title_text to _annotation_text */
@@ -67,6 +70,14 @@ CPL::CPL (boost::filesystem::path file)
cxml::Document f ("CompositionPlaylist");
f.read_file (file);
+ if (f.namespace_uri() == cpl_interop_ns) {
+ _standard = INTEROP;
+ } else if (f.namespace_uri() == cpl_smpte_ns) {
+ _standard = SMPTE;
+ } else {
+ boost::throw_exception (XMLError ("Unrecognised CPL namespace " + f.namespace_uri()));
+ }
+
_id = remove_urn_uuid (f.string_child ("Id"));
_annotation_text = f.optional_string_child ("AnnotationText").get_value_or ("");
_metadata.issuer = f.optional_string_child ("Issuer").get_value_or ("");
@@ -110,9 +121,9 @@ CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr<cons
xmlpp::Document doc;
xmlpp::Element* root;
if (standard == INTEROP) {
- root = doc.create_root_node ("CompositionPlaylist", "http://www.digicine.com/PROTO-ASDCP-CPL-20040511#");
+ root = doc.create_root_node ("CompositionPlaylist", cpl_interop_ns);
} else {
- root = doc.create_root_node ("CompositionPlaylist", "http://www.smpte-ra.org/schemas/429-7/2006/CPL");
+ root = doc.create_root_node ("CompositionPlaylist", cpl_smpte_ns);
}
if (signer) {
diff --git a/src/cpl.h b/src/cpl.h
index 9d22cbd4..5ff320d2 100644
--- a/src/cpl.h
+++ b/src/cpl.h
@@ -114,6 +114,10 @@ public:
int64_t duration () const;
+ boost::optional<Standard> standard () const {
+ return _standard;
+ }
+
protected:
/** @return type string for PKLs for this asset */
std::string pkl_type (Standard standard) const;
@@ -129,6 +133,9 @@ private:
std::string _content_version_id; ///< &lt;Id&gt; in &lt;ContentVersion&gt;
std::string _content_version_label_text; ///< &lt;LabelText&gt; in &lt;ContentVersion&gt;
std::list<boost::shared_ptr<Reel> > _reels;
+
+ /** Standard of CPL that was read in */
+ boost::optional<Standard> _standard;
};
}
diff --git a/src/dcp.cc b/src/dcp.cc
index 7ec7577f..11146562 100644
--- a/src/dcp.cc
+++ b/src/dcp.cc
@@ -64,6 +64,13 @@ using boost::dynamic_pointer_cast;
using boost::algorithm::starts_with;
using namespace dcp;
+static string const assetmap_interop_ns = "http://www.digicine.com/PROTO-ASDCP-AM-20040311#";
+static string const assetmap_smpte_ns = "http://www.smpte-ra.org/schemas/429-9/2007/AM";
+static string const pkl_interop_ns = "http://www.digicine.com/PROTO-ASDCP-PKL-20040311#";
+static string const pkl_smpte_ns = "http://www.smpte-ra.org/schemas/429-8/2007/PKL";
+static string const volindex_interop_ns = "http://www.digicine.com/PROTO-ASDCP-AM-20040311#";
+static string const volindex_smpte_ns = "http://www.smpte-ra.org/schemas/429-9/2007/AM";
+
DCP::DCP (boost::filesystem::path directory)
: _directory (directory)
{
@@ -74,6 +81,7 @@ DCP::DCP (boost::filesystem::path directory)
_directory = boost::filesystem::canonical (_directory);
}
+/** Call this instead of throwing an exception if the error can be tolerated */
template<class T> void
survivable_error (bool keep_going, dcp::DCP::ReadErrors* errors, T const & e)
{
@@ -101,7 +109,16 @@ DCP::read (bool keep_going, ReadErrors* errors, bool ignore_incorrect_picture_mx
}
cxml::Document asset_map ("AssetMap");
+
asset_map.read_file (asset_map_file);
+ if (asset_map.namespace_uri() == assetmap_interop_ns) {
+ _standard = INTEROP;
+ } else if (asset_map.namespace_uri() == assetmap_smpte_ns) {
+ _standard = SMPTE;
+ } else {
+ boost::throw_exception (XMLError ("Unrecognised Assetmap namespace " + asset_map.namespace_uri()));
+ }
+
list<shared_ptr<cxml::Node> > asset_nodes = asset_map.node_child("AssetList")->node_children ("Asset");
map<string, boost::filesystem::path> paths;
BOOST_FOREACH (shared_ptr<cxml::Node> i, asset_nodes) {
@@ -146,11 +163,23 @@ DCP::read (bool keep_going, ReadErrors* errors, bool ignore_incorrect_picture_mx
delete p;
if (root == "CompositionPlaylist") {
- _cpls.push_back (shared_ptr<CPL> (new CPL (path)));
+ shared_ptr<CPL> cpl (new CPL (path));
+ if (_standard && cpl->standard() && cpl->standard().get() != _standard.get()) {
+ survivable_error (keep_going, errors, MismatchedStandardError ());
+ }
+ _cpls.push_back (cpl);
} else if (root == "DCSubtitle") {
+ if (_standard && _standard.get() == SMPTE) {
+ survivable_error (keep_going, errors, MismatchedStandardError ());
+ }
other_assets.push_back (shared_ptr<InteropSubtitleAsset> (new InteropSubtitleAsset (path)));
}
} else if (boost::filesystem::extension (path) == ".mxf") {
+
+ /* XXX: asdcplib does not appear to support discovery of read MXFs standard
+ (Interop / SMPTE)
+ */
+
ASDCP::EssenceType_t type;
if (ASDCP::EssenceType (path.string().c_str(), type) != ASDCP::RESULT_OK) {
throw DCPReadError ("Could not find essence type");
@@ -270,9 +299,9 @@ DCP::write_pkl (Standard standard, string pkl_uuid, XMLMetadata metadata, shared
xmlpp::Document doc;
xmlpp::Element* pkl;
if (standard == INTEROP) {
- pkl = doc.create_root_node("PackingList", "http://www.digicine.com/PROTO-ASDCP-PKL-20040311#");
+ pkl = doc.create_root_node("PackingList", pkl_interop_ns);
} else {
- pkl = doc.create_root_node("PackingList", "http://www.smpte-ra.org/schemas/429-8/2007/PKL");
+ pkl = doc.create_root_node("PackingList", pkl_smpte_ns);
}
if (signer) {
@@ -325,10 +354,10 @@ DCP::write_volindex (Standard standard) const
switch (standard) {
case INTEROP:
- root = doc.create_root_node ("VolumeIndex", "http://www.digicine.com/PROTO-ASDCP-AM-20040311#");
+ root = doc.create_root_node ("VolumeIndex", volindex_interop_ns);
break;
case SMPTE:
- root = doc.create_root_node ("VolumeIndex", "http://www.smpte-ra.org/schemas/429-9/2007/AM");
+ root = doc.create_root_node ("VolumeIndex", volindex_smpte_ns);
break;
default:
DCP_ASSERT (false);
@@ -359,10 +388,10 @@ DCP::write_assetmap (Standard standard, string pkl_uuid, int pkl_length, XMLMeta
switch (standard) {
case INTEROP:
- root = doc.create_root_node ("AssetMap", "http://www.digicine.com/PROTO-ASDCP-AM-20040311#");
+ root = doc.create_root_node ("AssetMap", assetmap_interop_ns);
break;
case SMPTE:
- root = doc.create_root_node ("AssetMap", "http://www.smpte-ra.org/schemas/429-9/2007/AM");
+ root = doc.create_root_node ("AssetMap", assetmap_smpte_ns);
break;
default:
DCP_ASSERT (false);
diff --git a/src/dcp.h b/src/dcp.h
index 05c2026b..7d6d1567 100644
--- a/src/dcp.h
+++ b/src/dcp.h
@@ -102,6 +102,11 @@ public:
void resolve_refs (std::list<boost::shared_ptr<Asset> > assets);
+ /** @return Standard of a DCP that was read in */
+ boost::optional<Standard> standard () const {
+ return _standard;
+ }
+
private:
/** Write the PKL file.
@@ -126,6 +131,9 @@ private:
boost::filesystem::path _directory;
/** the CPLs that make up this DCP */
std::list<boost::shared_ptr<CPL> > _cpls;
+
+ /** Standard of DCP that was read in */
+ boost::optional<Standard> _standard;
};
}
diff --git a/src/exceptions.cc b/src/exceptions.cc
index ed6edaa4..14ae8e9c 100644
--- a/src/exceptions.cc
+++ b/src/exceptions.cc
@@ -70,3 +70,9 @@ ProgrammingError::ProgrammingError (string file, int line)
{
}
+
+MismatchedStandardError::MismatchedStandardError ()
+ : DCPReadError ("DCP contains both Interop and SMPTE parts")
+{
+
+}
diff --git a/src/exceptions.h b/src/exceptions.h
index 801bfb01..3410337e 100644
--- a/src/exceptions.h
+++ b/src/exceptions.h
@@ -153,6 +153,12 @@ public:
ProgrammingError (std::string file, int line);
};
+class MismatchedStandardError : public DCPReadError
+{
+public:
+ MismatchedStandardError ();
+};
+
}
#endif
diff --git a/src/modified_gamma_transfer_function.h b/src/modified_gamma_transfer_function.h
index e8875d4b..c200743a 100644
--- a/src/modified_gamma_transfer_function.h
+++ b/src/modified_gamma_transfer_function.h
@@ -25,10 +25,15 @@
namespace dcp {
-/** A transfer function which for an input x gives an output y where
+/** A transfer function which for an input x gives a linear output y where
*
* y = x / B for x <= threshold
* y = ((x + A) / (1 + A))^power for x > threshold
+ *
+ * The reverse transform is
+ *
+ * x = y * B for y <= threshold / B
+ * x = (1 + A) * y ^ (1 / power) - A for y > threshold / B
*/
class ModifiedGammaTransferFunction : public TransferFunction
{
diff --git a/test/read_dcp_test.cc b/test/read_dcp_test.cc
index 097d0aa9..60aa3591 100644
--- a/test/read_dcp_test.cc
+++ b/test/read_dcp_test.cc
@@ -18,14 +18,15 @@
*/
#include <boost/test/unit_test.hpp>
+#include <boost/optional/optional_io.hpp>
#include "dcp.h"
#include "cpl.h"
using std::list;
using boost::shared_ptr;
-/** Read DCP that is in git and make sure that basic stuff is read in correctly */
-BOOST_AUTO_TEST_CASE (read_dcp)
+/** Read a SMPTE DCP that is in git and make sure that basic stuff is read in correctly */
+BOOST_AUTO_TEST_CASE (read_dcp_test1)
{
dcp::DCP d ("test/ref/DCP/dcp_test1");
d.read ();
@@ -35,4 +36,21 @@ BOOST_AUTO_TEST_CASE (read_dcp)
BOOST_CHECK_EQUAL (cpls.front()->annotation_text(), "A Test DCP");
BOOST_CHECK_EQUAL (cpls.front()->content_kind(), dcp::FEATURE);
+ BOOST_REQUIRE (d.standard());
+ BOOST_CHECK_EQUAL (d.standard(), dcp::SMPTE);
+}
+
+/** Read an Interop DCP that is in git and make sure that basic stuff is read in correctly */
+BOOST_AUTO_TEST_CASE (read_dcp_test2)
+{
+ dcp::DCP d ("test/ref/DCP/dcp_test3");
+ d.read ();
+
+ list<shared_ptr<dcp::CPL> > cpls = d.cpls ();
+ BOOST_CHECK_EQUAL (cpls.size(), 1);
+
+ BOOST_CHECK_EQUAL (cpls.front()->annotation_text(), "Test_FTR-1_F-119_10_2K_20160524_IOP_OV");
+ BOOST_CHECK_EQUAL (cpls.front()->content_kind(), dcp::FEATURE);
+ BOOST_REQUIRE (d.standard());
+ BOOST_CHECK_EQUAL (d.standard(), dcp::INTEROP);
}
diff --git a/test/ref/DCP/dcp_test1/audio.mxf b/test/ref/DCP/dcp_test1/audio.mxf
index 962cd9c5..9b3fa1d3 100644
--- a/test/ref/DCP/dcp_test1/audio.mxf
+++ b/test/ref/DCP/dcp_test1/audio.mxf
Binary files differ
diff --git a/test/ref/DCP/dcp_test1/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml b/test/ref/DCP/dcp_test1/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml
index 6a57298d..66f86855 100644
--- a/test/ref/DCP/dcp_test1/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml
+++ b/test/ref/DCP/dcp_test1/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
-<CompositionPlaylist xmlns="http://www.smpte-ra.org/schemas/429-7/2006/CPL"><Id>urn:uuid:81fb54df-e1bf-4647-8788-ea7ba154375b</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:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</Id><LabelText>81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</LabelText></ContentVersion><RatingList/><ReelList><Reel><Id>urn:uuid:8e293965-f8ad-48c6-971d-261b01f65cdb</Id><AssetList><MainPicture><Id>urn:uuid:46c3eb45-15e5-47d6-8684-d8641e4dc516</Id><AnnotationText>video.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>EQtZQCRMlzp+/R5/NBN0mNT8f00=</Hash><FrameRate>24 1</FrameRate><ScreenAspectRatio>32 32</ScreenAspectRatio></MainPicture><MainSound><Id>urn:uuid:9482e87d-292d-4e0e-a98d-c61822b60fe9</Id><AnnotationText>audio.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>lR1pCouEkdAX9atvD7z30bsf5iY=</Hash></MainSound></AssetList></Reel></ReelList></CompositionPlaylist>
+<CompositionPlaylist xmlns="http://www.smpte-ra.org/schemas/429-7/2006/CPL"><Id>urn:uuid:81fb54df-e1bf-4647-8788-ea7ba154375b</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:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</Id><LabelText>81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</LabelText></ContentVersion><RatingList/><ReelList><Reel><Id>urn:uuid:8e293965-f8ad-48c6-971d-261b01f65cdb</Id><AssetList><MainPicture><Id>urn:uuid:46c3eb45-15e5-47d6-8684-d8641e4dc516</Id><AnnotationText>video.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>KdrrbczelKFhmvqbhvzFX7Mxiro=</Hash><FrameRate>24 1</FrameRate><ScreenAspectRatio>32 32</ScreenAspectRatio></MainPicture><MainSound><Id>urn:uuid:9482e87d-292d-4e0e-a98d-c61822b60fe9</Id><AnnotationText>audio.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>+dJynGEtjP7cApJ17SNz171iI4A=</Hash></MainSound></AssetList></Reel></ReelList></CompositionPlaylist>
diff --git a/test/ref/DCP/dcp_test1/pkl_18be072e-5a0f-44e1-b2eb-c8a52ae12789.xml b/test/ref/DCP/dcp_test1/pkl_18be072e-5a0f-44e1-b2eb-c8a52ae12789.xml
index a6c5e01b..70c306cb 100644
--- a/test/ref/DCP/dcp_test1/pkl_18be072e-5a0f-44e1-b2eb-c8a52ae12789.xml
+++ b/test/ref/DCP/dcp_test1/pkl_18be072e-5a0f-44e1-b2eb-c8a52ae12789.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
-<PackingList xmlns="http://www.smpte-ra.org/schemas/429-8/2007/PKL"><Id>urn:uuid:18be072e-5a0f-44e1-b2eb-c8a52ae12789</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:81fb54df-e1bf-4647-8788-ea7ba154375b</Id><AnnotationText>81fb54df-e1bf-4647-8788-ea7ba154375b</AnnotationText><Hash>7lk+p7Dui4p2iXx9H3FXDf39aJU=</Hash><Size>1374</Size><Type>text/xml</Type></Asset><Asset><Id>urn:uuid:46c3eb45-15e5-47d6-8684-d8641e4dc516</Id><AnnotationText>46c3eb45-15e5-47d6-8684-d8641e4dc516</AnnotationText><Hash>EQtZQCRMlzp+/R5/NBN0mNT8f00=</Hash><Size>26080</Size><Type>application/mxf</Type></Asset><Asset><Id>urn:uuid:9482e87d-292d-4e0e-a98d-c61822b60fe9</Id><AnnotationText>9482e87d-292d-4e0e-a98d-c61822b60fe9</AnnotationText><Hash>lR1pCouEkdAX9atvD7z30bsf5iY=</Hash><Size>161326</Size><Type>application/mxf</Type></Asset></AssetList></PackingList>
+<PackingList xmlns="http://www.smpte-ra.org/schemas/429-8/2007/PKL"><Id>urn:uuid:18be072e-5a0f-44e1-b2eb-c8a52ae12789</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:81fb54df-e1bf-4647-8788-ea7ba154375b</Id><AnnotationText>81fb54df-e1bf-4647-8788-ea7ba154375b</AnnotationText><Hash>MuWGt5xhauYqqgCNLu7Z4kJV2rY=</Hash><Size>1374</Size><Type>text/xml</Type></Asset><Asset><Id>urn:uuid:46c3eb45-15e5-47d6-8684-d8641e4dc516</Id><AnnotationText>46c3eb45-15e5-47d6-8684-d8641e4dc516</AnnotationText><Hash>KdrrbczelKFhmvqbhvzFX7Mxiro=</Hash><Size>26080</Size><Type>application/mxf</Type></Asset><Asset><Id>urn:uuid:9482e87d-292d-4e0e-a98d-c61822b60fe9</Id><AnnotationText>9482e87d-292d-4e0e-a98d-c61822b60fe9</AnnotationText><Hash>+dJynGEtjP7cApJ17SNz171iI4A=</Hash><Size>161326</Size><Type>application/mxf</Type></Asset></AssetList></PackingList>
diff --git a/test/ref/DCP/dcp_test1/video.mxf b/test/ref/DCP/dcp_test1/video.mxf
index 6683f261..89af834e 100644
--- a/test/ref/DCP/dcp_test1/video.mxf
+++ b/test/ref/DCP/dcp_test1/video.mxf
Binary files differ
diff --git a/test/ref/DCP/dcp_test2/audio.mxf b/test/ref/DCP/dcp_test2/audio.mxf
index 37d96a21..159e939e 100644
--- a/test/ref/DCP/dcp_test2/audio.mxf
+++ b/test/ref/DCP/dcp_test2/audio.mxf
Binary files differ
diff --git a/test/ref/DCP/dcp_test2/cpl_74e205d0-d145-42d2-8c49-7b55d058ca55.xml b/test/ref/DCP/dcp_test2/cpl_74e205d0-d145-42d2-8c49-7b55d058ca55.xml
index e6ac5a2c..fc9ddf58 100644
--- a/test/ref/DCP/dcp_test2/cpl_74e205d0-d145-42d2-8c49-7b55d058ca55.xml
+++ b/test/ref/DCP/dcp_test2/cpl_74e205d0-d145-42d2-8c49-7b55d058ca55.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
-<CompositionPlaylist xmlns="http://www.smpte-ra.org/schemas/429-7/2006/CPL"><Id>urn:uuid:74e205d0-d145-42d2-8c49-7b55d058ca55</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:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</Id><LabelText>81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</LabelText></ContentVersion><RatingList/><ReelList><Reel><Id>urn:uuid:5bdc7da4-eaf1-43e6-854f-7a1175edf94a</Id><AssetList><MainSound><Id>urn:uuid:8ee8f7da-8da2-4adb-ae0e-31e8f4b91900</Id><AnnotationText>audio.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>0PQR7/GXjqssdRnQGrU9eCiOV7g=</Hash></MainSound><msp-cpl:MainStereoscopicPicture xmlns:msp-cpl="http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL"><Id>urn:uuid:63c3aece-c581-4603-b612-75e43f0c0430</Id><AnnotationText>video.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>XFEj7mS4aUASmAW7FvVOY78635c=</Hash><FrameRate>48 1</FrameRate><ScreenAspectRatio>32 32</ScreenAspectRatio></msp-cpl:MainStereoscopicPicture></AssetList></Reel></ReelList></CompositionPlaylist>
+<CompositionPlaylist xmlns="http://www.smpte-ra.org/schemas/429-7/2006/CPL"><Id>urn:uuid:74e205d0-d145-42d2-8c49-7b55d058ca55</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:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</Id><LabelText>81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</LabelText></ContentVersion><RatingList/><ReelList><Reel><Id>urn:uuid:5bdc7da4-eaf1-43e6-854f-7a1175edf94a</Id><AssetList><MainSound><Id>urn:uuid:8ee8f7da-8da2-4adb-ae0e-31e8f4b91900</Id><AnnotationText>audio.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>CzLvlA0Q3LBPVXwmpExzIZq6FNU=</Hash></MainSound><msp-cpl:MainStereoscopicPicture xmlns:msp-cpl="http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL"><Id>urn:uuid:63c3aece-c581-4603-b612-75e43f0c0430</Id><AnnotationText>video.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>N+b+SnIQteLSy5/G+OQAZ9Q6t7o=</Hash><FrameRate>48 1</FrameRate><ScreenAspectRatio>32 32</ScreenAspectRatio></msp-cpl:MainStereoscopicPicture></AssetList></Reel></ReelList></CompositionPlaylist>
diff --git a/test/ref/DCP/dcp_test2/pkl_6d857146-24c9-4626-bc7a-3971b15f1ba4.xml b/test/ref/DCP/dcp_test2/pkl_6d857146-24c9-4626-bc7a-3971b15f1ba4.xml
index 359d93ac..2282d61f 100644
--- a/test/ref/DCP/dcp_test2/pkl_6d857146-24c9-4626-bc7a-3971b15f1ba4.xml
+++ b/test/ref/DCP/dcp_test2/pkl_6d857146-24c9-4626-bc7a-3971b15f1ba4.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
-<PackingList xmlns="http://www.smpte-ra.org/schemas/429-8/2007/PKL"><Id>urn:uuid:6d857146-24c9-4626-bc7a-3971b15f1ba4</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:74e205d0-d145-42d2-8c49-7b55d058ca55</Id><AnnotationText>74e205d0-d145-42d2-8c49-7b55d058ca55</AnnotationText><Hash>TMjMV2hPJ3htTKFMCce22FVNjgY=</Hash><Size>1498</Size><Type>text/xml</Type></Asset><Asset><Id>urn:uuid:63c3aece-c581-4603-b612-75e43f0c0430</Id><AnnotationText>63c3aece-c581-4603-b612-75e43f0c0430</AnnotationText><Hash>XFEj7mS4aUASmAW7FvVOY78635c=</Hash><Size>35032</Size><Type>application/mxf</Type></Asset><Asset><Id>urn:uuid:8ee8f7da-8da2-4adb-ae0e-31e8f4b91900</Id><AnnotationText>8ee8f7da-8da2-4adb-ae0e-31e8f4b91900</AnnotationText><Hash>0PQR7/GXjqssdRnQGrU9eCiOV7g=</Hash><Size>161326</Size><Type>application/mxf</Type></Asset></AssetList></PackingList>
+<PackingList xmlns="http://www.smpte-ra.org/schemas/429-8/2007/PKL"><Id>urn:uuid:6d857146-24c9-4626-bc7a-3971b15f1ba4</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:74e205d0-d145-42d2-8c49-7b55d058ca55</Id><AnnotationText>74e205d0-d145-42d2-8c49-7b55d058ca55</AnnotationText><Hash>MN0fuzu6C9GC+4RajgXQ4EYG4hg=</Hash><Size>1498</Size><Type>text/xml</Type></Asset><Asset><Id>urn:uuid:63c3aece-c581-4603-b612-75e43f0c0430</Id><AnnotationText>63c3aece-c581-4603-b612-75e43f0c0430</AnnotationText><Hash>N+b+SnIQteLSy5/G+OQAZ9Q6t7o=</Hash><Size>35032</Size><Type>application/mxf</Type></Asset><Asset><Id>urn:uuid:8ee8f7da-8da2-4adb-ae0e-31e8f4b91900</Id><AnnotationText>8ee8f7da-8da2-4adb-ae0e-31e8f4b91900</AnnotationText><Hash>CzLvlA0Q3LBPVXwmpExzIZq6FNU=</Hash><Size>161326</Size><Type>application/mxf</Type></Asset></AssetList></PackingList>
diff --git a/test/ref/DCP/dcp_test2/video.mxf b/test/ref/DCP/dcp_test2/video.mxf
index d5846832..11496390 100644
--- a/test/ref/DCP/dcp_test2/video.mxf
+++ b/test/ref/DCP/dcp_test2/video.mxf
Binary files differ
diff --git a/test/ref/DCP/dcp_test3/ASSETMAP b/test/ref/DCP/dcp_test3/ASSETMAP
new file mode 100644
index 00000000..6b4de017
--- /dev/null
+++ b/test/ref/DCP/dcp_test3/ASSETMAP
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<AssetMap xmlns="http://www.digicine.com/PROTO-ASDCP-AM-20040311#"><Id>urn:uuid:fe6cc6ff-05f8-435e-9486-7ce432f3855a</Id><AnnotationText>Created by DCP-o-matic 2.8.4devel 4ba821a8b0</AnnotationText><VolumeCount>1</VolumeCount><IssueDate>2016-05-24T10:56:58+01:00</IssueDate><Issuer>DCP-o-matic 2.8.4devel 4ba821a8b0</Issuer><Creator>DCP-o-matic 2.8.4devel 4ba821a8b0</Creator><AssetList><Asset><Id>urn:uuid:d87a950c-bd6f-41f6-90cc-56ccd673e131</Id><PackingList>true</PackingList><ChunkList><Chunk><Path>pkl_d87a950c-bd6f-41f6-90cc-56ccd673e131.xml</Path><VolumeIndex>1</VolumeIndex><Offset>0</Offset><Length>8175</Length></Chunk></ChunkList></Asset><Asset><Id>urn:uuid:cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296</Id><ChunkList><Chunk><Path>cpl_cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296.xml</Path><VolumeIndex>1</VolumeIndex><Offset>0</Offset><Length>8542</Length></Chunk></ChunkList></Asset><Asset><Id>urn:uuid:c6035f97-b07d-4e1c-944d-603fc2ddc242</Id><ChunkList><Chunk><Path>j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf</Path><VolumeIndex>1</VolumeIndex><Offset>0</Offset><Length>561776</Length></Chunk></ChunkList></Asset><Asset><Id>urn:uuid:69cf9eaf-9a99-4776-b022-6902208626c3</Id><ChunkList><Chunk><Path>pcm_69cf9eaf-9a99-4776-b022-6902208626c3.mxf</Path><VolumeIndex>1</VolumeIndex><Offset>0</Offset><Length>881174</Length></Chunk></ChunkList></Asset></AssetList></AssetMap>
diff --git a/test/ref/DCP/dcp_test3/VOLINDEX b/test/ref/DCP/dcp_test3/VOLINDEX
new file mode 100644
index 00000000..49dd7ecc
--- /dev/null
+++ b/test/ref/DCP/dcp_test3/VOLINDEX
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VolumeIndex xmlns="http://www.digicine.com/PROTO-ASDCP-AM-20040311#"><Index>1</Index></VolumeIndex>
diff --git a/test/ref/DCP/dcp_test3/cpl_cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296.xml b/test/ref/DCP/dcp_test3/cpl_cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296.xml
new file mode 100644
index 00000000..8185ddb1
--- /dev/null
+++ b/test/ref/DCP/dcp_test3/cpl_cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CompositionPlaylist xmlns="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><Id>urn:uuid:cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296</Id><AnnotationText>Test_FTR-1_F-119_10_2K_20160524_IOP_OV</AnnotationText><IssueDate>2016-05-24T10:56:58+01:00</IssueDate><Issuer>DCP-o-matic 2.8.4devel 4ba821a8b0</Issuer><Creator>DCP-o-matic 2.8.4devel 4ba821a8b0</Creator><ContentTitleText>Test_FTR-1_F-119_10_2K_20160524_IOP_OV</ContentTitleText><ContentKind>feature</ContentKind><ContentVersion><Id>urn:uuid:dc199ce3-c0ab-4e4c-84fa-7f2e5b34a4af</Id><LabelText>urn:uuid:dc199ce3-c0ab-4e4c-84fa-7f2e5b34a4af2016-05-24T10:56:58+01:00</LabelText></ContentVersion><RatingList/><ReelList><Reel><Id>urn:uuid:439ff814-0e1b-44ab-9165-2b265b355f20</Id><AssetList><MainPicture><Id>urn:uuid:c6035f97-b07d-4e1c-944d-603fc2ddc242</Id><AnnotationText>j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>42m6Sxyk+CT/aq0dEnjGXX//AjA=</Hash><FrameRate>24 1</FrameRate><ScreenAspectRatio>1.85</ScreenAspectRatio></MainPicture><MainSound><Id>urn:uuid:69cf9eaf-9a99-4776-b022-6902208626c3</Id><AnnotationText>pcm_69cf9eaf-9a99-4776-b022-6902208626c3.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><Hash>a+7/nC9SIvCIziRyH9BXOr4r0fk=</Hash></MainSound></AssetList></Reel></ReelList><Signer><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=FZN\+C9r\+P8srz0\+uH45JHcDHb0g=,CN=.dcpomatic.smpte-430-2.INTERMEDIATE,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName><dsig:X509SerialNumber>7</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509SubjectName>dnQualifier=S9Mf7OiiXsCV2LGoSr1LKsRcat0=,CN=CS.dcpomatic.smpte-430-2.LEAF,OU=dcpomatic.com,O=dcpomatic.com</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/2000/09/xmldsig#rsa-sha1"/><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>D4hqt7drQ3mOOk9N7uQ4h3I8skc=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>KF8cjLvn5dwNxzHUXxT/ux479kEJmakBb2y6VCJ7scbH50NKVfDaufxMDf8Owt7A
+RKy0yGTo9IzOcooBUDbtQypKxZEN2I9zPOWBSsgFRthMPODbJ9oHa5i0JoiHePW6
+pn/jrEI62WoF6O7+u2Y1WAGY/aERJyD285387OXLWHVjKOQtG2MoorbRyIBtG6vL
+g6lYum8B/etyKxoJ5Rpc6BMqe/X+6kGtgxmrEqOaDuEm49GMw4c1sXqjE6/NtOUo
+gE7oBooOzKw9J2GKv4haUwbauVaezyDXBQRHOWJ4WGRRhfbmP93ouKsr0ZqohbGQ
+4xovNoDaN513KXzGSo/87g==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=FZN\+C9r\+P8srz0\+uH45JHcDHb0g=,CN=.dcpomatic.smpte-430-2.INTERMEDIATE,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName><dsig:X509SerialNumber>7</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEaTCCA1GgAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBhTEWMBQGA1UECgwNZGNw
+b21hdGljLmNvbTEWMBQGA1UECwwNZGNwb21hdGljLmNvbTEsMCoGA1UEAwwjLmRj
+cG9tYXRpYy5zbXB0ZS00MzAtMi5JTlRFUk1FRElBVEUxJTAjBgNVBC4THEZaTitD
+OXIrUDhzcnowK3VINDVKSGNESGIwZz0wHhcNMTYwNTE2MTIyNjA4WhcNMjYwNTEy
+MTIyNjA4WjB/MRYwFAYDVQQKDA1kY3BvbWF0aWMuY29tMRYwFAYDVQQLDA1kY3Bv
+bWF0aWMuY29tMSYwJAYDVQQDDB1DUy5kY3BvbWF0aWMuc21wdGUtNDMwLTIuTEVB
+RjElMCMGA1UELhMcUzlNZjdPaWlYc0NWMkxHb1NyMUxLc1JjYXQwPTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxEJwAKDOwDLron0tTs+uMYdFBXCUsq
+Y+wxFhQCkuAgnD8evF91kUIBd79W0fd3XByGj6tyi5S0JOIYtDmq8bA3RnpQ/R9S
+KQKESnHtt9Zptxk5KbIUUShiEBTTLfeLtubn8IFqgsarPEJPdXyjvzzyNEqbWpW0
+SVYC09/GzhOFjRzikAdG+MrWa93xGyf7/Bonmt4Z/pE2C+Enq7Oj0ascBYtWDB9T
+U5IihXvo9VcAfiXWQlDoWrCP+YxjwRgMByh21RGJxdtqwV6KaBhmCEy976IVr8VW
+DLmq8c5Nnz6vwypGCbdtLFr9Gxd93JbA+KPvXp7zx6d5+WfOJx8sE4sCAwEAAaOB
+6DCB5TAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIFoDAdBgNVHQ4EFgQUS9Mf7Oii
+XsCV2LGoSr1LKsRcat0wgagGA1UdIwSBoDCBnYAUFZN+C9r+P8srz0+uH45JHcDH
+b0ihgYGkfzB9MRYwFAYDVQQKDA1kY3BvbWF0aWMuY29tMRYwFAYDVQQLDA1kY3Bv
+bWF0aWMuY29tMSQwIgYDVQQDDBsuZGNwb21hdGljLnNtcHRlLTQzMC0yLlJPT1Qx
+JTAjBgNVBC4THEFPZ0tWZU1nNk5JbUNFWDNVTzEzUGlrK0l2cz2CAQYwDQYJKoZI
+hvcNAQELBQADggEBAK2GcL7gKu6C/deJtQqZgeM/hHXEpo+jRwBuOe6D5Z7CN2O3
+DuhO54otN+mL6ImyrUvDZCoJa70gdnjLzrx8soBHXQ8IgMUh5+HItUYbX/U+vnTK
+f8Ox1XybZenYNi8quwuodGBBZOWbXjLiMdVKkrCSjOiQRG6dCyFLIUZH/lsCETRI
+7E+bdQmIh3+tiUtQar2D4kO2G1GrMKzpGWL1Vap6vEK2Lrvj8xQNmDT6VOUGE3Yz
+qx0kHkPEYazi8aX/h7VG/ikTtR9Y57UNJTs7pG7EUIQZPRjaSptTQsB1qAP6ZsH8
++Ko1kgIe6OKqckVkZyZDqM1LlgbC+3cRk5bf6/E=</dsig:X509Certificate></dsig:X509Data><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=AOgKVeMg6NImCEX3UO13Pik\+Ivs=,CN=.dcpomatic.smpte-430-2.ROOT,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName><dsig:X509SerialNumber>6</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEbTCCA1WgAwIBAgIBBjANBgkqhkiG9w0BAQsFADB9MRYwFAYDVQQKDA1kY3Bv
+bWF0aWMuY29tMRYwFAYDVQQLDA1kY3BvbWF0aWMuY29tMSQwIgYDVQQDDBsuZGNw
+b21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4THEFPZ0tWZU1nNk5JbUNF
+WDNVTzEzUGlrK0l2cz0wHhcNMTYwNTE2MTIyNjA4WhcNMjYwNTEzMTIyNjA4WjCB
+hTEWMBQGA1UECgwNZGNwb21hdGljLmNvbTEWMBQGA1UECwwNZGNwb21hdGljLmNv
+bTEsMCoGA1UEAwwjLmRjcG9tYXRpYy5zbXB0ZS00MzAtMi5JTlRFUk1FRElBVEUx
+JTAjBgNVBC4THEZaTitDOXIrUDhzcnowK3VINDVKSGNESGIwZz0wggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0io5HerL+iBGM+CWbpq5ZaTu35dA5Gp79
+iGl8J0S2tgzkkX5lXyJTtI5GZYMtaJWHwQYtbpmYsOxvhc4Xv/Jhfr0fPwQTFZTW
+2jJQaLg2wno4SbP2mNU5QBCqPPkPvoNAmu0fqWmkBX8HAEIrYHxDDR4e/ZgEEnJp
+D1RpwiMxVX9dCvtcmr8vqz8PSQ5xBJA+tw8WJgV+T/woDEvYZ9t65O4Opg70TGWS
+hNRCJc7NUXP354zutfLjibLNyScQCf37ssh/2P8rp1+JdIxYqEhOIKNox9eHeBOT
+P54W685/KJ8GGsHc+sKydMzJIu4HkVqHhY5WSLc2wj/07Hq59tffAgMBAAGjge4w
+geswEgYDVR0TAQH/BAgwBgEB/wIBAjALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFBWT
+fgva/j/LK89Prh+OSR3Ax29IMIGoBgNVHSMEgaAwgZ2AFADoClXjIOjSJghF91Dt
+dz4pPiL7oYGBpH8wfTEWMBQGA1UECgwNZGNwb21hdGljLmNvbTEWMBQGA1UECwwN
+ZGNwb21hdGljLmNvbTEkMCIGA1UEAwwbLmRjcG9tYXRpYy5zbXB0ZS00MzAtMi5S
+T09UMSUwIwYDVQQuExxBT2dLVmVNZzZOSW1DRVgzVU8xM1BpaytJdnM9ggEFMA0G
+CSqGSIb3DQEBCwUAA4IBAQCYfqgS0+IPUUOgnYp59XXJxDq8sFE+eq0CTueJYgNQ
+NglLhxz5jg+BsaFgK+yrcZNewNFTmXoXzJVAa2SjMscekk3qatJetFOcuidyo35b
+Gp5tCQ+hZgVbzj29k7SAWzxZuSjcq3thjdvuC3pqqtd5W4MKXs4Tq8636NaR4rdi
++7/PCOznwmvBPLil0HjStWLuICNSauNarlvnloz6/hrik8XLKy5aXoFzKqW47T/C
+lSymaosY/U/1U/UbwsACVtZ5l29SNeVfLT3AkLokskuP1ceIWzi/2biTbErUIQaM
+SnqVheFcP0A/FDF6ql+okHDFuN0TsehGX9p17zuxGcN5</dsig:X509Certificate></dsig:X509Data><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=AOgKVeMg6NImCEX3UO13Pik\+Ivs=,CN=.dcpomatic.smpte-430-2.ROOT,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName><dsig:X509SerialNumber>5</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEZDCCA0ygAwIBAgIBBTANBgkqhkiG9w0BAQsFADB9MRYwFAYDVQQKDA1kY3Bv
+bWF0aWMuY29tMRYwFAYDVQQLDA1kY3BvbWF0aWMuY29tMSQwIgYDVQQDDBsuZGNw
+b21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4THEFPZ0tWZU1nNk5JbUNF
+WDNVTzEzUGlrK0l2cz0wHhcNMTYwNTE2MTIyNjA4WhcNMjYwNTE0MTIyNjA4WjB9
+MRYwFAYDVQQKDA1kY3BvbWF0aWMuY29tMRYwFAYDVQQLDA1kY3BvbWF0aWMuY29t
+MSQwIgYDVQQDDBsuZGNwb21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4T
+HEFPZ0tWZU1nNk5JbUNFWDNVTzEzUGlrK0l2cz0wggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDjajsB3pAAVr+/ZpUBHDIUTumgjvnCZRBxoYoRUjaH0wWG
+UnbRU4DVh/0JcpZo3fcgpOhv34WPq+UHpXj/So2eMwiZIlx4EC/F8VqQkiXohJEE
+JNKcDbLKLoQEs2sNayZ1SF0IY7D57CGifHMIUpZRwyv1LYweVbP7nIsvBxhoABg3
+8li3azYXiFgEGbjkmHOVyy3kR+SLn+PQ99qGhc6Qh7fR2aduDqHl971LKwpfoKqy
+WoE62x8XrK1udWqmZNhvxvfh0YIXNyEJ0nVae77y/iiBLiVMQq81QQioGZblBD2n
+um8gCuwsCay1Md9++D7Hzzc695LH8Ntx2elhtl/DAgMBAAGjge4wgeswEgYDVR0T
+AQH/BAgwBgEB/wIBAzALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFADoClXjIOjSJghF
+91Dtdz4pPiL7MIGoBgNVHSMEgaAwgZ2AFADoClXjIOjSJghF91Dtdz4pPiL7oYGB
+pH8wfTEWMBQGA1UECgwNZGNwb21hdGljLmNvbTEWMBQGA1UECwwNZGNwb21hdGlj
+LmNvbTEkMCIGA1UEAwwbLmRjcG9tYXRpYy5zbXB0ZS00MzAtMi5ST09UMSUwIwYD
+VQQuExxBT2dLVmVNZzZOSW1DRVgzVU8xM1BpaytJdnM9ggEFMA0GCSqGSIb3DQEB
+CwUAA4IBAQCT59b0YpNVyW2L19k69rqkzvSAB08mNhDkzWF66zAqtI9GT5ZEPSTn
+U/84icV7EAFGyuSXjUnQNHyV5fIJu68vrg+dAHhRYKUi2xPgxHPKpxuPmmzKeqCw
+UgCoV802RQNVFMwUo0khOi7LLsvOb3FDkA0yLflngOCBmLdKMBZJPrcAVO++qWJB
+gpkZkt5Q7snLsw4oLvLklL4wdX8qkn2PUiZohY5r68kIalEg89MZXtFiWWTh3K9R
+vr++lap40maqjMFG0xFO/K7Ujyc19m03fVRhCEZJIyyE7jJFis669Jh/IlF6UyrD
+rm43765q3A5P1Y6iCVbprbuPbZ6VE/CJ</dsig:X509Certificate></dsig:X509Data></dsig:KeyInfo></dsig:Signature></CompositionPlaylist>
diff --git a/test/ref/DCP/dcp_test3/j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf b/test/ref/DCP/dcp_test3/j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf
new file mode 100644
index 00000000..f1907030
--- /dev/null
+++ b/test/ref/DCP/dcp_test3/j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf
Binary files differ
diff --git a/test/ref/DCP/dcp_test3/pcm_69cf9eaf-9a99-4776-b022-6902208626c3.mxf b/test/ref/DCP/dcp_test3/pcm_69cf9eaf-9a99-4776-b022-6902208626c3.mxf
new file mode 100644
index 00000000..fccb2ef0
--- /dev/null
+++ b/test/ref/DCP/dcp_test3/pcm_69cf9eaf-9a99-4776-b022-6902208626c3.mxf
Binary files differ
diff --git a/test/ref/DCP/dcp_test3/pkl_d87a950c-bd6f-41f6-90cc-56ccd673e131.xml b/test/ref/DCP/dcp_test3/pkl_d87a950c-bd6f-41f6-90cc-56ccd673e131.xml
new file mode 100644
index 00000000..a795c95c
--- /dev/null
+++ b/test/ref/DCP/dcp_test3/pkl_d87a950c-bd6f-41f6-90cc-56ccd673e131.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<PackingList xmlns="http://www.digicine.com/PROTO-ASDCP-PKL-20040311#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><Id>urn:uuid:d87a950c-bd6f-41f6-90cc-56ccd673e131</Id><AnnotationText>Test_FTR-1_F-119_10_2K_20160524_IOP_OV</AnnotationText><IssueDate>2016-05-24T10:56:58+01:00</IssueDate><Issuer>DCP-o-matic 2.8.4devel 4ba821a8b0</Issuer><Creator>DCP-o-matic 2.8.4devel 4ba821a8b0</Creator><AssetList><Asset><Id>urn:uuid:cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296</Id><AnnotationText>cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296</AnnotationText><Hash>1MZ0cQr217LcIgobkC1/emgJrTU=</Hash><Size>8542</Size><Type>text/xml;asdcpKind=CPL</Type></Asset><Asset><Id>urn:uuid:c6035f97-b07d-4e1c-944d-603fc2ddc242</Id><AnnotationText>c6035f97-b07d-4e1c-944d-603fc2ddc242</AnnotationText><Hash>42m6Sxyk+CT/aq0dEnjGXX//AjA=</Hash><Size>561776</Size><Type>application/x-smpte-mxf;asdcpKind=Picture</Type></Asset><Asset><Id>urn:uuid:69cf9eaf-9a99-4776-b022-6902208626c3</Id><AnnotationText>69cf9eaf-9a99-4776-b022-6902208626c3</AnnotationText><Hash>a+7/nC9SIvCIziRyH9BXOr4r0fk=</Hash><Size>881174</Size><Type>application/x-smpte-mxf;asdcpKind=Sound</Type></Asset></AssetList><Signer><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=FZN\+C9r\+P8srz0\+uH45JHcDHb0g=,CN=.dcpomatic.smpte-430-2.INTERMEDIATE,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName><dsig:X509SerialNumber>7</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509SubjectName>dnQualifier=S9Mf7OiiXsCV2LGoSr1LKsRcat0=,CN=CS.dcpomatic.smpte-430-2.LEAF,OU=dcpomatic.com,O=dcpomatic.com</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/2000/09/xmldsig#rsa-sha1"/><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>avzD/rIrawR3OhFlc4RNgYKC3UY=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>rEKXBDgklh0uiEeOeMipEixNdjBlSX3/9Urq822IXQDwm9Ty9fevo5LlfBqHsghD
+0dh6N5il0CTn5LvokmuKcRjOdn5gEntpxfJvXLVZqMTVBxSgbuQMkVxKQYucx70k
++wP62PpMvOdPI7Aro+CeyTf0mwS5u/w2YMvGahR/gvlwgw32Lf3Ebe0KWHbG0lbd
+zdfm3R7x2zb6XY4OB6TtH80JaIozyCe+Hs1ie7JmeXRBdxXZpGpNfhZ5+1Xw/Abm
+x+FAb07KijyxMhtLRqFN/qBeEu68XChbjDK6zxKCUiuNS5I6Kh6DodMuOE9JpMSl
+UZpVSCjsIVFd1kL8eFdvSA==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=FZN\+C9r\+P8srz0\+uH45JHcDHb0g=,CN=.dcpomatic.smpte-430-2.INTERMEDIATE,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName><dsig:X509SerialNumber>7</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEaTCCA1GgAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBhTEWMBQGA1UECgwNZGNw
+b21hdGljLmNvbTEWMBQGA1UECwwNZGNwb21hdGljLmNvbTEsMCoGA1UEAwwjLmRj
+cG9tYXRpYy5zbXB0ZS00MzAtMi5JTlRFUk1FRElBVEUxJTAjBgNVBC4THEZaTitD
+OXIrUDhzcnowK3VINDVKSGNESGIwZz0wHhcNMTYwNTE2MTIyNjA4WhcNMjYwNTEy
+MTIyNjA4WjB/MRYwFAYDVQQKDA1kY3BvbWF0aWMuY29tMRYwFAYDVQQLDA1kY3Bv
+bWF0aWMuY29tMSYwJAYDVQQDDB1DUy5kY3BvbWF0aWMuc21wdGUtNDMwLTIuTEVB
+RjElMCMGA1UELhMcUzlNZjdPaWlYc0NWMkxHb1NyMUxLc1JjYXQwPTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxEJwAKDOwDLron0tTs+uMYdFBXCUsq
+Y+wxFhQCkuAgnD8evF91kUIBd79W0fd3XByGj6tyi5S0JOIYtDmq8bA3RnpQ/R9S
+KQKESnHtt9Zptxk5KbIUUShiEBTTLfeLtubn8IFqgsarPEJPdXyjvzzyNEqbWpW0
+SVYC09/GzhOFjRzikAdG+MrWa93xGyf7/Bonmt4Z/pE2C+Enq7Oj0ascBYtWDB9T
+U5IihXvo9VcAfiXWQlDoWrCP+YxjwRgMByh21RGJxdtqwV6KaBhmCEy976IVr8VW
+DLmq8c5Nnz6vwypGCbdtLFr9Gxd93JbA+KPvXp7zx6d5+WfOJx8sE4sCAwEAAaOB
+6DCB5TAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIFoDAdBgNVHQ4EFgQUS9Mf7Oii
+XsCV2LGoSr1LKsRcat0wgagGA1UdIwSBoDCBnYAUFZN+C9r+P8srz0+uH45JHcDH
+b0ihgYGkfzB9MRYwFAYDVQQKDA1kY3BvbWF0aWMuY29tMRYwFAYDVQQLDA1kY3Bv
+bWF0aWMuY29tMSQwIgYDVQQDDBsuZGNwb21hdGljLnNtcHRlLTQzMC0yLlJPT1Qx
+JTAjBgNVBC4THEFPZ0tWZU1nNk5JbUNFWDNVTzEzUGlrK0l2cz2CAQYwDQYJKoZI
+hvcNAQELBQADggEBAK2GcL7gKu6C/deJtQqZgeM/hHXEpo+jRwBuOe6D5Z7CN2O3
+DuhO54otN+mL6ImyrUvDZCoJa70gdnjLzrx8soBHXQ8IgMUh5+HItUYbX/U+vnTK
+f8Ox1XybZenYNi8quwuodGBBZOWbXjLiMdVKkrCSjOiQRG6dCyFLIUZH/lsCETRI
+7E+bdQmIh3+tiUtQar2D4kO2G1GrMKzpGWL1Vap6vEK2Lrvj8xQNmDT6VOUGE3Yz
+qx0kHkPEYazi8aX/h7VG/ikTtR9Y57UNJTs7pG7EUIQZPRjaSptTQsB1qAP6ZsH8
++Ko1kgIe6OKqckVkZyZDqM1LlgbC+3cRk5bf6/E=</dsig:X509Certificate></dsig:X509Data><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=AOgKVeMg6NImCEX3UO13Pik\+Ivs=,CN=.dcpomatic.smpte-430-2.ROOT,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName><dsig:X509SerialNumber>6</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEbTCCA1WgAwIBAgIBBjANBgkqhkiG9w0BAQsFADB9MRYwFAYDVQQKDA1kY3Bv
+bWF0aWMuY29tMRYwFAYDVQQLDA1kY3BvbWF0aWMuY29tMSQwIgYDVQQDDBsuZGNw
+b21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4THEFPZ0tWZU1nNk5JbUNF
+WDNVTzEzUGlrK0l2cz0wHhcNMTYwNTE2MTIyNjA4WhcNMjYwNTEzMTIyNjA4WjCB
+hTEWMBQGA1UECgwNZGNwb21hdGljLmNvbTEWMBQGA1UECwwNZGNwb21hdGljLmNv
+bTEsMCoGA1UEAwwjLmRjcG9tYXRpYy5zbXB0ZS00MzAtMi5JTlRFUk1FRElBVEUx
+JTAjBgNVBC4THEZaTitDOXIrUDhzcnowK3VINDVKSGNESGIwZz0wggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0io5HerL+iBGM+CWbpq5ZaTu35dA5Gp79
+iGl8J0S2tgzkkX5lXyJTtI5GZYMtaJWHwQYtbpmYsOxvhc4Xv/Jhfr0fPwQTFZTW
+2jJQaLg2wno4SbP2mNU5QBCqPPkPvoNAmu0fqWmkBX8HAEIrYHxDDR4e/ZgEEnJp
+D1RpwiMxVX9dCvtcmr8vqz8PSQ5xBJA+tw8WJgV+T/woDEvYZ9t65O4Opg70TGWS
+hNRCJc7NUXP354zutfLjibLNyScQCf37ssh/2P8rp1+JdIxYqEhOIKNox9eHeBOT
+P54W685/KJ8GGsHc+sKydMzJIu4HkVqHhY5WSLc2wj/07Hq59tffAgMBAAGjge4w
+geswEgYDVR0TAQH/BAgwBgEB/wIBAjALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFBWT
+fgva/j/LK89Prh+OSR3Ax29IMIGoBgNVHSMEgaAwgZ2AFADoClXjIOjSJghF91Dt
+dz4pPiL7oYGBpH8wfTEWMBQGA1UECgwNZGNwb21hdGljLmNvbTEWMBQGA1UECwwN
+ZGNwb21hdGljLmNvbTEkMCIGA1UEAwwbLmRjcG9tYXRpYy5zbXB0ZS00MzAtMi5S
+T09UMSUwIwYDVQQuExxBT2dLVmVNZzZOSW1DRVgzVU8xM1BpaytJdnM9ggEFMA0G
+CSqGSIb3DQEBCwUAA4IBAQCYfqgS0+IPUUOgnYp59XXJxDq8sFE+eq0CTueJYgNQ
+NglLhxz5jg+BsaFgK+yrcZNewNFTmXoXzJVAa2SjMscekk3qatJetFOcuidyo35b
+Gp5tCQ+hZgVbzj29k7SAWzxZuSjcq3thjdvuC3pqqtd5W4MKXs4Tq8636NaR4rdi
++7/PCOznwmvBPLil0HjStWLuICNSauNarlvnloz6/hrik8XLKy5aXoFzKqW47T/C
+lSymaosY/U/1U/UbwsACVtZ5l29SNeVfLT3AkLokskuP1ceIWzi/2biTbErUIQaM
+SnqVheFcP0A/FDF6ql+okHDFuN0TsehGX9p17zuxGcN5</dsig:X509Certificate></dsig:X509Data><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=AOgKVeMg6NImCEX3UO13Pik\+Ivs=,CN=.dcpomatic.smpte-430-2.ROOT,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName><dsig:X509SerialNumber>5</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIIEZDCCA0ygAwIBAgIBBTANBgkqhkiG9w0BAQsFADB9MRYwFAYDVQQKDA1kY3Bv
+bWF0aWMuY29tMRYwFAYDVQQLDA1kY3BvbWF0aWMuY29tMSQwIgYDVQQDDBsuZGNw
+b21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4THEFPZ0tWZU1nNk5JbUNF
+WDNVTzEzUGlrK0l2cz0wHhcNMTYwNTE2MTIyNjA4WhcNMjYwNTE0MTIyNjA4WjB9
+MRYwFAYDVQQKDA1kY3BvbWF0aWMuY29tMRYwFAYDVQQLDA1kY3BvbWF0aWMuY29t
+MSQwIgYDVQQDDBsuZGNwb21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4T
+HEFPZ0tWZU1nNk5JbUNFWDNVTzEzUGlrK0l2cz0wggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDjajsB3pAAVr+/ZpUBHDIUTumgjvnCZRBxoYoRUjaH0wWG
+UnbRU4DVh/0JcpZo3fcgpOhv34WPq+UHpXj/So2eMwiZIlx4EC/F8VqQkiXohJEE
+JNKcDbLKLoQEs2sNayZ1SF0IY7D57CGifHMIUpZRwyv1LYweVbP7nIsvBxhoABg3
+8li3azYXiFgEGbjkmHOVyy3kR+SLn+PQ99qGhc6Qh7fR2aduDqHl971LKwpfoKqy
+WoE62x8XrK1udWqmZNhvxvfh0YIXNyEJ0nVae77y/iiBLiVMQq81QQioGZblBD2n
+um8gCuwsCay1Md9++D7Hzzc695LH8Ntx2elhtl/DAgMBAAGjge4wgeswEgYDVR0T
+AQH/BAgwBgEB/wIBAzALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFADoClXjIOjSJghF
+91Dtdz4pPiL7MIGoBgNVHSMEgaAwgZ2AFADoClXjIOjSJghF91Dtdz4pPiL7oYGB
+pH8wfTEWMBQGA1UECgwNZGNwb21hdGljLmNvbTEWMBQGA1UECwwNZGNwb21hdGlj
+LmNvbTEkMCIGA1UEAwwbLmRjcG9tYXRpYy5zbXB0ZS00MzAtMi5ST09UMSUwIwYD
+VQQuExxBT2dLVmVNZzZOSW1DRVgzVU8xM1BpaytJdnM9ggEFMA0GCSqGSIb3DQEB
+CwUAA4IBAQCT59b0YpNVyW2L19k69rqkzvSAB08mNhDkzWF66zAqtI9GT5ZEPSTn
+U/84icV7EAFGyuSXjUnQNHyV5fIJu68vrg+dAHhRYKUi2xPgxHPKpxuPmmzKeqCw
+UgCoV802RQNVFMwUo0khOi7LLsvOb3FDkA0yLflngOCBmLdKMBZJPrcAVO++qWJB
+gpkZkt5Q7snLsw4oLvLklL4wdX8qkn2PUiZohY5r68kIalEg89MZXtFiWWTh3K9R
+vr++lap40maqjMFG0xFO/K7Ujyc19m03fVRhCEZJIyyE7jJFis669Jh/IlF6UyrD
+rm43765q3A5P1Y6iCVbprbuPbZ6VE/CJ</dsig:X509Certificate></dsig:X509Data></dsig:KeyInfo></dsig:Signature></PackingList>
diff --git a/test/ref/DCP/encryption_test/audio.mxf b/test/ref/DCP/encryption_test/audio.mxf
index c8732178..ca2e5b9e 100644
--- a/test/ref/DCP/encryption_test/audio.mxf
+++ b/test/ref/DCP/encryption_test/audio.mxf
Binary files differ
diff --git a/test/ref/DCP/encryption_test/cpl_cdecf5ab-b688-4842-bd60-0c9f5ce56e8c.xml b/test/ref/DCP/encryption_test/cpl_cdecf5ab-b688-4842-bd60-0c9f5ce56e8c.xml
index da3ecce8..6b93cd97 100644
--- a/test/ref/DCP/encryption_test/cpl_cdecf5ab-b688-4842-bd60-0c9f5ce56e8c.xml
+++ b/test/ref/DCP/encryption_test/cpl_cdecf5ab-b688-4842-bd60-0c9f5ce56e8c.xml
@@ -1,10 +1,10 @@
<?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:cdecf5ab-b688-4842-bd60-0c9f5ce56e8c</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:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</Id><LabelText>81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</LabelText></ContentVersion><RatingList/><ReelList><Reel><Id>urn:uuid:6f02ec2d-2a2d-437d-9391-daa7301b6910</Id><AssetList><MainPicture><Id>urn:uuid:a12d2c1f-0daa-4a30-a4cd-c4266ac172a7</Id><AnnotationText>video.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><KeyId>urn:uuid:aa157ca6-e3e3-4b6c-a7b6-50f52fcafb7f</KeyId><Hash>1zYFnwI6KdSxS0Mm1yfpPE5icSg=</Hash><FrameRate>24 1</FrameRate><ScreenAspectRatio>32 32</ScreenAspectRatio></MainPicture><MainSound><Id>urn:uuid:f020346e-84f4-4f1e-a3b7-f7aeb57696a4</Id><AnnotationText>audio.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><KeyId>urn:uuid:938f5140-bb1c-46ce-9078-e099ebbf04bf</KeyId><Hash>0enoS4UijgH3ybt2jiW/L0iS5e4=</Hash></MainSound></AssetList></Reel></ReelList><Signer><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=6eat8r33US71avuQEojmH\+bjk84=,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=QFVlym7fuql6bPOnY38aaO1ZPW4=,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>8tV8YSqZSHDBH2albmh6fW1wPtE=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>BGS8SEdcK2ZV+l5/1X/DdOZ4TUIPo+eu4TaA4ApqTf1KKNgRplxH+9I53lRZTcjD
-nqzINcasGhgGpeXh7VT9uXfS5h01cVYAYXWJAFljSmv+LF2DwIa1HY9BHuQMzc9Z
-EAmgWXltc6+SzM8G89lOMoFkT736k4Vw7ciPMmZHYGpUfg+4BSwiObqK0NnjuRN2
-Cztdq43GF7CPIix1Ts3tBr2aDoueRW+xzISb5+7k4GKdj/VOkPi7GeC2ufRKpRyS
-Ju2gG5foEvC+LUaSOLYOTtBYl5jmjxA+iVcNU8GyQwgnxydK3GNufPmbgIhSsmmm
-AhC/et20EvELAZCXOeHZWw==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=6eat8r33US71avuQEojmH\+bjk84=,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
+<CompositionPlaylist xmlns="http://www.smpte-ra.org/schemas/429-7/2006/CPL" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><Id>urn:uuid:cdecf5ab-b688-4842-bd60-0c9f5ce56e8c</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:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</Id><LabelText>81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00</LabelText></ContentVersion><RatingList/><ReelList><Reel><Id>urn:uuid:6f02ec2d-2a2d-437d-9391-daa7301b6910</Id><AssetList><MainPicture><Id>urn:uuid:a12d2c1f-0daa-4a30-a4cd-c4266ac172a7</Id><AnnotationText>video.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><KeyId>urn:uuid:aa157ca6-e3e3-4b6c-a7b6-50f52fcafb7f</KeyId><Hash>S84alpW2grO8/h2DDnHKAj8u//A=</Hash><FrameRate>24 1</FrameRate><ScreenAspectRatio>32 32</ScreenAspectRatio></MainPicture><MainSound><Id>urn:uuid:f020346e-84f4-4f1e-a3b7-f7aeb57696a4</Id><AnnotationText>audio.mxf</AnnotationText><EditRate>24 1</EditRate><IntrinsicDuration>24</IntrinsicDuration><EntryPoint>0</EntryPoint><Duration>24</Duration><KeyId>urn:uuid:938f5140-bb1c-46ce-9078-e099ebbf04bf</KeyId><Hash>PiwAhlgeKfRJOAEdW48aut4J0Go=</Hash></MainSound></AssetList></Reel></ReelList><Signer><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=6eat8r33US71avuQEojmH\+bjk84=,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=QFVlym7fuql6bPOnY38aaO1ZPW4=,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>Gk2y0ny72GE6daWfMUNu1+f+4/4=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>kuNtCbuVmJbQosc7kTxEJRjs1kY1sucjlwqGemSX9YsCWV+Y1CScDyRz4ijWiRyR
+qj+//CpmfFHSqiiTvAKDOXcFKZaktIejRtj7UvnpIUYsjsc1fghxeEMeAbbXhWDD
+4JqanamP8oLLct4GWG2ANQzJQ+ShXtEFb3WysaM3dqgiUkT/ctpyo71VlXPB8u5g
+gF0EjwHTxQ6rKdLrj+PVpExQAlQm4bgPMx9qn3ki9seRUjD2YY1zhAIE+poVk87w
+x+NZzpLzO2PNI2XegAmessKCnJaATCBuIvZ+4wJnS6pvbfk1/A1gei5bMSzpOhPN
+9pKfQT24af+cfTwfh0kvEg==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=6eat8r33US71avuQEojmH\+bjk84=,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
NmVhdDhyMzNVUzcxYXZ1UUVvam1IK2Jqazg0PTAeFw0xNTA2MDUxMzIwMDhaFw0y
diff --git a/test/ref/DCP/encryption_test/pkl_abf9d74a-c344-40a0-a929-21add8a3bd6e.xml b/test/ref/DCP/encryption_test/pkl_abf9d74a-c344-40a0-a929-21add8a3bd6e.xml
index 056707c1..4f46df36 100644
--- a/test/ref/DCP/encryption_test/pkl_abf9d74a-c344-40a0-a929-21add8a3bd6e.xml
+++ b/test/ref/DCP/encryption_test/pkl_abf9d74a-c344-40a0-a929-21add8a3bd6e.xml
@@ -1,10 +1,10 @@
<?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:abf9d74a-c344-40a0-a929-21add8a3bd6e</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:cdecf5ab-b688-4842-bd60-0c9f5ce56e8c</Id><AnnotationText>cdecf5ab-b688-4842-bd60-0c9f5ce56e8c</AnnotationText><Hash>Q0eQgHUayFbXU1Me3oy4L9xg0y4=</Hash><Size>8618</Size><Type>text/xml</Type></Asset><Asset><Id>urn:uuid:a12d2c1f-0daa-4a30-a4cd-c4266ac172a7</Id><AnnotationText>a12d2c1f-0daa-4a30-a4cd-c4266ac172a7</AnnotationText><Hash>1zYFnwI6KdSxS0Mm1yfpPE5icSg=</Hash><Size>29896</Size><Type>application/mxf</Type></Asset><Asset><Id>urn:uuid:f020346e-84f4-4f1e-a3b7-f7aeb57696a4</Id><AnnotationText>f020346e-84f4-4f1e-a3b7-f7aeb57696a4</AnnotationText><Hash>0enoS4UijgH3ybt2jiW/L0iS5e4=</Hash><Size>165454</Size><Type>application/mxf</Type></Asset></AssetList><Signer><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=6eat8r33US71avuQEojmH\+bjk84=,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=QFVlym7fuql6bPOnY38aaO1ZPW4=,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>PkphEiFij1rOfyLZ8A3kC1psv50=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>0eEASQfm8Y0T2P+6vtQtD6EE734sYekHTMjsbw9o+XS22YGQq1FEUHvx1IbaD/GQ
-wIuwVtN7HPZ5AbiRoJlXPkaJAJh1HpPHO+1MVbjdq8o4rY5HSyWg16LVlWWPjPSH
-PYcsiI5ZQal5Cf4/HgX52D+H82i9pfos0wkLZB2YuWb75ICepcbcr0JUrZ3RE7sm
-JcWxzNiMo3ueJVcefatEhmUuA48BSQc9RnYNqoV0OQaA52OBNHbBPrB/NIsMqZol
-MM/bjwkskf3d9i5KBYcLvgwBL1mNLsfkrd1WNkU1H79zQ8wPek2I++U4tuE+rfFu
-1s6Qh1Fe0B8RL9E20i4l8A==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=6eat8r33US71avuQEojmH\+bjk84=,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
+<PackingList xmlns="http://www.smpte-ra.org/schemas/429-8/2007/PKL" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><Id>urn:uuid:abf9d74a-c344-40a0-a929-21add8a3bd6e</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:cdecf5ab-b688-4842-bd60-0c9f5ce56e8c</Id><AnnotationText>cdecf5ab-b688-4842-bd60-0c9f5ce56e8c</AnnotationText><Hash>P65Gp0ManXQfCAYXkkAz2sCcIIs=</Hash><Size>8618</Size><Type>text/xml</Type></Asset><Asset><Id>urn:uuid:a12d2c1f-0daa-4a30-a4cd-c4266ac172a7</Id><AnnotationText>a12d2c1f-0daa-4a30-a4cd-c4266ac172a7</AnnotationText><Hash>S84alpW2grO8/h2DDnHKAj8u//A=</Hash><Size>29896</Size><Type>application/mxf</Type></Asset><Asset><Id>urn:uuid:f020346e-84f4-4f1e-a3b7-f7aeb57696a4</Id><AnnotationText>f020346e-84f4-4f1e-a3b7-f7aeb57696a4</AnnotationText><Hash>PiwAhlgeKfRJOAEdW48aut4J0Go=</Hash><Size>165454</Size><Type>application/mxf</Type></Asset></AssetList><Signer><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=6eat8r33US71avuQEojmH\+bjk84=,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=QFVlym7fuql6bPOnY38aaO1ZPW4=,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>wTNbO5pkG1S7sFeBnJeMcUC0lG0=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>jLWyzPVWQHFjZ0G7b9b8hq1XF2EVOLZJBUXM1Sm+civhlrIwwJ5XuXkkYbZsQkR6
+hhrLSX8FjVP9wo8sHI2D4M/4c6/NmSc4+JWpNz+L0jzyqzYY7RKCuzXrjGY5UXhP
+VHxmfPoxCI0XO+HnpQk7dKmS+SNrWpPzyrzDIUUoCQZH8gOYP8uAf99OrpPNy0iJ
+ZAXUxA4C9Hp02nMQzVaVMJMY9EJeZmy8Wwx0BIGrZ1gYv2ZNd9p00apRK8k3Vw+9
+xUqUv0VbZshHQyHSIANrwJOhDC3pPxgriTmt841Zl+eOSLIGOEHDGeY+sAaosoZS
+kODemJOGQQNrU00/0xEs2w==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509IssuerSerial><dsig:X509IssuerName>dnQualifier=6eat8r33US71avuQEojmH\+bjk84=,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
NmVhdDhyMzNVUzcxYXZ1UUVvam1IK2Jqazg0PTAeFw0xNTA2MDUxMzIwMDhaFw0y
diff --git a/test/ref/DCP/encryption_test/video.mxf b/test/ref/DCP/encryption_test/video.mxf
index 46d62cea..9ac17001 100644
--- a/test/ref/DCP/encryption_test/video.mxf
+++ b/test/ref/DCP/encryption_test/video.mxf
Binary files differ