output/Internal: move "really_enabled" flag to class AudioOutputControl
This commit is contained in:
parent
a72a02f0f2
commit
3010d182fc
@ -132,7 +132,7 @@ AudioOutputControl::EnableAsync()
|
||||
/* don't bother to start the thread now if the
|
||||
device doesn't even have a enable() method;
|
||||
just assign the variable and we're done */
|
||||
output->really_enabled = true;
|
||||
really_enabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -147,11 +147,11 @@ AudioOutputControl::DisableAsync() noexcept
|
||||
{
|
||||
if (!thread.IsDefined()) {
|
||||
if (output->plugin.disable == nullptr)
|
||||
output->really_enabled = false;
|
||||
really_enabled = false;
|
||||
else
|
||||
/* if there's no thread yet, the device cannot
|
||||
be enabled */
|
||||
assert(!output->really_enabled);
|
||||
assert(!really_enabled);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -162,7 +162,7 @@ AudioOutputControl::DisableAsync() noexcept
|
||||
void
|
||||
AudioOutputControl::EnableDisableAsync()
|
||||
{
|
||||
if (enabled == output->really_enabled)
|
||||
if (enabled == really_enabled)
|
||||
return;
|
||||
|
||||
if (enabled)
|
||||
@ -233,7 +233,7 @@ AudioOutputControl::LockUpdate(const AudioFormat audio_format,
|
||||
{
|
||||
const std::lock_guard<Mutex> protect(mutex);
|
||||
|
||||
if (enabled && output->really_enabled) {
|
||||
if (enabled && really_enabled) {
|
||||
if (force || !fail_timer.IsDefined() ||
|
||||
fail_timer.Check(REOPEN_AFTER * 1000)) {
|
||||
return Open(audio_format, mp);
|
||||
|
@ -143,6 +143,12 @@ class AudioOutputControl {
|
||||
*/
|
||||
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
|
||||
* ao_pause() loop.
|
||||
|
@ -53,12 +53,6 @@ struct AudioOutput {
|
||||
*/
|
||||
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?
|
||||
*
|
||||
|
@ -60,9 +60,6 @@ AudioOutputControl::CommandFinished() noexcept
|
||||
inline void
|
||||
AudioOutput::Enable()
|
||||
{
|
||||
if (really_enabled)
|
||||
return;
|
||||
|
||||
try {
|
||||
const ScopeUnlock unlock(mutex);
|
||||
ao_plugin_enable(*this);
|
||||
@ -70,19 +67,13 @@ AudioOutput::Enable()
|
||||
std::throw_with_nested(FormatRuntimeError("Failed to enable output \"%s\" [%s]",
|
||||
name, plugin.name));
|
||||
}
|
||||
|
||||
really_enabled = true;
|
||||
}
|
||||
|
||||
inline void
|
||||
AudioOutput::Disable() noexcept
|
||||
{
|
||||
if (really_enabled) {
|
||||
really_enabled = false;
|
||||
|
||||
const ScopeUnlock unlock(mutex);
|
||||
ao_plugin_disable(*this);
|
||||
}
|
||||
const ScopeUnlock unlock(mutex);
|
||||
ao_plugin_disable(*this);
|
||||
}
|
||||
|
||||
void
|
||||
@ -200,10 +191,15 @@ AudioOutput::OpenOutputAndConvert(AudioFormat desired_audio_format)
|
||||
inline bool
|
||||
AudioOutputControl::InternalEnable() noexcept
|
||||
{
|
||||
if (really_enabled)
|
||||
/* already enabled */
|
||||
return true;
|
||||
|
||||
last_error = nullptr;
|
||||
|
||||
try {
|
||||
output->Enable();
|
||||
really_enabled = true;
|
||||
return true;
|
||||
} catch (const std::runtime_error &e) {
|
||||
LogError(e);
|
||||
@ -216,9 +212,13 @@ AudioOutputControl::InternalEnable() noexcept
|
||||
inline void
|
||||
AudioOutputControl::InternalDisable() noexcept
|
||||
{
|
||||
if (!really_enabled)
|
||||
return;
|
||||
|
||||
if (output->open)
|
||||
output->Close(false);
|
||||
|
||||
really_enabled = false;
|
||||
output->Disable();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user