diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-05-13 21:52:27 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-05-13 21:52:27 +0100 |
| commit | 006e38346a8bcdcc889979b7c00802d9bb8fc6f8 (patch) | |
| tree | 352caad1d2863ef4385b0d91fa7de07f52ff5e27 /src/lib | |
| parent | 6cde6bcc0b604c1a157a4ccbdce29e91f4d45a91 (diff) | |
swaroop: allow ScreenKDM subclasses for different KDM types.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/cinema_kdms.cc | 24 | ||||
| -rw-r--r-- | src/lib/cinema_kdms.h | 4 | ||||
| -rw-r--r-- | src/lib/encrypted_ecinema_kdm.cc | 10 | ||||
| -rw-r--r-- | src/lib/encrypted_ecinema_kdm.h | 1 | ||||
| -rw-r--r-- | src/lib/film.cc | 6 | ||||
| -rw-r--r-- | src/lib/film.h | 2 | ||||
| -rw-r--r-- | src/lib/screen_kdm.cc | 22 | ||||
| -rw-r--r-- | src/lib/screen_kdm.h | 59 | ||||
| -rw-r--r-- | src/lib/wscript | 1 |
9 files changed, 92 insertions, 37 deletions
diff --git a/src/lib/cinema_kdms.cc b/src/lib/cinema_kdms.cc index 7952b7ab2..32879cf6b 100644 --- a/src/lib/cinema_kdms.cc +++ b/src/lib/cinema_kdms.cc @@ -56,8 +56,8 @@ CinemaKDMs::make_zip_file (boost::filesystem::path zip_file, dcp::NameFormat nam name_values['c'] = cinema->name; - BOOST_FOREACH (ScreenKDM const & i, screen_kdms) { - shared_ptr<string> kdm (new string (i.kdm.as_xml ())); + BOOST_FOREACH (shared_ptr<ScreenKDM> i, screen_kdms) { + shared_ptr<string> kdm (new string(i->kdm_as_xml())); kdm_strings.push_back (kdm); struct zip_source* source = zip_source_buffer (zip, kdm->c_str(), kdm->length(), 0); @@ -65,8 +65,8 @@ CinemaKDMs::make_zip_file (boost::filesystem::path zip_file, dcp::NameFormat nam throw runtime_error ("could not create ZIP source"); } - name_values['s'] = i.screen->name; - name_values['i'] = i.kdm.id (); + name_values['s'] = i->screen->name; + name_values['i'] = i->kdm_id (); string const name = careful_string_filter(name_format.get(name_values, ".xml")); if (zip_add (zip, name.c_str(), source) == -1) { throw runtime_error ("failed to add KDM to ZIP archive"); @@ -82,7 +82,7 @@ CinemaKDMs::make_zip_file (boost::filesystem::path zip_file, dcp::NameFormat nam * CinemaKDM contains the KDMs for its cinema. */ list<CinemaKDMs> -CinemaKDMs::collect (list<ScreenKDM> screen_kdms) +CinemaKDMs::collect (list<shared_ptr<ScreenKDM> > screen_kdms) { list<CinemaKDMs> cinema_kdms; @@ -92,17 +92,17 @@ CinemaKDMs::collect (list<ScreenKDM> screen_kdms) CinemaKDMs ck; - list<ScreenKDM>::iterator i = screen_kdms.begin (); - ck.cinema = i->screen->cinema; + list<shared_ptr<ScreenKDM> >::iterator i = screen_kdms.begin (); + ck.cinema = (*i)->screen->cinema; ck.screen_kdms.push_back (*i); - list<ScreenKDM>::iterator j = i; + list<shared_ptr<ScreenKDM> >::iterator j = i; ++i; screen_kdms.remove (*j); while (i != screen_kdms.end ()) { - if (i->screen->cinema == ck.cinema) { + if ((*i)->screen->cinema == ck.cinema) { ck.screen_kdms.push_back (*i); - list<ScreenKDM>::iterator j = i; + list<shared_ptr<ScreenKDM> >::iterator j = i; ++i; screen_kdms.remove (*j); } else { @@ -230,8 +230,8 @@ CinemaKDMs::email ( boost::algorithm::replace_all (body, "$CINEMA_NAME", i.cinema->name); string screens; - BOOST_FOREACH (ScreenKDM const & j, i.screen_kdms) { - screens += j.screen->name + ", "; + BOOST_FOREACH (shared_ptr<ScreenKDM> j, i.screen_kdms) { + screens += j->screen->name + ", "; } boost::algorithm::replace_all (body, "$SCREENS", screens.substr (0, screens.length() - 2)); diff --git a/src/lib/cinema_kdms.h b/src/lib/cinema_kdms.h index 566b947a2..2b82cdab6 100644 --- a/src/lib/cinema_kdms.h +++ b/src/lib/cinema_kdms.h @@ -29,7 +29,7 @@ class CinemaKDMs public: void make_zip_file (boost::filesystem::path zip_file, dcp::NameFormat name_format, dcp::NameFormat::Map name_values) const; - static std::list<CinemaKDMs> collect (std::list<ScreenKDM> kdms); + static std::list<CinemaKDMs> collect (std::list<boost::shared_ptr<ScreenKDM> > kdms); static int write_directories ( std::list<CinemaKDMs> cinema_kdms, @@ -58,5 +58,5 @@ public: ); boost::shared_ptr<Cinema> cinema; - std::list<ScreenKDM> screen_kdms; + std::list<boost::shared_ptr<ScreenKDM> > screen_kdms; }; diff --git a/src/lib/encrypted_ecinema_kdm.cc b/src/lib/encrypted_ecinema_kdm.cc index e4e19d7fb..f0502ab31 100644 --- a/src/lib/encrypted_ecinema_kdm.cc +++ b/src/lib/encrypted_ecinema_kdm.cc @@ -22,6 +22,7 @@ #include "encrypted_ecinema_kdm.h" #include "exceptions.h" +#include "cross.h" #include <dcp/key.h> #include <dcp/certificate.h> #include <dcp/util.h> @@ -85,4 +86,13 @@ EncryptedECinemaKDM::as_xml () const return document.write_to_string ("UTF-8"); } +void +EncryptedECinemaKDM::as_xml (boost::filesystem::path path) const +{ + FILE* f = fopen_boost (path, "w"); + string const x = as_xml (); + fwrite (x.c_str(), 1, x.length(), f); + fclose (f); +} + #endif diff --git a/src/lib/encrypted_ecinema_kdm.h b/src/lib/encrypted_ecinema_kdm.h index 0bcbc4117..c65620c8b 100644 --- a/src/lib/encrypted_ecinema_kdm.h +++ b/src/lib/encrypted_ecinema_kdm.h @@ -35,6 +35,7 @@ public: explicit EncryptedECinemaKDM (std::string xml); std::string as_xml () const; + void as_xml (boost::filesystem::path out) const; std::string id () const { return _id; diff --git a/src/lib/film.cc b/src/lib/film.cc index efc89e0eb..e54268805 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -1420,7 +1420,7 @@ Film::make_kdm ( * @param disable_forensic_marking_audio if not set, don't disable forensic marking of audio. If set to 0, * disable all forensic marking; if set above 0, disable forensic marking above that channel. */ -list<ScreenKDM> +list<shared_ptr<ScreenKDM> > Film::make_kdms ( list<shared_ptr<Screen> > screens, boost::filesystem::path cpl_file, @@ -1431,7 +1431,7 @@ Film::make_kdms ( optional<int> disable_forensic_marking_audio ) const { - list<ScreenKDM> kdms; + list<shared_ptr<ScreenKDM> > kdms; BOOST_FOREACH (shared_ptr<Screen> i, screens) { if (i->recipient) { @@ -1446,7 +1446,7 @@ Film::make_kdms ( disable_forensic_marking_audio ); - kdms.push_back (ScreenKDM (i, kdm)); + kdms.push_back (shared_ptr<ScreenKDM>(new DCPScreenKDM(i, kdm))); } } diff --git a/src/lib/film.h b/src/lib/film.h index 87ea700b7..876d312ae 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -142,7 +142,7 @@ public: boost::optional<int> disable_forensic_marking_audio ) const; - std::list<ScreenKDM> make_kdms ( + std::list<boost::shared_ptr<ScreenKDM> > make_kdms ( std::list<boost::shared_ptr<dcpomatic::Screen> > screens, boost::filesystem::path cpl_file, boost::posix_time::ptime from, diff --git a/src/lib/screen_kdm.cc b/src/lib/screen_kdm.cc index 5b7692469..f9a3fa36e 100644 --- a/src/lib/screen_kdm.cc +++ b/src/lib/screen_kdm.cc @@ -29,15 +29,9 @@ using std::cout; using std::list; using boost::shared_ptr; -bool -operator== (ScreenKDM const & a, ScreenKDM const & b) -{ - return a.screen == b.screen && a.kdm == b.kdm; -} - int ScreenKDM::write_files ( - list<ScreenKDM> screen_kdms, + list<shared_ptr<ScreenKDM> > screen_kdms, boost::filesystem::path directory, dcp::NameFormat name_format, dcp::NameFormat::Map name_values, @@ -48,8 +42,8 @@ ScreenKDM::write_files ( if (directory == "-") { /* Write KDMs to the stdout */ - BOOST_FOREACH (ScreenKDM const & i, screen_kdms) { - cout << i.kdm.as_xml (); + BOOST_FOREACH (shared_ptr<ScreenKDM> i, screen_kdms) { + cout << i->kdm_as_xml (); ++written; } @@ -61,13 +55,13 @@ ScreenKDM::write_files ( } /* Write KDMs to the specified directory */ - BOOST_FOREACH (ScreenKDM const & i, screen_kdms) { - name_values['c'] = i.screen->cinema ? i.screen->cinema->name : ""; - name_values['s'] = i.screen->name; - name_values['i'] = i.kdm.id (); + BOOST_FOREACH (shared_ptr<ScreenKDM> i, screen_kdms) { + name_values['c'] = i->screen->cinema ? i->screen->cinema->name : ""; + name_values['s'] = i->screen->name; + name_values['i'] = i->kdm_id (); boost::filesystem::path out = directory / careful_string_filter(name_format.get(name_values, ".xml")); if (!boost::filesystem::exists (out) || confirm_overwrite (out)) { - i.kdm.as_xml (out); + i->kdm_as_xml (out); ++written; } } diff --git a/src/lib/screen_kdm.h b/src/lib/screen_kdm.h index 351c2f1c2..6a102557f 100644 --- a/src/lib/screen_kdm.h +++ b/src/lib/screen_kdm.h @@ -21,6 +21,9 @@ #ifndef DCPOMATIC_SCREEN_KDM_H #define DCPOMATIC_SCREEN_KDM_H +#ifdef DCPOMATIC_VARIANT_SWAROOP +#include "encrypted_ecinema_kdm.h" +#endif #include <dcp/encrypted_kdm.h> #include <dcp/name_format.h> #include <boost/shared_ptr.hpp> @@ -33,21 +36,69 @@ namespace dcpomatic { class ScreenKDM { public: - ScreenKDM (boost::shared_ptr<dcpomatic::Screen> s, dcp::EncryptedKDM k) + ScreenKDM (boost::shared_ptr<dcpomatic::Screen> s) : screen (s) - , kdm (k) {} + virtual std::string kdm_as_xml () const = 0; + virtual void kdm_as_xml (boost::filesystem::path out) const = 0; + virtual std::string kdm_id () const = 0; + static int write_files ( - std::list<ScreenKDM> screen_kdms, boost::filesystem::path directory, + std::list<boost::shared_ptr<ScreenKDM> > screen_kdms, boost::filesystem::path directory, dcp::NameFormat name_format, dcp::NameFormat::Map name_values, boost::function<bool (boost::filesystem::path)> confirm_overwrite ); boost::shared_ptr<dcpomatic::Screen> screen; +}; + +class DCPScreenKDM : public ScreenKDM +{ +public: + DCPScreenKDM (boost::shared_ptr<dcpomatic::Screen> s, dcp::EncryptedKDM k) + : ScreenKDM (s) + , kdm (k) + {} + + std::string kdm_as_xml () const { + return kdm.as_xml (); + } + + void kdm_as_xml (boost::filesystem::path out) const { + return kdm.as_xml (out); + } + + std::string kdm_id () const { + return kdm.cpl_id (); + } + dcp::EncryptedKDM kdm; }; -extern bool operator== (ScreenKDM const & a, ScreenKDM const & b); +#ifdef DCPOMATIC_VARIANT_SWAROOP +class ECinemaScreenKDM : public ScreenKDM +{ +public: + ECinemaScreenKDM (boost::shared_ptr<dcpomatic::Screen> s, EncryptedECinemaKDM k) + : ScreenKDM (s) + , kdm (k) + {} + + std::string kdm_as_xml () const { + return kdm.as_xml (); + } + + void kdm_as_xml (boost::filesystem::path out) const { + return kdm.as_xml (out); + } + + std::string kdm_id () const { + return kdm.id (); + } + + EncryptedECinemaKDM kdm; +}; +#endif #endif diff --git a/src/lib/wscript b/src/lib/wscript index 37b942400..c5a270f65 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -77,7 +77,6 @@ sources = """ digester.cc dkdm_wrapper.cc dolby_cp750.cc - ecinema_screen_kdm.cc edid.cc emailer.cc empty.cc |
