summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-02-10 00:25:06 +0100
committerCarl Hetherington <cth@carlh.net>2023-02-10 10:31:15 +0100
commit46a1e43f9e3f03565536419afc8137c64d5681c0 (patch)
tree5ea0cd87867ddaef275ed667f1b9e9b31a0ddf53 /src/lib
parentcec8f476253ee20e7bc05dbcc3a6a74b84cc8fa4 (diff)
Fix multiple video overlaps.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/piece.h3
-rw-r--r--src/lib/player.cc11
2 files changed, 11 insertions, 3 deletions
diff --git a/src/lib/piece.h b/src/lib/piece.h
index c617de544..41b9aa2dc 100644
--- a/src/lib/piece.h
+++ b/src/lib/piece.h
@@ -25,6 +25,7 @@
#include "dcpomatic_time.h"
#include "frame_rate_change.h"
+#include <vector>
class Content;
@@ -43,7 +44,7 @@ public:
std::shared_ptr<Content> content;
std::shared_ptr<Decoder> decoder;
- boost::optional<dcpomatic::DCPTimePeriod> ignore_video;
+ std::vector<dcpomatic::DCPTimePeriod> ignore_video;
FrameRateChange frc;
bool done;
};
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 575fd5c23..ab8b59656 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -384,7 +384,9 @@ Player::setup_pieces ()
auto const period = (*piece)->content->period(film);
for (auto later_piece = std::next(piece); later_piece != _pieces.end(); ++later_piece) {
if (ignore_overlap((*later_piece)->content->video)) {
- (*piece)->ignore_video = (*later_piece)->content->period(film).overlap(period);
+ if (auto overlap = (*later_piece)->content->period(film).overlap(period)) {
+ (*piece)->ignore_video.push_back(*overlap);
+ }
}
}
}
@@ -1004,7 +1006,12 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video)
return;
}
- if (piece->ignore_video && piece->ignore_video->contains(time)) {
+ auto ignore_video = std::find_if(
+ piece->ignore_video.begin(),
+ piece->ignore_video.end(),
+ [time](DCPTimePeriod period) { return period.contains(time); }
+ );
+ if (ignore_video != piece->ignore_video.end()) {
return;
}