Specify CPL standard on construction.
authorCarl Hetherington <cth@carlh.net>
Sun, 11 Apr 2021 20:24:44 +0000 (22:24 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 11 Apr 2021 23:22:10 +0000 (01:22 +0200)
Then choose which standard DCP should use based on the CPL(s).

21 files changed:
examples/make_dcp.cc
src/combine.cc
src/cpl.cc
src/cpl.h
src/dcp.cc
src/dcp.h
test/combine_test.cc
test/cpl_metadata_test.cc
test/cpl_ratings_test.cc
test/dcp_font_test.cc
test/dcp_test.cc
test/encryption_test.cc
test/kdm_test.cc
test/markers_test.cc
test/mca_test.cc
test/round_trip_test.cc
test/test.cc
test/test.h
test/verify_test.cc
test/write_subtitle_test.cc
tools/dcprecover.cc

index dbd95a527627bf0b5a8e48b64e887e28c325978a..bbe29545b4e9fa97ba258e763e3318f8d6467929 100644 (file)
@@ -101,13 +101,13 @@ main ()
        reel->add(std::make_shared<dcp::ReelSoundAsset>(sound_asset, 0));
 
        /* Make a CPL with this reel */
-       auto cpl = std::make_shared<dcp::CPL>("My film", dcp::ContentKind::FEATURE);
+       auto cpl = std::make_shared<dcp::CPL>("My film", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        cpl->add(reel);
 
        /* Write the DCP */
        dcp::DCP dcp ("DCP");
        dcp.add (cpl);
-       dcp.write_xml (dcp::Standard::SMPTE);
+       dcp.write_xml ();
 
        return 0;
 }
index da893cb73d5738cfcb6485e5c157671d720f78ab..e974c4074ab8ef778e89e7bf1545b37358ab0bce 100644 (file)
@@ -173,5 +173,5 @@ dcp::combine (
                }
        }
 
-       output_dcp.write_xml (*standard, issuer, creator, issue_date, annotation_text, signer);
+       output_dcp.write_xml (issuer, creator, issue_date, annotation_text, signer);
 }
index 3b5497576b5cef71808af84f3399420e93c4e738..3867c238c222033aa727a4dc0a2aea36b219b14c 100644 (file)
@@ -80,7 +80,7 @@ static string const smpte_395_ns = "http://www.smpte-ra.org/reg/395/2014/13/1/aa
 static string const smpte_335_ns = "http://www.smpte-ra.org/reg/335/2012";
 
 
-CPL::CPL (string annotation_text, ContentKind content_kind)
+CPL::CPL (string annotation_text, ContentKind content_kind, Standard standard)
        /* default _content_title_text to annotation_text */
        : _issuer ("libdcp" LIBDCP_VERSION)
        , _creator ("libdcp" LIBDCP_VERSION)
@@ -88,6 +88,7 @@ CPL::CPL (string annotation_text, ContentKind content_kind)
        , _annotation_text (annotation_text)
        , _content_title_text (annotation_text)
        , _content_kind (content_kind)
+       , _standard (standard)
 {
        ContentVersion cv;
        cv.label_text = cv.id + LocalTime().as_string();
@@ -139,7 +140,7 @@ CPL::CPL (boost::filesystem::path file)
        }
 
        for (auto i: f.node_child("ReelList")->node_children("Reel")) {
-               _reels.push_back (make_shared<Reel>(i, *_standard));
+               _reels.push_back (make_shared<Reel>(i, _standard));
        }
 
        auto reel_list = f.node_child ("ReelList");
@@ -170,11 +171,11 @@ CPL::add (std::shared_ptr<Reel> reel)
 
 
 void
-CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr<const CertificateChain> signer) const
+CPL::write_xml (boost::filesystem::path file, shared_ptr<const CertificateChain> signer) const
 {
        xmlpp::Document doc;
        xmlpp::Element* root;
-       if (standard == Standard::INTEROP) {
+       if (_standard == Standard::INTEROP) {
                root = doc.create_root_node ("CompositionPlaylist", cpl_interop_ns);
        } else {
                root = doc.create_root_node ("CompositionPlaylist", cpl_smpte_ns);
@@ -209,8 +210,8 @@ CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr<cons
 
        bool first = true;
        for (auto i: _reels) {
-               auto asset_list = i->write_to_cpl (reel_list, standard);
-               if (first && standard == Standard::SMPTE) {
+               auto asset_list = i->write_to_cpl (reel_list, _standard);
+               if (first && _standard == Standard::SMPTE) {
                        maybe_write_composition_metadata_asset (asset_list);
                        first = false;
                }
@@ -219,7 +220,7 @@ CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr<cons
        indent (root, 0);
 
        if (signer) {
-               signer->sign (root, standard);
+               signer->sign (root, _standard);
        }
 
        doc.write_to_file_formatted (file.string(), "UTF-8");
index 84dbd9ff52d7e784cc2e09a5d845c243c57f28a8..03e35a4e3220b3a08257572dac1642a9da047067 100644 (file)
--- a/src/cpl.h
+++ b/src/cpl.h
@@ -73,7 +73,7 @@ class DecryptedKDM;
 class CPL : public Asset
 {
 public:
-       CPL (std::string annotation_text, ContentKind content_kind);
+       CPL (std::string annotation_text, ContentKind content_kind, Standard standard);
 
        /** Construct a CPL object from a XML file */
        explicit CPL (boost::filesystem::path file);
@@ -117,12 +117,10 @@ public:
        /** Write an CompositonPlaylist XML file
         *
         *  @param file Filename to write
-        *  @param standard INTEROP or SMPTE
         *  @param signer Signer to sign the CPL, or 0 to add no signature
         */
        void write_xml (
                boost::filesystem::path file,
-               Standard standard,
                std::shared_ptr<const CertificateChain>
                ) const;
 
@@ -306,7 +304,7 @@ public:
 
        void set_additional_subtitle_languages (std::vector<dcp::LanguageTag> const& lang);
 
-       boost::optional<Standard> standard () const {
+       Standard standard () const {
                return _standard;
        }
 
@@ -354,7 +352,7 @@ private:
        std::vector<std::shared_ptr<Reel>> _reels;
 
        /** Standard of CPL that was read in */
-       boost::optional<Standard> _standard;
+       Standard _standard;
 };
 
 
index 20ff82f864177231de0f6c4790575dfe8fbd4ce0..bcf487e1d2c718dfe74f5a59d26db98ddaf5b1c6 100644 (file)
@@ -67,6 +67,7 @@
 #include <libxml++/libxml++.h>
 #include <boost/filesystem.hpp>
 #include <boost/algorithm/string.hpp>
+#include <numeric>
 
 
 using std::string;
@@ -229,7 +230,7 @@ DCP::read (vector<dcp::VerificationNote>* notes, bool ignore_incorrect_picture_m
 
                        if (root == "CompositionPlaylist") {
                                auto cpl = make_shared<CPL>(path);
-                               if (_standard && cpl->standard() && cpl->standard().get() != _standard.get() && notes) {
+                               if (_standard && cpl->standard() != _standard.get() && notes) {
                                        notes->push_back ({VerificationNote::Type::ERROR, VerificationNote::Code::MISMATCHED_STANDARD});
                                }
                                _cpls.push_back (cpl);
@@ -469,7 +470,6 @@ DCP::write_assetmap (
 
 void
 DCP::write_xml (
-       Standard standard,
        string issuer,
        string creator,
        string issue_date,
@@ -478,10 +478,24 @@ DCP::write_xml (
        NameFormat name_format
        )
 {
+       if (_cpls.empty()) {
+               throw MiscError ("Cannot write DCP with no CPLs.");
+       }
+
+       auto standard = std::accumulate (
+               std::next(_cpls.begin()), _cpls.end(), _cpls[0]->standard(),
+               [](Standard s, shared_ptr<CPL> c) {
+                       if (s != c->standard()) {
+                               throw MiscError ("Cannot make DCP with mixed Interop and SMPTE CPLs.");
+                       }
+                       return s;
+               }
+               );
+
        for (auto i: cpls()) {
                NameFormat::Map values;
                values['t'] = "cpl";
-               i->write_xml (_directory / (name_format.get(values, "_" + i->id() + ".xml")), standard, signer);
+               i->write_xml (_directory / (name_format.get(values, "_" + i->id() + ".xml")), signer);
        }
 
        shared_ptr<PKL> pkl;
index 403eea9ef8f3b049d6665bde70a32e0caf1229bd..6e50c48eb3d94c967fd9246795168e61d66bfc1e 100644 (file)
--- a/src/dcp.h
+++ b/src/dcp.h
@@ -151,7 +151,6 @@ public:
         *  @param name_format Name format to use for the CPL and PKL filenames
         */
        void write_xml (
-               Standard standard,
                std::string issuer = String::compose("libdcp %1", dcp::version),
                std::string creator = String::compose("libdcp %1", dcp::version),
                std::string issue_date = LocalTime().as_string(),
index 99795592d6596903e7540a5918d0a3da64b27b2f..280137c35afa8e1a078c56782e8f5cefc1a4598e 100644 (file)
@@ -176,7 +176,7 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_same_asset_filenames_test)
        boost::filesystem::path const out = "build/test/combine_two_dcps_with_same_asset_filenames_test";
 
        shared_ptr<dcp::DCP> second = make_simple ("build/test/combine_input2");
-       second->write_xml (dcp::Standard::SMPTE);
+       second->write_xml ();
 
        remove_all (out);
        vector<path> inputs;
@@ -196,10 +196,9 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_interop_subs_test)
        boost::filesystem::path const out = "build/test/combine_two_dcps_with_interop_subs_test";
 
        auto first = make_simple_with_interop_subs ("build/test/combine_input1");
-       first->write_xml (dcp::Standard::INTEROP);
+       first->write_xml ();
 
        auto second = make_simple_with_interop_subs ("build/test/combine_input2");
-       second->write_xml (dcp::Standard::INTEROP);
 
        remove_all (out);
        vector<path> inputs;
@@ -219,10 +218,10 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_smpte_subs_test)
        boost::filesystem::path const out = "build/test/combine_two_dcps_with_smpte_subs_test";
 
        shared_ptr<dcp::DCP> first = make_simple_with_smpte_subs ("build/test/combine_input1");
-       first->write_xml (dcp::Standard::SMPTE);
+       first->write_xml ();
 
        shared_ptr<dcp::DCP> second = make_simple_with_smpte_subs ("build/test/combine_input2");
-       second->write_xml (dcp::Standard::SMPTE);
+       second->write_xml ();
 
        remove_all (out);
        vector<path> inputs;
@@ -242,10 +241,10 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_interop_ccaps_test)
        boost::filesystem::path const out = "build/test/combine_two_dcps_with_interop_ccaps_test";
 
        shared_ptr<dcp::DCP> first = make_simple_with_interop_ccaps ("build/test/combine_input1");
-       first->write_xml (dcp::Standard::INTEROP);
+       first->write_xml ();
 
        shared_ptr<dcp::DCP> second = make_simple_with_interop_ccaps ("build/test/combine_input2");
-       second->write_xml (dcp::Standard::INTEROP);
+       second->write_xml ();
 
        remove_all (out);
        vector<path> inputs;
@@ -265,10 +264,10 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_smpte_ccaps_test)
        boost::filesystem::path const out = "build/test/combine_two_dcps_with_interop_ccaps_test";
 
        shared_ptr<dcp::DCP> first = make_simple_with_smpte_ccaps ("build/test/combine_input1");
-       first->write_xml (dcp::Standard::SMPTE);
+       first->write_xml ();
 
        shared_ptr<dcp::DCP> second = make_simple_with_smpte_ccaps ("build/test/combine_input2");
-       second->write_xml (dcp::Standard::SMPTE);
+       second->write_xml ();
 
        remove_all (out);
        vector<path> inputs;
@@ -288,10 +287,10 @@ BOOST_AUTO_TEST_CASE (combine_two_multi_reel_dcps)
        boost::filesystem::path const out = "build/test/combine_two_multi_reel_dcps";
 
        shared_ptr<dcp::DCP> first = make_simple ("build/test/combine_input1", 4);
-       first->write_xml (dcp::Standard::SMPTE);
+       first->write_xml ();
 
        shared_ptr<dcp::DCP> second = make_simple ("build/test/combine_input2", 4);
-       second->write_xml (dcp::Standard::SMPTE);
+       second->write_xml ();
 
        remove_all (out);
        vector<path> inputs;
@@ -310,7 +309,7 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_shared_asset)
        boost::filesystem::path const out = "build/test/combine_two_dcps_with_shared_asset";
 
        shared_ptr<dcp::DCP> first = make_simple ("build/test/combine_input1", 1);
-       first->write_xml (dcp::Standard::SMPTE);
+       first->write_xml ();
 
        remove_all ("build/test/combine_input2");
        shared_ptr<dcp::DCP> second(new dcp::DCP("build/test/combine_input2"));
@@ -319,7 +318,7 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_shared_asset)
        mxf_meta.company_name = "OpenDCP";
        mxf_meta.product_version = "0.0.25";
 
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->set_content_version (
                dcp::ContentVersion("urn:uuid:75ac29aa-42ac-1234-ecae-49251abefd11","content-version-label-text")
                );
@@ -335,7 +334,7 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_shared_asset)
        reel->add (simple_markers());
        cpl->add (reel);
        second->add (cpl);
-       second->write_xml (dcp::Standard::SMPTE);
+       second->write_xml ();
 
        remove_all (out);
        vector<path> inputs;
@@ -355,7 +354,7 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_duplicated_asset)
        boost::filesystem::path const out = "build/test/combine_two_dcps_with_duplicated_asset";
 
        auto first = make_simple ("build/test/combine_input1", 1);
-       first->write_xml (dcp::Standard::SMPTE);
+       first->write_xml ();
 
        remove_all ("build/test/combine_input2");
        auto second = make_shared<dcp::DCP>("build/test/combine_input2");
@@ -364,7 +363,7 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_duplicated_asset)
        mxf_meta.company_name = "OpenDCP";
        mxf_meta.product_version = "0.0.25";
 
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->set_content_version (
                dcp::ContentVersion("urn:uuid:75ac29aa-42ac-1234-ecae-49251abefd11","content-version-label-text")
                );
@@ -384,7 +383,7 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_duplicated_asset)
        reel->add (simple_markers());
        cpl->add (reel);
        second->add (cpl);
-       second->write_xml (dcp::Standard::SMPTE);
+       second->write_xml ();
 
        remove_all (out);
        vector<path> inputs;
index 2c88d6a8b8a780ce772e7fb2509a15ce959540f2..a0dc15a87e111358a72df7453e72f217a93e8d81 100644 (file)
@@ -53,7 +53,7 @@ using std::vector;
 
 BOOST_AUTO_TEST_CASE (cpl_metadata_bad_values_test)
 {
-       dcp::CPL cpl("", dcp::ContentKind::FEATURE);
+       dcp::CPL cpl("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        BOOST_CHECK_THROW (cpl.set_version_number(-1), dcp::BadSettingError);
 
        vector<dcp::ContentVersion> cv;
@@ -252,7 +252,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test1)
 {
        RNGFixer fix;
 
-       dcp::CPL cpl("", dcp::ContentKind::FEATURE);
+       dcp::CPL cpl("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        cpl.set_issue_date ("2020-08-28T13:35:06+02:00");
 
        vector<dcp::ContentVersion> cv;
@@ -310,7 +310,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test1)
        lt.push_back(dcp::LanguageTag("fr-ZA"));
        cpl.set_additional_subtitle_languages (lt);
 
-       cpl.write_xml ("build/test/cpl_metadata_write_test1.xml", dcp::Standard::SMPTE, shared_ptr<dcp::CertificateChain>());
+       cpl.write_xml ("build/test/cpl_metadata_write_test1.xml", shared_ptr<dcp::CertificateChain>());
        check_xml (
                dcp::file_to_string("test/ref/cpl_metadata_test1.xml"),
                dcp::file_to_string("build/test/cpl_metadata_write_test1.xml"),
@@ -323,7 +323,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test1)
 BOOST_AUTO_TEST_CASE (cpl_metadata_roundtrip_test_1)
 {
        dcp::CPL cpl ("test/ref/cpl_metadata_test1.xml");
-       cpl.write_xml ("build/test/cpl_metadata_roundtrip_test1.xml", dcp::Standard::SMPTE, shared_ptr<dcp::CertificateChain>());
+       cpl.write_xml ("build/test/cpl_metadata_roundtrip_test1.xml", shared_ptr<dcp::CertificateChain>());
        vector<string> ignore;
        ignore.push_back ("Id");
        check_xml (
@@ -339,7 +339,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test2)
 {
        RNGFixer fix;
 
-       dcp::CPL cpl("", dcp::ContentKind::FEATURE);
+       dcp::CPL cpl("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        cpl.set_issue_date ("2020-08-28T13:35:06+02:00");
        cpl.set_content_version (dcp::ContentVersion("id", "version"));
        cpl.set_issuer ("libdcp1.6.4devel");
@@ -361,7 +361,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test2)
        reel->add (black_picture_asset("build/test/cpl_metadata_write_test1"));
        cpl.add (reel);
 
-       cpl.write_xml ("build/test/cpl_metadata_write_test2.xml", dcp::Standard::SMPTE, shared_ptr<dcp::CertificateChain>());
+       cpl.write_xml ("build/test/cpl_metadata_write_test2.xml", shared_ptr<dcp::CertificateChain>());
        check_xml (
                dcp::file_to_string("test/ref/cpl_metadata_test2.xml"),
                dcp::file_to_string("build/test/cpl_metadata_write_test2.xml"),
@@ -414,9 +414,9 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_read_test2)
 BOOST_AUTO_TEST_CASE (cpl_metadata_roundtrip_test_2)
 {
        dcp::CPL cpl ("test/ref/cpl_metadata_test2.xml");
-       cpl.write_xml ("build/test/cpl_metadata_roundtrip_test2.xml", dcp::Standard::SMPTE, shared_ptr<dcp::CertificateChain>());
        vector<string> ignore;
        ignore.push_back ("Id");
+       cpl.write_xml ("build/test/cpl_metadata_roundtrip_test2.xml", shared_ptr<dcp::CertificateChain>());
        check_xml (
                dcp::file_to_string("test/ref/cpl_metadata_test2.xml"),
                dcp::file_to_string("build/test/cpl_metadata_roundtrip_test2.xml"),
index 0135e6e08964fcdcf4215b4cfe6e2d3fe14a340f..17500a1348e2dc395b48cf5ce829790389e7cdd2 100644 (file)
@@ -42,7 +42,7 @@ using std::shared_ptr;
 
 BOOST_AUTO_TEST_CASE (cpl_ratings)
 {
-       dcp::CPL cpl ("annotation", dcp::ContentKind::FEATURE);
+       dcp::CPL cpl ("annotation", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
 
        vector<dcp::Rating> ratings;
        ratings.push_back (dcp::Rating("http://www.mpaa.org/2003-ratings", "PG-13"));
@@ -52,7 +52,7 @@ BOOST_AUTO_TEST_CASE (cpl_ratings)
        shared_ptr<dcp::Reel> reel(new dcp::Reel());
        cpl.add (reel);
 
-       cpl.write_xml ("build/test/cpl_ratings.xml", dcp::Standard::SMPTE, {});
+       cpl.write_xml ("build/test/cpl_ratings.xml", {});
 
        vector<string> ignore;
        ignore.push_back ("Id");
index 2ac68273e925e27f84e01a09596335c09024838a..047e02660045b475ee98bc5c710a488c9588693c 100644 (file)
@@ -66,11 +66,11 @@ BOOST_AUTO_TEST_CASE (interop_dcp_font_test)
        auto reel = make_shared<dcp::Reel>();
        reel->add (make_shared<dcp::ReelInteropSubtitleAsset>(subs, dcp::Fraction (24, 1), 24, 0));
 
-       auto cpl = make_shared<dcp::CPL>("", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("", dcp::ContentKind::TRAILER, dcp::Standard::INTEROP);
        cpl->add (reel);
 
        dcp.add (cpl);
-       dcp.write_xml (dcp::Standard::INTEROP);
+       dcp.write_xml ();
 
        dcp::DCP dcp2 (directory);
        dcp2.read ();
@@ -103,11 +103,11 @@ BOOST_AUTO_TEST_CASE (smpte_dcp_font_test)
        auto reel = make_shared<dcp::Reel>();
        reel->add (make_shared<dcp::ReelSMPTESubtitleAsset>(subs, dcp::Fraction (24, 1), 24, 0));
 
-       auto cpl = make_shared<dcp::CPL>("", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->add (reel);
 
        dcp.add (cpl);
-       dcp.write_xml (dcp::Standard::SMPTE);
+       dcp.write_xml ();
 
        dcp::DCP dcp2 (directory);
        dcp2.read ();
index fb3a605c694c537bf1688088b5aa31a5d5e876ad..95afc0dded17ea68bb62ddaa3ac633e214c6e62c 100644 (file)
@@ -68,7 +68,7 @@ BOOST_AUTO_TEST_CASE (dcp_test1)
        RNGFixer fixer;
 
        make_simple("build/test/DCP/dcp_test1")->write_xml(
-               dcp::Standard::SMPTE, "OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "A Test DCP"
+               "OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "A Test DCP"
                );
 
        /* build/test/DCP/dcp_test1 is checked against test/ref/DCP/dcp_test1 by run/tests */
@@ -89,7 +89,7 @@ BOOST_AUTO_TEST_CASE (dcp_test2)
        boost::filesystem::remove_all ("build/test/DCP/dcp_test2");
        boost::filesystem::create_directories ("build/test/DCP/dcp_test2");
        dcp::DCP d ("build/test/DCP/dcp_test2");
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::FEATURE);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        cpl->set_content_version (
                dcp::ContentVersion("urn:uri:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00", "81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00")
                );
@@ -138,7 +138,7 @@ BOOST_AUTO_TEST_CASE (dcp_test2)
 
        d.add (cpl);
 
-       d.write_xml (dcp::Standard::SMPTE, "OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "Created by libdcp");
+       d.write_xml ("OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "Created by libdcp");
 
        /* build/test/DCP/dcp_test2 is checked against test/ref/DCP/dcp_test2 by run/tests */
 }
@@ -227,11 +227,11 @@ test_rewriting_sound(string name, bool modify)
        reel->add(make_shared<dcp::ReelSoundAsset>(sound, 0));
        reel->add(simple_markers());
 
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->add (reel);
 
        B.add (cpl);
-       B.write_xml (dcp::Standard::SMPTE);
+       B.write_xml ();
 
        dcp::EqualityOptions eq;
        eq.reel_hashes_can_differ = true;
@@ -270,7 +270,7 @@ BOOST_AUTO_TEST_CASE (dcp_test5)
        boost::filesystem::remove_all ("build/test/DCP/dcp_test5");
        boost::filesystem::create_directories ("build/test/DCP/dcp_test5");
        dcp::DCP d ("build/test/DCP/dcp_test5");
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::FEATURE);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        cpl->set_content_version (
                dcp::ContentVersion("urn:uri:81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00", "81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00")
                );
@@ -323,7 +323,7 @@ BOOST_AUTO_TEST_CASE (dcp_test5)
 
        d.add (cpl);
 
-       d.write_xml (dcp::Standard::SMPTE, "OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "Created by libdcp");
+       d.write_xml ("OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "Created by libdcp");
 
        /* build/test/DCP/dcp_test5 is checked against test/ref/DCP/dcp_test5 by run/tests */
 }
@@ -347,8 +347,8 @@ BOOST_AUTO_TEST_CASE (dcp_test7)
 {
        RNGFixer fix;
 
-       make_simple("build/test/DCP/dcp_test7")->write_xml(
-               dcp::Standard::INTEROP, "OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "Created by libdcp"
+       make_simple("build/test/DCP/dcp_test7", 1, 24, dcp::Standard::INTEROP)->write_xml(
+               "OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "Created by libdcp"
                );
 
        /* build/test/DCP/dcp_test7 is checked against test/ref/DCP/dcp_test7 by run/tests */
@@ -370,3 +370,58 @@ BOOST_AUTO_TEST_CASE (dcp_things_in_assetmap_not_in_pkl)
        dcp::DCP dcp ("test/data/extra_assetmap");
        BOOST_CHECK_NO_THROW (dcp.read());
 }
+
+
+/** Test that writing the XML for a DCP with no CPLs throws */
+BOOST_AUTO_TEST_CASE (dcp_with_no_cpls)
+{
+       dcp::DCP dcp ("build/test/dcp_with_no_cpls");
+       BOOST_REQUIRE_THROW (dcp.write_xml(), dcp::MiscError);
+}
+
+
+/** Test that writing the XML for a DCP with Interop CPLs makes a SMPTE assetmap */
+BOOST_AUTO_TEST_CASE (dcp_with_interop_cpls)
+{
+       boost::filesystem::path path = "build/test/dcp_with_interop_cpls";
+       boost::filesystem::remove_all (path);
+       dcp::DCP dcp (path);
+       auto cpl1 = make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::INTEROP);
+       cpl1->add(make_shared<dcp::Reel>());
+       dcp.add(cpl1);
+       auto cpl2 = make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::INTEROP);
+       cpl2->add(make_shared<dcp::Reel>());
+       dcp.add(cpl2);
+       dcp.write_xml ();
+       BOOST_REQUIRE (boost::filesystem::exists(path / "ASSETMAP"));
+       BOOST_REQUIRE (!boost::filesystem::exists(path / "ASSETMAP.xml"));
+}
+
+
+/** Test that writing the XML for a DCP with SMPTE CPLs makes a SMPTE assetmap */
+BOOST_AUTO_TEST_CASE (dcp_with_smpte_cpls)
+{
+       boost::filesystem::path path = "build/test/dcp_with_smpte_cpls";
+       boost::filesystem::remove_all (path);
+       dcp::DCP dcp (path);
+       auto cpl1 = make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
+       cpl1->add(make_shared<dcp::Reel>());
+       dcp.add(cpl1);
+       auto cpl2 = make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
+       cpl2->add(make_shared<dcp::Reel>());
+       dcp.add(cpl2);
+       dcp.write_xml ();
+       BOOST_REQUIRE (!boost::filesystem::exists(path / "ASSETMAP"));
+       BOOST_REQUIRE (boost::filesystem::exists(path / "ASSETMAP.xml"));
+}
+
+
+/** Test that writing the XML for a DCP with mixed-standard CPLs throws */
+BOOST_AUTO_TEST_CASE (dcp_with_mixed_cpls)
+{
+       dcp::DCP dcp ("build/test/dcp_with_mixed_cpls");
+       dcp.add(make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE));
+       dcp.add(make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::INTEROP));
+       dcp.add(make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE));
+       BOOST_REQUIRE_THROW (dcp.write_xml(), dcp::MiscError);
+}
index 5294f1acf0119d0a6e32d45cc91feb94ef7e6f7f..89c3da8105cbcb7707712d862849868c3fc57909 100644 (file)
@@ -82,7 +82,7 @@ BOOST_AUTO_TEST_CASE (encryption_test)
        signer->add (dcp::Certificate (dcp::file_to_string ("test/ref/crypt/leaf.signed.pem")));
        signer->set_key (dcp::file_to_string ("test/ref/crypt/leaf.key"));
 
-       shared_ptr<dcp::CPL> cpl (new dcp::CPL ("A Test DCP", dcp::ContentKind::FEATURE));
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
 
        dcp::Key key;
 
@@ -134,7 +134,7 @@ BOOST_AUTO_TEST_CASE (encryption_test)
 
        d.add (cpl);
 
-       d.write_xml (dcp::Standard::SMPTE, "OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "Created by libdcp", signer);
+       d.write_xml ("OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "Created by libdcp", signer);
 
        dcp::DecryptedKDM kdm (
                cpl,
index 506f6c435643c5e28bc2a416b012784a9aa0899f..ce589a8c80896a74884f9405ff1fe2c0421d8b29 100644 (file)
@@ -244,7 +244,7 @@ BOOST_AUTO_TEST_CASE (validity_period_test1)
        writer->write (frame.data(), frame.size());
        auto reel = make_shared<dcp::Reel>();
        reel->add(make_shared<dcp::ReelMonoPictureAsset>(asset, 0));
-       auto cpl = make_shared<dcp::CPL>("test", dcp::ContentKind::FEATURE);
+       auto cpl = make_shared<dcp::CPL>("test", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        cpl->add(reel);
 
        /* This certificate_chain is valid from 26/12/2012 to 24/12/2022 */
index 217900c02f5281bcd010884bc45f001c17061c23..59d523c60287d9c5910928ed6116a2dc6cec6b47 100644 (file)
@@ -45,7 +45,7 @@ using std::make_shared;
 
 BOOST_AUTO_TEST_CASE (markers_write_test)
 {
-       dcp::CPL cpl("Markers test", dcp::ContentKind::TEST);
+       dcp::CPL cpl("Markers test", dcp::ContentKind::TEST, dcp::Standard::SMPTE);
 
        auto asset = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 432000, 0);
        asset->set (dcp::Marker::FFOC, dcp::Time(1, 1, 9, 16, 24));
@@ -64,7 +64,7 @@ BOOST_AUTO_TEST_CASE (markers_write_test)
 
        cpl.add (reel);
 
-       cpl.write_xml ("build/test/markers_test.xml", dcp::Standard::SMPTE, {});
+       cpl.write_xml ("build/test/markers_test.xml", {});
 }
 
 static void
index d9708ea9cce5357cddc7643460c3111787b0a766..45fa03ae0a1fb47b4f13d76baafdafff44bb838b 100644 (file)
@@ -62,13 +62,13 @@ BOOST_AUTO_TEST_CASE (parse_mca_descriptors_from_mxf_test)
                reel->add (black_picture_asset(dcp::String::compose("build/test/parse_mca_descriptors_from_mxf_test%1", i), 24));
                reel->add (reel_sound_asset);
 
-               dcp::CPL cpl("", dcp::ContentKind::FEATURE);
+               dcp::CPL cpl("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
                cpl.add (reel);
                cpl.set_main_sound_configuration("51/L,R,C,LFE,Ls,Rs");
                cpl.set_main_sound_sample_rate(48000);
                cpl.set_main_picture_stored_area(dcp::Size(1998, 1080));
                cpl.set_main_picture_active_area(dcp::Size(1998, 1080));
-               cpl.write_xml (dcp::String::compose("build/test/parse_mca_descriptors_from_mxf_test%1/cpl.xml", i), dcp::Standard::SMPTE, shared_ptr<dcp::CertificateChain>());
+               cpl.write_xml (dcp::String::compose("build/test/parse_mca_descriptors_from_mxf_test%1/cpl.xml", i), shared_ptr<dcp::CertificateChain>());
 
                cxml::Document ref("CompositionPlaylist", private_test / dcp::String::compose("51_sound_with_mca_%1.cpl", i));
                cxml::Document check("CompositionPlaylist", dcp::String::compose("build/test/parse_mca_descriptors_from_mxf_test%1/cpl.xml", i));
@@ -115,13 +115,13 @@ BOOST_AUTO_TEST_CASE (write_mca_descriptors_to_mxf_test)
        reel->add (black_picture_asset("build/test/write_mca_descriptors_to_mxf_test", 24));
        reel->add (reel_sound_asset);
 
-       dcp::CPL cpl("", dcp::ContentKind::FEATURE);
+       dcp::CPL cpl("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        cpl.add (reel);
        cpl.set_main_sound_configuration("51/L,R,C,LFE,Ls,Rs");
        cpl.set_main_sound_sample_rate(48000);
        cpl.set_main_picture_stored_area(dcp::Size(1998, 1080));
        cpl.set_main_picture_active_area(dcp::Size(1998, 1080));
-       cpl.write_xml ("build/test/write_mca_descriptors_to_mxf_test/cpl.xml", dcp::Standard::SMPTE, shared_ptr<dcp::CertificateChain>());
+       cpl.write_xml ("build/test/write_mca_descriptors_to_mxf_test/cpl.xml", shared_ptr<dcp::CertificateChain>());
 
        cxml::Document ref("CompositionPlaylist", private_test / "51_sound_with_mca_1.cpl");
        cxml::Document check("CompositionPlaylist", "build/test/write_mca_descriptors_to_mxf_test/cpl.xml");
index a9037114eef3700749f6b4f8abb81fd0241b60c5..313f60699220c52fb60add4e1c3ef6b041aaec98 100644 (file)
@@ -79,9 +79,9 @@ BOOST_AUTO_TEST_CASE (round_trip_test)
 
        asset_A->set_key (key);
 
-       shared_ptr<dcp::CPL> cpl (new dcp::CPL ("A Test DCP", dcp::ContentKind::FEATURE));
        shared_ptr<dcp::Reel> reel (new dcp::Reel ());
        reel->add (shared_ptr<dcp::ReelMonoPictureAsset> (new dcp::ReelMonoPictureAsset (asset_A, 0)));
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE);
        cpl->add (reel);
 
        dcp::LocalTime start;
index c48ecffe013e07a3ad3abb7cefe4af0182852b5d..c46e63c96025e34e48aacf661341d75b8330ee94 100644 (file)
@@ -321,7 +321,7 @@ simple_sound (boost::filesystem::path path, string suffix, dcp::MXFMetadata mxf_
 
 
 shared_ptr<dcp::DCP>
-make_simple (boost::filesystem::path path, int reels, int frames)
+make_simple (boost::filesystem::path path, int reels, int frames, dcp::Standard standard)
 {
        /* Some known metadata */
        dcp::MXFMetadata mxf_meta;
@@ -332,7 +332,7 @@ make_simple (boost::filesystem::path path, int reels, int frames)
        boost::filesystem::remove_all (path);
        boost::filesystem::create_directories (path);
        auto d = make_shared<dcp::DCP>(path);
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, standard);
        cpl->set_annotation_text ("A Test DCP");
        cpl->set_issuer ("OpenDCP 0.0.25");
        cpl->set_creator ("OpenDCP 0.0.25");
@@ -414,7 +414,7 @@ simple_markers (int frames)
 shared_ptr<dcp::DCP>
 make_simple_with_interop_subs (boost::filesystem::path path)
 {
-       shared_ptr<dcp::DCP> dcp = make_simple (path);
+       auto dcp = make_simple (path, 1, 24, dcp::Standard::INTEROP);
 
        shared_ptr<dcp::InteropSubtitleAsset> subs(new dcp::InteropSubtitleAsset());
        subs->add (simple_subtitle());
@@ -453,7 +453,7 @@ make_simple_with_smpte_subs (boost::filesystem::path path)
 shared_ptr<dcp::DCP>
 make_simple_with_interop_ccaps (boost::filesystem::path path)
 {
-       shared_ptr<dcp::DCP> dcp = make_simple (path);
+       auto dcp = make_simple (path, 1, 24, dcp::Standard::INTEROP);
 
        shared_ptr<dcp::InteropSubtitleAsset> subs(new dcp::InteropSubtitleAsset());
        subs->add (simple_subtitle());
index 57be5d1141cf22da8bebfc2f599c26416e92b7b7..8733c7c319d42d92c986e95ea933b4eae5dd9320 100644 (file)
@@ -47,7 +47,7 @@ extern std::shared_ptr<dcp::MonoPictureAsset> simple_picture (boost::filesystem:
 extern std::shared_ptr<dcp::SoundAsset> simple_sound (boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language, int frames = 24, int sample_rate = 48000);
 extern std::shared_ptr<dcp::Subtitle> simple_subtitle ();
 extern std::shared_ptr<dcp::ReelMarkersAsset> simple_markers (int frames = 24);
-extern std::shared_ptr<dcp::DCP> make_simple (boost::filesystem::path path, int reels = 1, int frames = 24);
+extern std::shared_ptr<dcp::DCP> make_simple (boost::filesystem::path path, int reels = 1, int frames = 24, dcp::Standard = dcp::Standard::SMPTE);
 extern std::shared_ptr<dcp::DCP> make_simple_with_interop_subs (boost::filesystem::path path);
 extern std::shared_ptr<dcp::DCP> make_simple_with_smpte_subs (boost::filesystem::path path);
 extern std::shared_ptr<dcp::DCP> make_simple_with_interop_ccaps (boost::filesystem::path path);
index 78e264a73c09c2ac99ff05c9cfc7f0fa8f9fb388..bfa52b0a5d386e96b8ef01db9bfa80e4d743d55b 100644 (file)
@@ -122,12 +122,11 @@ write_dcp_with_single_asset (path dir, shared_ptr<dcp::ReelAsset> reel_asset, dc
        reel->add (reel_asset);
        reel->add (simple_markers());
 
-       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER, standard);
        cpl->add (reel);
        auto dcp = make_shared<dcp::DCP>(dir);
        dcp->add (cpl);
        dcp->write_xml (
-               standard,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -770,7 +769,7 @@ BOOST_AUTO_TEST_CASE (verify_valid_cpl_metadata)
        reel->add (make_shared<dcp::ReelMonoPictureAsset>(simple_picture(dir, "", 16 * 24), 0));
        reel->add (simple_markers(16 * 24));
 
-       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->add (reel);
        cpl->set_main_sound_configuration ("L,C,R,Lfe,-,-");
        cpl->set_main_sound_sample_rate (48000);
@@ -781,7 +780,6 @@ BOOST_AUTO_TEST_CASE (verify_valid_cpl_metadata)
        dcp::DCP dcp (dir);
        dcp.add (cpl);
        dcp.write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -813,7 +811,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_cpl_metadata_bad_tag)
 
        auto reel = make_shared<dcp::Reel>();
        reel->add (black_picture_asset(dir));
-       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->add (reel);
        cpl->set_main_sound_configuration ("L,C,R,Lfe,-,-");
        cpl->set_main_sound_sample_rate (48000);
@@ -826,7 +824,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_cpl_metadata_bad_tag)
        dcp::DCP dcp (dir);
        dcp.add (cpl);
        dcp.write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -868,7 +865,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_cpl_metadata_missing_tag)
 
        auto reel = make_shared<dcp::Reel>();
        reel->add (black_picture_asset(dir));
-       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->add (reel);
        cpl->set_main_sound_configuration ("L,C,R,Lfe,-,-");
        cpl->set_main_sound_sample_rate (48000);
@@ -878,7 +875,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_cpl_metadata_missing_tag)
        dcp::DCP dcp (dir);
        dcp.add (cpl);
        dcp.write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -959,7 +955,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_language3)
        reel->add (reel_sound);
        reel->add (simple_markers());
 
-       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->add (reel);
        cpl->_additional_subtitle_languages.push_back("this-is-wrong");
        cpl->_additional_subtitle_languages.push_back("andso-is-this");
@@ -972,7 +968,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_language3)
        auto dcp = make_shared<dcp::DCP>(dir);
        dcp->add (cpl);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1016,7 +1011,7 @@ check_picture_size (int width, int height, int frame_rate, bool three_d)
        picture_writer->finalize ();
 
        auto d = make_shared<dcp::DCP>(dcp_path);
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->set_annotation_text ("A Test DCP");
        cpl->set_issue_date ("2012-07-17T04:45:18+00:00");
        cpl->set_main_sound_configuration ("L,C,R,Lfe,-,-");
@@ -1039,7 +1034,6 @@ check_picture_size (int width, int height, int frame_rate, bool three_d)
 
        d->add (cpl);
        d->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1285,7 +1279,6 @@ BOOST_AUTO_TEST_CASE (verify_missing_subtitle_language)
        auto reel_subs = make_shared<dcp::ReelSMPTESubtitleAsset>(subs, dcp::Fraction(24, 1), 106, 0);
        dcp->cpls().front()->reels().front()->add(reel_subs);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1327,7 +1320,6 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_subtitle_languages)
        }
 
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1370,7 +1362,6 @@ BOOST_AUTO_TEST_CASE (verify_multiple_closed_caption_languages_allowed)
        }
 
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1423,7 +1414,6 @@ BOOST_AUTO_TEST_CASE (verify_missing_subtitle_start_time)
        auto reel_subs = make_shared<dcp::ReelSMPTESubtitleAsset>(subs, dcp::Fraction(24, 1), 106, 0);
        dcp->cpls().front()->reels().front()->add(reel_subs);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1477,7 +1467,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_start_time)
        auto reel_subs = make_shared<dcp::ReelSMPTESubtitleAsset>(subs, dcp::Fraction(24, 1), 106, 0);
        dcp->cpls().front()->reels().front()->add(reel_subs);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1583,13 +1572,12 @@ BOOST_AUTO_TEST_CASE (verify_valid_subtitle_first_text_time_on_second_reel)
        markers2->set (dcp::Marker::LFOC, dcp::Time(4 * 24 - 1, 24, 24));
        reel2->add (markers2);
 
-       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->add (reel1);
        cpl->add (reel2);
        auto dcp = make_shared<dcp::DCP>(dir);
        dcp->add (cpl);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1879,12 +1867,11 @@ BOOST_AUTO_TEST_CASE (verify_invalid_sound_frame_rate)
        auto reel_sound = make_shared<dcp::ReelSoundAsset>(sound, 0);
        reel->add (reel_sound);
        reel->add (simple_markers());
-       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
        cpl->add (reel);
        auto dcp = make_shared<dcp::DCP>(dir);
        dcp->add (cpl);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1905,7 +1892,6 @@ BOOST_AUTO_TEST_CASE (verify_missing_cpl_annotation_text)
        path const dir("build/test/verify_missing_cpl_annotation_text");
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1936,7 +1922,6 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_cpl_annotation_text)
        path const dir("build/test/verify_mismatched_cpl_annotation_text");
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -1966,7 +1951,7 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_asset_duration)
        path const dir("build/test/verify_mismatched_asset_duration");
        prepare_directory (dir);
        shared_ptr<dcp::DCP> dcp (new dcp::DCP(dir));
-       shared_ptr<dcp::CPL> cpl (new dcp::CPL("A Test DCP", dcp::ContentKind::TRAILER));
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
 
        shared_ptr<dcp::MonoPictureAsset> mp = simple_picture (dir, "", 24);
        shared_ptr<dcp::SoundAsset> ms = simple_sound (dir, "", dcp::MXFMetadata(), "en-US", 25);
@@ -1981,7 +1966,6 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_asset_duration)
 
        dcp->add (cpl);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2004,7 +1988,7 @@ verify_subtitles_must_be_in_all_reels_check (path dir, bool add_to_reel1, bool a
 {
        prepare_directory (dir);
        auto dcp = make_shared<dcp::DCP>(dir);
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
 
        auto constexpr reel_length = 192;
 
@@ -2047,7 +2031,6 @@ verify_subtitles_must_be_in_all_reels_check (path dir, bool add_to_reel1, bool a
 
        dcp->add (cpl);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2092,7 +2075,7 @@ verify_closed_captions_must_be_in_all_reels_check (path dir, int caps_in_reel1,
 {
        prepare_directory (dir);
        auto dcp = make_shared<dcp::DCP>(dir);
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
 
        auto constexpr reel_length = 192;
 
@@ -2134,7 +2117,6 @@ verify_closed_captions_must_be_in_all_reels_check (path dir, int caps_in_reel1,
 
        dcp->add (cpl);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2178,7 +2160,7 @@ verify_text_entry_point_check (path dir, dcp::VerificationNote::Code code, boost
 {
        prepare_directory (dir);
        auto dcp = make_shared<dcp::DCP>(dir);
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
 
        auto constexpr reel_length = 192;
 
@@ -2203,7 +2185,6 @@ verify_text_entry_point_check (path dir, dcp::VerificationNote::Code code, boost
 
        dcp->add (cpl);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2262,7 +2243,6 @@ BOOST_AUTO_TEST_CASE (verify_missing_hash)
        path const dir("build/test/verify_missing_hash");
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2303,7 +2283,6 @@ verify_markers_test (
        }
        dcp->cpls()[0]->reels()[0]->add(markers_asset);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2405,7 +2384,6 @@ BOOST_AUTO_TEST_CASE (verify_missing_cpl_metadata_version_number)
        auto cpl = dcp->cpls()[0];
        cpl->unset_version_number();
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2421,7 +2399,6 @@ BOOST_AUTO_TEST_CASE (verify_missing_extension_metadata1)
        path dir = "build/test/verify_missing_extension_metadata1";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2449,7 +2426,6 @@ BOOST_AUTO_TEST_CASE (verify_missing_extension_metadata2)
        path dir = "build/test/verify_missing_extension_metadata2";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2477,7 +2453,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata3)
        path dir = "build/test/verify_invalid_xml_cpl_extension_metadata3";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2507,7 +2482,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_extension_metadata1)
        path dir = "build/test/verify_invalid_extension_metadata1";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2535,7 +2509,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_extension_metadata2)
        path dir = "build/test/verify_invalid_extension_metadata2";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2563,7 +2536,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata6)
        path dir = "build/test/verify_invalid_xml_cpl_extension_metadata6";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2593,7 +2565,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata7)
        path dir = "build/test/verify_invalid_xml_cpl_extension_metadata7";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2621,7 +2592,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata8)
        path dir = "build/test/verify_invalid_xml_cpl_extension_metadata8";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2651,7 +2621,6 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata9)
        path dir = "build/test/verify_invalid_xml_cpl_extension_metadata9";
        auto dcp = make_simple (dir);
        dcp->write_xml (
-               dcp::Standard::SMPTE,
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::String::compose("libdcp %1", dcp::version),
                dcp::LocalTime().as_string(),
@@ -2767,7 +2736,7 @@ BOOST_AUTO_TEST_CASE (verify_partially_encrypted)
        signer->add (dcp::Certificate(dcp::file_to_string("test/ref/crypt/leaf.signed.pem")));
        signer->set_key (dcp::file_to_string("test/ref/crypt/leaf.key"));
 
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER);
+       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
 
        dcp::Key key;
 
@@ -2807,7 +2776,7 @@ BOOST_AUTO_TEST_CASE (verify_partially_encrypted)
 
        d.add (cpl);
 
-       d.write_xml (dcp::Standard::SMPTE, "OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "A Test DCP", signer);
+       d.write_xml ("OpenDCP 0.0.25", "OpenDCP 0.0.25", "2012-07-17T04:45:18+00:00", "A Test DCP", signer);
 
        check_verify_result (
                {dir},
@@ -2844,7 +2813,7 @@ BOOST_AUTO_TEST_CASE (verify_jpeg2000_codestream_libdcp)
        boost::filesystem::path dir = "build/test/verify_jpeg2000_codestream_libdcp";
        prepare_directory (dir);
        auto dcp = make_simple (dir);
-       dcp->write_xml (dcp::Standard::SMPTE);
+       dcp->write_xml ();
        vector<dcp::VerificationNote> notes;
        dcp::MonoPictureAsset picture (find_file(dir, "video"));
        auto reader = picture.start_read ();
index f7c9ae25e2010be43961f708587d86e36bb5e6dc..04374deacf798c57e43fc8c7d4c10c7c6bc03878 100644 (file)
@@ -368,7 +368,7 @@ BOOST_AUTO_TEST_CASE (write_interop_subtitle_test3)
        string const creator = "libdcp";
        string const annotation_text = "Created by libdcp";
 
-       auto cpl = make_shared<dcp::CPL>("My film", dcp::ContentKind::FEATURE);
+       auto cpl = make_shared<dcp::CPL>("My film", dcp::ContentKind::FEATURE, dcp::Standard::INTEROP);
        cpl->add (reel);
        cpl->set_issuer (issuer);
        cpl->set_creator (creator);
@@ -381,7 +381,7 @@ BOOST_AUTO_TEST_CASE (write_interop_subtitle_test3)
 
        dcp::DCP dcp ("build/test/write_interop_subtitle_test3");
        dcp.add (cpl);
-       dcp.write_xml (dcp::Standard::INTEROP, issuer, creator, issue_date, annotation_text);
+       dcp.write_xml (issuer, creator, issue_date, annotation_text);
 
        check_xml (
                dcp::file_to_string("test/ref/write_interop_subtitle_test3/subs.xml"),
index f9e08087ad6873844d4d3c1fd307ab0c9d4d7d6e..f78b246ce3067e07aad4e95664fd4786c77beb73 100644 (file)
@@ -155,7 +155,7 @@ main (int argc, char* argv[])
                dcp::DCP fixed (*output);
                fixed.add (cpl);
                fixed.resolve_refs (assets);
-               fixed.write_xml (dcp::Standard::INTEROP);
+               fixed.write_xml ();
                cout << "Fixed XML files written to " << output->string() << "\n";
        }