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);
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");
* 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;
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 {
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));
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,
);
boost::shared_ptr<Cinema> cinema;
- std::list<ScreenKDM> screen_kdms;
+ std::list<boost::shared_ptr<ScreenKDM> > screen_kdms;
};
#include "encrypted_ecinema_kdm.h"
#include "exceptions.h"
+#include "cross.h"
#include <dcp/key.h>
#include <dcp/certificate.h>
#include <dcp/util.h>
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
explicit EncryptedECinemaKDM (std::string xml);
std::string as_xml () const;
+ void as_xml (boost::filesystem::path out) const;
std::string id () const {
return _id;
* @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,
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) {
disable_forensic_marking_audio
);
- kdms.push_back (ScreenKDM (i, kdm));
+ kdms.push_back (shared_ptr<ScreenKDM>(new DCPScreenKDM(i, kdm)));
}
}
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,
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,
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;
}
}
/* 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;
}
}
#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>
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
digester.cc
dkdm_wrapper.cc
dolby_cp750.cc
- ecinema_screen_kdm.cc
edid.cc
emailer.cc
empty.cc
throw InvalidSignerError ();
}
- list<ScreenKDM> screen_kdms;
+ list<shared_ptr<ScreenKDM> > screen_kdms;
BOOST_FOREACH (shared_ptr<Screen> i, _screens->screens()) {
if (!i->recipient) {
/* Encrypt */
screen_kdms.push_back (
- ScreenKDM (
- i,
- kdm.encrypt (
- signer, i->recipient.get(), i->trusted_device_thumbprints(), _output->formulation(),
- !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional<int>() : 0
+ shared_ptr<ScreenKDM>(
+ new DCPScreenKDM(
+ i,
+ kdm.encrypt(
+ signer, i->recipient.get(), i->trusted_device_thumbprints(), _output->formulation(),
+ !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional<int>() : 0
+ )
)
)
);
shared_ptr<const Film> film = _film.lock ();
DCPOMATIC_ASSERT (film);
- list<ScreenKDM> screen_kdms;
+ list<shared_ptr<ScreenKDM> > screen_kdms;
try {
screen_kdms = film->make_kdms (
pair<shared_ptr<Job>, int>
KDMOutputPanel::make (
- list<ScreenKDM> screen_kdms, string name, KDMTimingPanel* timing, function<bool (boost::filesystem::path)> confirm_overwrite
+ list<shared_ptr<ScreenKDM> > screen_kdms, string name, KDMTimingPanel* timing, function<bool (boost::filesystem::path)> confirm_overwrite
)
{
list<CinemaKDMs> const cinema_kdms = CinemaKDMs::collect (screen_kdms);
}
std::pair<boost::shared_ptr<Job>, int> make (
- std::list<ScreenKDM> screen_kdms,
+ std::list<boost::shared_ptr<ScreenKDM> > screen_kdms,
std::string name,
KDMTimingPanel* timing,
boost::function<bool (boost::filesystem::path)> confirm_overwrite