diff options
| -rw-r--r-- | cscript | 3 | ||||
| -rw-r--r-- | src/reel.cc | 20 | ||||
| -rw-r--r-- | src/reel.h | 2 | ||||
| -rw-r--r-- | src/util.cc | 4 | ||||
| -rw-r--r-- | src/verify.cc | 25 | ||||
| -rw-r--r-- | src/verify.h | 6 | ||||
| -rw-r--r-- | test/ref/DCP/dcp_test8/ASSETMAP | 56 | ||||
| -rw-r--r-- | test/ref/DCP/dcp_test8/VOLINDEX | 4 | ||||
| -rw-r--r-- | test/ref/DCP/dcp_test8/cpl_d74fda30-d5f4-4c5f-870f-ebc089d97eb7.xml | 162 | ||||
| -rw-r--r-- | test/ref/DCP/dcp_test8/j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf | bin | 0 -> 47739 bytes | |||
| -rw-r--r-- | test/ref/DCP/dcp_test8/pcm_a2a87f5d-b749-4a7e-8d0c-9d48a4abf626.mxf | bin | 0 -> 845154 bytes | |||
| -rw-r--r-- | test/ref/DCP/dcp_test8/pkl_0382c908-7389-45d6-b671-d5100868cbbe.xml | 151 | ||||
| -rw-r--r-- | test/verify_test.cc | 130 | ||||
| -rw-r--r-- | wscript | 2 | ||||
| -rw-r--r-- | xsd/Main-Stereo-Picture-CPL.xsd | 11 | ||||
| -rw-r--r-- | xsd/PROTO-ASDCP-AM-20040311.xsd | 67 | ||||
| -rw-r--r-- | xsd/PROTO-ASDCP-CPL-20040511.xsd | 251 | ||||
| -rw-r--r-- | xsd/PROTO-ASDCP-PKL-20040311.xsd | 60 |
18 files changed, 920 insertions, 34 deletions
@@ -69,6 +69,9 @@ def build(target, options): if target.debug: cmd += ' --enable-debug' + if options is not None and 'force-cpp11' in options and options['force-cpp11']: + cmd += ' --force-cpp11' + target.command(cmd) target.command('./waf build install') diff --git a/src/reel.cc b/src/reel.cc index 14c0b1e2..3bf249c9 100644 --- a/src/reel.cc +++ b/src/reel.cc @@ -282,6 +282,26 @@ Reel::add (shared_ptr<ReelAsset> asset) } } +list<shared_ptr<ReelAsset> > +Reel::assets () const +{ + list<shared_ptr<ReelAsset> > a; + if (_main_picture) { + a.push_back (_main_picture); + } + if (_main_sound) { + a.push_back (_main_sound); + } + if (_main_subtitle) { + a.push_back (_main_subtitle); + } + std::copy (_closed_captions.begin(), _closed_captions.end(), back_inserter(a)); + if (_atmos) { + a.push_back (_atmos); + } + return a; +} + void Reel::resolve_refs (list<shared_ptr<Asset> > assets) { @@ -111,6 +111,8 @@ public: void add (boost::shared_ptr<ReelAsset> asset); + std::list<boost::shared_ptr<ReelAsset> > assets () const; + void write_to_cpl (xmlpp::Element* node, Standard standard) const; bool encrypted () const; diff --git a/src/util.cc b/src/util.cc index 9374b6e7..f755c21e 100644 --- a/src/util.cc +++ b/src/util.cc @@ -175,8 +175,8 @@ dcp::init () } #ifdef XMLSEC_CRYPTO_DYNAMIC_LOADING - if (xmlSecCryptoDLLoadLibrary(BAD_CAST XMLSEC_CRYPTO) < 0) { - throw MiscError ("unable to load default xmlsec-crypto library"); + if (xmlSecCryptoDLLoadLibrary(BAD_CAST "openssl") < 0) { + throw MiscError ("unable to load openssl xmlsec-crypto library"); } #endif diff --git a/src/verify.cc b/src/verify.cc index c91257be..66cd25e4 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2019 Carl Hetherington <cth@carlh.net> + Copyright (C) 2018-2020 Carl Hetherington <cth@carlh.net> This file is part of libdcp. @@ -196,6 +196,10 @@ public: add("http://www.w3.org/2001/XMLSchema.dtd", "XMLSchema.dtd"); add("http://www.w3.org/2001/03/xml.xsd", "xml.xsd"); add("http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd", "xmldsig-core-schema.xsd"); + add("http://www.digicine.com/schemas/437-Y/2007/Main-Stereo-Picture-CPL.xsd", "Main-Stereo-Picture-CPL.xsd"); + add("http://www.digicine.com/PROTO-ASDCP-CPL-20040511.xsd", "PROTO-ASDCP-CPL-20040511.xsd"); + add("http://www.digicine.com/PROTO-ASDCP-PKL-20040311.xsd", "PROTO-ASDCP-PKL-20040311.xsd"); + add("http://www.digicine.com/PROTO-ASDCP-AM-20040311.xsd", "PROTO-ASDCP-AM-20040311.xsd"); } InputSource* resolveEntity(XMLCh const *, XMLCh const * system_id) @@ -245,7 +249,10 @@ validate_xml (boost::filesystem::path xml_file, boost::filesystem::path xsd_dtd_ schema["http://www.smpte-ra.org/schemas/429-7/2006/CPL"] = "SMPTE-429-7-2006-CPL.xsd"; schema["http://www.smpte-ra.org/schemas/429-8/2006/PKL"] = "SMPTE-429-8-2006-PKL.xsd"; schema["http://www.smpte-ra.org/schemas/429-9/2007/AM"] = "SMPTE-429-9-2007-AM.xsd"; - schema["http://www.w3.org/2001/03/xml.xsd"] = "xml.xsd"; + schema["http://www.digicine.com/schemas/437-Y/2007/Main-Stereo-Picture-CPL.xsd"] = "Main-Stereo-Picture-CPL.xsd"; + schema["http://www.digicine.com/PROTO-ASDCP-CPL-20040511#"] = "PROTO-ASDCP-CPL-20040511.xsd"; + schema["http://www.digicine.com/PROTO-ASDCP-PKL-20040311#"] = "PROTO-ASDCP-PKL-20040311.xsd"; + schema["http://www.digicine.com/PROTO-ASDCP-AM-20040311#"] = "PROTO-ASDCP-AM-20040311.xsd"; string locations; for (map<string, string>::const_iterator i = schema.begin(); i != schema.end(); ++i) { @@ -364,6 +371,16 @@ dcp::verify ( BOOST_FOREACH (shared_ptr<Reel> reel, cpl->reels()) { stage ("Checking reel", optional<boost::filesystem::path>()); + + BOOST_FOREACH (shared_ptr<ReelAsset> i, reel->assets()) { + if (i->duration() && (i->duration().get() * i->edit_rate().denominator / i->edit_rate().numerator) < 1) { + notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::DURATION_TOO_SMALL, i->id())); + } + if ((i->intrinsic_duration() * i->edit_rate().denominator / i->edit_rate().numerator) < 1) { + notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::INTRINSIC_DURATION_TOO_SMALL, i->id())); + } + } + if (reel->main_picture()) { /* Check reel stuff */ Fraction const frame_rate = reel->main_picture()->frame_rate(); @@ -470,6 +487,10 @@ dcp::note_to_string (dcp::VerificationNote note) return String::compose("An XML file is badly formed: %1 (%2:%3)", note.note().get(), note.file()->filename(), note.line().get()); case dcp::VerificationNote::MISSING_ASSETMAP: return "No ASSETMAP or ASSETMAP.xml was found"; + case dcp::VerificationNote::INTRINSIC_DURATION_TOO_SMALL: + return String::compose("The intrinsic duration of an asset is less than 1 second long: %1", note.note().get()); + case dcp::VerificationNote::DURATION_TOO_SMALL: + return String::compose("The duration of an asset is less than 1 second long: %1", note.note().get()); } return ""; diff --git a/src/verify.h b/src/verify.h index 89069bdd..38c9ee75 100644 --- a/src/verify.h +++ b/src/verify.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2018 Carl Hetherington <cth@carlh.net> + Copyright (C) 2018-2020 Carl Hetherington <cth@carlh.net> This file is part of libdcp. @@ -79,6 +79,10 @@ public: XML_VALIDATION_ERROR, /** No ASSETMAP{.xml} was found */ MISSING_ASSETMAP + /** An asset's IntrinsicDuration is less than 1 second */ + INTRINSIC_DURATION_TOO_SMALL, + /** An asset's Duration is less than 1 second */ + DURATION_TOO_SMALL }; VerificationNote (Type type, Code code) diff --git a/test/ref/DCP/dcp_test8/ASSETMAP b/test/ref/DCP/dcp_test8/ASSETMAP new file mode 100644 index 00000000..adb1829e --- /dev/null +++ b/test/ref/DCP/dcp_test8/ASSETMAP @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<AssetMap xmlns="http://www.digicine.com/PROTO-ASDCP-AM-20040311#"> + <Id>urn:uuid:5a89bd07-3af3-4f48-bdb4-b8fe6d22d8f8</Id> + <AnnotationText>Short_FTR-1_F_MOS_2K_20200308_IOP_OV</AnnotationText> + <VolumeCount>1</VolumeCount> + <IssueDate>2020-03-08T22:39:14+01:00</IssueDate> + <Issuer>DCP-o-matic 2.15.47devel caf67bef26</Issuer> + <Creator>DCP-o-matic 2.15.47devel caf67bef26</Creator> + <AssetList> + <Asset> + <Id>urn:uuid:0382c908-7389-45d6-b671-d5100868cbbe</Id> + <PackingList>true</PackingList> + <ChunkList> + <Chunk> + <Path>pkl_0382c908-7389-45d6-b671-d5100868cbbe.xml</Path> + <VolumeIndex>1</VolumeIndex> + <Offset>0</Offset> + <Length>8738</Length> + </Chunk> + </ChunkList> + </Asset> + <Asset> + <Id>urn:uuid:d74fda30-d5f4-4c5f-870f-ebc089d97eb7</Id> + <ChunkList> + <Chunk> + <Path>cpl_d74fda30-d5f4-4c5f-870f-ebc089d97eb7.xml</Path> + <VolumeIndex>1</VolumeIndex> + <Offset>0</Offset> + <Length>9079</Length> + </Chunk> + </ChunkList> + </Asset> + <Asset> + <Id>urn:uuid:d7576dcb-a361-4139-96b8-267f5f8d7f91</Id> + <ChunkList> + <Chunk> + <Path>j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf</Path> + <VolumeIndex>1</VolumeIndex> + <Offset>0</Offset> + <Length>47739</Length> + </Chunk> + </ChunkList> + </Asset> + <Asset> + <Id>urn:uuid:a2a87f5d-b749-4a7e-8d0c-9d48a4abf626</Id> + <ChunkList> + <Chunk> + <Path>pcm_a2a87f5d-b749-4a7e-8d0c-9d48a4abf626.mxf</Path> + <VolumeIndex>1</VolumeIndex> + <Offset>0</Offset> + <Length>845154</Length> + </Chunk> + </ChunkList> + </Asset> + </AssetList> +</AssetMap> diff --git a/test/ref/DCP/dcp_test8/VOLINDEX b/test/ref/DCP/dcp_test8/VOLINDEX new file mode 100644 index 00000000..907d8fd1 --- /dev/null +++ b/test/ref/DCP/dcp_test8/VOLINDEX @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<VolumeIndex xmlns="http://www.digicine.com/PROTO-ASDCP-VL-20040311#"> + <Index>1</Index> +</VolumeIndex> diff --git a/test/ref/DCP/dcp_test8/cpl_d74fda30-d5f4-4c5f-870f-ebc089d97eb7.xml b/test/ref/DCP/dcp_test8/cpl_d74fda30-d5f4-4c5f-870f-ebc089d97eb7.xml new file mode 100644 index 00000000..dbfd96fc --- /dev/null +++ b/test/ref/DCP/dcp_test8/cpl_d74fda30-d5f4-4c5f-870f-ebc089d97eb7.xml @@ -0,0 +1,162 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CompositionPlaylist xmlns="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#"> + <Id>urn:uuid:d74fda30-d5f4-4c5f-870f-ebc089d97eb7</Id> + <AnnotationText>Short_FTR-1_F_MOS_2K_20200308_IOP_OV</AnnotationText> + <IssueDate>2020-03-08T22:39:14+01:00</IssueDate> + <Issuer>DCP-o-matic 2.15.47devel caf67bef26</Issuer> + <Creator>DCP-o-matic 2.15.47devel caf67bef26</Creator> + <ContentTitleText>Short_FTR-1_F_MOS_2K_20200308_IOP_OV</ContentTitleText> + <ContentKind>feature</ContentKind> + <ContentVersion> + <Id>urn:uuid:52041263-579d-4b39-9f00-e50fc05def07</Id> + <LabelText></LabelText> + </ContentVersion> + <RatingList/> + <ReelList> + <Reel> + <Id>urn:uuid:cd5df0e8-1072-4f24-8770-5ca5dfb9e6ec</Id> + <AssetList> + <MainPicture> + <Id>urn:uuid:d7576dcb-a361-4139-96b8-267f5f8d7f91</Id> + <AnnotationText></AnnotationText> + <EditRate>24 1</EditRate> + <IntrinsicDuration>23</IntrinsicDuration> + <EntryPoint>0</EntryPoint> + <Duration>23</Duration> + <Hash>jOZgIxogFSZZm2Bo2l+SIa9JhEE=</Hash> + <FrameRate>24 1</FrameRate> + <ScreenAspectRatio>1.85</ScreenAspectRatio> + </MainPicture> + <MainSound> + <Id>urn:uuid:a2a87f5d-b749-4a7e-8d0c-9d48a4abf626</Id> + <AnnotationText></AnnotationText> + <EditRate>24 1</EditRate> + <IntrinsicDuration>23</IntrinsicDuration> + <EntryPoint>0</EntryPoint> + <Duration>23</Duration> + <Hash>+/1qe/yPbyof3CrPUgncvm3pfoE=</Hash> + </MainSound> + </AssetList> + </Reel> + </ReelList> + <Signer xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> + <dsig:X509Data> + <dsig:X509IssuerSerial> + <dsig:X509IssuerName>dnQualifier=lZk4e0WYYlT85Lcd6WEFqLA\+RBM=,CN=.dcpomatic.smpte-430-2.INTERMEDIATE,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName> + <dsig:X509SerialNumber>7</dsig:X509SerialNumber> + </dsig:X509IssuerSerial> + <dsig:X509SubjectName>dnQualifier=gpFOP6eBu1fU6/yfdn\+UlWuFtqA=,CN=CS.dcpomatic.smpte-430-2.LEAF,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509SubjectName> + </dsig:X509Data> + </Signer> + <dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> + <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>u3F0ncdRZO5TFTs6uOaSIQ+T9to=</dsig:DigestValue> + </dsig:Reference> + </dsig:SignedInfo> + <dsig:SignatureValue>GqylxgKM/MB6BujLTlc0XRRtMEOe4xvJFc+5dUOcqxpIRCCPHf1SLNSWyy94xC68 +hF7P2na7RZ7/ILleUmD3PRNWnZJutk7mHRDPCM8zvxTsnFz6VcvNgrGy83IN7BBM +Gdn6liMoCSQERdqQ/KvSr5WtXjvRVBDYlXyrRYCysj0uS4yx5u4x43QNJSuBfVfw +eJOm9fDjKURfFYEf6I05Nycwll+MfQPgA8LLgArYFuy5SbjKfIeBrxXhVqXDH7kC +5R1QX/xa3khHhsZp6JPKZBMtr+5+SuSuQmppx0L3rbj8vTOVoV7W3DH4unzygQ+6 +UnSAhQTs6jMFUOntHN6+XA==</dsig:SignatureValue> + <dsig:KeyInfo> + <dsig:X509Data> + <dsig:X509IssuerSerial> + <dsig:X509IssuerName>dnQualifier=lZk4e0WYYlT85Lcd6WEFqLA\+RBM=,CN=.dcpomatic.smpte-430-2.INTERMEDIATE,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName> + <dsig:X509SerialNumber>7</dsig:X509SerialNumber> + </dsig:X509IssuerSerial> + <dsig:X509Certificate>MIIEazCCA1OgAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBhTEWMBQGA1UEChMNZGNw +b21hdGljLmNvbTEWMBQGA1UECxMNZGNwb21hdGljLmNvbTEsMCoGA1UEAxMjLmRj +cG9tYXRpYy5zbXB0ZS00MzAtMi5JTlRFUk1FRElBVEUxJTAjBgNVBC4THGxaazRl +MFdZWWxUODVMY2Q2V0VGcUxBK1JCTT0wIBcNMTkxMTI3MTIxMTA3WhgPMjA1OTEx +MjIxMjExMDdaMH8xFjAUBgNVBAoTDWRjcG9tYXRpYy5jb20xFjAUBgNVBAsTDWRj +cG9tYXRpYy5jb20xJjAkBgNVBAMTHUNTLmRjcG9tYXRpYy5zbXB0ZS00MzAtMi5M +RUFGMSUwIwYDVQQuExxncEZPUDZlQnUxZlU2L3lmZG4rVWxXdUZ0cUE9MIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAulASlcMmyMzVE0LG5JPzOCDAYmQk +kTKir43UhXqHXnRrtjLvwGcPFGOdokRP51shYn62r6HEMgYgqRQ+9DQyrasW7AUy +s2LTSNt9W+vY3LbxtksJN4Qy+2dio2jNbCPa7BgOSH1Wi8ewYdb2ykMRQv666nYH +bPHkr7qZOkTM5IPgciBpxztPBN2cLXxCJWQxffMXHLD7K33TLVqxXTuquD+n2/ii +qpsmNY5Cngi3z3HVw5wql3zvdW4TlHb1gHrHwqqpKIKIFFn9JZsDUZG3KYkvG4cZ +oSRhIvXMmLn1KOSJ2ANQG1UDX8yLo0BtAMxAZ0IFL/9d0FIcgLL6nLB2uQIDAQAB +o4HoMIHlMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgWgMB0GA1UdDgQWBBSCkU4/ +p4G7V9Tr/J92f5SVa4W2oDCBqAYDVR0jBIGgMIGdgBSVmTh7RZhiVPzktx3pYQWo +sD5EE6GBgaR/MH0xFjAUBgNVBAoTDWRjcG9tYXRpYy5jb20xFjAUBgNVBAsTDWRj +cG9tYXRpYy5jb20xJDAiBgNVBAMTGy5kY3BvbWF0aWMuc21wdGUtNDMwLTIuUk9P +VDElMCMGA1UELhMcRUpjZFVFQko1Zm1BTWN6YkJvNGI3RTdpVHVzPYIBBjANBgkq +hkiG9w0BAQsFAAOCAQEAP8EhBofCpK9Hj8swyvHQFNUVToKohk225vsSoa+p/kOF +VJE2odGgUgPB5GNdGZTd8kJHy9B1wzIEzAqXg78aifJXqjX5Np/Vhe6dIeR13+xL +2ghuH6tHfQ2PmomSG5kaBUI5qXmKsFxgR7jRscXCu5GqWunPYsNFU6L9Y0LxSfVn +wjdXM5MyHHAV6vTxNLHXIBkafswkwsUc2UPNTLZtT8nIhFP7jrGVYnEhHKQgoMuT ++E/cUKzaZkmphMjWrsucp95GjjXSL82JboGI6IeHuIjsMyNPKznE9JEEFbPRqkkx +UNYkHpITCNDKXG/rApn/2iBADQQUWUphp4h07BwXbg==</dsig:X509Certificate> + </dsig:X509Data> + <dsig:X509Data> + <dsig:X509IssuerSerial> + <dsig:X509IssuerName>dnQualifier=EJcdUEBJ5fmAMczbBo4b7E7iTus=,CN=.dcpomatic.smpte-430-2.ROOT,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName> + <dsig:X509SerialNumber>6</dsig:X509SerialNumber> + </dsig:X509IssuerSerial> + <dsig:X509Certificate>MIIEbzCCA1egAwIBAgIBBjANBgkqhkiG9w0BAQsFADB9MRYwFAYDVQQKEw1kY3Bv +bWF0aWMuY29tMRYwFAYDVQQLEw1kY3BvbWF0aWMuY29tMSQwIgYDVQQDExsuZGNw +b21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4THEVKY2RVRUJKNWZtQU1j +emJCbzRiN0U3aVR1cz0wIBcNMTkxMTI3MTIxMTA3WhgPMjA1OTExMjMxMjExMDda +MIGFMRYwFAYDVQQKEw1kY3BvbWF0aWMuY29tMRYwFAYDVQQLEw1kY3BvbWF0aWMu +Y29tMSwwKgYDVQQDEyMuZGNwb21hdGljLnNtcHRlLTQzMC0yLklOVEVSTUVESUFU +RTElMCMGA1UELhMcbFprNGUwV1lZbFQ4NUxjZDZXRUZxTEErUkJNPTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALclhoMI5k8AxUV+svXWkXcpZ4zF2/av +C9Eg1I6v/hJWVuythbR/j2flYmLAHTMO/Lzsf9wSIBrJY/0ooGZvzLEXVTqOBn3i ++p4Rmzrc+KzaxYSrBlutMjvupGN2uikUequcqRMPLxQFed+RGJ2LOMf6VYjshCEj +LZGLqmcArb/UPO39KDyOq852gGyc4N2uvilPdM8BsgykHEhZ+9MrsOjCqateM/h0 +OA0SEL8LtZo7Rf3yfONeczaSwdU6R38FH7oettAD1z4vu2BMVXNvF7cP/KBYCVFw +8dux3vGch1/eLicjskJmYDlgEJ3SFGstCaeQFenNczIlPvDte5EmD1cCAwEAAaOB +7jCB6zASBgNVHRMBAf8ECDAGAQH/AgECMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU +lZk4e0WYYlT85Lcd6WEFqLA+RBMwgagGA1UdIwSBoDCBnYAUEJcdUEBJ5fmAMczb +Bo4b7E7iTuuhgYGkfzB9MRYwFAYDVQQKEw1kY3BvbWF0aWMuY29tMRYwFAYDVQQL +Ew1kY3BvbWF0aWMuY29tMSQwIgYDVQQDExsuZGNwb21hdGljLnNtcHRlLTQzMC0y +LlJPT1QxJTAjBgNVBC4THEVKY2RVRUJKNWZtQU1jemJCbzRiN0U3aVR1cz2CAQUw +DQYJKoZIhvcNAQELBQADggEBAIB+KmpPLpH3G+SW3ZWCLdT3gqvG0XdcOUAUAjN3 +rFO9tdSbhczCYeMoENl6AlVM78blTQKwz9PVwxUpSp3pOIV8Pi52WevPM73an8U8 +kL0Zwo0nzlFaOMsllzb/4npu2QzSC0KjYPRvpDjdWuOPDOQyfzfCSkzqmKIEvIzG +2oPuM1MgdgKIHSD09yX4FMb+kcwFWbmIpC80S0iBfqBgIgGS1or2V1odAbLesZZf +jVIQDrooEhmEbpryAMXNIgjq3Ylvwy41vOQ5I8LZYS5GpBZIpjqWq3IlqwA3W6BB +d8u37dNu8FmHemnj/ZVz/31Qf5nSo8YLYHYXrDuh38XOx4A=</dsig:X509Certificate> + </dsig:X509Data> + <dsig:X509Data> + <dsig:X509IssuerSerial> + <dsig:X509IssuerName>dnQualifier=EJcdUEBJ5fmAMczbBo4b7E7iTus=,CN=.dcpomatic.smpte-430-2.ROOT,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName> + <dsig:X509SerialNumber>5</dsig:X509SerialNumber> + </dsig:X509IssuerSerial> + <dsig:X509Certificate>MIIEZjCCA06gAwIBAgIBBTANBgkqhkiG9w0BAQsFADB9MRYwFAYDVQQKEw1kY3Bv +bWF0aWMuY29tMRYwFAYDVQQLEw1kY3BvbWF0aWMuY29tMSQwIgYDVQQDExsuZGNw +b21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4THEVKY2RVRUJKNWZtQU1j +emJCbzRiN0U3aVR1cz0wIBcNMTkxMTI3MTIxMTA3WhgPMjA1OTExMjQxMjExMDda +MH0xFjAUBgNVBAoTDWRjcG9tYXRpYy5jb20xFjAUBgNVBAsTDWRjcG9tYXRpYy5j +b20xJDAiBgNVBAMTGy5kY3BvbWF0aWMuc21wdGUtNDMwLTIuUk9PVDElMCMGA1UE +LhMcRUpjZFVFQko1Zm1BTWN6YkJvNGI3RTdpVHVzPTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAO2D9nYWk04QCADn7cbgZ2Oy36TMpZfm9nLs0cqyAry4 +1G1mZRUqkONsSS4uZCcnwCVH1tYqJG9XMNxEwHp3dELhKo4BgxgB8oNJYrmGcewo +h8kd/x4YqOuyIExyhUtKo2KSVZlpw1flrv+88ly1ljCEZnRjN/wu/C3EXkq8MciR +CMtLXpIPyYVaL09cOnHeslQ9nRXkGojz+kiuhYdJrKMItATzjdI50sIMFZnXBUci +Bj2cvPxpPzG+Kr1qfBNYXw5ibHbsh/TGTyvkz+Z5hPDJZYe3fDW0yM/rHyXZzQuP +5gUkoC9hisznuPQaePsTLhEqkIjgOyrzdpLduBE7sPkCAwEAAaOB7jCB6zASBgNV +HRMBAf8ECDAGAQH/AgEDMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUEJcdUEBJ5fmA +MczbBo4b7E7iTuswgagGA1UdIwSBoDCBnYAUEJcdUEBJ5fmAMczbBo4b7E7iTuuh +gYGkfzB9MRYwFAYDVQQKEw1kY3BvbWF0aWMuY29tMRYwFAYDVQQLEw1kY3BvbWF0 +aWMuY29tMSQwIgYDVQQDExsuZGNwb21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAj +BgNVBC4THEVKY2RVRUJKNWZtQU1jemJCbzRiN0U3aVR1cz2CAQUwDQYJKoZIhvcN +AQELBQADggEBACI94oNUUisYl0PKHln+MjgHg4yBAHhn4GFlUbZtelpArDuJg5D1 +/Ba6e/JECTS0CwovyLtD6Z2agU5jvXQ0sI8svo4OkOcZSyBvgif49YeRU8HLWH+R +pJZBmzXQrHPCXgjvY9qWN2btTcHago9TXTbB17adlpUbSnUG0pnDjkt1EdZ3T+D8 +vZVpBVciWsLh5CeuxAxfpFUw3gtbYdGa/yIgnb12l7zpCfb2VGqQEPr06U0yjl0s +Im55V7KBJhKV3CtUdoOAc7x1y9BsVZI7dWQBHlTzTa4/Mj4KWlQ36eKpawNc+Add +oP8O9wPyd2sOpjMqbhIjrbYS+CfKKl/P4H4=</dsig:X509Certificate> + </dsig:X509Data> + </dsig:KeyInfo> + </dsig:Signature> +</CompositionPlaylist> diff --git a/test/ref/DCP/dcp_test8/j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf b/test/ref/DCP/dcp_test8/j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf Binary files differnew file mode 100644 index 00000000..ca6b9f76 --- /dev/null +++ b/test/ref/DCP/dcp_test8/j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf diff --git a/test/ref/DCP/dcp_test8/pcm_a2a87f5d-b749-4a7e-8d0c-9d48a4abf626.mxf b/test/ref/DCP/dcp_test8/pcm_a2a87f5d-b749-4a7e-8d0c-9d48a4abf626.mxf Binary files differnew file mode 100644 index 00000000..cede2165 --- /dev/null +++ b/test/ref/DCP/dcp_test8/pcm_a2a87f5d-b749-4a7e-8d0c-9d48a4abf626.mxf diff --git a/test/ref/DCP/dcp_test8/pkl_0382c908-7389-45d6-b671-d5100868cbbe.xml b/test/ref/DCP/dcp_test8/pkl_0382c908-7389-45d6-b671-d5100868cbbe.xml new file mode 100644 index 00000000..fb376ef2 --- /dev/null +++ b/test/ref/DCP/dcp_test8/pkl_0382c908-7389-45d6-b671-d5100868cbbe.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="UTF-8"?> +<PackingList xmlns="http://www.digicine.com/PROTO-ASDCP-PKL-20040311#"> + <Id>urn:uuid:0382c908-7389-45d6-b671-d5100868cbbe</Id> + <AnnotationText>Short_FTR-1_F_MOS_2K_20200308_IOP_OV</AnnotationText> + <IssueDate>2020-03-08T22:39:14+01:00</IssueDate> + <Issuer>DCP-o-matic 2.15.47devel caf67bef26</Issuer> + <Creator>DCP-o-matic 2.15.47devel caf67bef26</Creator> + <AssetList> + <Asset> + <Id>urn:uuid:d74fda30-d5f4-4c5f-870f-ebc089d97eb7</Id> + <AnnotationText>d74fda30-d5f4-4c5f-870f-ebc089d97eb7</AnnotationText> + <Hash>1KKdwXhS0LDUe16ziYYIomKR3oQ=</Hash> + <Size>9079</Size> + <Type>text/xml;asdcpKind=CPL</Type> + </Asset> + <Asset> + <Id>urn:uuid:d7576dcb-a361-4139-96b8-267f5f8d7f91</Id> + <AnnotationText>d7576dcb-a361-4139-96b8-267f5f8d7f91</AnnotationText> + <Hash>jOZgIxogFSZZm2Bo2l+SIa9JhEE=</Hash> + <Size>47739</Size> + <Type>application/x-smpte-mxf;asdcpKind=Picture</Type> + </Asset> + <Asset> + <Id>urn:uuid:a2a87f5d-b749-4a7e-8d0c-9d48a4abf626</Id> + <AnnotationText>a2a87f5d-b749-4a7e-8d0c-9d48a4abf626</AnnotationText> + <Hash>+/1qe/yPbyof3CrPUgncvm3pfoE=</Hash> + <Size>845154</Size> + <Type>application/x-smpte-mxf;asdcpKind=Sound</Type> + </Asset> + </AssetList> + <Signer xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> + <dsig:X509Data> + <dsig:X509IssuerSerial> + <dsig:X509IssuerName>dnQualifier=lZk4e0WYYlT85Lcd6WEFqLA\+RBM=,CN=.dcpomatic.smpte-430-2.INTERMEDIATE,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName> + <dsig:X509SerialNumber>7</dsig:X509SerialNumber> + </dsig:X509IssuerSerial> + <dsig:X509SubjectName>dnQualifier=gpFOP6eBu1fU6/yfdn\+UlWuFtqA=,CN=CS.dcpomatic.smpte-430-2.LEAF,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509SubjectName> + </dsig:X509Data> + </Signer> + <dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> + <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>URs0kuatFBRNdUNxm0dUttWcA4Y=</dsig:DigestValue> + </dsig:Reference> + </dsig:SignedInfo> + <dsig:SignatureValue>BgRZ6abOezgtVvfJt+3OPhXaTryGo1B2zmK0lLXExDIQgz5a3XLVphy7XAnK/Qch +eGMUzT9b6yujyR/PVmT47v2REk2i3B7SbIjIKB44RiZxRarI2uD1pNv9d9+pnXf1 ++h+pM1Yt8ZsIAUAvd74Gg2Y84qz7PIekS3n3utNSZhQySc8xa2UEnLkjQfMrn+Pd +0VHp2RjfKZmS4Er19BT5ZoQ2x0MWPFQeKHuuYUvaWyBW4Yywn06eHxpE0394pj0X +P/QQmmcwUwZ5k8q8IxyrWdB0vpbkSEX9A99Ix+yreu1E61XaWFzHM7fuDb1MZj4f +79BqWjklBx9aFkuMGUZcdQ==</dsig:SignatureValue> + <dsig:KeyInfo> + <dsig:X509Data> + <dsig:X509IssuerSerial> + <dsig:X509IssuerName>dnQualifier=lZk4e0WYYlT85Lcd6WEFqLA\+RBM=,CN=.dcpomatic.smpte-430-2.INTERMEDIATE,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName> + <dsig:X509SerialNumber>7</dsig:X509SerialNumber> + </dsig:X509IssuerSerial> + <dsig:X509Certificate>MIIEazCCA1OgAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBhTEWMBQGA1UEChMNZGNw +b21hdGljLmNvbTEWMBQGA1UECxMNZGNwb21hdGljLmNvbTEsMCoGA1UEAxMjLmRj +cG9tYXRpYy5zbXB0ZS00MzAtMi5JTlRFUk1FRElBVEUxJTAjBgNVBC4THGxaazRl +MFdZWWxUODVMY2Q2V0VGcUxBK1JCTT0wIBcNMTkxMTI3MTIxMTA3WhgPMjA1OTEx +MjIxMjExMDdaMH8xFjAUBgNVBAoTDWRjcG9tYXRpYy5jb20xFjAUBgNVBAsTDWRj +cG9tYXRpYy5jb20xJjAkBgNVBAMTHUNTLmRjcG9tYXRpYy5zbXB0ZS00MzAtMi5M +RUFGMSUwIwYDVQQuExxncEZPUDZlQnUxZlU2L3lmZG4rVWxXdUZ0cUE9MIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAulASlcMmyMzVE0LG5JPzOCDAYmQk +kTKir43UhXqHXnRrtjLvwGcPFGOdokRP51shYn62r6HEMgYgqRQ+9DQyrasW7AUy +s2LTSNt9W+vY3LbxtksJN4Qy+2dio2jNbCPa7BgOSH1Wi8ewYdb2ykMRQv666nYH +bPHkr7qZOkTM5IPgciBpxztPBN2cLXxCJWQxffMXHLD7K33TLVqxXTuquD+n2/ii +qpsmNY5Cngi3z3HVw5wql3zvdW4TlHb1gHrHwqqpKIKIFFn9JZsDUZG3KYkvG4cZ +oSRhIvXMmLn1KOSJ2ANQG1UDX8yLo0BtAMxAZ0IFL/9d0FIcgLL6nLB2uQIDAQAB +o4HoMIHlMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgWgMB0GA1UdDgQWBBSCkU4/ +p4G7V9Tr/J92f5SVa4W2oDCBqAYDVR0jBIGgMIGdgBSVmTh7RZhiVPzktx3pYQWo +sD5EE6GBgaR/MH0xFjAUBgNVBAoTDWRjcG9tYXRpYy5jb20xFjAUBgNVBAsTDWRj +cG9tYXRpYy5jb20xJDAiBgNVBAMTGy5kY3BvbWF0aWMuc21wdGUtNDMwLTIuUk9P +VDElMCMGA1UELhMcRUpjZFVFQko1Zm1BTWN6YkJvNGI3RTdpVHVzPYIBBjANBgkq +hkiG9w0BAQsFAAOCAQEAP8EhBofCpK9Hj8swyvHQFNUVToKohk225vsSoa+p/kOF +VJE2odGgUgPB5GNdGZTd8kJHy9B1wzIEzAqXg78aifJXqjX5Np/Vhe6dIeR13+xL +2ghuH6tHfQ2PmomSG5kaBUI5qXmKsFxgR7jRscXCu5GqWunPYsNFU6L9Y0LxSfVn +wjdXM5MyHHAV6vTxNLHXIBkafswkwsUc2UPNTLZtT8nIhFP7jrGVYnEhHKQgoMuT ++E/cUKzaZkmphMjWrsucp95GjjXSL82JboGI6IeHuIjsMyNPKznE9JEEFbPRqkkx +UNYkHpITCNDKXG/rApn/2iBADQQUWUphp4h07BwXbg==</dsig:X509Certificate> + </dsig:X509Data> + <dsig:X509Data> + <dsig:X509IssuerSerial> + <dsig:X509IssuerName>dnQualifier=EJcdUEBJ5fmAMczbBo4b7E7iTus=,CN=.dcpomatic.smpte-430-2.ROOT,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName> + <dsig:X509SerialNumber>6</dsig:X509SerialNumber> + </dsig:X509IssuerSerial> + <dsig:X509Certificate>MIIEbzCCA1egAwIBAgIBBjANBgkqhkiG9w0BAQsFADB9MRYwFAYDVQQKEw1kY3Bv +bWF0aWMuY29tMRYwFAYDVQQLEw1kY3BvbWF0aWMuY29tMSQwIgYDVQQDExsuZGNw +b21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4THEVKY2RVRUJKNWZtQU1j +emJCbzRiN0U3aVR1cz0wIBcNMTkxMTI3MTIxMTA3WhgPMjA1OTExMjMxMjExMDda +MIGFMRYwFAYDVQQKEw1kY3BvbWF0aWMuY29tMRYwFAYDVQQLEw1kY3BvbWF0aWMu +Y29tMSwwKgYDVQQDEyMuZGNwb21hdGljLnNtcHRlLTQzMC0yLklOVEVSTUVESUFU +RTElMCMGA1UELhMcbFprNGUwV1lZbFQ4NUxjZDZXRUZxTEErUkJNPTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALclhoMI5k8AxUV+svXWkXcpZ4zF2/av +C9Eg1I6v/hJWVuythbR/j2flYmLAHTMO/Lzsf9wSIBrJY/0ooGZvzLEXVTqOBn3i ++p4Rmzrc+KzaxYSrBlutMjvupGN2uikUequcqRMPLxQFed+RGJ2LOMf6VYjshCEj +LZGLqmcArb/UPO39KDyOq852gGyc4N2uvilPdM8BsgykHEhZ+9MrsOjCqateM/h0 +OA0SEL8LtZo7Rf3yfONeczaSwdU6R38FH7oettAD1z4vu2BMVXNvF7cP/KBYCVFw +8dux3vGch1/eLicjskJmYDlgEJ3SFGstCaeQFenNczIlPvDte5EmD1cCAwEAAaOB +7jCB6zASBgNVHRMBAf8ECDAGAQH/AgECMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU +lZk4e0WYYlT85Lcd6WEFqLA+RBMwgagGA1UdIwSBoDCBnYAUEJcdUEBJ5fmAMczb +Bo4b7E7iTuuhgYGkfzB9MRYwFAYDVQQKEw1kY3BvbWF0aWMuY29tMRYwFAYDVQQL +Ew1kY3BvbWF0aWMuY29tMSQwIgYDVQQDExsuZGNwb21hdGljLnNtcHRlLTQzMC0y +LlJPT1QxJTAjBgNVBC4THEVKY2RVRUJKNWZtQU1jemJCbzRiN0U3aVR1cz2CAQUw +DQYJKoZIhvcNAQELBQADggEBAIB+KmpPLpH3G+SW3ZWCLdT3gqvG0XdcOUAUAjN3 +rFO9tdSbhczCYeMoENl6AlVM78blTQKwz9PVwxUpSp3pOIV8Pi52WevPM73an8U8 +kL0Zwo0nzlFaOMsllzb/4npu2QzSC0KjYPRvpDjdWuOPDOQyfzfCSkzqmKIEvIzG +2oPuM1MgdgKIHSD09yX4FMb+kcwFWbmIpC80S0iBfqBgIgGS1or2V1odAbLesZZf +jVIQDrooEhmEbpryAMXNIgjq3Ylvwy41vOQ5I8LZYS5GpBZIpjqWq3IlqwA3W6BB +d8u37dNu8FmHemnj/ZVz/31Qf5nSo8YLYHYXrDuh38XOx4A=</dsig:X509Certificate> + </dsig:X509Data> + <dsig:X509Data> + <dsig:X509IssuerSerial> + <dsig:X509IssuerName>dnQualifier=EJcdUEBJ5fmAMczbBo4b7E7iTus=,CN=.dcpomatic.smpte-430-2.ROOT,OU=dcpomatic.com,O=dcpomatic.com</dsig:X509IssuerName> + <dsig:X509SerialNumber>5</dsig:X509SerialNumber> + </dsig:X509IssuerSerial> + <dsig:X509Certificate>MIIEZjCCA06gAwIBAgIBBTANBgkqhkiG9w0BAQsFADB9MRYwFAYDVQQKEw1kY3Bv +bWF0aWMuY29tMRYwFAYDVQQLEw1kY3BvbWF0aWMuY29tMSQwIgYDVQQDExsuZGNw +b21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAjBgNVBC4THEVKY2RVRUJKNWZtQU1j +emJCbzRiN0U3aVR1cz0wIBcNMTkxMTI3MTIxMTA3WhgPMjA1OTExMjQxMjExMDda +MH0xFjAUBgNVBAoTDWRjcG9tYXRpYy5jb20xFjAUBgNVBAsTDWRjcG9tYXRpYy5j +b20xJDAiBgNVBAMTGy5kY3BvbWF0aWMuc21wdGUtNDMwLTIuUk9PVDElMCMGA1UE +LhMcRUpjZFVFQko1Zm1BTWN6YkJvNGI3RTdpVHVzPTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAO2D9nYWk04QCADn7cbgZ2Oy36TMpZfm9nLs0cqyAry4 +1G1mZRUqkONsSS4uZCcnwCVH1tYqJG9XMNxEwHp3dELhKo4BgxgB8oNJYrmGcewo +h8kd/x4YqOuyIExyhUtKo2KSVZlpw1flrv+88ly1ljCEZnRjN/wu/C3EXkq8MciR +CMtLXpIPyYVaL09cOnHeslQ9nRXkGojz+kiuhYdJrKMItATzjdI50sIMFZnXBUci +Bj2cvPxpPzG+Kr1qfBNYXw5ibHbsh/TGTyvkz+Z5hPDJZYe3fDW0yM/rHyXZzQuP +5gUkoC9hisznuPQaePsTLhEqkIjgOyrzdpLduBE7sPkCAwEAAaOB7jCB6zASBgNV +HRMBAf8ECDAGAQH/AgEDMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUEJcdUEBJ5fmA +MczbBo4b7E7iTuswgagGA1UdIwSBoDCBnYAUEJcdUEBJ5fmAMczbBo4b7E7iTuuh +gYGkfzB9MRYwFAYDVQQKEw1kY3BvbWF0aWMuY29tMRYwFAYDVQQLEw1kY3BvbWF0 +aWMuY29tMSQwIgYDVQQDExsuZGNwb21hdGljLnNtcHRlLTQzMC0yLlJPT1QxJTAj +BgNVBC4THEVKY2RVRUJKNWZtQU1jemJCbzRiN0U3aVR1cz2CAQUwDQYJKoZIhvcN +AQELBQADggEBACI94oNUUisYl0PKHln+MjgHg4yBAHhn4GFlUbZtelpArDuJg5D1 +/Ba6e/JECTS0CwovyLtD6Z2agU5jvXQ0sI8svo4OkOcZSyBvgif49YeRU8HLWH+R +pJZBmzXQrHPCXgjvY9qWN2btTcHago9TXTbB17adlpUbSnUG0pnDjkt1EdZ3T+D8 +vZVpBVciWsLh5CeuxAxfpFUw3gtbYdGa/yIgnb12l7zpCfb2VGqQEPr06U0yjl0s +Im55V7KBJhKV3CtUdoOAc7x1y9BsVZI7dWQBHlTzTa4/Mj4KWlQ36eKpawNc+Add +oP8O9wPyd2sOpjMqbhIjrbYS+CfKKl/P4H4=</dsig:X509Certificate> + </dsig:X509Data> + </dsig:KeyInfo> + </dsig:Signature> +</PackingList> diff --git a/test/verify_test.cc b/test/verify_test.cc index 38316f54..2ff66f69 100644 --- a/test/verify_test.cc +++ b/test/verify_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2019 Carl Hetherington <cth@carlh.net> + Copyright (C) 2018-2020 Carl Hetherington <cth@carlh.net> This file is part of libdcp. @@ -48,6 +48,7 @@ using std::make_pair; using boost::optional; static list<pair<string, optional<boost::filesystem::path> > > stages; +static int next_verify_test_number = 1; static void stage (string s, optional<boost::filesystem::path> p) @@ -62,16 +63,16 @@ progress (float) } static vector<boost::filesystem::path> -setup (int n) +setup (int reference_number, int verify_test_number) { - boost::filesystem::remove_all (dcp::String::compose("build/test/verify_test%1", n)); - boost::filesystem::create_directory (dcp::String::compose("build/test/verify_test%1", n)); - for (boost::filesystem::directory_iterator i("test/ref/DCP/dcp_test1"); i != boost::filesystem::directory_iterator(); ++i) { - boost::filesystem::copy_file (i->path(), dcp::String::compose("build/test/verify_test%1", n) / i->path().filename()); + boost::filesystem::remove_all (dcp::String::compose("build/test/verify_test%1", verify_test_number)); + boost::filesystem::create_directory (dcp::String::compose("build/test/verify_test%1", verify_test_number)); + for (boost::filesystem::directory_iterator i(dcp::String::compose("test/ref/DCP/dcp_test%1", reference_number)); i != boost::filesystem::directory_iterator(); ++i) { + boost::filesystem::copy_file (i->path(), dcp::String::compose("build/test/verify_test%1", verify_test_number) / i->path().filename()); } vector<boost::filesystem::path> directories; - directories.push_back (dcp::String::compose("build/test/verify_test%1", n)); + directories.push_back (dcp::String::compose("build/test/verify_test%1", verify_test_number)); return directories; } @@ -115,17 +116,18 @@ dump_notes (list<dcp::VerificationNote> const & notes) /* Check DCP as-is (should be OK) */ BOOST_AUTO_TEST_CASE (verify_test1) { - vector<boost::filesystem::path> directories = setup (1); + stages.clear (); + vector<boost::filesystem::path> directories = setup (1, next_verify_test_number); list<dcp::VerificationNote> notes = dcp::verify (directories, &stage, &progress, "xsd"); - boost::filesystem::path const cpl_file = "build/test/verify_test1/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml"; - boost::filesystem::path const pkl_file = "build/test/verify_test1/pkl_ae8a9818-872a-4f86-8493-11dfdea03e09.xml"; - boost::filesystem::path const assetmap_file = "build/test/verify_test1/ASSETMAP.xml"; + boost::filesystem::path const cpl_file = dcp::String::compose("build/test/verify_test%1/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml", next_verify_test_number); + boost::filesystem::path const pkl_file = dcp::String::compose("build/test/verify_test1/pkl_ae8a9818-872a-4f86-8493-11dfdea03e09.xml", next_verify_test_number); + boost::filesystem::path const assetmap_file = dcp::String::compose("build/test/verify_test1/ASSETMAP.xml", next_verify_test_number); list<pair<string, optional<boost::filesystem::path> > >::const_iterator st = stages.begin(); BOOST_CHECK_EQUAL (st->first, "Checking DCP"); BOOST_REQUIRE (st->second); - BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical("build/test/verify_test1")); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(dcp::String::compose("build/test/verify_test%1", next_verify_test_number))); ++st; BOOST_CHECK_EQUAL (st->first, "Checking CPL"); BOOST_REQUIRE (st->second); @@ -136,11 +138,11 @@ BOOST_AUTO_TEST_CASE (verify_test1) ++st; BOOST_CHECK_EQUAL (st->first, "Checking picture asset hash"); BOOST_REQUIRE (st->second); - BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical("build/test/verify_test1/video.mxf")); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(dcp::String::compose("build/test/verify_test%1/video.mxf", next_verify_test_number))); ++st; BOOST_CHECK_EQUAL (st->first, "Checking sound asset hash"); BOOST_REQUIRE (st->second); - BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical("build/test/verify_test1/audio.mxf")); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(dcp::String::compose("build/test/verify_test%1/audio.mxf", next_verify_test_number))); ++st; BOOST_CHECK_EQUAL (st->first, "Checking PKL"); BOOST_REQUIRE (st->second); @@ -155,12 +157,14 @@ BOOST_AUTO_TEST_CASE (verify_test1) dump_notes (notes); BOOST_CHECK_EQUAL (notes.size(), 0); + + next_verify_test_number++; } /* Corrupt the MXFs and check that this is spotted */ BOOST_AUTO_TEST_CASE (verify_test2) { - vector<boost::filesystem::path> directories = setup (2); + vector<boost::filesystem::path> directories = setup (1, next_verify_test_number++); FILE* mod = fopen("build/test/verify_test2/video.mxf", "r+b"); BOOST_REQUIRE (mod); @@ -187,7 +191,7 @@ BOOST_AUTO_TEST_CASE (verify_test2) /* Corrupt the hashes in the PKL and check that the disagreement between CPL and PKL is spotted */ BOOST_AUTO_TEST_CASE (verify_test3) { - vector<boost::filesystem::path> directories = setup (3); + vector<boost::filesystem::path> directories = setup (1, next_verify_test_number++); { Editor e ("build/test/verify_test3/pkl_ae8a9818-872a-4f86-8493-11dfdea03e09.xml"); @@ -223,7 +227,7 @@ BOOST_AUTO_TEST_CASE (verify_test3) /* Corrupt the ContentKind in the CPL */ BOOST_AUTO_TEST_CASE (verify_test4) { - vector<boost::filesystem::path> directories = setup (4); + vector<boost::filesystem::path> directories = setup (1, next_verify_test_number++); { Editor e ("build/test/verify_test4/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml"); @@ -261,7 +265,7 @@ asset_map (int n) static void check_after_replace (int n, boost::function<boost::filesystem::path (int)> file, string from, string to, dcp::VerificationNote::Code code1) { - vector<boost::filesystem::path> directories = setup (n); + vector<boost::filesystem::path> directories = setup (1, n); { Editor e (file(n)); @@ -279,7 +283,7 @@ void check_after_replace (int n, boost::function<boost::filesystem::path (int)> static void check_after_replace (int n, boost::function<boost::filesystem::path (int)> file, string from, string to, dcp::VerificationNote::Code code1, dcp::VerificationNote::Code code2) { - vector<boost::filesystem::path> directories = setup (n); + vector<boost::filesystem::path> directories = setup (1, n); { Editor e (file(n)); @@ -305,7 +309,7 @@ void check_after_replace ( dcp::VerificationNote::Code code3 ) { - vector<boost::filesystem::path> directories = setup (n); + vector<boost::filesystem::path> directories = setup (1, n); { Editor e (file(n)); @@ -329,7 +333,7 @@ void check_after_replace ( BOOST_AUTO_TEST_CASE (verify_test5) { check_after_replace ( - 5, &cpl, + next_verify_test_number++, &cpl, "<FrameRate>24 1", "<FrameRate>99 1", dcp::VerificationNote::CPL_HASH_INCORRECT, dcp::VerificationNote::INVALID_PICTURE_FRAME_RATE @@ -339,7 +343,7 @@ BOOST_AUTO_TEST_CASE (verify_test5) /* Missing asset */ BOOST_AUTO_TEST_CASE (verify_test6) { - vector<boost::filesystem::path> directories = setup (6); + vector<boost::filesystem::path> directories = setup (1, next_verify_test_number++); boost::filesystem::remove ("build/test/verify_test6/video.mxf"); list<dcp::VerificationNote> notes = dcp::verify (directories, &stage, &progress, "xsd"); @@ -360,7 +364,7 @@ assetmap (int n) BOOST_AUTO_TEST_CASE (verify_test7) { check_after_replace ( - 7, &assetmap, + next_verify_test_number++, &assetmap, "<Path>video.mxf</Path>", "<Path></Path>", dcp::VerificationNote::EMPTY_ASSET_PATH ); @@ -370,7 +374,7 @@ BOOST_AUTO_TEST_CASE (verify_test7) BOOST_AUTO_TEST_CASE (verify_test8) { check_after_replace ( - 8, &cpl, + next_verify_test_number++, &cpl, "http://www.smpte-ra.org/schemas/429-7/2006/CPL", "http://www.digicine.com/PROTO-ASDCP-CPL-20040511#", dcp::VerificationNote::MISMATCHED_STANDARD, dcp::VerificationNote::XML_VALIDATION_ERROR, @@ -383,7 +387,7 @@ BOOST_AUTO_TEST_CASE (verify_test9) { /* There's no CPL_HASH_INCORRECT error here because it can't find the correct hash by ID (since the ID is wrong) */ check_after_replace ( - 9, &cpl, + next_verify_test_number++, &cpl, "<Id>urn:uuid:81fb54df-e1bf-4647-8788-ea7ba154375b", "<Id>urn:uuid:81fb54df-e1bf-4647-8788-ea7ba154375", dcp::VerificationNote::XML_VALIDATION_ERROR ); @@ -393,7 +397,7 @@ BOOST_AUTO_TEST_CASE (verify_test9) BOOST_AUTO_TEST_CASE (verify_test10) { check_after_replace ( - 10, &cpl, + next_verify_test_number++, &cpl, "<IssueDate>", "<IssueDate>x", dcp::VerificationNote::XML_VALIDATION_ERROR, dcp::VerificationNote::CPL_HASH_INCORRECT @@ -404,7 +408,7 @@ BOOST_AUTO_TEST_CASE (verify_test10) BOOST_AUTO_TEST_CASE (verify_test11) { check_after_replace ( - 11, &pkl, + next_verify_test_number++, &pkl, "<Id>urn:uuid:ae8", "<Id>urn:uuid:xe8", dcp::VerificationNote::XML_VALIDATION_ERROR ); @@ -414,8 +418,78 @@ BOOST_AUTO_TEST_CASE (verify_test11) BOOST_AUTO_TEST_CASE (verify_test12) { check_after_replace ( - 12, &asset_map, + next_verify_test_number++, &asset_map, "<Id>urn:uuid:74e", "<Id>urn:uuid:x4e", dcp::VerificationNote::XML_VALIDATION_ERROR ); } + +/* Basic test of an Interop DCP */ +BOOST_AUTO_TEST_CASE (verify_test13) +{ + stages.clear (); + vector<boost::filesystem::path> directories = setup (3, next_verify_test_number); + list<dcp::VerificationNote> notes = dcp::verify (directories, &stage, &progress, "xsd"); + + boost::filesystem::path const cpl_file = dcp::String::compose("build/test/verify_test%1/cpl_cbfd2bc0-21cf-4a8f-95d8-9cddcbe51296.xml", next_verify_test_number); + boost::filesystem::path const pkl_file = dcp::String::compose("build/test/verify_test%1/pkl_d87a950c-bd6f-41f6-90cc-56ccd673e131.xml", next_verify_test_number); + boost::filesystem::path const assetmap_file = dcp::String::compose("build/test/verify_test%1/ASSETMAP", next_verify_test_number); + + list<pair<string, optional<boost::filesystem::path> > >::const_iterator st = stages.begin(); + BOOST_CHECK_EQUAL (st->first, "Checking DCP"); + BOOST_REQUIRE (st->second); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(dcp::String::compose("build/test/verify_test%1", next_verify_test_number))); + ++st; + BOOST_CHECK_EQUAL (st->first, "Checking CPL"); + BOOST_REQUIRE (st->second); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(cpl_file)); + ++st; + BOOST_CHECK_EQUAL (st->first, "Checking reel"); + BOOST_REQUIRE (!st->second); + ++st; + BOOST_CHECK_EQUAL (st->first, "Checking picture asset hash"); + BOOST_REQUIRE (st->second); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(dcp::String::compose("build/test/verify_test%1/j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf", next_verify_test_number))); + ++st; + BOOST_CHECK_EQUAL (st->first, "Checking sound asset hash"); + BOOST_REQUIRE (st->second); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(dcp::String::compose("build/test/verify_test%1/pcm_69cf9eaf-9a99-4776-b022-6902208626c3.mxf", next_verify_test_number))); + ++st; + BOOST_CHECK_EQUAL (st->first, "Checking PKL"); + BOOST_REQUIRE (st->second); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(pkl_file)); + ++st; + BOOST_CHECK_EQUAL (st->first, "Checking ASSETMAP"); + BOOST_REQUIRE (st->second); + BOOST_CHECK_EQUAL (st->second.get(), boost::filesystem::canonical(assetmap_file)); + ++st; + BOOST_REQUIRE (st == stages.end()); + + dump_notes (notes); + + BOOST_CHECK_EQUAL (notes.size(), 0); + + next_verify_test_number++; +} + +/* DCP with a short asset */ +BOOST_AUTO_TEST_CASE (verify_test14) +{ + vector<boost::filesystem::path> directories = setup (8, next_verify_test_number); + list<dcp::VerificationNote> notes = dcp::verify (directories, &stage, &progress, "xsd"); + + dump_notes (notes); + + BOOST_REQUIRE_EQUAL (notes.size(), 4); + list<dcp::VerificationNote>::const_iterator i = notes.begin (); + BOOST_CHECK_EQUAL (i->code(), dcp::VerificationNote::DURATION_TOO_SMALL); + ++i; + BOOST_CHECK_EQUAL (i->code(), dcp::VerificationNote::INTRINSIC_DURATION_TOO_SMALL); + ++i; + BOOST_CHECK_EQUAL (i->code(), dcp::VerificationNote::DURATION_TOO_SMALL); + ++i; + BOOST_CHECK_EQUAL (i->code(), dcp::VerificationNote::INTRINSIC_DURATION_TOO_SMALL); + ++i; + next_verify_test_number++; +} + @@ -231,7 +231,7 @@ def build(bld): if not bld.env.DISABLE_EXAMPLES: bld.recurse('examples') - for i in ['SMPTE-429-7-2006-CPL.xsd', 'SMPTE-429-8-2006-PKL.xsd', 'SMPTE-429-9-2007-AM.xsd', 'xmldsig-core-schema.xsd', 'XMLSchema.dtd', 'XMLSchema.xsd', 'xml.xsd' ]: + for i in ['SMPTE-429-7-2006-CPL.xsd', 'SMPTE-429-8-2006-PKL.xsd', 'SMPTE-429-9-2007-AM.xsd', 'xmldsig-core-schema.xsd', 'XMLSchema.dtd', 'XMLSchema.xsd', 'xml.xsd', 'PROTO-ASDCP-CPL-20040511.xsd', 'PROTO-ASDCP-PKL-20040311.xsd', 'PROTO-ASDCP-AM-20040311.xsd', 'Main-Stereo-Picture-CPL.xsd' ]: bld.install_files('${PREFIX}/share/libdcp/xsd', os.path.join('xsd', i)) bld.add_post_fun(post) diff --git a/xsd/Main-Stereo-Picture-CPL.xsd b/xsd/Main-Stereo-Picture-CPL.xsd new file mode 100644 index 00000000..bec275e8 --- /dev/null +++ b/xsd/Main-Stereo-Picture-CPL.xsd @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema targetNamespace="http://www.digicine.com/schemas/437-Y/2007/Main-Stereo-Picture-CPL" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:cpl="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" + elementFormDefault="qualified" attributeFormDefault="unqualified"> + <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd"/> + <xs:import namespace="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" schemaLocation="http://www.digicine.com/PROTO-ASDCP-CPL-20040511.xsd"/> + <!--MainStereoscopicPicture--> + <xs:element name="MainStereoscopicPicture" type="cpl:PictureTrackFileAssetType"/> +</xs:schema> + diff --git a/xsd/PROTO-ASDCP-AM-20040311.xsd b/xsd/PROTO-ASDCP-AM-20040311.xsd new file mode 100644 index 00000000..f63540d0 --- /dev/null +++ b/xsd/PROTO-ASDCP-AM-20040311.xsd @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Schema for Interop Asset Map namespace --> +<!-- Assembled from mpeg_ii_am_spec.doc 2004-11-23 --> + +<xs:schema + targetNamespace="http://www.digicine.com/PROTO-ASDCP-AM-20040311#" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:cpl="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" + xmlns:am="http://www.digicine.com/PROTO-ASDCP-AM-20040311#" + elementFormDefault="qualified" attributeFormDefault="unqualified"> + +<!--The following xs:import statements should not really be here, but are + provided so that XMLSpy will validate the schema itself, independently + of an instance of a Asset Map +--> +<xs:import namespace="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" + schemaLocation="http://www.digicine.com/PROTO-ASDCP-CPL-20040511.xsd"/> + + <!-- Asset Map Type --> + <xs:element name="AssetMap" type="am:AssetMapType"/> + <xs:complexType name="AssetMapType"> + <xs:sequence> + <xs:element name="Id" type="cpl:UUID"/> + <xs:element name="AnnotationText" type="cpl:UserText" minOccurs="0"/> + <xs:element name="VolumeCount" type="xs:positiveInteger"/> + <xs:element name="IssueDate" type="xs:dateTime"/> + <xs:element name="Issuer" type="cpl:UserText"/> + <xs:element name="Creator" type="cpl:UserText"/> + <xs:element name="AssetList"> + <xs:complexType> + <xs:sequence> + <xs:element ref="am:Asset" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + + <!-- Asset Type --> + <xs:element name="Asset" type="am:AssetType"/> + <xs:complexType name="AssetType"> + <xs:sequence> + <xs:element name="Id" type="cpl:UUID"/> + <xs:element name="AnnotationText" type="cpl:UserText" minOccurs="0"/> + <xs:element name="PackingList" minOccurs="0"/> + <xs:element name="ChunkList"> + <xs:complexType> + <xs:sequence> + <xs:element ref="am:Chunk" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + + <!-- Chunk Type --> + <xs:element name="Chunk" type="am:ChunkType"/> + <xs:complexType name="ChunkType"> + <xs:sequence> + <xs:element name="Path" type="xs:string"/> + <xs:element name="VolumeIndex" type="xs:positiveInteger" minOccurs="0"/> + <xs:element name="Offset" type="xs:nonNegativeInteger" minOccurs="0"/> + <xs:element name="Length" type="xs:positiveInteger" minOccurs="0"/> + </xs:sequence> + </xs:complexType> + +</xs:schema> diff --git a/xsd/PROTO-ASDCP-CPL-20040511.xsd b/xsd/PROTO-ASDCP-CPL-20040511.xsd new file mode 100644 index 00000000..c870811a --- /dev/null +++ b/xsd/PROTO-ASDCP-CPL-20040511.xsd @@ -0,0 +1,251 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Schema for Interop Composition Play List namespace --> +<!-- Assembled from mpeg_ii_cpl_spec.doc 2004-11-23 --> + +<xs:schema + targetNamespace="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" + elementFormDefault="qualified" attributeFormDefault="unqualified" + xmlns:cpl="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> + +<!--The following xs:import statements should not really be here, but are + provided so that XMLSpy will validate the schema itself, independently + of an instance of a CPL. The schema xml.xsd is brought in for language identifiers. +--> +<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" + schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/> +<xs:import namespace="http://www.w3.org/XML/1998/namespace" + schemaLocation="http://www.w3.org/2001/03/xml.xsd"/> +<xs:import namespace="http://www.digicine.com/schemas/437-Y/2007/Main-Stereo-Picture-CPL" + schemaLocation="http://www.digicine.com/schemas/437-Y/2007/Main-Stereo-Picture-CPL.xsd"/> + +<!-- Composition Playlist --> + <xs:element name="CompositionPlaylist" type="cpl:CompositionPlaylistType" /> + <xs:complexType name="CompositionPlaylistType"> + <xs:sequence> + <xs:element name="Id" type="cpl:UUID"/> + <xs:element name="AnnotationText" type="cpl:UserText" minOccurs="0"/> + <xs:element name="IconId" type="cpl:UUID" minOccurs="0"/> + <xs:element name="IssueDate" type="xs:dateTime"/> + <xs:element name="Issuer" type="cpl:UserText"/> + <xs:element name="Creator" type="cpl:UserText"/> + <xs:element name="ContentTitleText" type="cpl:UserText"/> + <xs:element ref="cpl:ContentKind"/> + <xs:element ref="cpl:ContentVersion" minOccurs="0"/> + <xs:element name="RatingList"> + <xs:complexType> + <xs:sequence> + <xs:element ref="cpl:Rating" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="ReelList"> + <xs:complexType> + <xs:sequence> + <xs:element ref="cpl:Reel" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="Signer" type="ds:KeyInfoType" minOccurs="0"/> + <xs:element ref="ds:Signature" minOccurs="0"/> + </xs:sequence> + </xs:complexType> + +<!-- Internally Defined Types --> + + <!-- Marker Type --> + <xs:element name="Marker" type="cpl:MarkerType" /> + <xs:complexType name="MarkerType"> + <xs:sequence> + <xs:element name="Label"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="scope" type="xs:anyURI" use="optional" default="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#standard-markers" /> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="AnnotationText" type="cpl:UserText" minOccurs="0" /> + <xs:element name="Offset"> + <xs:simpleType> + <xs:restriction base="xs:long"> + <xs:minInclusive value="0" /> + </xs:restriction> + </xs:simpleType> + </xs:element> + </xs:sequence> + </xs:complexType> + + <!-- Rating Type --> + <xs:element name="Rating" type="cpl:RatingType"/> + <xs:complexType name="RatingType"> + <xs:sequence> + <xs:element name="Agency" type="xs:anyURI" /> + <xs:element name="Label" type="xs:string" /> + </xs:sequence> + </xs:complexType> + + <!-- ContentKind Type --> + <xs:element name="ContentKind" type="cpl:ContentKindType"/> + <xs:complexType name="ContentKindType"> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="scope" type="xs:anyURI" use="optional" default="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#standard-content"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + + <!-- ContentVersion Type --> + <xs:element name="ContentVersion" type="cpl:ContentVersionType"/> + <xs:complexType name="ContentVersionType"> + <xs:sequence> + <xs:element name="Id" type="xs:anyURI" minOccurs="0"/> + <xs:element name="LabelText" type="cpl:UserText"/> + </xs:sequence> + </xs:complexType> + + <!-- Reel Type --> + <xs:element name="Reel" type="cpl:ReelType" /> + <xs:complexType name="ReelType"> + <xs:sequence> + <xs:element name="Id" type="cpl:UUID" /> + <xs:element name="AnnotationText" type="cpl:UserText" minOccurs="0" /> + <xs:element name="AssetList"> + <xs:complexType> + <xs:sequence> + <xs:element name="MainMarkers" type="cpl:MarkerAssetType" minOccurs="0"/> + <xs:element name="MainPicture" type="cpl:PictureTrackFileAssetType" minOccurs="0"/> + <xs:element name="MainSound" type="cpl:SoundTrackFileAssetType" minOccurs="0"/> + <xs:element name="MainSubtitle" type="cpl:SubtitleTrackFileAssetType" minOccurs="0"/> + <xs:element name="ProjectorData" type="cpl:ProjectorDataAssetType" minOccurs="0" maxOccurs="unbounded"/> + <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + + <!-- GenericAsset Type --> + <xs:complexType name="GenericAssetType" abstract="1"> + <xs:sequence> + <xs:element name="Id" type="cpl:UUID" /> + <xs:element name="AnnotationText" type="cpl:UserText" minOccurs="0" /> + <xs:element name="EditRate" type="cpl:Rational" /> + <xs:element name="IntrinsicDuration" type="xs:long" /> + <xs:element name="EntryPoint" type="xs:long" minOccurs="0" /> + <xs:element name="Duration" type="xs:long" minOccurs="0" /> + </xs:sequence> + </xs:complexType> + + <!-- TrackFileAsset Type --> + <xs:complexType name="TrackFileAssetType" abstract="1"> + <xs:complexContent> + <xs:extension base="cpl:GenericAssetType"> + <xs:sequence> + <xs:element name="KeyId" type="cpl:UUID" minOccurs="0"/> + <xs:element name="Hash" type="xs:base64Binary" minOccurs="0"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <!-- SoundTrackFileAsset Type --> + <xs:complexType name="SoundTrackFileAssetType"> + <xs:complexContent> + <xs:extension base="cpl:TrackFileAssetType"> + <xs:sequence> + <xs:element name="Language" type="xs:language" minOccurs="0"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <!-- SubtitleTrackFileAsset Type --> + <xs:complexType name="SubtitleTrackFileAssetType"> + <xs:complexContent> + <xs:extension base="cpl:TrackFileAssetType"> + <xs:sequence> + <xs:element name="Language" type="xs:language" minOccurs="0"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <!-- PictureTrackFileAsset Type --> + <xs:complexType name="PictureTrackFileAssetType"> + <xs:complexContent> + <xs:extension base="cpl:TrackFileAssetType"> + <xs:sequence> + <xs:element name="FrameRate" type="cpl:Rational"/> + <xs:element name="ScreenAspectRatio"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:decimal"> + <xs:attribute name="scope" type="xs:anyURI" use="optional" default="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#standard-aspectratio"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <!-- MarkerAsset Type --> + <xs:complexType name="MarkerAssetType"> + <xs:complexContent> + <xs:extension base="cpl:GenericAssetType"> + <xs:sequence> + <xs:element name="MarkerList"> + <xs:complexType> + <xs:sequence> + <xs:element name="Marker" type="cpl:MarkerType" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <!-- ProjectorDataAsset Type --> + <xs:complexType name="ProjectorDataAssetType"> + <xs:complexContent> + <xs:extension base="cpl:GenericAssetType"> + <xs:sequence> + <xs:element name="DataInfo" type="xs:string" minOccurs="0"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <!-- Rational Type --> + <xs:simpleType name="Rational"> + <xs:restriction> + <xs:simpleType> + <xs:list itemType="xs:long"/> + </xs:simpleType> + <xs:length value="2"/> + </xs:restriction> + </xs:simpleType> + + <!-- UUID Type --> + <xs:simpleType name="UUID"> + <xs:restriction base="xs:anyURI"> + <xs:pattern value="urn:uuid:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" /> + </xs:restriction> + </xs:simpleType> + + <!-- UserText Type --> + <xs:complexType name="UserText"> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute ref="xml:lang" use="optional" default="en"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + +</xs:schema> + diff --git a/xsd/PROTO-ASDCP-PKL-20040311.xsd b/xsd/PROTO-ASDCP-PKL-20040311.xsd new file mode 100644 index 00000000..0be3cd3d --- /dev/null +++ b/xsd/PROTO-ASDCP-PKL-20040311.xsd @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Schema for Interop Asset Map namespace --> +<!-- Assembled from mpeg_ii_am_spec.doc 2004-11-23 --> + +<xs:schema + targetNamespace="http://www.digicine.com/PROTO-ASDCP-PKL-20040311#" + xmlns:ds="http://www.w3.org/2000/09/xmldsig#" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:pkl="http://www.digicine.com/PROTO-ASDCP-PKL-20040311#" + xmlns:cpl="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" + elementFormDefault="qualified" attributeFormDefault="unqualified"> + +<!--The following xs:import statements should not really be here, but are + provided so that XMLSpy will validate the schema itself, independently + of an instance of a Packing List +--> +<xs:import namespace="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#" + schemaLocation="http://www.digicine.com/PROTO-ASDCP-CPL-20040511.xsd"/> +<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" + schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/> +<xs:import namespace="http://www.w3.org/XML/1998/namespace" + schemaLocation="http://www.w3.org/2001/03/xml.xsd"/> + +<!-- Packing List Type --> + <xs:element name="PackingList" type="pkl:PackingListType"/> + <xs:complexType name="PackingListType"> + <xs:sequence> + <xs:element name="Id" type="cpl:UUID"/> + <xs:element name="AnnotationText" type="cpl:UserText" minOccurs="0"/> + <xs:element name="IconId" type="cpl:UUID" minOccurs="0"/> + <xs:element name="IssueDate" type="xs:dateTime"/> + <xs:element name="Issuer" type="cpl:UserText"/> + <xs:element name="Creator" type="cpl:UserText"/> + <xs:element name="AssetList"> + <xs:complexType> + <xs:sequence> + <xs:element ref="pkl:Asset" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="Signer" type="ds:KeyInfoType" minOccurs="0"/> + <xs:element ref="ds:Signature" minOccurs="0"/> + </xs:sequence> + </xs:complexType> + +<!-- Asset Type --> + <xs:element name="Asset" type="pkl:AssetType"/> + <xs:complexType name="AssetType"> + <xs:sequence> + <xs:element name="Id" type="cpl:UUID"/> + <xs:element name="AnnotationText" type="cpl:UserText" minOccurs="0"/> + <xs:element name="Hash" type="xs:base64Binary" minOccurs="0"/> + <xs:element name="Size" type="xs:positiveInteger"/> + <xs:element name="Type" type="xs:string"/> + <xs:element name="OriginalFileName" type="xs:string" minOccurs="0"/> + </xs:sequence> + </xs:complexType> + +</xs:schema> + |
