On Fri, 23 Jan 2026, [email protected] wrote:
From: Marc-André Lureau <[email protected]>
This will allow to use QOM and the dynamic object module loading.
Signed-off-by: Marc-André Lureau <[email protected]>
---
audio/audio_int.h | 2 ++
audio/alsaaudio.c | 27 +++++++++++++++++++++++++++
audio/dbusaudio.c | 26 ++++++++++++++++++++++++++
audio/dsoundaudio.c | 26 ++++++++++++++++++++++++++
audio/jackaudio.c | 26 ++++++++++++++++++++++++++
audio/noaudio.c | 26 ++++++++++++++++++++++++++
audio/ossaudio.c | 26 ++++++++++++++++++++++++++
audio/paaudio.c | 26 ++++++++++++++++++++++++++
audio/pwaudio.c | 26 ++++++++++++++++++++++++++
audio/sdlaudio.c | 26 ++++++++++++++++++++++++++
audio/sndioaudio.c | 26 ++++++++++++++++++++++++++
audio/spiceaudio.c | 26 ++++++++++++++++++++++++++
audio/wavaudio.c | 26 ++++++++++++++++++++++++++
audio/coreaudio.m | 26 ++++++++++++++++++++++++++
14 files changed, 341 insertions(+)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index 06f5160e8df..29f5864be69 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -241,6 +241,8 @@ struct SWVoiceCap {
struct AudioMixengBackendClass {
AudioBackendClass parent_class;
+
+ audio_driver *driver;
};
struct AudioMixengBackend {
diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index 814820e2864..881f3d0349d 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,22 @@
#define DEBUG_ALSA 0
+#define TYPE_AUDIO_ALSA "audio-alsa"
+OBJECT_DECLARE_SIMPLE_TYPE(AudioALSA, AUDIO_ALSA)
+
+struct AudioALSA {
+ AudioMixengBackend parent;
+};
If you have nothing to put here only the parent you don't need to declare
the state struct...
+
+static struct audio_driver alsa_audio_driver;
+
+static void audio_alsa_class_init(ObjectClass *klass, const void *data)
+{
+ AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
+
+ k->driver = &alsa_audio_driver;
+}
+
struct pollhlp {
snd_pcm_t *handle;
struct pollfd *pfds;
@@ -945,8 +962,18 @@ 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_MIXENG_BACKEND,
+ .instance_size = sizeof(AudioALSA),
...and can set instance_size of the parent so I think you can drop the
struct above everywhere where no other fields are needed other than the
parent. (See e.g. via_mc97_info)
Regards,
BALATON Zoltan
+ .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);