From c68cf49367957b49a99a9cc04013e9ee5a8c5bfc Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 15 May 2019 23:52:15 +0100 Subject: [PATCH] Player::playlist_content_change will call setup_pieces() regardless of the state of frequent, so Butler::player_change must always seek regardless of the state of frequent. Otherwise setup_pieces() results in the next pass() output being at position 0, which causes problems when the audio from that output is pushed into the audio ring buffers. --- src/lib/butler.cc | 6 +++--- src/lib/butler.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/butler.cc b/src/lib/butler.cc index 0218c1fb3..8c46d5190 100644 --- a/src/lib/butler.cc +++ b/src/lib/butler.cc @@ -82,7 +82,7 @@ Butler::Butler ( /* The butler must hear about things first, otherwise it might not sort out suspensions in time for get_video() to be called in response to this signal. */ - _player_change_connection = _player->Change.connect (bind (&Butler::player_change, this, _1, _3), boost::signals2::at_front); + _player_change_connection = _player->Change.connect (bind (&Butler::player_change, this, _1), boost::signals2::at_front); _thread = new boost::thread (bind (&Butler::thread, this)); #ifdef DCPOMATIC_LINUX pthread_setname_np (_thread->native_handle(), "butler"); @@ -358,7 +358,7 @@ Butler::memory_used () const } void -Butler::player_change (ChangeType type, bool frequent) +Butler::player_change (ChangeType type) { boost::mutex::scoped_lock lm (_mutex); @@ -366,7 +366,7 @@ Butler::player_change (ChangeType type, bool frequent) ++_suspended; } else if (type == CHANGE_TYPE_DONE) { --_suspended; - if (_died || _pending_seek_position || frequent) { + if (_died || _pending_seek_position) { lm.unlock (); _summon.notify_all (); return; diff --git a/src/lib/butler.h b/src/lib/butler.h index f1922d348..09c182f9c 100644 --- a/src/lib/butler.h +++ b/src/lib/butler.h @@ -69,7 +69,7 @@ private: void text (PlayerText pt, TextType type, boost::optional track, dcpomatic::DCPTimePeriod period); bool should_run () const; void prepare (boost::weak_ptr video); - void player_change (ChangeType type, bool frequent); + void player_change (ChangeType type); void seek_unlocked (dcpomatic::DCPTime position, bool accurate); boost::shared_ptr _player; -- 2.30.2