summaryrefslogtreecommitdiff
path: root/src/lib/film_state.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/film_state.cc')
-rw-r--r--src/lib/film_state.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/lib/film_state.cc b/src/lib/film_state.cc
index e472434ce..0c1ac87dc 100644
--- a/src/lib/film_state.cc
+++ b/src/lib/film_state.cc
@@ -35,6 +35,7 @@
#include "format.h"
#include "dcp_content_type.h"
#include "util.h"
+#include "exceptions.h"
using namespace std;
using namespace boost;
@@ -278,3 +279,23 @@ FilmState::bytes_per_sample () const
return 0;
}
+
+int
+FilmState::target_sample_rate () const
+{
+ double t = dcp_audio_sample_rate (audio_sample_rate);
+ if (rint (frames_per_second) != frames_per_second) {
+ if (fabs (frames_per_second - 23.976) < 1e-6) {
+ /* 24fps drop-frame ie 24 * 1000 / 1001 frames per second;
+ hence we need to resample the audio to dcp_audio_sample_rate * 1000 / 1001
+ so that when we play it back at dcp_audio_sample_rate it is sped up
+ by the same amount that the video is
+ */
+ t *= double(1000) / 1001;
+ } else {
+ throw EncodeError ("unknown fractional frame rate");
+ }
+ }
+
+ return rint (t);
+}