X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fasset.h;h=6db8e5c271761670e0ce20d7187ed34460466650;hb=46bcd0527dd5424b14e2b6db139fe1e70df5113b;hp=eab24d28339e5b4ac15361679fe30e49dad7753a;hpb=5c29a3586ea262abcc8829bf267d38d8a5a84d9b;p=libdcp.git diff --git a/src/asset.h b/src/asset.h index eab24d28..6db8e5c2 100644 --- a/src/asset.h +++ b/src/asset.h @@ -25,12 +25,18 @@ #define LIBDCP_ASSET_H #include +#include #include -#include +#include +#include #include "types.h" namespace ASDCP { - class WriterInfo; + struct WriterInfo; +} + +namespace xmlpp { + class Element; } namespace libdcp @@ -45,44 +51,104 @@ class Asset public: /** Construct an Asset. * @param directory Directory where our XML or MXF file is. - * @param file_name Name of our file within directory. + * @param file_name Name of our file within directory, or empty to make one up based on UUID. */ - Asset (std::string directory, std::string file_name); + Asset (boost::filesystem::path directory, boost::filesystem::path file_name = ""); - /** Write details of the asset to a CPL stream. - * @param s Stream. + virtual ~Asset() {} + + /** Write details of the asset to a CPL AssetList node. + * @param p Parent element. */ - virtual void write_to_cpl (std::ostream& s) const = 0; + virtual void write_to_cpl (xmlpp::Element* p) const = 0; - /** Write details of the asset to a PKL stream. - * @param s Stream. + /** Write details of the asset to a PKL AssetList node. + * @param p Parent node. */ - void write_to_pkl (std::ostream& s) const; + void write_to_pkl (xmlpp::Node *, bool interop) const; /** Write details of the asset to a ASSETMAP stream. * @param s Stream. */ - void write_to_assetmap (std::ostream& s) const; + void write_to_assetmap (xmlpp::Node *) const; + + /** Compute the digest for this asset. Calling this is optional: if + * it is not called, the digest will be computed when required. However, + * calling this method allows the caller to see the progress of the + * computation, which can be long for large assets. + * @param Called with progress between 0 and 1. + */ + void compute_digest (boost::function progress); std::string uuid () const { return _uuid; } - virtual std::list equals (boost::shared_ptr other, EqualityOptions opt) const = 0; + boost::filesystem::path path () const; + + void set_directory (boost::filesystem::path d) { + _directory = d; + } + + void set_file_name (boost::filesystem::path f) { + _file_name = f; + } + + int entry_point () const { + return _entry_point; + } + + int duration () const { + return _duration; + } + + int intrinsic_duration () const { + return _intrinsic_duration; + } + + int edit_rate () const { + return _edit_rate; + } + + void set_entry_point (int e) { + _entry_point = e; + } + + void set_duration (int d) { + _duration = d; + } + + void set_intrinsic_duration (int d) { + _intrinsic_duration = d; + } + + void set_edit_rate (int r) { + _edit_rate = r; + } + + virtual bool equals (boost::shared_ptr other, EqualityOptions opt, boost::function) const; protected: - friend class PictureAsset; - friend class SoundAsset; + + /** @return Interop PKL asdcpKind for the <Type> tag e.g. Picture, Sound etc. */ + virtual std::string asdcp_kind () const = 0; std::string digest () const; - boost::filesystem::path path () const; /** Directory that our MXF or XML file is in */ - std::string _directory; + boost::filesystem::path _directory; /** Name of our MXF or XML file */ - std::string _file_name; + boost::filesystem::path _file_name; /** Our UUID */ std::string _uuid; + /** The edit rate; this is normally equal to the number of video frames per second */ + int _edit_rate; + /** Start point to present in frames */ + int _entry_point; + /** Total length in frames */ + int _intrinsic_duration; + /** Length to present in frames */ + int _duration; private: /** Digest of our MXF or XML file */