diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-05-02 18:17:35 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-05-02 18:17:35 +0100 |
| commit | 40b3ced17b7fff8badfaa8ec2201a8186cdc7dc2 (patch) | |
| tree | 38c13732a1d05e7b4c925e651caa25aa6f6edd4c /src/lib/audio_content.cc | |
| parent | 3967bd6a07b436a6b2eb8d0f8f634fdc11689c75 (diff) | |
Rename AudioContent frame_rate methods and move resampled_audio_frame_rate into AudioContent.
Diffstat (limited to 'src/lib/audio_content.cc')
| -rw-r--r-- | src/lib/audio_content.cc | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index c84f57130..d9e00ff14 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013 Carl Hetherington <cth@carlh.net> + Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -150,11 +150,11 @@ string AudioContent::technical_summary () const { return String::compose ( - "audio: channels %1, length %2, raw rate %3, out rate %4", + "audio: channels %1, length %2, content rate %3, resampled rate %4", audio_channels(), audio_length().seconds(), - content_audio_frame_rate(), - output_audio_frame_rate() + audio_frame_rate(), + resampled_audio_frame_rate() ); } @@ -163,3 +163,29 @@ AudioContent::set_audio_mapping (AudioMapping) { signal_changed (AudioContentProperty::AUDIO_MAPPING); } + +/** @return the frame rate that this content should be resampled to in order + * that it is in sync with the active video content at its start time. + */ +int +AudioContent::resampled_audio_frame_rate () const +{ + shared_ptr<const Film> film = _film.lock (); + assert (film); + + /* Resample to a DCI-approved sample rate */ + double t = dcp_audio_frame_rate (audio_frame_rate ()); + + FrameRateChange frc = film->active_frame_rate_change (position ()); + + /* Compensate if the DCP is being run at a different frame rate + to the source; that is, if the video is run such that it will + look different in the DCP compared to the source (slower or faster). + */ + + if (frc.change_speed) { + t /= frc.speed_up; + } + + return rint (t); +} |
