diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-02-10 00:25:06 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-02-10 10:31:15 +0100 |
| commit | 46a1e43f9e3f03565536419afc8137c64d5681c0 (patch) | |
| tree | 5ea0cd87867ddaef275ed667f1b9e9b31a0ddf53 /src/lib | |
| parent | cec8f476253ee20e7bc05dbcc3a6a74b84cc8fa4 (diff) | |
Fix multiple video overlaps.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/piece.h | 3 | ||||
| -rw-r--r-- | src/lib/player.cc | 11 |
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; } |
