using std::bad_alloc;
using std::set_terminate;
using std::make_pair;
-using boost::shared_ptr;
+using std::shared_ptr;
using boost::thread;
using boost::optional;
using boost::lexical_cast;
#endif
Pango::init ();
- dcp::init ();
+ dcp::init (tags_path());
#if defined(DCPOMATIC_WINDOWS) || defined(DCPOMATIC_OSX)
/* Render something to fontconfig to create its cache */
int non_lfe = 0;
int lfe = 0;
- BOOST_FOREACH (int i, mapped) {
+ for (auto i: mapped) {
if (i >= channels) {
/* This channel is mapped but is not included in the DCP */
continue;
emit_subtitle_image (ContentTimePeriod period, dcp::SubtitleImage sub, dcp::Size size, shared_ptr<TextDecoder> decoder)
{
/* XXX: this is rather inefficient; decoding the image just to get its size */
- FFmpegImageProxy proxy (sub.png_image());
+ FFmpegImageProxy proxy (sub.png_image(), VIDEO_RANGE_FULL);
shared_ptr<Image> image = proxy.image().image;
/* set up rect with height and width */
dcpomatic::Rect<double> rect(0, 0, image->size().width / double(size.width), image->size().height / double(size.height));
first = false;
- BOOST_FOREACH (shared_ptr<Job> i, jobs) {
+ for (auto i: jobs) {
if (progress) {
cout << i->name();
if (!i->sub_name().empty()) {
free (buffer);
}
-#ifdef DCPOMATIC_VARIANT_SWAROOP
-
-/* Make up a key from the machine UUID */
-dcp::Data
-key_from_uuid ()
-{
- dcp::Data key (dcpomatic::crypto_key_length());
- memset (key.data().get(), 0, key.size());
- string const magic = command_and_read ("dcpomatic2_uuid");
- strncpy ((char *) key.data().get(), magic.c_str(), dcpomatic::crypto_key_length());
- return key;
-}
-
-/* swaroop chain file format:
- *
- * 0 [int16_t] IV length
- * 2 [int16_t] cert #1 length, or 0 for none
- * 4 [int16_t] cert #2 length, or 0 for none
- * 6 [int16_t] cert #3 length, or 0 for none
- * 8 [int16_t] cert #4 length, or 0 for none
- * 10 [int16_t] cert #5 length, or 0 for none
- * 12 [int16_t] cert #6 length, or 0 for none
- * 14 [int16_t] cert #7 length, or 0 for none
- * 16 [int16_t] cert #8 length, or 0 for none
- * 16 [int16_t] private key length
- * 20 IV
- * cert #1
- * cert #2
- * cert #3
- * cert #4
- * cert #5
- * cert #6
- * cert #7
- * cert #8
- * private key
- */
-
-struct __attribute__ ((packed)) Header_ {
- int16_t iv_length;
- int16_t cert_length[8];
- int16_t private_key_length;
-};
-
-typedef struct Header_ Header;
-
-shared_ptr<dcp::CertificateChain>
-read_swaroop_chain (boost::filesystem::path path)
-{
- dcp::Data data (path);
- Header* header = (Header *) data.data().get();
- uint8_t* p = data.data().get() + sizeof(Header);
-
- dcp::Data iv (p, header->iv_length);
- p += iv.size();
-
- shared_ptr<dcp::CertificateChain> cc (new dcp::CertificateChain());
- for (int i = 0; i < 8; ++i) {
- if (header->cert_length[i] == 0) {
- break;
- }
- dcp::Data c(p, header->cert_length[i]);
- p += c.size();
- cc->add (dcp::Certificate(dcpomatic::decrypt(c, key_from_uuid(), iv)));
- }
-
- dcp::Data k (p, header->private_key_length);
- cc->set_key (dcpomatic::decrypt(k, key_from_uuid(), iv));
- return cc;
-}
-
-void
-write_swaroop_chain (shared_ptr<const dcp::CertificateChain> chain, boost::filesystem::path output)
-{
- scoped_array<uint8_t> buffer (new uint8_t[65536]);
- Header* header = (Header *) buffer.get();
- memset (header, 0, sizeof(Header));
- uint8_t* p = buffer.get() + sizeof(Header);
-
- dcp::Data iv = dcpomatic::random_iv ();
- header->iv_length = iv.size ();
- memcpy (p, iv.data().get(), iv.size());
- p += iv.size();
-
- int N = 0;
- BOOST_FOREACH (dcp::Certificate i, chain->root_to_leaf()) {
- dcp::Data e = dcpomatic::encrypt (i.certificate(true), key_from_uuid(), iv);
- memcpy (p, e.data().get(), e.size());
- p += e.size();
- DCPOMATIC_ASSERT (N < 8);
- header->cert_length[N] = e.size ();
- ++N;
- }
-
- dcp::Data k = dcpomatic::encrypt (chain->key().get(), key_from_uuid(), iv);
- memcpy (p, k.data().get(), k.size());
- p += k.size();
- header->private_key_length = k.size ();
-
- FILE* f = fopen_boost (output, "wb");
- checked_fwrite (buffer.get(), p - buffer.get(), f, output);
- fclose (f);
-}
-
-#endif
-
double
db_to_linear (double db)
{
string const kdm_subject_name = kdm.recipient_x509_subject_name();
bool on_chain = false;
shared_ptr<const dcp::CertificateChain> dc = Config::instance()->decryption_chain();
- BOOST_FOREACH (dcp::Certificate i, dc->root_to_leaf()) {
+ for (auto i: dc->root_to_leaf()) {
if (i.subject() == kdm_subject_name) {
on_chain = true;
}
}
if (!on_chain) {
throw KDMError (_("This KDM was not made for DCP-o-matic's decryption certificate."), e.what());
- } else if (on_chain && kdm_subject_name != dc->leaf().subject()) {
+ } else if (kdm_subject_name != dc->leaf().subject()) {
throw KDMError (_("This KDM was made for DCP-o-matic but not for its leaf certificate."), e.what());
} else {
throw;