X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Freel.cc;h=ffb184ab67d0ebca5534822ce260337f0f010e7c;hb=30e2f6f873002d16aeae707879ea15c1c63a4323;hp=ae3080ad6386987e2877ad38a01332ea6196993d;hpb=ed6a471b61d36a3ba7e8696fa3e5606406c5cf62;p=libdcp.git diff --git a/src/reel.cc b/src/reel.cc index ae3080ad..ffb184ab 100644 --- a/src/reel.cc +++ b/src/reel.cc @@ -23,63 +23,84 @@ #include "picture_asset.h" #include "sound_asset.h" #include "subtitle_asset.h" +#include "kdm.h" -using namespace std; +using std::string; +using std::list; +using std::cout; +using boost::shared_ptr; using namespace libdcp; void -Reel::write_to_cpl (xmlpp::Node* parent) const +Reel::write_to_cpl (xmlpp::Element* node, bool interop) const { - xmlpp::Element* reel = parent->add_child("Reel"); - reel->add_child("Id")->add_child_text("urn:uuid:" + make_uuid()); - xmlpp::Element* asset_list = reel->add_child("AssetList"); - + 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); + _main_picture->write_to_cpl (asset_list, interop); } if (_main_sound) { - _main_sound->write_to_cpl (asset_list); + _main_sound->write_to_cpl (asset_list, interop); } if (_main_subtitle) { - _main_subtitle->write_to_cpl (asset_list); + _main_subtitle->write_to_cpl (asset_list, interop); } - - s << " \n" - << " \n"; } bool -Reel::equals (boost::shared_ptr other, EqualityOptions opt, list& notes) const +Reel::equals (boost::shared_ptr other, EqualityOptions opt, boost::function note) const { if ((_main_picture && !other->_main_picture) || (!_main_picture && other->_main_picture)) { - notes.push_back ("reel has different assets"); + note (ERROR, "reel has different assets"); return false; } - if (_main_picture && !_main_picture->equals (other->_main_picture, opt, notes)) { + if (_main_picture && !_main_picture->equals (other->_main_picture, opt, note)) { return false; } if ((_main_sound && !other->_main_sound) || (!_main_sound && other->_main_sound)) { - notes.push_back ("reel has different assets"); + note (ERROR, "reel has different assets"); return false; } - if (_main_sound && !_main_sound->equals (other->_main_sound, opt, notes)) { + if (_main_sound && !_main_sound->equals (other->_main_sound, opt, note)) { return false; } if ((_main_subtitle && !other->_main_subtitle) || (!_main_subtitle && other->_main_subtitle)) { - notes.push_back ("reel has different assets"); + note (ERROR, "reel has different assets"); return false; } - if (_main_subtitle && !_main_subtitle->equals (other->_main_subtitle, opt, notes)) { + if (_main_subtitle && !_main_subtitle->equals (other->_main_subtitle, opt, note)) { return false; } return true; } +bool +Reel::encrypted () const +{ + return ((_main_picture && _main_picture->encrypted ()) || (_main_sound && _main_sound->encrypted ())); +} + +void +Reel::add_kdm (KDM const & kdm) +{ + list keys = kdm.keys (); + + for (list::iterator i = keys.begin(); i != keys.end(); ++i) { + if (i->key_id() == _main_picture->key_id()) { + _main_picture->set_key (i->key ()); + } + if (i->key_id() == _main_sound->key_id()) { + _main_sound->set_key (i->key ()); + } + } +}