From 8f12e84009d7c2685bb2eeb32665876463d4e6e5 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 5 May 2020 22:28:25 +0200 Subject: [PATCH] Extract common code out into kdm_for_screen() --- src/lib/screen.cc | 54 +++++++++++++++++++++++++++++++++- src/lib/screen.h | 15 ++++++++++ src/tools/dcpomatic_kdm_cli.cc | 32 ++------------------ src/wx/kdm_dialog.cc | 30 ++----------------- 4 files changed, 74 insertions(+), 57 deletions(-) diff --git a/src/lib/screen.cc b/src/lib/screen.cc index fe62a5e6c..632370810 100644 --- a/src/lib/screen.cc +++ b/src/lib/screen.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2016 Carl Hetherington + Copyright (C) 2013-2020 Carl Hetherington This file is part of DCP-o-matic. @@ -19,12 +19,18 @@ */ #include "screen.h" +#include "kdm_with_metadata.h" +#include "film.h" +#include "cinema.h" #include #include #include +#include using std::string; using std::vector; +using boost::shared_ptr; +using boost::optional; using namespace dcpomatic; Screen::Screen (cxml::ConstNodePtr node) @@ -102,3 +108,49 @@ TrustedDevice::thumbprint () const return *_thumbprint; } + + +KDMWithMetadataPtr +kdm_for_screen ( + shared_ptr film, + boost::filesystem::path cpl, + shared_ptr screen, + boost::posix_time::ptime valid_from, + boost::posix_time::ptime valid_to, + dcp::Formulation formulation, + bool disable_forensic_marking_picture, + optional disable_forensic_marking_audio + ) +{ + if (!screen->recipient) { + return KDMWithMetadataPtr(); + } + + shared_ptr cinema = screen->cinema; + dcp::LocalTime const begin(valid_from, cinema ? cinema->utc_offset_hour() : 0, cinema ? cinema->utc_offset_minute() : 0); + dcp::LocalTime const end (valid_to, cinema ? cinema->utc_offset_hour() : 0, cinema ? cinema->utc_offset_minute() : 0); + + dcp::EncryptedKDM const kdm = film->make_kdm ( + screen->recipient.get(), + screen->trusted_device_thumbprints(), + cpl, + begin, + end, + formulation, + disable_forensic_marking_picture, + disable_forensic_marking_audio + ); + + dcp::NameFormat::Map name_values; + if (cinema) { + name_values['c'] = cinema->name; + } + name_values['s'] = screen->name; + name_values['f'] = film->name(); + name_values['b'] = begin.date() + " " + begin.time_of_day(true, false); + name_values['e'] = end.date() + " " + end.time_of_day(true, false); + name_values['i'] = kdm.cpl_id(); + + return KDMWithMetadataPtr(new DCPKDMWithMetadata(name_values, cinema, kdm)); +} + diff --git a/src/lib/screen.h b/src/lib/screen.h index 40990b684..33c7f280c 100644 --- a/src/lib/screen.h +++ b/src/lib/screen.h @@ -21,12 +21,14 @@ #ifndef DCPOMATIC_SCREEN_H #define DCPOMATIC_SCREEN_H +#include "kdm_with_metadata.h" #include #include #include #include class Cinema; +class Film; class TrustedDevice { @@ -79,4 +81,17 @@ public: } +KDMWithMetadataPtr +kdm_for_screen ( + boost::shared_ptr film, + boost::filesystem::path cpl, + boost::shared_ptr screen, + boost::posix_time::ptime valid_from, + boost::posix_time::ptime valid_to, + dcp::Formulation formulation, + bool disable_forensic_marking_picture, + boost::optional disable_forensic_marking_audio + ); + + #endif diff --git a/src/tools/dcpomatic_kdm_cli.cc b/src/tools/dcpomatic_kdm_cli.cc index 78b4201c6..a3075d675 100644 --- a/src/tools/dcpomatic_kdm_cli.cc +++ b/src/tools/dcpomatic_kdm_cli.cc @@ -220,40 +220,14 @@ from_film ( boost::filesystem::path cpl = cpls.front().cpl_file; - dcp::NameFormat::Map values; - try { list kdms; - BOOST_FOREACH (shared_ptr i, screens) { - if (i->recipient) { - - dcp::LocalTime const begin(valid_from, i->cinema ? i->cinema->utc_offset_hour() : 0, i->cinema ? i->cinema->utc_offset_minute() : 0); - dcp::LocalTime const end(valid_to, i->cinema ? i->cinema->utc_offset_hour() : 0, i->cinema ? i->cinema->utc_offset_minute() : 0); - - dcp::EncryptedKDM const kdm = film->make_kdm ( - i->recipient.get(), - i->trusted_device_thumbprints(), - cpl, - begin, - end, - formulation, - disable_forensic_marking_picture, - disable_forensic_marking_audio - ); - - dcp::NameFormat::Map name_values; - name_values['c'] = i->cinema->name; - name_values['s'] = i->name; - name_values['f'] = film->name(); - name_values['b'] = dcp::LocalTime(begin).date() + " " + dcp::LocalTime(begin).time_of_day(true, false); - name_values['e'] = dcp::LocalTime(end).date() + " " + dcp::LocalTime(end).time_of_day(true, false); - name_values['i'] = kdm.cpl_id(); - - kdms.push_back (KDMWithMetadataPtr(new DCPKDMWithMetadata(name_values, i->cinema, kdm))); + KDMWithMetadataPtr p = kdm_for_screen (film, cpl, i, valid_from, valid_to, formulation, disable_forensic_marking_picture, disable_forensic_marking_audio); + if (p) { + kdms.push_back (p); } } - write_files (kdms, zip, output, container_name_format, filename_format, verbose); } catch (FileError& e) { cerr << program_name << ": " << e.what() << " (" << e.file().string() << ")\n"; diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc index d74741871..d3bbf02c9 100644 --- a/src/wx/kdm_dialog.cc +++ b/src/wx/kdm_dialog.cc @@ -162,35 +162,11 @@ KDMDialog::make_clicked () } BOOST_FOREACH (shared_ptr i, _screens->screens()) { - if (i->recipient) { - dcp::LocalTime const begin(_timing->from(), i->cinema ? i->cinema->utc_offset_hour() : 0, i->cinema ? i->cinema->utc_offset_minute() : 0); - dcp::LocalTime const end(_timing->until(), i->cinema ? i->cinema->utc_offset_hour() : 0, i->cinema ? i->cinema->utc_offset_minute() : 0); - - dcp::EncryptedKDM const kdm = film->make_kdm ( - i->recipient.get(), - i->trusted_device_thumbprints(), - _cpl->cpl(), - begin, - end, - _output->formulation(), - !_output->forensic_mark_video(), - for_audio - ); - - dcp::NameFormat::Map name_values; - if (i->cinema) { - name_values['c'] = i->cinema->name; - } - name_values['s'] = i->name; - name_values['f'] = film->name(); - name_values['b'] = dcp::LocalTime(begin).date() + " " + dcp::LocalTime(begin).time_of_day(false, false); - name_values['e'] = dcp::LocalTime(end).date() + " " + dcp::LocalTime(end).time_of_day(false, false); - name_values['i'] = kdm.cpl_id(); - - kdms.push_back (KDMWithMetadataPtr(new DCPKDMWithMetadata(name_values, i->cinema, kdm))); + KDMWithMetadataPtr p = kdm_for_screen (film, _cpl->cpl(), i, _timing->from(), _timing->until(), _output->formulation(), !_output->forensic_mark_video(), for_audio); + if (p) { + kdms.push_back (p); } } - } catch (dcp::BadKDMDateError& e) { if (e.starts_too_early()) { error_dialog (this, _("The KDM start period is before (or close to) the start of the signing certificate's validity period. Use a later start time for this KDM.")); -- 2.30.2