diff options
author | Max Kellermann <max@musicpd.org> | 2018-09-21 18:00:23 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2018-09-21 18:12:28 +0200 |
commit | e3142312bb452606bcf008fff1c6cdb7a9478a22 (patch) | |
tree | 46ba940331d87526b9eb0bfca45dd159949b2cda /src/player | |
parent | e5d1ac0bd09760d9d568e92e94c1ae14c35e266f (diff) |
player/Control: convert to class
Diffstat (limited to 'src/player')
-rw-r--r-- | src/player/Control.hxx | 31 | ||||
-rw-r--r-- | src/player/Thread.cxx | 6 |
2 files changed, 30 insertions, 7 deletions
diff --git a/src/player/Control.hxx b/src/player/Control.hxx index 4a65dce63..063d4b266 100644 --- a/src/player/Control.hxx +++ b/src/player/Control.hxx @@ -109,7 +109,9 @@ struct PlayerStatus { SongTime elapsed_time; }; -struct PlayerControl final : AudioOutputClient { +class PlayerControl final : public AudioOutputClient { + friend class Player; + PlayerListener &listener; PlayerOutputs &outputs; @@ -231,6 +233,7 @@ struct PlayerControl final : AudioOutputClient { double total_play_time = 0; +public: PlayerControl(PlayerListener &_listener, PlayerOutputs &_outputs, unsigned buffer_chunks, @@ -268,6 +271,7 @@ struct PlayerControl final : AudioOutputClient { cond.signal(); } +private: /** * Signals the object. The object is temporarily locked by * this function. @@ -347,7 +351,6 @@ struct PlayerControl final : AudioOutputClient { return WaitOutputConsumed(threshold); } -private: /** * Wait for the command to be finished by the player thread. * @@ -417,12 +420,14 @@ public: */ void LockSetBorderPause(bool border_pause) noexcept; +private: bool ApplyBorderPause() noexcept { if (border_pause) state = PlayerState::PAUSE; return border_pause; } +public: void Kill() noexcept; gcc_pure @@ -432,6 +437,7 @@ public: return state; } +private: /** * Set the error. Discards any previous error condition. * @@ -468,6 +474,7 @@ public: std::rethrow_exception(error); } +public: /** * Like CheckRethrowError(), but locks and unlocks the object. */ @@ -482,6 +489,7 @@ public: return error_type; } +private: /** * Set the #tagged_song attribute to a newly allocated copy of * the given #DetachedSong. Locks and unlocks the object. @@ -497,6 +505,7 @@ public: */ std::unique_ptr<DetachedSong> ReadTaggedSong() noexcept; +public: /** * Like ReadTaggedSong(), but locks and unlocks the object. */ @@ -521,6 +530,10 @@ public: */ void LockEnqueueSong(std::unique_ptr<DetachedSong> song) noexcept; + bool HasNextSong() const noexcept { + return next_song != nullptr; + } + /** * Makes the player thread seek the specified song to a position. * @@ -531,6 +544,19 @@ public: */ void LockSeek(std::unique_ptr<DetachedSong> song, SongTime t); +private: + /** + * Caller must lock the object. + */ + void CancelPendingSeek() noexcept { + if (!seeking) + return; + + seeking = false; + ClientSignal(); + } + +public: void SetCrossFade(float cross_fade_seconds) noexcept; float GetCrossFade() const noexcept { @@ -558,6 +584,7 @@ public: return total_play_time; } +private: void LockUpdateSongTag(DetachedSong &song, const Tag &new_tag) noexcept; diff --git a/src/player/Thread.cxx b/src/player/Thread.cxx index 53b6a032b..73b90d2a3 100644 --- a/src/player/Thread.cxx +++ b/src/player/Thread.cxx @@ -261,12 +261,8 @@ private: bool SeekDecoder() noexcept; void CancelPendingSeek() noexcept { - if (!pc.seeking) - return; - pending_seek = SongTime::zero(); - pc.seeking = false; - pc.ClientSignal(); + pc.CancelPendingSeek(); } /** |