X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fmxf_asset.h;h=763f405bdf687c2f52b894dcc2cb43cfc06b1372;hb=ad3d9f8bbe623f87e440bd6a5a12520361a7661f;hp=cdcd08bf45b36f98997c126832245c46071562a3;hpb=1a3818e1c76321095553c91f846478ca44ffb14d;p=libdcp.git diff --git a/src/mxf_asset.h b/src/mxf_asset.h index cdcd08bf..763f405b 100644 --- a/src/mxf_asset.h +++ b/src/mxf_asset.h @@ -20,40 +20,82 @@ #ifndef LIBDCP_MXF_ASSET_H #define LIBDCP_MXF_ASSET_H +#include #include "asset.h" +namespace ASDCP { + class AESEncContext; + class AESDecContext; +} + namespace libdcp { +class MXFMetadata; +class KDMCipher; + +/** @brief Parent class for assets which have MXF files */ class MXFAsset : public Asset { public: /** Construct an MXFAsset. + * This class will not write anything to disk in this constructor, but subclasses may. + * * @param directory Directory where MXF file is. * @param file_name Name of MXF file. - * @param progress Signal to inform of progress. - * @param fps Frames per second. - * @param length Length in frames. */ - MXFAsset (std::string directory, std::string file_name, sigc::signal1* progress, int fps, int entry_point, int length); - - virtual std::list equals (boost::shared_ptr other, EqualityOptions opt) const; + MXFAsset (std::string directory, std::string file_name); - int length () const; + /** Construct an MXFAsset. + * This class will not write anything to disk in this constructor, but subclasses may. + * + * @param directory Directory where MXF file is. + * @param file_name Name of MXF file. + * @param progress Signal to use to inform of progress, or 0. + * @param edit_rate Edit rate in frames per second (usually equal to the video frame rate). + * @param intrinsic_duration Duration of the whole asset in frames. + */ + MXFAsset (std::string directory, std::string file_name, boost::signals2::signal* progress, int edit_rate, int intrinsic_duration, bool encrypted); + + ~MXFAsset (); + + virtual bool equals (boost::shared_ptr other, EqualityOptions opt, boost::function note) const; + + virtual void write_to_cpl (xmlpp::Node *) const; -protected: /** Fill in a ADSCP::WriteInfo struct. * @param w struct to fill in. + * @param uuid uuid to use. */ - void fill_writer_info (ASDCP::WriterInfo* w) const; - - /** Signal to emit to report progress */ - sigc::signal1* _progress; - /** Frames per second */ - int _fps; - int _entry_point; - /** Length in frames */ - int _length; + void fill_writer_info (ASDCP::WriterInfo* w, std::string uuid, MXFMetadata const & metadata); + + void add_typed_key_id (xmlpp::Element *) const; + + std::string key_id () const { + return _key_id; + } + + void set_key_id (std::string k) { + _key_id = k; + } + + bool encrypted () const { + return !_key_id.empty (); + } + + void set_kdm_cipher (KDMCipher); + +protected: + virtual std::string key_type () const = 0; + virtual std::string cpl_node_name () const = 0; + + /** Signal to emit to report progress, or 0 */ + boost::signals2::signal* _progress; + bool _encrypted; + ASDCP::AESEncContext* _encryption_context; + std::string _key_value; + std::string _key_id; + ASDCP::AESDecContext* _decryption_context; }; }