diff --git a/src/output/Control.cxx b/src/output/Control.cxx index efc7ea5c9..0bd1280b1 100644 --- a/src/output/Control.cxx +++ b/src/output/Control.cxx @@ -25,6 +25,7 @@ #include "mixer/MixerControl.hxx" #include "notify.hxx" #include "filter/plugins/ReplayGainFilterPlugin.hxx" +#include "config/Block.hxx" #include "Log.hxx" #include @@ -47,7 +48,9 @@ AudioOutputControl::AudioOutputControl(AudioOutput *_output) void AudioOutputControl::Configure(const ConfigBlock &block) { - (void)block; + tags = block.GetBlockValue("tags", true); + always_on = block.GetBlockValue("always_on", false); + enabled = block.GetBlockValue("enabled", true); } const char * @@ -68,21 +71,15 @@ AudioOutputControl::GetMixer() const return output->mixer; } -bool -AudioOutputControl::IsEnabled() const -{ - return output->IsEnabled(); -} - bool AudioOutputControl::LockSetEnabled(bool new_value) { const std::lock_guard protect(mutex); - if (new_value == output->enabled) + if (new_value == enabled) return false; - output->enabled = new_value; + enabled = new_value; return true; } @@ -90,7 +87,7 @@ bool AudioOutputControl::LockToggleEnabled() { const std::lock_guard protect(mutex); - return output->enabled = !output->enabled; + return enabled = !enabled; } bool @@ -170,10 +167,10 @@ AudioOutputControl::DisableAsync() void AudioOutputControl::EnableDisableAsync() { - if (output->enabled == output->really_enabled) + if (enabled == output->really_enabled) return; - if (output->enabled) + if (enabled) EnableAsync(); else DisableAsync(); @@ -188,7 +185,7 @@ AudioOutputControl::Open(const AudioFormat audio_format, const MusicPipe &mp) fail_timer.Reset(); if (output->open && audio_format == request.audio_format) { - assert(request.pipe == &mp || (output->always_on && output->pause)); + assert(request.pipe == &mp || (always_on && output->pause)); if (!output->pause) /* already open, already the right parameters @@ -240,7 +237,7 @@ AudioOutputControl::LockUpdate(const AudioFormat audio_format, { const std::lock_guard protect(mutex); - if (output->enabled && output->really_enabled) { + if (enabled && output->really_enabled) { if (force || !fail_timer.IsDefined() || fail_timer.Check(REOPEN_AFTER * 1000)) { return Open(audio_format, mp); @@ -326,7 +323,7 @@ AudioOutputControl::LockAllowPlay() void AudioOutputControl::LockRelease() { - if (output->always_on) + if (always_on) LockPauseAsync(); else LockCloseWait(); diff --git a/src/output/Control.hxx b/src/output/Control.hxx index bec311274..171a74f7b 100644 --- a/src/output/Control.hxx +++ b/src/output/Control.hxx @@ -119,6 +119,24 @@ class AudioOutputControl { KILL } command = Command::NONE; + /** + * Will this output receive tags from the decoder? The + * default is true, but it may be configured to false to + * suppress sending tags to the output. + */ + bool tags; + + /** + * Shall this output always play something (i.e. silence), + * even when playback is stopped? + */ + bool always_on; + + /** + * Has the user enabled this device? + */ + bool enabled = true; + /** * When this flag is set, the output thread will not do any * playback. It will wait until the flag is cleared. @@ -172,8 +190,12 @@ public: gcc_pure Mixer *GetMixer() const; - gcc_pure - bool IsEnabled() const; + /** + * Caller must lock the mutex. + */ + bool IsEnabled() const { + return enabled; + } /** * @return true if the value has been modified diff --git a/src/output/Init.cxx b/src/output/Init.cxx index 2f1ad25ad..128a8b4c2 100644 --- a/src/output/Init.cxx +++ b/src/output/Init.cxx @@ -171,10 +171,6 @@ AudioOutput::Configure(const ConfigBlock &block) config_audio_format.Clear(); } - tags = block.GetBlockValue("tags", true); - always_on = block.GetBlockValue("always_on", false); - enabled = block.GetBlockValue("enabled", true); - /* set up the filter chain */ prepared_filter = filter_chain_new(); diff --git a/src/output/Internal.hxx b/src/output/Internal.hxx index 8af184acd..b9c50d721 100644 --- a/src/output/Internal.hxx +++ b/src/output/Internal.hxx @@ -54,24 +54,6 @@ struct AudioOutput { */ Mixer *mixer = nullptr; - /** - * Will this output receive tags from the decoder? The - * default is true, but it may be configured to false to - * suppress sending tags to the output. - */ - bool tags; - - /** - * Shall this output always play something (i.e. silence), - * even when playback is stopped? - */ - bool always_on; - - /** - * Has the user enabled this device? - */ - bool enabled = true; - /** * Is this device actually enabled, i.e. the "enable" method * has succeeded? @@ -188,13 +170,6 @@ public: return name; } - /** - * Caller must lock the mutex. - */ - bool IsEnabled() const { - return enabled; - } - /** * Caller must lock the mutex. */ diff --git a/src/output/Thread.cxx b/src/output/Thread.cxx index 13b9079ac..36624bfea 100644 --- a/src/output/Thread.cxx +++ b/src/output/Thread.cxx @@ -270,7 +270,7 @@ try { inline bool AudioOutputControl::PlayChunk() { - if (output->tags) { + if (tags) { const auto *tag = output->source.ReadTag(); if (tag != nullptr) { const ScopeUnlock unlock(mutex);