output/Interface: define a new struct AudioOutput
Hide struct FilteredAudioOutput from the plugins, preparing for hiding MPD's core internals.
This commit is contained in:
@@ -64,7 +64,7 @@ class AlsaOutput final
|
||||
|
||||
friend struct AudioOutputWrapper<AlsaOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
Manual<PcmExport> pcm_export;
|
||||
|
||||
@@ -414,7 +414,7 @@ static constexpr Domain alsa_output_domain("alsa_output");
|
||||
|
||||
AlsaOutput::AlsaOutput(EventLoop &loop, const ConfigBlock &block)
|
||||
:MultiSocketMonitor(loop), DeferredMonitor(loop),
|
||||
base(alsa_output_plugin, block),
|
||||
base(alsa_output_plugin),
|
||||
device(block.GetBlockValue("device", "")),
|
||||
#ifdef ENABLE_DSD
|
||||
dop(block.GetBlockValue("dop", false) ||
|
||||
|
||||
@@ -40,7 +40,7 @@ static unsigned ao_output_ref;
|
||||
class AoOutput {
|
||||
friend struct AudioOutputWrapper<AoOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
const size_t write_size;
|
||||
int driver;
|
||||
@@ -95,7 +95,7 @@ MakeAoError()
|
||||
}
|
||||
|
||||
AoOutput::AoOutput(const ConfigBlock &block)
|
||||
:base(ao_output_plugin, block),
|
||||
:base(ao_output_plugin),
|
||||
write_size(block.GetBlockValue("write_size", 1024u))
|
||||
{
|
||||
if (ao_output_ref == 0) {
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
class FifoOutput {
|
||||
friend struct AudioOutputWrapper<FifoOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
const AllocatedPath path;
|
||||
std::string path_utf8;
|
||||
@@ -75,7 +75,7 @@ public:
|
||||
static constexpr Domain fifo_output_domain("fifo_output");
|
||||
|
||||
FifoOutput::FifoOutput(const ConfigBlock &block)
|
||||
:base(fifo_output_plugin, block),
|
||||
:base(fifo_output_plugin),
|
||||
path(block.GetPath("path"))
|
||||
{
|
||||
if (path.IsNull())
|
||||
|
||||
@@ -48,7 +48,7 @@ class HaikuOutput {
|
||||
friend int haiku_output_get_volume(HaikuOutput &haiku);
|
||||
friend bool haiku_output_set_volume(HaikuOutput &haiku, unsigned volume);
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
size_t write_size;
|
||||
|
||||
@@ -66,7 +66,7 @@ class HaikuOutput {
|
||||
|
||||
public:
|
||||
HaikuOutput(const ConfigBlock &block)
|
||||
:base(haiku_output_plugin, block),
|
||||
:base(haiku_output_plugin),
|
||||
/* XXX: by default we should let the MediaKit propose the buffer size */
|
||||
write_size(block.GetBlockValue("write_size", 4096u)) {}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ static constexpr unsigned MAX_PORTS = 16;
|
||||
static constexpr size_t jack_sample_size = sizeof(jack_default_audio_sample_t);
|
||||
|
||||
struct JackOutput {
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
/**
|
||||
* libjack options passed to jack_client_open().
|
||||
@@ -162,7 +162,7 @@ parse_port_list(const char *source, std::string dest[])
|
||||
}
|
||||
|
||||
JackOutput::JackOutput(const ConfigBlock &block)
|
||||
:base(jack_output_plugin, block),
|
||||
:base(jack_output_plugin),
|
||||
name(block.GetBlockValue("client_name", nullptr)),
|
||||
server_name(block.GetBlockValue("server_name", nullptr))
|
||||
{
|
||||
@@ -443,7 +443,7 @@ JackOutput::Disable()
|
||||
}
|
||||
}
|
||||
|
||||
static FilteredAudioOutput *
|
||||
static AudioOutput *
|
||||
mpd_jack_init(EventLoop &, const ConfigBlock &block)
|
||||
{
|
||||
jack_set_error_function(mpd_jack_error);
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
class NullOutput {
|
||||
friend struct AudioOutputWrapper<NullOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
const bool sync;
|
||||
|
||||
@@ -34,7 +34,7 @@ class NullOutput {
|
||||
|
||||
public:
|
||||
NullOutput(const ConfigBlock &block)
|
||||
:base(null_output_plugin, block),
|
||||
:base(null_output_plugin),
|
||||
sync(block.GetBlockValue("sync", true)) {}
|
||||
|
||||
static NullOutput *Create(EventLoop &event_loop,
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include <memory>
|
||||
|
||||
struct OSXOutput {
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
/* configuration settings */
|
||||
OSType component_subtype;
|
||||
@@ -80,7 +80,7 @@ osx_output_test_default_device(void)
|
||||
}
|
||||
|
||||
OSXOutput::OSXOutput(const ConfigBlock &block)
|
||||
:base(osx_output_plugin, block)
|
||||
:base(osx_output_plugin)
|
||||
{
|
||||
const char *device = block.GetBlockValue("device");
|
||||
|
||||
@@ -103,7 +103,7 @@ OSXOutput::OSXOutput(const ConfigBlock &block)
|
||||
sync_sample_rate = block.GetBlockValue("sync_sample_rate", false);
|
||||
}
|
||||
|
||||
static FilteredAudioOutput *
|
||||
static AudioOutput *
|
||||
osx_output_init(EventLoop &, const ConfigBlock &block)
|
||||
{
|
||||
OSXOutput *oo = new OSXOutput(block);
|
||||
@@ -128,7 +128,7 @@ osx_output_init(EventLoop &, const ConfigBlock &block)
|
||||
}
|
||||
|
||||
static void
|
||||
osx_output_finish(FilteredAudioOutput *ao)
|
||||
osx_output_finish(AudioOutput *ao)
|
||||
{
|
||||
OSXOutput *oo = (OSXOutput *)ao;
|
||||
|
||||
@@ -514,7 +514,7 @@ osx_render(void *vdata,
|
||||
}
|
||||
|
||||
static void
|
||||
osx_output_enable(FilteredAudioOutput *ao)
|
||||
osx_output_enable(AudioOutput *ao)
|
||||
{
|
||||
char errormsg[1024];
|
||||
OSXOutput *oo = (OSXOutput *)ao;
|
||||
@@ -550,7 +550,7 @@ osx_output_enable(FilteredAudioOutput *ao)
|
||||
}
|
||||
|
||||
static void
|
||||
osx_output_disable(FilteredAudioOutput *ao)
|
||||
osx_output_disable(AudioOutput *ao)
|
||||
{
|
||||
OSXOutput *oo = (OSXOutput *)ao;
|
||||
|
||||
@@ -562,7 +562,7 @@ osx_output_disable(FilteredAudioOutput *ao)
|
||||
}
|
||||
|
||||
static void
|
||||
osx_output_close(FilteredAudioOutput *ao)
|
||||
osx_output_close(AudioOutput *ao)
|
||||
{
|
||||
OSXOutput *od = (OSXOutput *)ao;
|
||||
|
||||
@@ -573,7 +573,7 @@ osx_output_close(FilteredAudioOutput *ao)
|
||||
}
|
||||
|
||||
static void
|
||||
osx_output_open(FilteredAudioOutput *ao, AudioFormat &audio_format)
|
||||
osx_output_open(AudioOutput *ao, AudioFormat &audio_format)
|
||||
{
|
||||
char errormsg[1024];
|
||||
OSXOutput *od = (OSXOutput *)ao;
|
||||
@@ -663,14 +663,14 @@ osx_output_open(FilteredAudioOutput *ao, AudioFormat &audio_format)
|
||||
}
|
||||
|
||||
static size_t
|
||||
osx_output_play(FilteredAudioOutput *ao, const void *chunk, size_t size)
|
||||
osx_output_play(AudioOutput *ao, const void *chunk, size_t size)
|
||||
{
|
||||
OSXOutput *od = (OSXOutput *)ao;
|
||||
return od->ring_buffer->push((uint8_t *)chunk, size);
|
||||
}
|
||||
|
||||
static std::chrono::steady_clock::duration
|
||||
osx_output_delay(FilteredAudioOutput *ao) noexcept
|
||||
osx_output_delay(AudioOutput *ao) noexcept
|
||||
{
|
||||
OSXOutput *od = (OSXOutput *)ao;
|
||||
return od->ring_buffer->write_available()
|
||||
|
||||
@@ -39,7 +39,7 @@ class OpenALOutput {
|
||||
/* should be enough for buffer size = 2048 */
|
||||
static constexpr unsigned NUM_BUFFERS = 16;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
const char *device_name;
|
||||
ALCdevice *device;
|
||||
@@ -138,7 +138,7 @@ OpenALOutput::SetupContext()
|
||||
}
|
||||
|
||||
OpenALOutput::OpenALOutput(const ConfigBlock &block)
|
||||
:base(openal_output_plugin, block),
|
||||
:base(openal_output_plugin),
|
||||
device_name(block.GetBlockValue("device"))
|
||||
{
|
||||
if (device_name == nullptr)
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
class OssOutput {
|
||||
friend struct AudioOutputWrapper<OssOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
#ifdef AFMT_S24_PACKED
|
||||
Manual<PcmExport> pcm_export;
|
||||
@@ -85,8 +85,8 @@ class OssOutput {
|
||||
int oss_format;
|
||||
|
||||
public:
|
||||
OssOutput(const ConfigBlock &block, const char *_device=nullptr)
|
||||
:base(oss_output_plugin, block),
|
||||
explicit OssOutput(const char *_device=nullptr)
|
||||
:base(oss_output_plugin),
|
||||
fd(-1), device(_device) {}
|
||||
|
||||
static OssOutput *Create(EventLoop &event_loop,
|
||||
@@ -192,11 +192,10 @@ oss_open_default()
|
||||
int err[ARRAY_SIZE(default_devices)];
|
||||
enum oss_stat ret[ARRAY_SIZE(default_devices)];
|
||||
|
||||
const ConfigBlock empty;
|
||||
for (int i = ARRAY_SIZE(default_devices); --i >= 0; ) {
|
||||
ret[i] = oss_stat_device(default_devices[i], &err[i]);
|
||||
if (ret[i] == OSS_STAT_NO_ERROR)
|
||||
return new OssOutput(empty, default_devices[i]);
|
||||
return new OssOutput(default_devices[i]);
|
||||
}
|
||||
|
||||
for (int i = ARRAY_SIZE(default_devices); --i >= 0; ) {
|
||||
@@ -231,7 +230,7 @@ OssOutput::Create(EventLoop &, const ConfigBlock &block)
|
||||
{
|
||||
const char *device = block.GetBlockValue("device");
|
||||
if (device != nullptr)
|
||||
return new OssOutput(block, device);
|
||||
return new OssOutput(device);
|
||||
|
||||
return oss_open_default();
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
class PipeOutput {
|
||||
friend struct AudioOutputWrapper<PipeOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
const std::string cmd;
|
||||
FILE *fh;
|
||||
@@ -52,7 +52,7 @@ public:
|
||||
};
|
||||
|
||||
PipeOutput::PipeOutput(const ConfigBlock &block)
|
||||
:base(pipe_output_plugin, block),
|
||||
:base(pipe_output_plugin),
|
||||
cmd(block.GetBlockValue("command", ""))
|
||||
{
|
||||
if (cmd.empty())
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
class PulseOutput {
|
||||
friend struct AudioOutputWrapper<PulseOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
const char *name;
|
||||
const char *server;
|
||||
@@ -179,7 +179,7 @@ private:
|
||||
};
|
||||
|
||||
PulseOutput::PulseOutput(const ConfigBlock &block)
|
||||
:base(pulse_output_plugin, block),
|
||||
:base(pulse_output_plugin),
|
||||
name(block.GetBlockValue("name", "mpd_pulse")),
|
||||
server(block.GetBlockValue("server")),
|
||||
sink(block.GetBlockValue("sink"))
|
||||
|
||||
@@ -45,7 +45,7 @@ static constexpr Domain recorder_domain("recorder");
|
||||
class RecorderOutput {
|
||||
friend struct AudioOutputWrapper<RecorderOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
/**
|
||||
* The configured encoder plugin.
|
||||
@@ -114,7 +114,7 @@ private:
|
||||
};
|
||||
|
||||
RecorderOutput::RecorderOutput(const ConfigBlock &block)
|
||||
:base(recorder_output_plugin, block)
|
||||
:base(recorder_output_plugin)
|
||||
{
|
||||
/* read configuration */
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
class RoarOutput {
|
||||
friend struct AudioOutputWrapper<RoarOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
const std::string host, name;
|
||||
|
||||
@@ -54,7 +54,7 @@ class RoarOutput {
|
||||
public:
|
||||
RoarOutput(const ConfigBlock &block);
|
||||
|
||||
operator FilteredAudioOutput *() {
|
||||
operator AudioOutput *() {
|
||||
return &base;
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ GetConfiguredRole(const ConfigBlock &block) noexcept
|
||||
}
|
||||
|
||||
RoarOutput::RoarOutput(const ConfigBlock &block)
|
||||
:base(roar_output_plugin, block),
|
||||
:base(roar_output_plugin),
|
||||
host(block.GetBlockValue("server", "")),
|
||||
name(block.GetBlockValue("name", "MPD")),
|
||||
role(GetConfiguredRole(block))
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
static constexpr unsigned DEFAULT_CONN_TIMEOUT = 2;
|
||||
|
||||
struct ShoutOutput final {
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
shout_t *shout_conn;
|
||||
shout_metadata_t *shout_meta;
|
||||
@@ -113,7 +113,7 @@ ShoutSetAudioInfo(shout_t *shout_conn, const AudioFormat &audio_format)
|
||||
}
|
||||
|
||||
ShoutOutput::ShoutOutput(const ConfigBlock &block)
|
||||
:base(shout_output_plugin, block),
|
||||
:base(shout_output_plugin),
|
||||
shout_conn(shout_new()),
|
||||
shout_meta(shout_metadata_new())
|
||||
{
|
||||
|
||||
@@ -47,7 +47,7 @@ static constexpr Domain sndio_output_domain("sndio_output");
|
||||
|
||||
class SndioOutput {
|
||||
friend struct AudioOutputWrapper<SndioOutput>;
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
const char *const device;
|
||||
const unsigned buffer_time; /* in ms */
|
||||
struct sio_hdl *sio_hdl;
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
};
|
||||
|
||||
SndioOutput::SndioOutput(const ConfigBlock &block)
|
||||
:base(sndio_output_plugin, block),
|
||||
:base(sndio_output_plugin),
|
||||
device(block.GetBlockValue("device", SIO_DEVANY)),
|
||||
buffer_time(block.GetBlockValue("buffer_time",
|
||||
MPD_SNDIO_BUFFER_TIME_MS))
|
||||
|
||||
@@ -53,7 +53,7 @@ struct audio_info {
|
||||
class SolarisOutput {
|
||||
friend struct AudioOutputWrapper<SolarisOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
/* configuration */
|
||||
const char *const device;
|
||||
@@ -61,7 +61,7 @@ class SolarisOutput {
|
||||
int fd;
|
||||
|
||||
explicit SolarisOutput(const ConfigBlock &block)
|
||||
:base(solaris_output_plugin, block),
|
||||
:base(solaris_output_plugin),
|
||||
device(block.GetBlockValue("device", "/dev/audio")) {}
|
||||
|
||||
public:
|
||||
|
||||
@@ -42,7 +42,7 @@ struct WinmmBuffer {
|
||||
class WinmmOutput {
|
||||
friend struct AudioOutputWrapper<WinmmOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
const UINT device_id;
|
||||
HWAVEOUT handle;
|
||||
@@ -148,7 +148,7 @@ get_device_id(const char *device_name)
|
||||
}
|
||||
|
||||
WinmmOutput::WinmmOutput(const ConfigBlock &block)
|
||||
:base(winmm_output_plugin, block),
|
||||
:base(winmm_output_plugin),
|
||||
device_id(get_device_id(block.GetBlockValue("device")))
|
||||
{
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ struct Tag;
|
||||
class HttpdOutput final : ServerSocket, DeferredMonitor {
|
||||
friend struct AudioOutputWrapper<HttpdOutput>;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
/**
|
||||
* True if the audio output is open and accepts client
|
||||
@@ -160,7 +160,7 @@ public:
|
||||
static HttpdOutput *Create(EventLoop &event_loop,
|
||||
const ConfigBlock &block);
|
||||
|
||||
static constexpr HttpdOutput *Cast(FilteredAudioOutput *ao) {
|
||||
static constexpr HttpdOutput *Cast(AudioOutput *ao) {
|
||||
return &ContainerCast(*ao, &HttpdOutput::base);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ const Domain httpd_output_domain("httpd_output");
|
||||
inline
|
||||
HttpdOutput::HttpdOutput(EventLoop &_loop, const ConfigBlock &block)
|
||||
:ServerSocket(_loop), DeferredMonitor(_loop),
|
||||
base(httpd_output_plugin, block),
|
||||
base(httpd_output_plugin),
|
||||
encoder(nullptr), unflushed_input(0),
|
||||
metadata(nullptr)
|
||||
{
|
||||
|
||||
@@ -43,7 +43,7 @@ class SlesOutput {
|
||||
static constexpr unsigned N_BUFFERS = 3;
|
||||
static constexpr size_t BUFFER_SIZE = 65536;
|
||||
|
||||
FilteredAudioOutput base;
|
||||
AudioOutput base;
|
||||
|
||||
SLES::Object engine_object, mix_object, play_object;
|
||||
SLES::Play play;
|
||||
@@ -87,9 +87,9 @@ class SlesOutput {
|
||||
uint8_t buffers[N_BUFFERS][BUFFER_SIZE];
|
||||
|
||||
public:
|
||||
SlesOutput(const ConfigBlock &block);
|
||||
SlesOutput();
|
||||
|
||||
operator FilteredAudioOutput *() {
|
||||
operator AudioOutput *() {
|
||||
return &base;
|
||||
}
|
||||
|
||||
@@ -129,8 +129,8 @@ private:
|
||||
|
||||
static constexpr Domain sles_domain("sles");
|
||||
|
||||
SlesOutput::SlesOutput(const ConfigBlock &block)
|
||||
:base(sles_output_plugin, block)
|
||||
SlesOutput::SlesOutput()
|
||||
:base(sles_output_plugin)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -416,9 +416,9 @@ sles_test_default_device()
|
||||
}
|
||||
|
||||
inline SlesOutput *
|
||||
SlesOutput::Create(EventLoop &, const ConfigBlock &block)
|
||||
SlesOutput::Create(EventLoop &, const ConfigBlock &)
|
||||
{
|
||||
return new SlesOutput(block);
|
||||
return new SlesOutput();
|
||||
}
|
||||
|
||||
typedef AudioOutputWrapper<SlesOutput> Wrapper;
|
||||
|
||||
Reference in New Issue
Block a user