X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fasset.h;h=3dffa9abc3becc84b126d7ddeaf1dcfe64873711;hb=ad3d9f8bbe623f87e440bd6a5a12520361a7661f;hp=f6d1725650d512fe1f181c2679a4a2d3a4fb0237;hpb=e3636c080d3d24471e85f519d69af4c11d5ecbd0;p=libdcp.git diff --git a/src/asset.h b/src/asset.h index f6d17256..3dffa9ab 100644 --- a/src/asset.h +++ b/src/asset.h @@ -25,13 +25,20 @@ #define LIBDCP_ASSET_H #include -#include +#include +#include +#include +#include #include "types.h" namespace ASDCP { class WriterInfo; } +namespace xmlpp { + class Element; +} + namespace libdcp { @@ -43,56 +50,94 @@ class Asset { public: /** Construct an Asset. - * @param directory Directory where MXF file is. - * @param mxf_name Name of MXF file. - * @param progress Signal to inform of progress. - * @param fps Frames per second. - * @param length Length in frames. + * @param directory Directory where our XML or MXF file is. + * @param file_name Name of our file within directory, or empty to make one up based on UUID. */ - Asset (std::string directory, std::string mxf_path, sigc::signal1* progress, int fps, int length); + Asset (std::string directory, std::string file_name = "", int edit_rate = 0, int intrinsic_duration = 0); - /** 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 node. */ - virtual void write_to_cpl (std::ostream& s) const = 0; + virtual void write_to_cpl (xmlpp::Node *) 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 *) 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; - virtual std::list equals (boost::shared_ptr other, EqualityFlags flags) const; + std::string uuid () const { + return _uuid; + } -protected: - friend class PictureAsset; - friend class SoundAsset; + boost::filesystem::path path () const; + + void set_directory (std::string d) { + _directory = d; + } + + void set_file_name (std::string f) { + _file_name = f; + } + + int entry_point () const { + return _entry_point; + } + + int duration () const { + return _duration; + } - /** Fill in a ADSCP::WriteInfo struct. - * @param w struct to fill in. - */ - void fill_writer_info (ASDCP::WriterInfo* w) const; + 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; + } - boost::filesystem::path mxf_path () const; + void set_intrinsic_duration (int d) { + _intrinsic_duration = d; + } + + virtual bool equals (boost::shared_ptr other, EqualityOptions opt, boost::function) const; + +protected: + + std::string digest () const; - /** Directory that our MXF file is in */ + /** Directory that our MXF or XML file is in */ std::string _directory; - /** Name of our MXF file */ - std::string _mxf_name; - /** Signal to emit to report progress */ - sigc::signal1* _progress; - /** Frames per second */ - int _fps; - /** Length in frames */ - int _length; + /** Name of our MXF or XML file */ + std::string _file_name; /** Our UUID */ std::string _uuid; - /** Digest of our MXF */ - std::string _digest; + /** 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 */ + mutable std::string _digest; }; }