summaryrefslogtreecommitdiff
path: root/src/lib/piece.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/piece.cc')
-rw-r--r--src/lib/piece.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/lib/piece.cc b/src/lib/piece.cc
index 2a3adcd40..2cdc20a50 100644
--- a/src/lib/piece.cc
+++ b/src/lib/piece.cc
@@ -224,3 +224,25 @@ Piece::has_text () const
return !decoder->text.empty();
}
+
+void
+Piece::seek (shared_ptr<const Film> film, DCPTime time, bool accurate)
+{
+ if (time < position()) {
+ /* 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).
+ */
+ decoder->seek (dcp_to_content_time(position(), film), true);
+ done = false;
+ } else if (position() <= time && time < end(film)) {
+ /* During; seek to position */
+ decoder->seek (dcp_to_content_time(time, film), accurate);
+ done = false;
+ } else {
+ /* After; this piece is done */
+ done = true;
+ }
+}
+