X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Freel.cc;h=ff51c025b78dd664ebd9a47e827e77b042bf42c0;hb=bf59c288798851808359575662f202d390032aa7;hp=43c934ea2f91ad7d28a8220eb1b494cf25b41380;hpb=d697e7bedb1e42f5167c92fd9ab363f496d718f5;p=libdcp.git diff --git a/src/reel.cc b/src/reel.cc index 43c934ea..ff51c025 100644 --- a/src/reel.cc +++ b/src/reel.cc @@ -21,6 +21,8 @@ #include "reel.h" #include "util.h" #include "picture_asset.h" +#include "mono_picture_asset.h" +#include "stereo_picture_asset.h" #include "sound_asset.h" #include "subtitle_asset.h" #include "kdm.h" @@ -29,25 +31,32 @@ using std::string; using std::list; using std::cout; using boost::shared_ptr; +using boost::dynamic_pointer_cast; using namespace libdcp; void -Reel::write_to_cpl (xmlpp::Element* node, bool interop) const +Reel::write_to_cpl (xmlpp::Element* node) const { xmlpp::Element* reel = node->add_child ("Reel"); reel->add_child("Id")->add_child_text ("urn:uuid:" + make_uuid()); xmlpp::Element* asset_list = reel->add_child ("AssetList"); - if (_main_picture) { - _main_picture->write_to_cpl (asset_list, interop); + if (_main_picture && dynamic_pointer_cast (_main_picture)) { + /* Mono pictures come before other stuff... */ + _main_picture->write_to_cpl (asset_list); } if (_main_sound) { - _main_sound->write_to_cpl (asset_list, interop); + _main_sound->write_to_cpl (asset_list); } if (_main_subtitle) { - _main_subtitle->write_to_cpl (asset_list, interop); + _main_subtitle->write_to_cpl (asset_list); + } + + if (_main_picture && dynamic_pointer_cast (_main_picture)) { + /* ... but stereo pictures must come after */ + _main_picture->write_to_cpl (asset_list); } } @@ -93,14 +102,25 @@ Reel::encrypted () const void Reel::add_kdm (KDM const & kdm) { - list ciphers = kdm.ciphers (); + list keys = kdm.keys (); - for (list::iterator i = ciphers.begin(); i != ciphers.end(); ++i) { + for (list::iterator i = keys.begin(); i != keys.end(); ++i) { if (i->key_id() == _main_picture->key_id()) { - _main_picture->set_kdm_cipher (*i); + _main_picture->set_key (i->key ()); } if (i->key_id() == _main_sound->key_id()) { - _main_sound->set_kdm_cipher (*i); + _main_sound->set_key (i->key ()); } } } + +void +Reel::set_mxf_keys (Key key) +{ + _main_picture->set_key (key); + if (_main_sound) { + _main_sound->set_key (key); + } + + /* XXX: subtitle asset? */ +}