X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fmxf_asset.h;h=7a645b7cc034a1318aefc5409c63c632ce7e20aa;hb=228c3f410a7b3a9ad1d6b0186dc185d69ec0f52c;hp=b9842dda0b96cce53229734df0c2c6b78eac3a27;hpb=f976e8ac94dfc6130797c5d98a0399321dce43e7;p=libdcp.git diff --git a/src/mxf_asset.h b/src/mxf_asset.h index b9842dda..7a645b7c 100644 --- a/src/mxf_asset.h +++ b/src/mxf_asset.h @@ -22,6 +22,8 @@ #include #include "asset.h" +#include "key.h" +#include "metadata.h" namespace ASDCP { class AESEncContext; @@ -32,7 +34,6 @@ namespace libdcp { class MXFMetadata; -class KDMCipher; /** @brief Parent class for assets which have MXF files */ class MXFAsset : public Asset @@ -44,59 +45,78 @@ public: * @param directory Directory where MXF file is. * @param file_name Name of MXF file. */ - MXFAsset (std::string directory, std::string file_name); + MXFAsset (boost::filesystem::path directory, boost::filesystem::path file_name); - /** 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; - + virtual void write_to_cpl (xmlpp::Element *) const; + virtual std::string key_type () const = 0; + /** Fill in a ADSCP::WriteInfo struct. * @param w struct to fill in. - * @param uuid uuid to use. - * @param true to label as interop, false for SMPTE. */ - void fill_writer_info (ASDCP::WriterInfo* w, std::string uuid, bool interop, MXFMetadata const & metadata); + void fill_writer_info (ASDCP::WriterInfo* w); - void add_typed_key_id (xmlpp::Element *) const; + void set_progress (boost::signals2::signal* progress) { + _progress = progress; + } + + bool encrypted () const { + return !_key_id.empty (); + } + + void set_key_id (std::string i) { + _key_id = i; + } std::string key_id () const { return _key_id; } + + void set_key (Key); - void set_key_id (std::string k) { - _key_id = k; + boost::optional key () const { + return _key; } - bool encrypted () const { - return !_key_id.empty (); + ASDCP::AESEncContext* encryption_context () const { + return _encryption_context; + } + + void set_metadata (MXFMetadata m) { + _metadata = m; + } + + MXFMetadata metadata () const { + return _metadata; + } + + /** Set whether or not the asset should be written in Interop mode. + * @param i true to use interop. + */ + void set_interop (bool i) { + _interop = i; + } + + bool interop () const { + return _interop; } - void set_kdm_cipher (KDMCipher); - protected: - virtual std::string key_type () const = 0; virtual std::string cpl_node_name () const = 0; + virtual std::pair cpl_node_attribute () const { + return std::make_pair ("", ""); + } /** 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; + std::string _key_id; + boost::optional _key; + MXFMetadata _metadata; + bool _interop; }; }