Check that KDM validity periods are safely within the validity periods
[libdcp.git] / src / reel_asset.h
index d1d2e1b6bf9857a1951fb91a3626340a4fcfdfa7..072d55fd4edf8654d031d5b7fc913be8706e4586 100644 (file)
@@ -65,22 +65,10 @@ class Asset;
 class ReelAsset : public Object
 {
 public:
-       ReelAsset ();
-       ReelAsset (boost::shared_ptr<Asset> asset, Fraction edit_rate, int64_t intrinsic_duration, int64_t entry_point);
+       ReelAsset (std::string id, Fraction edit_rate, int64_t intrinsic_duration, int64_t entry_point);
        explicit ReelAsset (boost::shared_ptr<const cxml::Node>);
 
-       virtual void write_to_cpl (xmlpp::Node* node, Standard standard) const;
-       virtual bool equals (boost::shared_ptr<const ReelAsset>, EqualityOptions, NoteHandler) const;
-
-       /** @return a Ref to our actual asset */
-       Ref const & asset_ref () const {
-               return _asset_ref;
-       }
-
-       /** @return a Ref to our actual asset */
-       Ref & asset_ref () {
-               return _asset_ref;
-       }
+       virtual xmlpp::Node* write_to_cpl (xmlpp::Node* node, Standard standard) const = 0;
 
        Fraction edit_rate () const {
                return _edit_rate;
@@ -94,7 +82,7 @@ public:
                _entry_point = e;
        }
 
-       int64_t entry_point () const {
+       boost::optional<int64_t> entry_point () const {
                return _entry_point;
        }
 
@@ -102,57 +90,44 @@ public:
                _duration = d;
        }
 
-       int64_t duration () const {
+       boost::optional<int64_t> duration () const {
                return _duration;
        }
 
-       /** @return the asset's hash, if this ReelAsset has been created from one,
-        *  otherwise the hash written to the CPL for this asset (if present).
-        */
-       boost::optional<std::string> hash () const {
-               return _hash;
+       int64_t actual_duration () const;
+
+       std::string annotation_text () const {
+               return _annotation_text;
        }
 
        void set_annotation_text (std::string at) {
                _annotation_text = at;
        }
 
-protected:
+       bool asset_equals (boost::shared_ptr<const ReelAsset>, EqualityOptions, NoteHandler) const;
 
-       template <class T>
-       boost::shared_ptr<T> asset_of_type () const {
-               return boost::dynamic_pointer_cast<T> (_asset_ref.asset ());
-       }
-
-       template <class T>
-       boost::shared_ptr<T> asset_of_type () {
-               return boost::dynamic_pointer_cast<T> (_asset_ref.asset ());
-       }
+protected:
 
        /** @return the node name that this asset uses in the CPL's &lt;Reel&gt; node
         *  e.g. MainPicture, MainSound etc.
         */
-       virtual std::string cpl_node_name () const = 0;
+       virtual std::string cpl_node_name (Standard) const = 0;
 
        /** @return Any attribute that should be used on the asset's node in the CPL */
        virtual std::pair<std::string, std::string> cpl_node_attribute (Standard) const;
 
        /** @return Any namespace that should be used on the asset's node in the CPL */
-       virtual std::pair<std::string, std::string> cpl_node_namespace () const;
+       virtual std::pair<std::string, std::string> cpl_node_namespace (Standard) const;
 
-       /** Reference to the asset (MXF or XML file) that this reel entry
-        *  applies to.
-        */
-       Ref _asset_ref;
+       xmlpp::Node* write_to_cpl_base (xmlpp::Node* node, Standard standard, boost::optional<std::string> hash) const;
+
+       int64_t _intrinsic_duration;           ///< The &lt;IntrinsicDuration&gt; from the reel's entry for this asset
+       boost::optional<int64_t> _duration;    ///< The &lt;Duration&gt; from the reel's entry for this asset, if present
 
 private:
-       std::string _annotation_text; ///< The &lt;AnnotationText&gt; from the reel's entry for this asset
-       Fraction _edit_rate;          ///< The &lt;EditRate&gt; from the reel's entry for this asset
-       int64_t _intrinsic_duration;  ///< The &lt;IntrinsicDuration&gt; from the reel's entry for this asset
-       int64_t _entry_point;         ///< The &lt;EntryPoint&gt; from the reel's entry for this asset
-       int64_t _duration;            ///< The &lt;Duration&gt; from the reel's entry for this asset
-       /** Either our asset's computed hash or the hash read in from the CPL, if it's present */
-       boost::optional<std::string> _hash;
+       std::string _annotation_text;          ///< The &lt;AnnotationText&gt; from the reel's entry for this asset
+       Fraction _edit_rate;                   ///< The &lt;EditRate&gt; from the reel's entry for this asset
+       boost::optional<int64_t> _entry_point; ///< The &lt;EntryPoint&gt; from the reel's entry for this asset
 };
 
 }