summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-05-26 02:58:17 +0100
committerCarl Hetherington <cth@carlh.net>2019-05-26 02:58:17 +0100
commit26c62598730d1d32333bfab0d5f463b90d26ee4d (patch)
treea06d89bde67e8853a5bc6356c0367111788f247a /src/lib
parent92784c9c28c48859578cd6e75aa01d5657d0c341 (diff)
Potential fix for #1568; we calculate the remaining DCPTime but
then convert it back to resampled content frames using the DCP rate rather than the resampled content rate, which seems wrong. If we want to go from metric time to frames we surely have to use the frame rate of the thing we are working with (not the frame rate which that thing will be played back at).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/player.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc
index f79e379d2..6f0cfd1af 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -855,10 +855,12 @@ Player::audio (weak_ptr<Piece> wp, AudioStreamPtr stream, ContentAudio content_a
shared_ptr<AudioContent> content = piece->content->audio;
DCPOMATIC_ASSERT (content);
+ int const rfr = content->resampled_frame_rate (_film);
+
/* Compute time in the DCP */
DCPTime time = resampled_audio_to_dcp (piece, content_audio.frame);
/* And the end of this block in the DCP */
- DCPTime end = time + DCPTime::from_frames(content_audio.audio->frames(), content->resampled_frame_rate(_film));
+ DCPTime end = time + DCPTime::from_frames(content_audio.audio->frames(), rfr);
/* Remove anything that comes before the start or after the end of the content */
if (time < piece->content->position()) {
@@ -873,7 +875,7 @@ Player::audio (weak_ptr<Piece> wp, AudioStreamPtr stream, ContentAudio content_a
/* Discard it all */
return;
} else if (end > piece->content->end(_film)) {
- Frame const remaining_frames = DCPTime(piece->content->end(_film) - time).frames_round(_film->audio_frame_rate());
+ Frame const remaining_frames = DCPTime(piece->content->end(_film) - time).frames_round(rfr);
if (remaining_frames == 0) {
return;
}