player/Control: convert to class
This commit is contained in:
parent
e5d1ac0bd0
commit
e3142312bb
|
@ -44,7 +44,7 @@ class EventLoop;
|
|||
class Path;
|
||||
struct Instance;
|
||||
struct Partition;
|
||||
struct PlayerControl;
|
||||
class PlayerControl;
|
||||
struct playlist;
|
||||
class Database;
|
||||
class Storage;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
class SongLoader;
|
||||
class SongEnumerator;
|
||||
struct playlist;
|
||||
struct PlayerControl;
|
||||
class PlayerControl;
|
||||
|
||||
/**
|
||||
* Loads the contents of a playlist and append it to the specified
|
||||
|
|
|
@ -91,7 +91,7 @@ playlist::SongStarted()
|
|||
inline void
|
||||
playlist::QueuedSongStarted(PlayerControl &pc)
|
||||
{
|
||||
assert(pc.next_song == nullptr);
|
||||
assert(!pc.HasNextSong());
|
||||
assert(queued >= -1);
|
||||
assert(current >= 0);
|
||||
|
||||
|
@ -197,7 +197,7 @@ playlist::SyncWithPlayer(PlayerControl &pc)
|
|||
|
||||
pc.Lock();
|
||||
const PlayerState pc_state = pc.GetState();
|
||||
bool pc_has_next_song = pc.next_song != nullptr;
|
||||
bool pc_has_next_song = pc.HasNextSong();
|
||||
pc.Unlock();
|
||||
|
||||
if (pc_state == PlayerState::STOP)
|
||||
|
@ -213,7 +213,7 @@ playlist::SyncWithPlayer(PlayerControl &pc)
|
|||
QueuedSongStarted(pc);
|
||||
|
||||
pc.Lock();
|
||||
pc_has_next_song = pc.next_song != nullptr;
|
||||
pc_has_next_song = pc.HasNextSong();
|
||||
pc.Unlock();
|
||||
|
||||
/* make sure the queued song is always set (if
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
enum TagType : uint8_t;
|
||||
struct Tag;
|
||||
struct PlayerControl;
|
||||
class PlayerControl;
|
||||
class DetachedSong;
|
||||
class Database;
|
||||
class SongLoader;
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
struct StateFileConfig;
|
||||
struct playlist;
|
||||
struct PlayerControl;
|
||||
class PlayerControl;
|
||||
class TextFile;
|
||||
class BufferedOutputStream;
|
||||
class SongLoader;
|
||||
|
|
Loading…
Reference in New Issue