Code clean-up, to allow building bare abstract class separately.
The original file is MIT-licensed.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
---
include/qemu/audio.h | 2 +
audio/audio-be.c | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++
audio/audio.c | 209 +--------------------------------------------------
audio/meson.build | 1 +
4 files changed, 211 insertions(+), 207 deletions(-)
diff --git a/include/qemu/audio.h b/include/qemu/audio.h
index 4fae48886ba..9f85c6316a8 100644
--- a/include/qemu/audio.h
+++ b/include/qemu/audio.h
@@ -111,6 +111,8 @@ typedef struct AudioBackendClass {
bool AUD_backend_check(AudioBackend **be, Error **errp);
+AudioBackend *audio_be_new(Audiodev *dev, Error **errp);
+
SWVoiceOut *AUD_open_out(
AudioBackend *be,
SWVoiceOut *sw,
diff --git a/audio/audio-be.c b/audio/audio-be.c
new file mode 100644
index 00000000000..51fb124026a
--- /dev/null
+++ b/audio/audio-be.c
@@ -0,0 +1,206 @@
+/* SPDX-License-Identifier: MIT */
+
+#include "qemu/osdep.h"
+#include "qemu/audio.h"
+#include "qemu/audio-capture.h"
+#include "qapi/error.h"
+
+bool AUD_backend_check(AudioBackend **be, Error **errp)
+{
+ assert(be != NULL);
+
+ if (!*be) {
+ *be = audio_get_default_audio_be(errp);
+ if (!*be) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+SWVoiceIn *AUD_open_in(
+ AudioBackend *be,
+ SWVoiceIn *sw,
+ const char *name,
+ void *callback_opaque,
+ audio_callback_fn callback_fn,
+ const struct audsettings *as)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->open_in(be, sw, name, callback_opaque, callback_fn, as);
+}
+
+SWVoiceOut *AUD_open_out(
+ AudioBackend *be,
+ SWVoiceOut *sw,
+ const char *name,
+ void *callback_opaque,
+ audio_callback_fn callback_fn,
+ const struct audsettings *as)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->open_out(be, sw, name, callback_opaque, callback_fn, as);
+}
+
+void AUD_close_out(AudioBackend *be, SWVoiceOut *sw)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->close_out(be, sw);
+}
+
+void AUD_close_in(AudioBackend *be, SWVoiceIn *sw)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->close_in(be, sw);
+}
+
+bool AUD_is_active_out(AudioBackend *be, SWVoiceOut *sw)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->is_active_out(be, sw);
+}
+
+bool AUD_is_active_in(AudioBackend *be, SWVoiceIn *sw)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->is_active_in(be, sw);
+}
+
+size_t AUD_write(AudioBackend *be, SWVoiceOut *sw, void *buf, size_t size)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->write(be, sw, buf, size);
+}
+
+size_t AUD_read(AudioBackend *be, SWVoiceIn *sw, void *buf, size_t size)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->read(be, sw, buf, size);
+}
+
+int AUD_get_buffer_size_out(AudioBackend *be, SWVoiceOut *sw)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->get_buffer_size_out(be, sw);
+}
+
+void AUD_set_active_out(AudioBackend *be, SWVoiceOut *sw, bool on)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->set_active_out(be, sw, on);
+}
+
+void AUD_set_active_in(AudioBackend *be, SWVoiceIn *sw, bool on)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->set_active_in(be, sw, on);
+}
+
+void AUD_set_volume_out(AudioBackend *be, SWVoiceOut *sw, Volume *vol)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ klass->set_volume_out(be, sw, vol);
+}
+
+void AUD_set_volume_in(AudioBackend *be, SWVoiceIn *sw, Volume *vol)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ klass->set_volume_in(be, sw, vol);
+}
+
+CaptureVoiceOut *AUD_add_capture(
+ AudioBackend *be,
+ struct audsettings *as,
+ struct audio_capture_ops *ops,
+ void *cb_opaque)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->add_capture(be, as, ops, cb_opaque);
+}
+
+void AUD_del_capture(AudioBackend *be, CaptureVoiceOut *cap, void *cb_opaque)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ klass->del_capture(be, cap, cb_opaque);
+}
+
+#ifdef CONFIG_GIO
+bool audio_be_can_set_dbus_server(AudioBackend *be)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ return klass->set_dbus_server != NULL;
+}
+
+bool audio_be_set_dbus_server(AudioBackend *be,
+ GDBusObjectManagerServer *server,
+ bool p2p,
+ Error **errp)
+{
+ AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
+
+ if (!audio_be_can_set_dbus_server(be)) {
+ error_setg(errp, "Audiodev '%s' is not compatible with DBus",
+ audio_be_get_id(be));
+ return false;
+ }
+
+ return klass->set_dbus_server(be, server, p2p, errp);
+}
+#endif
+
+const char *audio_be_get_id(AudioBackend *be)
+{
+ if (be) {
+ return AUDIO_BACKEND_GET_CLASS(be)->get_id(be);
+ } else {
+ return "";
+ }
+}
+
+AudioBackend *audio_be_new(Audiodev *dev, Error **errp)
+{
+ const char *drvname = AudiodevDriver_str(dev->driver);
+ g_autofree char *type = g_strconcat("audio-", drvname, NULL);
+ AudioBackend *be = AUDIO_BACKEND(object_new(type));
+
+ if (!be) {
+ error_setg(errp, "Unknown audio driver `%s'", drvname);
+ return NULL;
+ }
+
+ if (!AUDIO_BACKEND_GET_CLASS(be)->realize(be, dev, errp)) {
+ object_unref(OBJECT(be));
+ return NULL;
+ }
+
+ return be;
+}
+
+static const TypeInfo audio_types[] = {
+ {
+ .name = TYPE_AUDIO_BACKEND,
+ .parent = TYPE_OBJECT,
+ .instance_size = sizeof(AudioBackend),
+ .abstract = true,
+ .class_size = sizeof(AudioBackendClass),
+ },
+};
+
+DEFINE_TYPES(audio_types)
diff --git a/audio/audio.c b/audio/audio.c
index 32b2b882f80..22e55ac9758 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -870,15 +870,8 @@ static size_t audio_mixeng_backend_write(AudioBackend *be, SWVoiceOut *sw,
}
}
-size_t AUD_write(AudioBackend *be, SWVoiceOut *sw, void *buf, size_t size)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->write(be, sw, buf, size);
-}
-
-static size_t audio_mixeng_backend_read(AudioBackend *be, SWVoiceIn *sw,
- void *buf, size_t size)
+static size_t audio_mixeng_backend_read(AudioBackend *be,
+ SWVoiceIn *sw, void *buf, size_t size)
{
HWVoiceIn *hw;
@@ -901,13 +894,6 @@ static size_t audio_mixeng_backend_read(AudioBackend *be, SWVoiceIn *sw,
}
-size_t AUD_read(AudioBackend *be, SWVoiceIn *sw, void *buf, size_t size)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->read(be, sw, buf, size);
-}
-
static int audio_mixeng_backend_get_buffer_size_out(AudioBackend *be, SWVoiceOut *sw)
{
if (!sw) {
@@ -921,13 +907,6 @@ static int audio_mixeng_backend_get_buffer_size_out(AudioBackend *be, SWVoiceOut
return sw->hw->samples * sw->hw->info.bytes_per_frame;
}
-int AUD_get_buffer_size_out(AudioBackend *be, SWVoiceOut *sw)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->get_buffer_size_out(be, sw);
-}
-
static void audio_mixeng_backend_set_active_out(AudioBackend *be, SWVoiceOut *sw,
bool on)
{
@@ -978,13 +957,6 @@ static void audio_mixeng_backend_set_active_out(AudioBackend *be, SWVoiceOut *sw
}
-void AUD_set_active_out(AudioBackend *be, SWVoiceOut *sw, bool on)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->set_active_out(be, sw, on);
-}
-
static void audio_mixeng_backend_set_active_in(AudioBackend *be, SWVoiceIn *sw, bool on)
{
HWVoiceIn *hw;
@@ -1030,13 +1002,6 @@ static void audio_mixeng_backend_set_active_in(AudioBackend *be, SWVoiceIn *sw,
}
}
-void AUD_set_active_in(AudioBackend *be, SWVoiceIn *sw, bool on)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->set_active_in(be, sw, on);
-}
-
static size_t audio_get_avail(SWVoiceIn *sw)
{
size_t live;
@@ -1643,25 +1608,6 @@ static bool audio_mixeng_backend_realize(AudioBackend *abe,
return true;
}
-static AudioBackend *audio_be_new(Audiodev *dev, Error **errp)
-{
- const char *drvname = AudiodevDriver_str(dev->driver);
- g_autofree char *type = g_strconcat("audio-", drvname, NULL);
- AudioBackend *be = AUDIO_BACKEND(object_new(type));
-
- if (!be) {
- error_setg(errp, "Unknown audio driver `%s'", drvname);
- return NULL;
- }
-
- if (!AUDIO_BACKEND_GET_CLASS(be)->realize(be, dev, errp)) {
- object_unref(OBJECT(be));
- return NULL;
- }
-
- return be;
-}
-
static void audio_vm_change_state_handler (void *opaque, bool running,
RunState state)
{
@@ -1685,14 +1631,6 @@ static void audio_vm_change_state_handler (void *opaque, bool running,
static const VMStateDescription vmstate_audio;
-static void audio_be_init(Object *obj)
-{
-}
-
-static void audio_be_finalize(Object *obj)
-{
-}
-
static const char *audio_mixeng_backend_get_id(AudioBackend *be)
{
return AUDIO_MIXENG_BACKEND(be)->dev->id;
@@ -1714,60 +1652,6 @@ static void audio_mixeng_backend_set_volume_out(AudioBackend *be, SWVoiceOut *sw
static void audio_mixeng_backend_set_volume_in(AudioBackend *be, SWVoiceIn *sw,
Volume *vol);
-SWVoiceOut *AUD_open_out(
- AudioBackend *be,
- SWVoiceOut *sw,
- const char *name,
- void *callback_opaque,
- audio_callback_fn callback_fn,
- const struct audsettings *as)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->open_out(be, sw, name, callback_opaque, callback_fn, as);
-}
-
-SWVoiceIn *AUD_open_in(
- AudioBackend *be,
- SWVoiceIn *sw,
- const char *name,
- void *callback_opaque,
- audio_callback_fn callback_fn,
- const struct audsettings *as)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->open_in(be, sw, name, callback_opaque, callback_fn, as);
-}
-
-void AUD_close_out(AudioBackend *be, SWVoiceOut *sw)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->close_out(be, sw);
-}
-
-void AUD_close_in(AudioBackend *be, SWVoiceIn *sw)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->close_in(be, sw);
-}
-
-bool AUD_is_active_out(AudioBackend *be, SWVoiceOut *sw)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->is_active_out(be, sw);
-}
-
-bool AUD_is_active_in(AudioBackend *be, SWVoiceIn *sw)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->is_active_in(be, sw);
-}
-
static void audio_mixeng_backend_class_init(ObjectClass *klass, const void *data)
{
AudioBackendClass *be = AUDIO_BACKEND_CLASS(klass);
@@ -1972,20 +1856,6 @@ AudioBackend *audio_get_default_audio_be(Error **errp)
return default_audio_be;
}
-bool AUD_backend_check(AudioBackend **be, Error **errp)
-{
- assert(be != NULL);
-
- if (!*be) {
- *be = audio_get_default_audio_be(errp);
- if (!*be) {
- return false;
- }
- }
-
- return true;
-}
-
static struct audio_pcm_ops capture_pcm_ops;
static CaptureVoiceOut *audio_mixeng_backend_add_capture(
@@ -2062,17 +1932,6 @@ static CaptureVoiceOut *audio_mixeng_backend_add_capture(
return cap;
}
-CaptureVoiceOut *AUD_add_capture(
- AudioBackend *be,
- struct audsettings *as,
- struct audio_capture_ops *ops,
- void *cb_opaque)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->add_capture(be, as, ops, cb_opaque);
-}
-
static void audio_mixeng_backend_del_capture(
AudioBackend *be,
CaptureVoiceOut *cap,
@@ -2115,13 +1974,6 @@ static void audio_mixeng_backend_del_capture(
}
}
-void AUD_del_capture(AudioBackend *be, CaptureVoiceOut *cap, void *cb_opaque)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- klass->del_capture(be, cap, cb_opaque);
-}
-
static void audio_mixeng_backend_set_volume_out(AudioBackend *be, SWVoiceOut *sw,
Volume *vol)
{
@@ -2139,13 +1991,6 @@ static void audio_mixeng_backend_set_volume_out(AudioBackend *be, SWVoiceOut *sw
}
}
-void AUD_set_volume_out(AudioBackend *be, SWVoiceOut *sw, Volume *vol)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- klass->set_volume_out(be, sw, vol);
-}
-
static void audio_mixeng_backend_set_volume_in(AudioBackend *be, SWVoiceIn *sw,
Volume *vol)
{
@@ -2163,13 +2008,6 @@ static void audio_mixeng_backend_set_volume_in(AudioBackend *be, SWVoiceIn *sw,
}
}
-void AUD_set_volume_in(AudioBackend *be, SWVoiceIn *sw, Volume *vol)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- klass->set_volume_in(be, sw, vol);
-}
-
static void audio_create_pdos(Audiodev *dev)
{
switch (dev->driver) {
@@ -2423,40 +2261,6 @@ AudioBackend *audio_be_by_name(const char *name, Error **errp)
}
}
-#ifdef CONFIG_GIO
-bool audio_be_can_set_dbus_server(AudioBackend *be)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- return klass->set_dbus_server != NULL;
-}
-
-bool audio_be_set_dbus_server(AudioBackend *be,
- GDBusObjectManagerServer *server,
- bool p2p,
- Error **errp)
-{
- AudioBackendClass *klass = AUDIO_BACKEND_GET_CLASS(be);
-
- if (!audio_be_can_set_dbus_server(be)) {
- error_setg(errp, "Audiodev '%s' is not compatible with DBus",
- audio_be_get_id(be));
- return false;
- }
-
- return klass->set_dbus_server(be, server, p2p, errp);
-}
-#endif
-
-const char *audio_be_get_id(AudioBackend *be)
-{
- if (be) {
- return AUDIO_BACKEND_GET_CLASS(be)->get_id(be);
- } else {
- return "";
- }
-}
-
const char *audio_application_name(void)
{
const char *vm_name;
@@ -2521,15 +2325,6 @@ AudiodevList *qmp_query_audiodevs(Error **errp)
}
static const TypeInfo audio_types[] = {
- {
- .name = TYPE_AUDIO_BACKEND,
- .parent = TYPE_OBJECT,
- .instance_size = sizeof(AudioBackend),
- .instance_init = audio_be_init,
- .instance_finalize = audio_be_finalize,
- .abstract = true,
- .class_size = sizeof(AudioBackendClass),
- },
{
.name = TYPE_AUDIO_MIXENG_BACKEND,
.parent = TYPE_AUDIO_BACKEND,
diff --git a/audio/meson.build b/audio/meson.build
index 55ee0bfc865..17f58369c20 100644
--- a/audio/meson.build
+++ b/audio/meson.build
@@ -1,6 +1,7 @@
audio_ss = ss.source_set()
audio_ss.add(files(
'audio.c',
+ 'audio-be.c',
'mixeng.c',
'noaudio.c',
'wavaudio.c',
--
2.53.0