summaryrefslogtreecommitdiff
path: root/src/lib/audio_content.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-05-02 18:17:35 +0100
committerCarl Hetherington <cth@carlh.net>2014-05-02 18:17:35 +0100
commit40b3ced17b7fff8badfaa8ec2201a8186cdc7dc2 (patch)
tree38c13732a1d05e7b4c925e651caa25aa6f6edd4c /src/lib/audio_content.cc
parent3967bd6a07b436a6b2eb8d0f8f634fdc11689c75 (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.cc34
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);
+}