Allow fractional frames per second when computing Time from frames.
[libdcp.git] / src / cpl.h
index d28737e146e6acfad57f6d969c0ae19f9833f6f7..b616aeaae7146dc25ebcae83e5b627d45e31bd5c 100644 (file)
--- a/src/cpl.h
+++ b/src/cpl.h
@@ -1,7 +1,7 @@
 /*
     Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
 
-    This program is free software; you can redistribute it and/or modify
+    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
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
 */
 
+/** @file  src/cpl.h
+ *  @brief CPL class.
+ */
+
 #ifndef LIBDCP_CPL_H
 #define LIBDCP_CPL_H
 
 #include "types.h"
-#include "certificates.h"
+#include "certificate.h"
 #include "key.h"
 #include "asset.h"
+#include "metadata.h"
 #include <libxml++/libxml++.h>
 #include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/optional.hpp>
 #include <boost/filesystem.hpp>
 #include <list>
 
 namespace dcp {
-       
-class Content;
+
+class ReelAsset;
 class Reel;
 class XMLMetadata;
 class MXFMetadata;
-class Signer;
-class KDM;
-       
+class CertificateChain;
+class DecryptedKDM;
+
 /** @class CPL
  *  @brief A Composition Playlist.
  */
@@ -51,34 +55,34 @@ public:
        CPL (boost::filesystem::path file);
 
        bool equals (
-               CPL const & other,
+               boost::shared_ptr<const Asset> other,
                EqualityOptions options,
-               boost::function<void (NoteType, std::string)> note
+               NoteHandler note
                ) const;
 
        void add (boost::shared_ptr<Reel> reel);
-       void add (KDM const &);
+       void add (DecryptedKDM const &);
 
-       /** @return contents of the <AnnotationText> node */
+       /** @return contents of the &lt;AnnotationText&gt; node */
        std::string annotation_text () const {
                return _annotation_text;
        }
-       
-       /** @return contents of the <ContentTitleText> node */
+
+       /** @return contents of the &lt;ContentTitleText&gt; node */
        std::string content_title_text () const {
                return _content_title_text;
        }
 
-       /** @return contents of the <Id> node within <ContentVersion> */
+       /** @return contents of the &lt;Id&gt; node within &lt;ContentVersion&gt; */
        void set_content_version_id (std::string id) {
                _content_version_id = id;
        }
 
-       /** @return contents of the <LabelText> node within <ContentVersion> */
+       /** @return contents of the &lt;LabelText&gt; node within &lt;ContentVersion&gt; */
        void set_content_version_label_text (std::string text) {
                _content_version_label_text = text;
        }
-       
+
        /** @return the type of the content, used by media servers
         *  to categorise things (e.g. feature, trailer, etc.)
         */
@@ -91,38 +95,40 @@ public:
                return _reels;
        }
 
-       /** @return the Content in this CPL across all its reels
-        *  (Content is picture, sound and subtitles)
+       /** @return the ReelAssets in this CPL in all reels.
         */
-       std::list<boost::shared_ptr<const Content> > content () const;
+       std::list<boost::shared_ptr<const ReelAsset> > reel_assets () const;
 
        bool encrypted () const;
 
-       void set_mxf_keys (Key);
+       void set_metadata (XMLMetadata m) {
+               _metadata = m;
+       }
 
        void write_xml (
                boost::filesystem::path file,
                Standard standard,
-               XMLMetadata,
-               boost::shared_ptr<const Signer>
+               boost::shared_ptr<const CertificateChain>
                ) const;
 
-       void resolve_refs (std::list<boost::shared_ptr<Object> >);
+       void resolve_refs (std::list<boost::shared_ptr<Asset> >);
+
+       int64_t duration () const;
 
 protected:
        /** @return type string for PKLs for this asset */
-       std::string pkl_type () const {
-               return "text/xml";
-       }
+       std::string pkl_type (Standard standard) const;
 
 private:
-       std::string _annotation_text;               ///< <AnnotationText>
-       std::string _issue_date;                    ///< <IssueDate>
-       std::string _creator;                       ///< <Creator>
-       std::string _content_title_text;            ///< <ContentTitleText>
-       ContentKind _content_kind;                  ///< <ContentKind>
-       std::string _content_version_id;            ///< <Id> in <ContentVersion>
-       std::string _content_version_label_text;    ///< <LabelText> in <ContentVersion>
+       std::string _annotation_text;               ///< &lt;AnnotationText&gt;
+       /** &lt;Issuer&gt;, &lt;Creator&gt; and &lt;IssueDate&gt;.  These are grouped
+        *  because they occur together in a few places.
+        */
+       XMLMetadata _metadata;
+       std::string _content_title_text;            ///< &lt;ContentTitleText&gt;
+       ContentKind _content_kind;                  ///< &lt;ContentKind&gt;
+       std::string _content_version_id;            ///< &lt;Id&gt; in &lt;ContentVersion&gt;
+       std::string _content_version_label_text;    ///< &lt;LabelText&gt; in &lt;ContentVersion&gt;
        std::list<boost::shared_ptr<Reel> > _reels;
 };