Commit 575a5bd0 authored by Max Kellermann's avatar Max Kellermann

output/null: move functions into the struct

parent ae4c189e
......@@ -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 &param, Error &error) {
return base.Configure(param, error);
}
};
static AudioOutput *
null_init(const config_param &param, 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 &param, 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 &param, 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,
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment