X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fffmpeg_content.cc;h=f3c0d01cbafc792eb9356ae6b484a6e4e420a1ea;hp=e291b8e7cb151b839969f61a1daa18468e42fa49;hb=5eb8b5c3a1566aef638e9d9df03b88d320735092;hpb=257fce15e8b4dfa112d039e7888e3ec04e523198 diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index e291b8e7c..f3c0d01cb 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2016 Carl Hetherington + Copyright (C) 2013-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -30,9 +30,11 @@ #include "filter.h" #include "film.h" #include "log.h" +#include "config.h" #include "exceptions.h" #include "frame_rate_change.h" #include "text_content.h" +#include "decrypted_ecinema_kdm.h" #include #include extern "C" { @@ -65,7 +67,9 @@ int const FFmpegContentProperty::KDM = 103; FFmpegContent::FFmpegContent (boost::filesystem::path p) : Content (p) +#ifdef DCPOMATIC_VARIANT_SWAROOP , _encrypted (false) +#endif { } @@ -126,7 +130,9 @@ FFmpegContent::FFmpegContent (cxml::ConstNodePtr node, int version, list _color_trc = get_optional_enum(node, "ColorTransferCharacteristic"); _colorspace = get_optional_enum(node, "Colorspace"); _bits_per_pixel = node->optional_number_child ("BitsPerPixel"); +#ifdef DCPOMATIC_VARIANT_SWAROOP _encrypted = node->optional_bool_child("Encrypted").get_value_or(false); +#endif } FFmpegContent::FFmpegContent (vector > c) @@ -188,7 +194,9 @@ FFmpegContent::FFmpegContent (vector > c) _color_trc = ref->_color_trc; _colorspace = ref->_colorspace; _bits_per_pixel = ref->_bits_per_pixel; +#ifdef DCPOMATIC_VARIANT_SWAROOP _encrypted = ref->_encrypted; +#endif } void @@ -248,9 +256,11 @@ FFmpegContent::as_xml (xmlpp::Node* node, bool with_paths) const if (_bits_per_pixel) { node->add_child("BitsPerPixel")->add_child_text (raw_convert (*_bits_per_pixel)); } +#ifdef DCPOMATIC_VARIANT_SWAROOP if (_encrypted) { node->add_child("Encypted")->add_child_text ("1"); } +#endif } void @@ -259,7 +269,9 @@ FFmpegContent::examine (shared_ptr film, shared_ptr job) ChangeSignaller cc1 (this, FFmpegContentProperty::SUBTITLE_STREAMS); ChangeSignaller cc2 (this, FFmpegContentProperty::SUBTITLE_STREAM); - job->set_progress_unknown (); + if (job) { + job->set_progress_unknown (); + } Content::examine (film, job); @@ -316,7 +328,9 @@ FFmpegContent::examine (shared_ptr film, shared_ptr job) _subtitle_stream = _subtitle_streams.front (); } +#ifdef DCPOMATIC_VARIANT_SWAROOP _encrypted = first_path.extension() == ".ecinema"; +#endif } if (examiner->has_video ()) { @@ -698,4 +712,21 @@ FFmpegContent::add_kdm (EncryptedECinemaKDM kdm) _kdm = kdm; } + +bool +FFmpegContent::kdm_timing_window_valid () const +{ + if (!_kdm) { + return true; + } + + DCPOMATIC_ASSERT (Config::instance()->decryption_chain()->key()); + + DecryptedECinemaKDM decrypted (*_kdm, *Config::instance()->decryption_chain()->key()); + + dcp::LocalTime now; + return (!decrypted.not_valid_before() || *decrypted.not_valid_before() < now) && + (!decrypted.not_valid_after() || now < *decrypted.not_valid_after()); +} + #endif