diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-04-15 16:17:01 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-04-15 16:17:01 +0200 |
| commit | 4219d4b76c5cd5690b1f4fa0c248d93ced26d05a (patch) | |
| tree | 6266573a3a26dd9f432d6bd096a2c6bbd85bf6c4 /src/lib | |
| parent | 39dcdd18487d5d1e20f0343fe617ed5bf44c1387 (diff) | |
Fix length of player output so it can be either the film's length or playlist's length, as appropriate.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/analyse_audio_job.cc | 2 | ||||
| -rw-r--r-- | src/lib/empty.cc | 4 | ||||
| -rw-r--r-- | src/lib/empty.h | 2 | ||||
| -rw-r--r-- | src/lib/encoder.cc | 2 | ||||
| -rw-r--r-- | src/lib/hints.cc | 2 | ||||
| -rw-r--r-- | src/lib/player.cc | 17 | ||||
| -rw-r--r-- | src/lib/player.h | 5 |
7 files changed, 15 insertions, 19 deletions
diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc index ad28dcfd4..1fc09b905 100644 --- a/src/lib/analyse_audio_job.cc +++ b/src/lib/analyse_audio_job.cc @@ -107,7 +107,7 @@ AnalyseAudioJob::json_name () const void AnalyseAudioJob::run () { - shared_ptr<Player> player (new Player (_film, _playlist)); + shared_ptr<Player> player (new Player(_film, _playlist, _playlist->length(_film))); player->set_ignore_video (); player->set_ignore_text (); player->set_fast (); diff --git a/src/lib/empty.cc b/src/lib/empty.cc index 71bf3aa95..c145c231b 100644 --- a/src/lib/empty.cc +++ b/src/lib/empty.cc @@ -36,7 +36,7 @@ using boost::dynamic_pointer_cast; using boost::function; using namespace dcpomatic; -Empty::Empty (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, function<bool (shared_ptr<const Content>)> part) +Empty::Empty (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, function<bool (shared_ptr<const Content>)> part, DCPTime length) { list<DCPTimePeriod> full; BOOST_FOREACH (shared_ptr<Content> i, playlist->content()) { @@ -45,7 +45,7 @@ Empty::Empty (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, } } - _periods = subtract (DCPTimePeriod(DCPTime(), playlist->length(film)), coalesce(full)); + _periods = subtract (DCPTimePeriod(DCPTime(), length), coalesce(full)); if (!_periods.empty ()) { _position = _periods.front().from; diff --git a/src/lib/empty.h b/src/lib/empty.h index abd6fdef0..2368c4491 100644 --- a/src/lib/empty.h +++ b/src/lib/empty.h @@ -35,7 +35,7 @@ class Empty { public: Empty () {} - Empty (boost::shared_ptr<const Film> film, boost::shared_ptr<const Playlist> playlist, boost::function<bool (boost::shared_ptr<const Content>)> part); + Empty (boost::shared_ptr<const Film> film, boost::shared_ptr<const Playlist> playlist, boost::function<bool (boost::shared_ptr<const Content>)> part, dcpomatic::DCPTime length); dcpomatic::DCPTime position () const { return _position; diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index 535389a94..b52507ed1 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -41,7 +41,7 @@ using boost::shared_ptr; Encoder::Encoder (shared_ptr<const Film> film, weak_ptr<Job> job) : _film (film) , _job (job) - , _player (new Player (film, film->playlist ())) + , _player (new Player(film, film->playlist(), film->length())) { } diff --git a/src/lib/hints.cc b/src/lib/hints.cc index 3edceeee3..68cf82b84 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -259,7 +259,7 @@ Hints::thread () emit (bind(boost::ref(Progress), _("Examining closed captions"))); - shared_ptr<Player> player (new Player (film, film->playlist ())); + shared_ptr<Player> player (new Player(film, film->playlist(), film->length())); player->set_ignore_video (); player->set_ignore_audio (); player->Text.connect (bind(&Hints::text, this, _1, _2, _4)); diff --git a/src/lib/player.cc b/src/lib/player.cc index 3202c1b85..ab05d42ad 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -84,7 +84,7 @@ int const PlayerProperty::FILM_CONTAINER = 702; int const PlayerProperty::FILM_VIDEO_FRAME_RATE = 703; int const PlayerProperty::DCP_DECODE_REDUCTION = 704; -Player::Player (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist) +Player::Player (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, DCPTime playback_length) : _film (film) , _playlist (playlist) , _suspended (0) @@ -97,6 +97,7 @@ Player::Player (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist , _play_referenced (false) , _audio_merger (_film->audio_frame_rate()) , _shuffler (0) + , _playback_length (playback_length) { _film_changed_connection = _film->Change.connect (bind (&Player::film_change, this, _1, _2)); /* The butler must hear about this first, so since we are proxying this through to the butler we must @@ -237,15 +238,12 @@ Player::setup_pieces_unlocked () } } - _black = Empty (_film, _playlist, bind(&have_video, _1)); - _silent = Empty (_film, _playlist, bind(&have_audio, _1)); + _black = Empty (_film, _playlist, bind(&have_video, _1), _playback_length); + _silent = Empty (_film, _playlist, bind(&have_audio, _1), _playback_length); _last_video_time = DCPTime (); _last_video_eyes = EYES_BOTH; _last_audio_time = DCPTime (); - - /* Cached value to save recalculating it on every ::pass */ - _film_length = _film->length (); } void @@ -566,15 +564,14 @@ bool Player::pass () { boost::mutex::scoped_lock lm (_mutex); - DCPOMATIC_ASSERT (_film_length); if (_suspended) { /* We can't pass in this state */ return false; } - if (*_film_length == DCPTime()) { - /* Special case of an empty Film; just give one black frame */ + if (_playback_length == DCPTime()) { + /* Special; just give one black frame */ emit_video (black_player_video_frame(EYES_BOTH), DCPTime()); return true; } @@ -680,7 +677,7 @@ Player::pass () /* Work out the time before which the audio is definitely all here. This is the earliest last_push_end of one of our streams, or the position of the _silent. */ - DCPTime pull_to = *_film_length; + DCPTime pull_to = _playback_length; for (map<AudioStreamPtr, StreamState>::const_iterator i = _stream_states.begin(); i != _stream_states.end(); ++i) { if (!i->second.piece->done && i->second.last_push_end < pull_to) { pull_to = i->second.last_push_end; diff --git a/src/lib/player.h b/src/lib/player.h index c2911bf10..5a1b08ecf 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -68,7 +68,7 @@ public: class Player : public boost::enable_shared_from_this<Player>, public boost::noncopyable { public: - Player (boost::shared_ptr<const Film>, boost::shared_ptr<const Playlist> playlist); + Player (boost::shared_ptr<const Film>, boost::shared_ptr<const Playlist> playlist, dcpomatic::DCPTime playback_length); ~Player (); bool pass (); @@ -207,8 +207,7 @@ private: ActiveText _active_texts[TEXT_COUNT]; boost::shared_ptr<AudioProcessor> _audio_processor; - /* Cached stuff */ - boost::optional<dcpomatic::DCPTime> _film_length; + dcpomatic::DCPTime _playback_length; boost::signals2::scoped_connection _film_changed_connection; boost::signals2::scoped_connection _playlist_change_connection; |
