macOS / new boost build fixes.
[dcpomatic.git] / src / lib / ffmpeg_content.cc
index 29ff7e80baeb3f5550f28b674122121f230d381a..1fb95535f0e74af738f262f481fc22e380d300e6 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 #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 <dcp/raw_convert.h>
 #include <libcxml/cxml.h>
 extern "C" {
@@ -335,6 +337,14 @@ FFmpegContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
                set_default_colour_conversion ();
        }
 
+       if (examiner->has_video() && examiner->pulldown() && video_frame_rate() && fabs(*video_frame_rate() - 29.97) < 0.001) {
+               /* FFmpeg has detected this file as 29.97 and the examiner thinks it is using "soft" 2:3 pulldown (telecine).
+                * This means we can treat it as a 23.976fps file.
+                */
+               set_video_frame_rate (24000.0 / 1001);
+               video->set_length (video->length() * 24.0 / 30);
+       }
+
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        _id = examiner->id ();
 #endif
@@ -710,4 +720,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