A couple of hacks to KDMs for testing by Dolby.
[libdcp.git] / src / cpl.cc
index 766b91c315660d858880dac57aa57414b5d4aa95..0677ec36c0c7ded0bc4caf8c4da9280fb4aa376e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
 #include "util.h"
 #include "reel.h"
 #include "metadata.h"
-#include "signer.h"
+#include "certificate_chain.h"
 #include "xml.h"
 #include "reel_picture_asset.h"
 #include "reel_sound_asset.h"
@@ -51,11 +51,11 @@ CPL::CPL (string annotation_text, ContentKind content_kind)
        , _content_kind (content_kind)
        , _content_version_id ("urn:uuid:" + make_uuid ())
 {
-       /* default _content_version_id to and _content_version_label to
+       /* default _content_version_id to a random ID and _content_version_label to
           a random ID and the current time.
        */
-       _content_version_id = "urn:uuid:" + make_uuid() + LocalTime().as_string ();
-       _content_version_label_text = _content_version_id;
+       _content_version_id = "urn:uuid:" + make_uuid();
+       _content_version_label_text = _content_version_id + LocalTime().as_string ();
 }
 
 /** Construct a CPL object from a XML file */
@@ -66,10 +66,7 @@ CPL::CPL (boost::filesystem::path file)
        cxml::Document f ("CompositionPlaylist");
        f.read_file (file);
 
-       _id = f.string_child ("Id");
-       if (_id.length() > 9) {
-               _id = _id.substr (9);
-       }
+       _id = remove_urn_uuid (f.string_child ("Id"));
        _annotation_text = f.optional_string_child ("AnnotationText").get_value_or ("");
        _metadata.issuer = f.optional_string_child ("Issuer").get_value_or ("");
        _metadata.creator = f.optional_string_child ("Creator").get_value_or ("");
@@ -107,7 +104,7 @@ CPL::add (boost::shared_ptr<Reel> reel)
  *  @param signer Signer to sign the CPL, or 0 to add no signature.
  */
 void
-CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr<const Signer> signer) const
+CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr<const CertificateChain> signer) const
 {
        xmlpp::Document doc;
        xmlpp::Element* root;
@@ -236,10 +233,10 @@ CPL::add (DecryptedKDM const & kdm)
 }
 
 void
-CPL::resolve_refs (list<shared_ptr<Object> > objects)
+CPL::resolve_refs (list<shared_ptr<Asset> > assets)
 {
        BOOST_FOREACH (shared_ptr<Reel> i, _reels) {
-               i->resolve_refs (objects);
+               i->resolve_refs (assets);
        }
 }
 
@@ -256,3 +253,12 @@ CPL::pkl_type (Standard standard) const
        }
 }
 
+int64_t
+CPL::duration () const
+{
+       int64_t d = 0;
+       BOOST_FOREACH (shared_ptr<Reel> i, _reels) {
+               d += i->duration ();
+       }
+       return d;
+}