Commit 1fa1790d authored by Max Kellermann's avatar Max Kellermann

output/Internal: move the "pause" flag to struct AudioOutputControl

parent dd29e6e4
...@@ -181,9 +181,9 @@ AudioOutputControl::Open(const AudioFormat audio_format, ...@@ -181,9 +181,9 @@ AudioOutputControl::Open(const AudioFormat audio_format,
fail_timer.Reset(); fail_timer.Reset();
if (output->open && audio_format == request.audio_format) { if (output->open && audio_format == request.audio_format) {
assert(request.pipe == &mp || (always_on && output->pause)); assert(request.pipe == &mp || (always_on && pause));
if (!output->pause) if (!pause)
/* already open, already the right parameters /* already open, already the right parameters
- nothing needs to be done */ - nothing needs to be done */
return true; return true;
......
...@@ -144,6 +144,12 @@ class AudioOutputControl { ...@@ -144,6 +144,12 @@ class AudioOutputControl {
bool enabled = true; bool enabled = true;
/** /**
* Is the device paused? i.e. the output thread is in the
* ao_pause() loop.
*/
bool pause = false;
/**
* When this flag is set, the output thread will not do any * When this flag is set, the output thread will not do any
* playback. It will wait until the flag is cleared. * playback. It will wait until the flag is cleared.
* *
......
...@@ -70,12 +70,6 @@ struct AudioOutput { ...@@ -70,12 +70,6 @@ struct AudioOutput {
bool open = false; bool open = false;
/** /**
* Is the device paused? i.e. the output thread is in the
* ao_pause() loop.
*/
bool pause = false;
/**
* The configured audio format. * The configured audio format.
*/ */
AudioFormat config_audio_format; AudioFormat config_audio_format;
...@@ -234,7 +228,6 @@ public: ...@@ -234,7 +228,6 @@ public:
bool IteratePause() noexcept; bool IteratePause() noexcept;
void EndPause() noexcept{ void EndPause() noexcept{
pause = false;
} }
}; };
......
...@@ -385,12 +385,8 @@ AudioOutputControl::InternalPlay() noexcept ...@@ -385,12 +385,8 @@ AudioOutputControl::InternalPlay() noexcept
inline void inline void
AudioOutput::BeginPause() noexcept AudioOutput::BeginPause() noexcept
{ {
{ const ScopeUnlock unlock(mutex);
const ScopeUnlock unlock(mutex); ao_plugin_cancel(*this);
ao_plugin_cancel(*this);
}
pause = true;
} }
inline bool inline bool
...@@ -417,6 +413,8 @@ inline void ...@@ -417,6 +413,8 @@ inline void
AudioOutputControl::InternalPause() noexcept AudioOutputControl::InternalPause() noexcept
{ {
output->BeginPause(); output->BeginPause();
pause = true;
CommandFinished(); CommandFinished();
do { do {
...@@ -427,6 +425,7 @@ AudioOutputControl::InternalPause() noexcept ...@@ -427,6 +425,7 @@ AudioOutputControl::InternalPause() noexcept
break; break;
} while (command == Command::NONE); } while (command == Command::NONE);
pause = false;
output->EndPause(); output->EndPause();
skip_delay = true; skip_delay = true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment