Extract common code out into kdm_for_screen()
authorCarl Hetherington <cth@carlh.net>
Tue, 5 May 2020 20:28:25 +0000 (22:28 +0200)
committerCarl Hetherington <cth@carlh.net>
Wed, 6 May 2020 18:15:49 +0000 (20:15 +0200)
src/lib/screen.cc
src/lib/screen.h
src/tools/dcpomatic_kdm_cli.cc
src/wx/kdm_dialog.cc

index fe62a5e..6323708 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2020 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 */
 
 #include "screen.h"
+#include "kdm_with_metadata.h"
+#include "film.h"
+#include "cinema.h"
 #include <libxml++/libxml++.h>
 #include <boost/foreach.hpp>
 #include <boost/algorithm/string.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
 
 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<const Film> film,
+       boost::filesystem::path cpl,
+       shared_ptr<const dcpomatic::Screen> screen,
+       boost::posix_time::ptime valid_from,
+       boost::posix_time::ptime valid_to,
+       dcp::Formulation formulation,
+       bool disable_forensic_marking_picture,
+       optional<int> disable_forensic_marking_audio
+       )
+{
+       if (!screen->recipient) {
+               return KDMWithMetadataPtr();
+       }
+
+       shared_ptr<const Cinema> 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));
+}
+
index 40990b6..33c7f28 100644 (file)
 #ifndef DCPOMATIC_SCREEN_H
 #define DCPOMATIC_SCREEN_H
 
+#include "kdm_with_metadata.h"
 #include <dcp/certificate.h>
 #include <libcxml/cxml.h>
 #include <boost/optional.hpp>
 #include <string>
 
 class Cinema;
+class Film;
 
 class TrustedDevice
 {
@@ -79,4 +81,17 @@ public:
 
 }
 
+KDMWithMetadataPtr
+kdm_for_screen (
+       boost::shared_ptr<const Film> film,
+       boost::filesystem::path cpl,
+       boost::shared_ptr<const dcpomatic::Screen> screen,
+       boost::posix_time::ptime valid_from,
+       boost::posix_time::ptime valid_to,
+       dcp::Formulation formulation,
+       bool disable_forensic_marking_picture,
+       boost::optional<int> disable_forensic_marking_audio
+       );
+
+
 #endif
index 78b4201..a3075d6 100644 (file)
@@ -220,40 +220,14 @@ from_film (
 
        boost::filesystem::path cpl = cpls.front().cpl_file;
 
-       dcp::NameFormat::Map values;
-
        try {
                list<KDMWithMetadataPtr> kdms;
-
                BOOST_FOREACH (shared_ptr<Screen> 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";
index d747418..d3bbf02 100644 (file)
@@ -162,35 +162,11 @@ KDMDialog::make_clicked ()
                }
 
                BOOST_FOREACH (shared_ptr<dcpomatic::Screen> 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."));