summaryrefslogtreecommitdiff
path: root/src/lib/player.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-02-10 00:38:33 +0100
committerCarl Hetherington <cth@carlh.net>2023-02-10 10:31:15 +0100
commit3a9265b3f824bde609ec3f16a853b7c69c11877d (patch)
treed86a970d83ec149692f7751537757a4147090640 /src/lib/player.cc
parent46a1e43f9e3f03565536419afc8137c64d5681c0 (diff)
Ignore overlapping ATMOS data in the same way that we ignore video (#2429).
Diffstat (limited to 'src/lib/player.cc')
-rw-r--r--src/lib/player.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc
index ab8b59656..018571fe2 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -392,6 +392,20 @@ Player::setup_pieces ()
}
}
+ for (auto piece = _pieces.begin(); piece != _pieces.end(); ++piece) {
+ if ((*piece)->content->atmos) {
+ /* Look for content later in the content list with ATMOS that overlaps this */
+ auto const period = (*piece)->content->period(film);
+ for (auto later_piece = std::next(piece); later_piece != _pieces.end(); ++later_piece) {
+ if ((*later_piece)->content->atmos) {
+ if (auto overlap = (*later_piece)->content->period(film).overlap(period)) {
+ (*piece)->ignore_atmos.push_back(*overlap);
+ }
+ }
+ }
+ }
+ }
+
_black = Empty(film, playlist(), bind(&have_video, _1), _playback_length);
_silent = Empty(film, playlist(), bind(&have_audio, _1), _playback_length);
@@ -1599,6 +1613,15 @@ Player::atmos (weak_ptr<Piece> weak_piece, ContentAtmos data)
return;
}
+ auto ignore_atmos = std::find_if(
+ piece->ignore_atmos.begin(),
+ piece->ignore_atmos.end(),
+ [dcp_time](DCPTimePeriod period) { return period.contains(dcp_time); }
+ );
+ if (ignore_atmos != piece->ignore_atmos.end()) {
+ return;
+ }
+
Atmos (data.data, dcp_time, data.metadata);
}