summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-07-31 00:07:06 +0100
committerCarl Hetherington <cth@carlh.net>2019-07-31 00:07:06 +0100
commitbd83f1b0e1d8e7aae0af51376dbbb88d5e3f69d0 (patch)
treec047eb4fc02044c1d9852590dd4fe04d0fb95f7b /src
parent5ccb13d95f4bc29afed393588edff581b748efa7 (diff)
Avoid random black gaps between bits of content A and B whenv2.15.15
content B has had its start trimmed. In this case when we seek inaccurately in A we previously also seeked inaccurately in B. This meant that at the transition the first frame we see of B may not be the first frame of B. After this we seek accurately in B so that we definitely get to the start of it. This is especially important if the start of B has been trimmed to within two keyframes so that an inaccurate seek is not sufficient.
Diffstat (limited to 'src')
-rw-r--r--src/lib/player.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc
index acde910be..bdfa51528 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -1054,8 +1054,12 @@ Player::seek (DCPTime time, bool accurate)
BOOST_FOREACH (shared_ptr<Piece> i, _pieces) {
if (time < i->content->position()) {
- /* Before; seek to the start of the content */
- i->decoder->seek (dcp_to_content_time (i, i->content->position()), accurate);
+ /* Before; seek to the start of the content. Even if this request is for an inaccurate seek
+ we must seek this (following) content accurately, otherwise when we come to the end of the current
+ content we may not start right at the beginning of the next, causing a gap (if the next content has
+ been trimmed to a point between keyframes, or something).
+ */
+ i->decoder->seek (dcp_to_content_time (i, i->content->position()), true);
i->done = false;
} else if (i->content->position() <= time && time < i->content->end(_film)) {
/* During; seek to position */