Re: [RFC 08/24] audio: add QOM module-objects for each backend

2025-12-01 Thread Marc-André Lureau
Hi

On Mon, Dec 1, 2025 at 5:20 PM BALATON Zoltan  wrote:

> On Mon, 1 Dec 2025, [email protected] wrote:
> > 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(+)
>
> This patch is entirely QOM boiler plate... Are the empty functions really
> needed? Could this use OBJECT_DECLARE_SIMPLE_TYPE instead to cut this
> down?
>

Right, I did this patch systematically, and to provide placeholders for the
later patches. But I can now simplify it.

thanks


>
> Regards,
> BALATON Zoltan


Re: [RFC 08/24] audio: add QOM module-objects for each backend

2025-12-01 Thread BALATON Zoltan

On Mon, 1 Dec 2025, [email protected] wrote:

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(+)


This patch is entirely QOM boiler plate... Are the empty functions really 
needed? Could this use OBJECT_DECLARE_SIMPLE_TYPE instead to cut this 
down?


Regards,
BALATON Zoltan

[RFC 08/24] audio: add QOM module-objects for each backend

2025-12-01 Thread marcandre . lureau
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