X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fmxf_asset.h;h=d681970eb24291281c22944753ead1c577127792;hb=30e2f6f873002d16aeae707879ea15c1c63a4323;hp=0c98f3c68831d3e555012ff903dd3e381a8fcdd7;hpb=6322c72a13d7be2e991a8e0421414c0af8187b88;p=libdcp.git diff --git a/src/mxf_asset.h b/src/mxf_asset.h index 0c98f3c6..d681970e 100644 --- a/src/mxf_asset.h +++ b/src/mxf_asset.h @@ -22,10 +22,18 @@ #include #include "asset.h" +#include "key.h" + +namespace ASDCP { + class AESEncContext; + class AESDecContext; +} namespace libdcp { +class MXFMetadata; + /** @brief Parent class for assets which have MXF files */ class MXFAsset : public Asset { @@ -47,48 +55,60 @@ public: * @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); + MXFAsset ( + std::string directory, + std::string file_name, + boost::signals2::signal* progress, + int edit_rate, + int intrinsic_duration + ); - void set_entry_point (int e) { - _entry_point = e; - } - - void set_duration (int d) { - _duration = d; - } + ~MXFAsset (); - void set_intrinsic_duration (int d) { - _intrinsic_duration = d; - } + virtual bool equals (boost::shared_ptr other, EqualityOptions opt, boost::function note) const; - virtual bool equals (boost::shared_ptr other, EqualityOptions opt, boost::function note) const; - - int intrinsic_duration () const { - return _intrinsic_duration; - } - - int edit_rate () const { - return _edit_rate; - } + virtual void write_to_cpl (xmlpp::Element *, bool interop) const; /** 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. */ - static void fill_writer_info (ASDCP::WriterInfo* w, std::string uuid); + void fill_writer_info (ASDCP::WriterInfo* w, std::string uuid, bool interop, MXFMetadata const & metadata); -protected: + void add_typed_key_id (xmlpp::Element *) const; + 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); + + boost::optional key () const { + return _key; + } + +protected: + virtual std::string key_type () const = 0; + virtual std::string cpl_node_name () const = 0; + virtual std::pair cpl_node_attribute (bool) const { + return std::make_pair ("", ""); + } + /** Signal to emit to report progress, or 0 */ boost::signals2::signal* _progress; - /** 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; + ASDCP::AESEncContext* _encryption_context; + ASDCP::AESDecContext* _decryption_context; + std::string _key_id; + boost::optional _key; }; }