+ bool ecc = false;
+ BOOST_FOREACH (shared_ptr<ReelClosedCaptionAsset> i, _closed_captions) {
+ if (i->encrypted()) {
+ ecc = true;
+ }
+ }
+
+ return (
+ (_main_picture && _main_picture->encrypted ()) ||
+ (_main_sound && _main_sound->encrypted ()) ||
+ (_main_subtitle && _main_subtitle->encrypted ()) ||
+ ecc ||
+ (_atmos && _atmos->encrypted ())
+ );
+}
+
+void
+Reel::add (DecryptedKDM const & kdm)
+{
+ list<DecryptedKDMKey> keys = kdm.keys ();
+
+ for (list<DecryptedKDMKey>::iterator i = keys.begin(); i != keys.end(); ++i) {
+ if (_main_picture && i->id() == _main_picture->key_id()) {
+ _main_picture->asset()->set_key (i->key ());
+ }
+ if (_main_sound && i->id() == _main_sound->key_id()) {
+ _main_sound->asset()->set_key (i->key ());
+ }
+ if (_main_subtitle && i->id() == _main_subtitle->key_id()) {
+ shared_ptr<SMPTESubtitleAsset> s = dynamic_pointer_cast<SMPTESubtitleAsset> (_main_subtitle->asset());
+ if (s) {
+ s->set_key (i->key ());
+ }
+ }
+ BOOST_FOREACH (shared_ptr<ReelClosedCaptionAsset> j, _closed_captions) {
+ if (i->id() == j->key_id()) {
+ shared_ptr<SMPTESubtitleAsset> s = dynamic_pointer_cast<SMPTESubtitleAsset> (j->asset());
+ if (s) {
+ s->set_key (i->key ());
+ }
+ }
+ }
+ if (_atmos && i->id() == _atmos->key_id()) {
+ _atmos->asset()->set_key (i->key ());
+ }
+ }
+}
+
+void
+Reel::add (shared_ptr<ReelAsset> asset)
+{
+ shared_ptr<ReelPictureAsset> p = dynamic_pointer_cast<ReelPictureAsset> (asset);
+ shared_ptr<ReelSoundAsset> so = dynamic_pointer_cast<ReelSoundAsset> (asset);
+ shared_ptr<ReelSubtitleAsset> su = dynamic_pointer_cast<ReelSubtitleAsset> (asset);
+ shared_ptr<ReelMarkersAsset> m = dynamic_pointer_cast<ReelMarkersAsset> (asset);
+ shared_ptr<ReelClosedCaptionAsset> c = dynamic_pointer_cast<ReelClosedCaptionAsset> (asset);
+ shared_ptr<ReelAtmosAsset> a = dynamic_pointer_cast<ReelAtmosAsset> (asset);
+ if (p) {
+ _main_picture = p;
+ } else if (so) {
+ _main_sound = so;
+ } else if (su) {
+ _main_subtitle = su;
+ } else if (m) {
+ _main_markers = m;
+ } else if (c) {
+ _closed_captions.push_back (c);
+ } else if (a) {
+ _atmos = a;
+ }
+}
+
+list<shared_ptr<ReelAsset> >
+Reel::assets () const
+{
+ list<shared_ptr<ReelAsset> > a;
+ if (_main_picture) {
+ a.push_back (_main_picture);
+ }
+ if (_main_sound) {
+ a.push_back (_main_sound);
+ }
+ if (_main_subtitle) {
+ a.push_back (_main_subtitle);
+ }
+ std::copy (_closed_captions.begin(), _closed_captions.end(), back_inserter(a));
+ if (_atmos) {
+ a.push_back (_atmos);
+ }
+ return a;