diff options
author | Max Kellermann <max@duempel.org> | 2015-01-09 17:44:00 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-01-09 17:44:00 +0100 |
commit | 575a5bd0b8f1df1cf10add1426c89a6224409e02 (patch) | |
tree | 0e843a73eecbcf3677138ea463196148d6221633 /src/output | |
parent | ae4c189e191fd83ee1394f0a180e7ca9430e66c9 (diff) | |
download | mpd-575a5bd0b8f1df1cf10add1426c89a6224409e02.tar.gz mpd-575a5bd0b8f1df1cf10add1426c89a6224409e02.tar.xz mpd-575a5bd0b8f1df1cf10add1426c89a6224409e02.zip |
output/null: move functions into the struct
Diffstat (limited to 'src/output')
-rw-r--r-- | src/output/plugins/NullOutputPlugin.cxx | 122 |
1 files changed, 47 insertions, 75 deletions
diff --git a/src/output/plugins/NullOutputPlugin.cxx b/src/output/plugins/NullOutputPlugin.cxx index eb6a184ef..a7079d98a 100644 --- a/src/output/plugins/NullOutputPlugin.cxx +++ b/src/output/plugins/NullOutputPlugin.cxx @@ -20,6 +20,7 @@ #include "config.h" #include "NullOutputPlugin.hxx" #include "../OutputAPI.hxx" +#include "../Wrapper.hxx" #include "../Timer.hxx" struct NullOutput { @@ -35,104 +36,75 @@ struct NullOutput { bool Initialize(const config_param ¶m, Error &error) { return base.Configure(param, error); } -}; - -static AudioOutput * -null_init(const config_param ¶m, Error &error) -{ - NullOutput *nd = new NullOutput(); - - if (!nd->Initialize(param, error)) { - delete nd; - return nullptr; - } - - nd->sync = param.GetBlockValue("sync", true); - - return &nd->base; -} - -static void -null_finish(AudioOutput *ao) -{ - NullOutput *nd = (NullOutput *)ao; - delete nd; -} + static NullOutput *Create(const config_param ¶m, Error &error); -static bool -null_open(AudioOutput *ao, AudioFormat &audio_format, - gcc_unused Error &error) -{ - NullOutput *nd = (NullOutput *)ao; + bool Open(AudioFormat &audio_format, gcc_unused Error &error) { + if (sync) + timer = new Timer(audio_format); - if (nd->sync) - nd->timer = new Timer(audio_format); + return true; + } - return true; -} + void Close() { + if (sync) + delete timer; + } -static void -null_close(AudioOutput *ao) -{ - NullOutput *nd = (NullOutput *)ao; + unsigned Delay() const { + return sync && timer->IsStarted() + ? timer->GetDelay() + : 0; + } - if (nd->sync) - delete nd->timer; -} + size_t Play(gcc_unused const void *chunk, size_t size, + gcc_unused Error &error) { + if (sync) { + if (!timer->IsStarted()) + timer->Start(); + timer->Add(size); + } -static unsigned -null_delay(AudioOutput *ao) -{ - NullOutput *nd = (NullOutput *)ao; + return size; + } - return nd->sync && nd->timer->IsStarted() - ? nd->timer->GetDelay() - : 0; -} + void Cancel() { + if (sync) + timer->Reset(); + } +}; -static size_t -null_play(AudioOutput *ao, gcc_unused const void *chunk, size_t size, - gcc_unused Error &error) +inline NullOutput * +NullOutput::Create(const config_param ¶m, Error &error) { - NullOutput *nd = (NullOutput *)ao; - Timer *timer = nd->timer; + NullOutput *nd = new NullOutput(); - if (!nd->sync) - return size; + if (!nd->Initialize(param, error)) { + delete nd; + return nullptr; + } - if (!timer->IsStarted()) - timer->Start(); - timer->Add(size); + nd->sync = param.GetBlockValue("sync", true); - return size; + return nd; } -static void -null_cancel(AudioOutput *ao) -{ - NullOutput *nd = (NullOutput *)ao; - - if (!nd->sync) - return; - - nd->timer->Reset(); -} +typedef AudioOutputWrapper<NullOutput> Wrapper; const struct AudioOutputPlugin null_output_plugin = { "null", nullptr, - null_init, - null_finish, + &Wrapper::Init, + &Wrapper::Finish, nullptr, nullptr, - null_open, - null_close, - null_delay, + &Wrapper::Open, + &Wrapper::Close, + &Wrapper::Delay, nullptr, - null_play, + &Wrapper::Play, nullptr, - null_cancel, + &Wrapper::Cancel, nullptr, nullptr, }; |