summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-06-23 23:01:10 +0200
committerCarl Hetherington <cth@carlh.net>2020-12-01 16:38:52 +0100
commit6097970d8015995ef36bfdde479515ff3bc83930 (patch)
tree1ecb3e39d7e43445148bdbf5ce9da68b31c4a2b9
parent5f8bb6c42ebcc92d05c1d160ac66d00b202cd6ef (diff)
Move some stuff for position checking.
-rw-r--r--src/lib/piece.h3
-rw-r--r--src/lib/player.cc21
2 files changed, 10 insertions, 14 deletions
diff --git a/src/lib/piece.h b/src/lib/piece.h
index 31fbfc256..f150dfe53 100644
--- a/src/lib/piece.h
+++ b/src/lib/piece.h
@@ -22,6 +22,7 @@
#define DCPOMATIC_PIECE_H
#include "audio_stream.h"
+#include "dcpomatic_font.h"
#include "dcpomatic_time.h"
#include "frame_rate_change.h"
#include "types.h"
@@ -36,6 +37,8 @@ public:
void update_pull_to (dcpomatic::DCPTime& pull_to) const;
void set_last_push_end (AudioStreamPtr stream, dcpomatic::DCPTime last_push_end);
+ boost::optional<dcpomatic::DCPTime> position (boost::shared_ptr<const Film> film);
+ bool has_text () const;
dcpomatic::DCPTime position () const;
dcpomatic::DCPTime end (boost::shared_ptr<const Film> film) const;
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 9445d63b8..a0bd257be 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -557,21 +557,14 @@ Player::pass ()
optional<DCPTime> earliest_time;
BOOST_FOREACH (shared_ptr<Piece> i, _pieces) {
- if (i->done) {
- continue;
- }
-
- DCPTime const t = content_time_to_dcp (i, max(i->decoder->position(), i->content->trim_start()));
- if (t > i->end(_film)) {
- i->done = true;
- } else {
-
- /* Given two choices at the same time, pick the one with texts so we see it before
- the video.
- */
- if (!earliest_time || t < *earliest_time || (t == *earliest_time && !i->decoder->text.empty())) {
- earliest_time = t;
+ optional<DCPTime> t = i->position ();
+ /* Given two choices at the same time, pick the one with texts so we see it before
+ the video.
+ */
+ if (t) {
+ if (!earliest_time || *t < *earliest_time || (*t == *earliest_time && i->has_text())) {
earliest_content = i;
+ earliest_time = *t;
}
}
}