diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-12-11 10:31:18 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-12-11 10:31:18 +0000 |
| commit | ea910e250a0fb3b0ad3ce0cf32dd27b24c17cd1d (patch) | |
| tree | 32119d2a04532d3162c656df7c7e715b289c6e61 /src/lib/audio_content.cc | |
| parent | 3e5df964ada49e10a880a200c985cc309ccecb64 (diff) | |
Various work on better seeking (and seeking of audio).
Diffstat (limited to 'src/lib/audio_content.cc')
| -rw-r--r-- | src/lib/audio_content.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index 97372b962..0c4586681 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -148,3 +148,27 @@ AudioContent::technical_summary () const { return String::compose ("audio: channels %1, length %2, raw rate %3, out rate %4", audio_channels(), audio_length(), content_audio_frame_rate(), output_audio_frame_rate()); } + +/** Note: this is not particularly fast, as the FrameRateChange lookup + * is not very intelligent. + * + * @param t Some duration to convert. + * @param at The time within the DCP to get the active frame rate change from; i.e. a point at which + * the `controlling' video content is active. + */ +AudioContent::Frame +AudioContent::time_to_content_audio_frames (Time t, Time at) const +{ + shared_ptr<const Film> film = _film.lock (); + assert (film); + + /* Consider the case where we're running a 25fps video at 24fps (i.e. slow) + Our audio is at 44.1kHz. We will resample it to 48000 * 25 / 24 and then + run it at 48kHz (i.e. slow, to match). + + After 1 second, we'll have run the equivalent of 44.1kHz * 24 / 25 samples + in the source. + */ + + return rint (t * content_audio_frame_rate() * film->active_frame_rate_change(at).speed_up / TIME_HZ); +} |
