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
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);

View File

@ -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.

View File

@ -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?
*

View File

@ -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();
}