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;
+ }
+}
+
dcpomatic::DCPTime decoder_position () const;
bool has_text () const;
+ void seek (std::shared_ptr<const Film> film, dcpomatic::DCPTime time, bool accurate);
std::shared_ptr<Decoder> decoder;
boost::optional<dcpomatic::DCPTimePeriod> ignore_video;
}
for (auto i: _pieces) {
- if (time < i->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).
- */
- i->decoder->seek (i->dcp_to_content_time(i->position(), _film), true);
- i->done = false;
- } else if (i->position() <= time && time < i->end(_film)) {
- /* During; seek to position */
- i->decoder->seek (i->dcp_to_content_time(time, _film), accurate);
- i->done = false;
- } else {
- /* After; this piece is done */
- i->done = true;
- }
+ i->seek (_film, time, accurate);
}
if (accurate) {