diff options
Diffstat (limited to 'src/lib/film_state.cc')
| -rw-r--r-- | src/lib/film_state.cc | 21 |
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); +} |
