diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-09-29 14:16:56 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-02-15 03:16:16 +0100 |
| commit | 42a6003535d3153224da33b973bb79662d296e02 (patch) | |
| tree | f17b37e110fbd93355c21515614d9ecad5364fdf /src/lib/player.cc | |
| parent | a632e34e3c9ca94574fcab1b3006227ed2833766 (diff) | |
Basic handling of overlapping video (#1848).
Diffstat (limited to 'src/lib/player.cc')
| -rw-r--r-- | src/lib/player.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc index 465fcad6d..36d3fde67 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -266,6 +266,22 @@ Player::setup_pieces_unlocked () } } + for (auto i = _pieces.begin(); i != _pieces.end(); ++i) { + if (auto video = (*i)->content->video) { + if (video->use() && video->frame_type() != VideoFrameType::THREE_D_LEFT && video->frame_type() != VideoFrameType::THREE_D_RIGHT) { + /* Look for content later in the content list with in-use video that overlaps this */ + auto period = DCPTimePeriod((*i)->content->position(), (*i)->content->end(_film)); + auto j = i; + ++j; + for (; j != _pieces.end(); ++j) { + if ((*j)->content->video && (*j)->content->video->use()) { + (*i)->ignore_video = DCPTimePeriod((*j)->content->position(), (*j)->content->end(_film)).overlap(period); + } + } + } + } + } + _black = Empty (_film, playlist(), bind(&have_video, _1), _playback_length); _silent = Empty (_film, playlist(), bind(&have_audio, _1), _playback_length); @@ -851,6 +867,10 @@ Player::video (weak_ptr<Piece> wp, ContentVideo video) return; } + if (piece->ignore_video && piece->ignore_video->contains(time)) { + return; + } + /* Fill gaps that we discover now that we have some video which needs to be emitted. This is where we need to fill to. */ |
