output/Internal: move "really_enabled" flag to class AudioOutputControl

This commit is contained in:
Max Kellermann 2017-06-08 09:49:30 +02:00
parent a72a02f0f2
commit 3010d182fc
4 changed files with 22 additions and 22 deletions

View File

@ -132,7 +132,7 @@ AudioOutputControl::EnableAsync()
/* don't bother to start the thread now if the /* don't bother to start the thread now if the
device doesn't even have a enable() method; device doesn't even have a enable() method;
just assign the variable and we're done */ just assign the variable and we're done */
output->really_enabled = true; really_enabled = true;
return; return;
} }
@ -147,11 +147,11 @@ AudioOutputControl::DisableAsync() noexcept
{ {
if (!thread.IsDefined()) { if (!thread.IsDefined()) {
if (output->plugin.disable == nullptr) if (output->plugin.disable == nullptr)
output->really_enabled = false; really_enabled = false;
else else
/* if there's no thread yet, the device cannot /* if there's no thread yet, the device cannot
be enabled */ be enabled */
assert(!output->really_enabled); assert(!really_enabled);
return; return;
} }
@ -162,7 +162,7 @@ AudioOutputControl::DisableAsync() noexcept
void void
AudioOutputControl::EnableDisableAsync() AudioOutputControl::EnableDisableAsync()
{ {
if (enabled == output->really_enabled) if (enabled == really_enabled)
return; return;
if (enabled) if (enabled)
@ -233,7 +233,7 @@ AudioOutputControl::LockUpdate(const AudioFormat audio_format,
{ {
const std::lock_guard<Mutex> protect(mutex); const std::lock_guard<Mutex> protect(mutex);
if (enabled && output->really_enabled) { if (enabled && really_enabled) {
if (force || !fail_timer.IsDefined() || if (force || !fail_timer.IsDefined() ||
fail_timer.Check(REOPEN_AFTER * 1000)) { fail_timer.Check(REOPEN_AFTER * 1000)) {
return Open(audio_format, mp); return Open(audio_format, mp);

View File

@ -143,6 +143,12 @@ class AudioOutputControl {
*/ */
bool enabled = true; bool enabled = true;
/**
* Is this device actually enabled, i.e. the "enable" method
* has succeeded?
*/
bool really_enabled = false;
/** /**
* Is the device paused? i.e. the output thread is in the * Is the device paused? i.e. the output thread is in the
* ao_pause() loop. * ao_pause() loop.

View File

@ -53,12 +53,6 @@ struct AudioOutput {
*/ */
Mixer *mixer = nullptr; Mixer *mixer = nullptr;
/**
* Is this device actually enabled, i.e. the "enable" method
* has succeeded?
*/
bool really_enabled = false;
/** /**
* Is the device (already) open and functional? * Is the device (already) open and functional?
* *

View File

@ -60,9 +60,6 @@ AudioOutputControl::CommandFinished() noexcept
inline void inline void
AudioOutput::Enable() AudioOutput::Enable()
{ {
if (really_enabled)
return;
try { try {
const ScopeUnlock unlock(mutex); const ScopeUnlock unlock(mutex);
ao_plugin_enable(*this); ao_plugin_enable(*this);
@ -70,19 +67,13 @@ AudioOutput::Enable()
std::throw_with_nested(FormatRuntimeError("Failed to enable output \"%s\" [%s]", std::throw_with_nested(FormatRuntimeError("Failed to enable output \"%s\" [%s]",
name, plugin.name)); name, plugin.name));
} }
really_enabled = true;
} }
inline void inline void
AudioOutput::Disable() noexcept AudioOutput::Disable() noexcept
{ {
if (really_enabled) { const ScopeUnlock unlock(mutex);
really_enabled = false; ao_plugin_disable(*this);
const ScopeUnlock unlock(mutex);
ao_plugin_disable(*this);
}
} }
void void
@ -200,10 +191,15 @@ AudioOutput::OpenOutputAndConvert(AudioFormat desired_audio_format)
inline bool inline bool
AudioOutputControl::InternalEnable() noexcept AudioOutputControl::InternalEnable() noexcept
{ {
if (really_enabled)
/* already enabled */
return true;
last_error = nullptr; last_error = nullptr;
try { try {
output->Enable(); output->Enable();
really_enabled = true;
return true; return true;
} catch (const std::runtime_error &e) { } catch (const std::runtime_error &e) {
LogError(e); LogError(e);
@ -216,9 +212,13 @@ AudioOutputControl::InternalEnable() noexcept
inline void inline void
AudioOutputControl::InternalDisable() noexcept AudioOutputControl::InternalDisable() noexcept
{ {
if (!really_enabled)
return;
if (output->open) if (output->open)
output->Close(false); output->Close(false);
really_enabled = false;
output->Disable(); output->Disable();
} }