X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fmxf_asset.h;h=4eafdcba935b37b714b0baa70c7f634957944e69;hb=979739e929103dd68f942238303a218296cc90d7;hp=f68edc61f8d4a639a1131da12231b511c1cc2b3a;hpb=fd8a665cbb0a9a44995f88567747e2379a6f4098;p=libdcp.git diff --git a/src/mxf_asset.h b/src/mxf_asset.h index f68edc61..4eafdcba 100644 --- a/src/mxf_asset.h +++ b/src/mxf_asset.h @@ -22,56 +22,105 @@ #include #include "asset.h" +#include "key.h" +#include "metadata.h" namespace ASDCP { class AESEncContext; + class AESDecContext; } +/* Undefine some stuff that the OS X 10.5 SDK defines */ +#undef Key +#undef set_key + namespace libdcp { +class MXFMetadata; + +/** @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 entry_point The entry point of this MXF; ie the first frame that should be used. - * @param length Length in frames. - * @param encrypted true if the MXF should be encrypted. */ - MXFAsset ( - std::string directory, std::string file_name, boost::signals2::signal* progress, int fps, int entry_point, int length, bool encrypted - ); - - ~MXFAsset (); - - virtual bool equals (boost::shared_ptr other, EqualityOptions opt, std::list& notes) const; + MXFAsset (boost::filesystem::path directory, boost::filesystem::path file_name); - int length () const; - void add_typed_key_id (xmlpp::Element *) const; + ~MXFAsset (); -protected: + virtual bool equals (boost::shared_ptr other, EqualityOptions opt, boost::function note) 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. */ - void fill_writer_info (ASDCP::WriterInfo* w) const; + void fill_writer_info (ASDCP::WriterInfo* w); + + void set_progress (boost::signals2::signal* progress) { + _progress = progress; + } + + bool encrypted () const { + return !_key_id.empty (); + } - /** Signal to emit to report progress */ + void set_key_id (std::string i) { + _key_id = i; + } + + std::string key_id () const { + return _key_id; + } + + void set_key (Key); + + boost::optional key () const { + return _key; + } + + 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; + } + +protected: + 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; - /** Frames per second */ - int _fps; - int _entry_point; - /** Length in frames */ - int _length; - bool _encrypted; ASDCP::AESEncContext* _encryption_context; - std::string _key_value; + ASDCP::AESDecContext* _decryption_context; std::string _key_id; + boost::optional _key; + MXFMetadata _metadata; + bool _interop; }; }