- if (!dcp.cpls().empty () && !dcp.cpls().front()->reels().empty ()) {
- shared_ptr<dcp::PictureMXF> mxf = dcp.cpls().front()->reels().front()->main_picture()->mxf ();
- shared_ptr<dcp::MonoPictureMXF> mono = dynamic_pointer_cast<dcp::MonoPictureMXF> (mxf);
- shared_ptr<dcp::StereoPictureMXF> stereo = dynamic_pointer_cast<dcp::StereoPictureMXF> (mxf);
-
- shared_ptr<Image> image (new Image (PIX_FMT_RGB24, _video_size.get(), false));
-
- if (mono) {
- mono->get_frame(0)->rgb_frame (image->data()[0]);
- } else {
- stereo->get_frame(0)->rgb_frame (dcp::EYE_LEFT, image->data()[0]);
+ for (auto i: selected_cpl->reels()) {
+ LOG_GENERAL ("Reel %1", i->id());
+ if (i->main_picture() && i->main_picture()->asset_ref().resolved()) {
+ auto pic = i->main_picture()->asset();
+ if (pic->encrypted() && !pic->key()) {
+ _kdm_valid = false;
+ LOG_GENERAL_NC ("Picture has no key");
+ break;
+ }
+ auto mono = dynamic_pointer_cast<dcp::MonoPictureAsset>(pic);
+ auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset>(pic);
+
+ if (mono) {
+ auto reader = mono->start_read();
+ reader->set_check_hmac (false);
+ reader->get_frame(0)->xyz_image();
+ } else {
+ auto reader = stereo->start_read();
+ reader->set_check_hmac (false);
+ reader->get_frame(0)->xyz_image(dcp::Eye::LEFT);
+ }
+ }
+
+ if (i->main_sound() && i->main_sound()->asset_ref().resolved()) {
+ auto sound = i->main_sound()->asset();
+ if (sound->encrypted() && !sound->key()) {
+ _kdm_valid = false;
+ LOG_GENERAL_NC ("Sound has no key");
+ break;
+ }
+ auto reader = sound->start_read();
+ reader->set_check_hmac (false);
+ reader->get_frame(0);
+ }
+
+ if (i->main_subtitle() && i->main_subtitle()->asset_ref().resolved()) {
+ auto sub = i->main_subtitle()->asset();
+ auto mxf_sub = dynamic_pointer_cast<dcp::MXF>(sub);
+ if (mxf_sub && mxf_sub->encrypted() && !mxf_sub->key()) {
+ _kdm_valid = false;
+ LOG_GENERAL_NC ("Subtitle has no key");
+ break;
+ }
+ sub->subtitles ();
+ }
+
+ if (i->atmos() && i->atmos()->asset_ref().resolved()) {
+ if (auto atmos = i->atmos()->asset()) {
+ if (atmos->encrypted() && !atmos->key()) {
+ _kdm_valid = false;
+ LOG_GENERAL_NC ("ATMOS sound has no key");
+ break;
+ }
+ auto reader = atmos->start_read();
+ reader->set_check_hmac (false);
+ reader->get_frame(0);
+ }