- BOOST_FOREACH (shared_ptr<dcpomatic::Screen> i, _screens->screens()) {
- if (i->recipient) {
- dcp::EncryptedKDM const kdm = film->make_kdm (
- i->recipient.get(),
- i->trusted_device_thumbprints(),
- _cpl->cpl(),
- dcp::LocalTime(_timing->from(), i->cinema ? i->cinema->utc_offset_hour() : 0, i->cinema ? i->cinema->utc_offset_minute() : 0),
- dcp::LocalTime(_timing->until(), i->cinema ? i->cinema->utc_offset_hour() : 0, i->cinema ? i->cinema->utc_offset_minute() : 0),
- _output->formulation(),
- !_output->forensic_mark_video(),
- for_audio
- );
-
- screen_kdms.push_back (KDMWithMetadataPtr(new DCPKDMWithMetadata(i, kdm)));
+ vector<KDMCertificatePeriod> period_checks;
+
+ std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm = [film, this](dcp::LocalTime begin, dcp::LocalTime end) {
+ return film->make_kdm(_cpl->cpl(), begin, end);
+ };
+
+ for (auto i: _screens->screens()) {
+ auto p = kdm_for_screen(make_kdm, i, _timing->from(), _timing->until(), _output->formulation(), !_output->forensic_mark_video(), for_audio, period_checks);
+ if (p) {
+ kdms.push_back (p);