From: Marc-André Lureau
This will allow to use QOM and the dynamic object module loading.
Signed-off-by: Marc-André Lureau
---
audio/audio_int.h | 2 ++
audio/alsaaudio.c | 39 +++
audio/dbusaudio.c | 36
audio/dsoundaudio.c | 36
audio/jackaudio.c | 36
audio/noaudio.c | 36
audio/ossaudio.c| 36
audio/paaudio.c | 36
audio/pwaudio.c | 36
audio/sdlaudio.c| 36
audio/sndioaudio.c | 36
audio/spiceaudio.c | 36
audio/wavaudio.c| 36
audio/coreaudio.m | 36
14 files changed, 473 insertions(+)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index e1f962875f..44e63318e8 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -243,6 +243,8 @@ struct SWVoiceCap {
struct AudioDriverClass {
AudioBackendClass parent_class;
+
+audio_driver *driver;
};
struct AudioDriver {
diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index 278c74c5de..c28ee05b93 100644
--- a/audio/alsaaudio.c
+++ b/audio/alsaaudio.c
@@ -27,6 +27,7 @@
#include "qemu/main-loop.h"
#include "qemu/module.h"
#include "qemu/audio.h"
+#include "qom/object.h"
#include "trace.h"
#pragma GCC diagnostic ignored "-Waddress"
@@ -36,6 +37,32 @@
#define DEBUG_ALSA 0
+#define TYPE_AUDIO_ALSA "audio-alsa"
+OBJECT_DECLARE_TYPE(AudioALSA, AudioBEDriverClass, AUDIO_ALSA)
+
+struct AudioALSA {
+AudioDriver parent;
+};
+
+static struct audio_driver alsa_audio_driver;
+
+static void audio_alsa_class_init(ObjectClass *klass, const void *data)
+{
+AudioDriverClass *k = AUDIO_DRIVER_CLASS(klass);
+
+k->driver = &alsa_audio_driver;
+}
+
+static void audio_alsa_init(Object *obj)
+{
+
+}
+
+static void audio_alsa_finalize(Object *obj)
+{
+
+}
+
struct pollhlp {
snd_pcm_t *handle;
struct pollfd *pfds;
@@ -945,8 +972,20 @@ static struct audio_driver alsa_audio_driver = {
.voice_size_in = sizeof (ALSAVoiceIn)
};
+static const TypeInfo audio_alsa_info = {
+.name = TYPE_AUDIO_ALSA,
+.parent = TYPE_AUDIO_DRIVER,
+.instance_size = sizeof(AudioALSA),
+.instance_init = audio_alsa_init,
+.instance_finalize = audio_alsa_finalize,
+.class_init = audio_alsa_class_init,
+};
+
+
static void register_audio_alsa(void)
{
audio_driver_register(&alsa_audio_driver);
+type_register_static(&audio_alsa_info);
}
type_init(register_audio_alsa);
+module_obj(TYPE_AUDIO_ALSA);
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
index 71b2a6c2cf..f0b17be6e8 100644
--- a/audio/dbusaudio.c
+++ b/audio/dbusaudio.c
@@ -26,6 +26,7 @@
#include "qemu/error-report.h"
#include "qemu/module.h"
#include "qemu/dbus.h"
+#include "qom/object.h"
#ifdef G_OS_UNIX
#include
@@ -44,6 +45,30 @@
#define DBUS_DEFAULT_AUDIO_NSAMPLES 480
+#define TYPE_AUDIO_DBUS "audio-dbus"
+OBJECT_DECLARE_TYPE(AudioDbus, AudioDriverClass, AUDIO_DBUS)
+
+struct AudioDbus {
+AudioDriver parent;
+};
+
+static struct audio_driver dbus_audio_driver;
+
+static void audio_dbus_class_init(ObjectClass *klass, const void *data)
+{
+AudioDriverClass *k = AUDIO_DRIVER_CLASS(klass);
+
+k->driver = &dbus_audio_driver;
+}
+
+static void audio_dbus_init(Object *obj)
+{
+}
+
+static void audio_dbus_finalize(Object *obj)
+{
+}
+
typedef struct DBusAudio {
Audiodev *dev;
GDBusObjectManagerServer *server;
@@ -711,10 +736,21 @@ static struct audio_driver dbus_audio_driver = {
.voice_size_in = sizeof(DBusVoiceIn)
};
+static const TypeInfo audio_dbus_info = {
+.name = TYPE_AUDIO_DBUS,
+.parent = TYPE_AUDIO_DRIVER,
+.instance_size = sizeof(AudioDbus),
+.instance_init = audio_dbus_init,
+.instance_finalize = audio_dbus_finalize,
+.class_init = audio_dbus_class_init,
+};
+
static void register_audio_dbus(void)
{
audio_driver_register(&dbus_audio_driver);
+type_register_static(&audio_dbus_info);
}
type_init(register_audio_dbus);
module_dep("ui-dbus")
+module_obj(TYPE_AUDIO_DBUS)
diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c
index 7a03d1dad8..341df9e6d8 100644
--- a/audio/dsoundaudio.c
+++ b/audio/dsoundaudio.c
@@ -33,6 +33,7 @@
#include "audio_int.h"
#include "qemu/module.h"
#include "qapi/error.h"
+#include "qom/object.h"
#include
#include
@@ -41,6 +42,30 @@
#include "audio_win_int.h"
+#define TYPE_AUDIO_DSOUND "audio-dsound"
+OBJECT_DECLARE_TYPE(AudioDsound, AudioDriverClass, AUDIO_DSOUND)
+
+struct AudioDsound {
+AudioDriver parent;
+};
+
+static struct audio_driver dsound_audio_driver;
+
+static void audio_dsound_class_init(ObjectClass *kla