From: Marc-André Lureau <marcandre.lureau@redhat.com>
Move all fields from audio_driver directly into AudioMixengBackendClass,
eliminating an unnecessary extra struct. Drivers now set class
fields directly in class_init instead of creating a static audio_driver
instance.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio_int.h | 18 +++++--------
audio/audio_template.h | 58 +++++++++++++++++++----------------------
audio/alsaaudio.c | 17 +++++-------
audio/audio-mixeng-be.c | 20 +++++++-------
audio/dbusaudio.c | 17 +++++-------
audio/dsoundaudio.c | 17 +++++-------
audio/jackaudio.c | 17 +++++-------
audio/noaudio.c | 28 ++++++++------------
audio/ossaudio.c | 17 +++++-------
audio/paaudio.c | 17 +++++-------
audio/pwaudio.c | 17 +++++-------
audio/sdlaudio.c | 17 +++++-------
audio/sndioaudio.c | 27 ++++++++-----------
audio/spiceaudio.c | 36 +++++++++++--------------
audio/wavaudio.c | 28 ++++++++------------
audio/coreaudio.m | 28 ++++++++------------
16 files changed, 149 insertions(+), 230 deletions(-)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index fb5a9dd871e..bd9c7a29e41 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -136,16 +136,6 @@ struct SWVoiceIn {
QLIST_ENTRY (SWVoiceIn) entries;
};
-typedef struct audio_driver audio_driver;
-struct audio_driver {
- const char *name;
- struct audio_pcm_ops *pcm_ops;
- int max_voices_out;
- int max_voices_in;
- size_t voice_size_out;
- size_t voice_size_in;
-};
-
struct audio_pcm_ops {
int (*init_out)(HWVoiceOut *hw, audsettings *as);
void (*fini_out)(HWVoiceOut *hw);
@@ -229,13 +219,17 @@ struct SWVoiceCap {
struct AudioMixengBackendClass {
AudioBackendClass parent_class;
- audio_driver *driver;
+ const char *name;
+ struct audio_pcm_ops *pcm_ops;
+ int max_voices_out;
+ int max_voices_in;
+ size_t voice_size_out;
+ size_t voice_size_in;
};
struct AudioMixengBackend {
AudioBackend parent_obj;
- struct audio_driver *drv;
Audiodev *dev;
QEMUTimer *ts;
diff --git a/audio/audio_template.h b/audio/audio_template.h
index 6c2d2ad5dca..7187571c668 100644
--- a/audio/audio_template.h
+++ b/audio/audio_template.h
@@ -37,41 +37,42 @@
#endif
static void glue(audio_init_nb_voices_, TYPE)(AudioMixengBackend *s,
- struct audio_driver *drv, int min_voices)
+ AudioMixengBackendClass *k,
+ int min_voices)
{
- int max_voices = glue (drv->max_voices_, TYPE);
- size_t voice_size = glue(drv->voice_size_, TYPE);
+ int max_voices = glue(k->max_voices_, TYPE);
+ size_t voice_size = glue(k->voice_size_, TYPE);
- glue (s->nb_hw_voices_, TYPE) = glue(audio_get_pdo_, TYPE)(s->dev)->voices;
- if (glue (s->nb_hw_voices_, TYPE) > max_voices) {
+ glue(s->nb_hw_voices_, TYPE) = glue(audio_get_pdo_, TYPE)(s->dev)->voices;
+ if (glue(s->nb_hw_voices_, TYPE) > max_voices) {
if (!max_voices) {
#ifdef DAC
- dolog ("Driver `%s' does not support " NAME "\n", drv->name);
+ dolog("Driver `%s' does not support " NAME "\n", k->name);
#endif
} else {
- dolog ("Driver `%s' does not support %d " NAME " voices, max %d\n",
- drv->name,
- glue (s->nb_hw_voices_, TYPE),
+ dolog("Driver `%s' does not support %d " NAME " voices, max %d\n",
+ k->name,
+ glue(s->nb_hw_voices_, TYPE),
max_voices);
}
- glue (s->nb_hw_voices_, TYPE) = max_voices;
+ glue(s->nb_hw_voices_, TYPE) = max_voices;
}
- if (glue (s->nb_hw_voices_, TYPE) < min_voices) {
- dolog ("Bogus number of " NAME " voices %d, setting to %d\n",
- glue (s->nb_hw_voices_, TYPE),
+ if (glue(s->nb_hw_voices_, TYPE) < min_voices) {
+ dolog("Bogus number of " NAME " voices %d, setting to %d\n",
+ glue(s->nb_hw_voices_, TYPE),
min_voices);
}
if (audio_bug(__func__, !voice_size && max_voices)) {
- dolog ("drv=`%s' voice_size=0 max_voices=%d\n",
- drv->name, max_voices);
- glue (s->nb_hw_voices_, TYPE) = 0;
+ dolog("drv=`%s' voice_size=0 max_voices=%d\n",
+ k->name, max_voices);
+ glue(s->nb_hw_voices_, TYPE) = 0;
}
if (audio_bug(__func__, voice_size && !max_voices)) {
dolog("drv=`%s' voice_size=%zu max_voices=0\n",
- drv->name, voice_size);
+ k->name, voice_size);
}
}
@@ -267,29 +268,24 @@ static HW *glue(audio_pcm_hw_add_new_, TYPE)(AudioMixengBackend *s,
struct audsettings *as)
{
HW *hw;
- struct audio_driver *drv = s->drv;
+ AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_GET_CLASS(s);
- if (!glue (s->nb_hw_voices_, TYPE)) {
+ if (!glue(s->nb_hw_voices_, TYPE)) {
return NULL;
}
- if (audio_bug(__func__, !drv)) {
- dolog ("No host audio driver\n");
- return NULL;
- }
-
- if (audio_bug(__func__, !drv->pcm_ops)) {
- dolog ("Host audio driver without pcm_ops\n");
+ if (audio_bug(__func__, !k->pcm_ops)) {
+ dolog("No host audio driver or missing pcm_ops\n");
return NULL;
}
/*
- * Since glue(s->nb_hw_voices_, TYPE) is != 0, glue(drv->voice_size_, TYPE)
+ * Since glue(s->nb_hw_voices_, TYPE) is != 0, glue(k->voice_size_, TYPE)
* is guaranteed to be != 0. See the audio_init_nb_voices_* functions.
*/
- hw = g_malloc0(glue(drv->voice_size_, TYPE));
+ hw = g_malloc0(glue(k->voice_size_, TYPE));
hw->s = AUDIO_MIXENG_BACKEND(object_ref(s));
- hw->pcm_ops = drv->pcm_ops;
+ hw->pcm_ops = k->pcm_ops;
QLIST_INIT (&hw->sw_head);
#ifdef DAC
@@ -517,8 +513,8 @@ static SW *glue(audio_mixeng_backend_open_, TYPE) (
goto fail;
}
- if (audio_bug(__func__, !s->drv)) {
- dolog ("Can not open `%s' (no host audio driver)\n", name);
+ if (audio_bug(__func__, !AUDIO_MIXENG_BACKEND_GET_CLASS(s)->pcm_ops)) {
+ dolog("Can not open `%s' (no host audio driver)\n", name);
goto fail;
}
diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index 0bb2ab5c462..a49da32cc4e 100644
--- a/audio/alsaaudio.c
+++ b/audio/alsaaudio.c
@@ -46,7 +46,6 @@ struct AudioALSA {
AudioMixengBackend parent;
};
-static struct audio_driver alsa_audio_driver;
struct pollhlp {
snd_pcm_t *handle;
@@ -938,15 +937,6 @@ static struct audio_pcm_ops alsa_pcm_ops = {
.enable_in = alsa_enable_in,
};
-static struct audio_driver alsa_audio_driver = {
- .name = "alsa",
- .pcm_ops = &alsa_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof (ALSAVoiceOut),
- .voice_size_in = sizeof (ALSAVoiceIn)
-};
-
static void audio_alsa_class_init(ObjectClass *klass, const void *data)
{
AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
@@ -955,7 +945,12 @@ static void audio_alsa_class_init(ObjectClass *klass, const void *data)
audio_alsa_parent_class = AUDIO_BACKEND_CLASS(object_class_get_parent(klass));
b->realize = audio_alsa_realize;
- k->driver = &alsa_audio_driver;
+ k->name = "alsa";
+ k->pcm_ops = &alsa_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(ALSAVoiceOut);
+ k->voice_size_in = sizeof(ALSAVoiceIn);
}
static const TypeInfo audio_alsa_info = {
diff --git a/audio/audio-mixeng-be.c b/audio/audio-mixeng-be.c
index 8024ca6bf9f..9d16fb5e654 100644
--- a/audio/audio-mixeng-be.c
+++ b/audio/audio-mixeng-be.c
@@ -1518,21 +1518,20 @@ static bool audio_mixeng_backend_realize(AudioBackend *abe,
Audiodev *dev, Error **errp)
{
AudioMixengBackend *be = AUDIO_MIXENG_BACKEND(abe);
- audio_driver *drv = AUDIO_MIXENG_BACKEND_GET_CLASS(be)->driver;
+ AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_GET_CLASS(be);
be->dev = dev;
- if (!drv->pcm_ops->get_buffer_in) {
- drv->pcm_ops->get_buffer_in = audio_generic_get_buffer_in;
- drv->pcm_ops->put_buffer_in = audio_generic_put_buffer_in;
+ if (!k->pcm_ops->get_buffer_in) {
+ k->pcm_ops->get_buffer_in = audio_generic_get_buffer_in;
+ k->pcm_ops->put_buffer_in = audio_generic_put_buffer_in;
}
- if (!drv->pcm_ops->get_buffer_out) {
- drv->pcm_ops->get_buffer_out = audio_generic_get_buffer_out;
- drv->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
+ if (!k->pcm_ops->get_buffer_out) {
+ k->pcm_ops->get_buffer_out = audio_generic_get_buffer_out;
+ k->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
}
- audio_init_nb_voices_out(be, drv, 1);
- audio_init_nb_voices_in(be, drv, 0);
- be->drv = drv;
+ audio_init_nb_voices_out(be, k, 1);
+ audio_init_nb_voices_in(be, k, 0);
if (be->dev->timer_period <= 0) {
be->period_ticks = 1;
@@ -1658,7 +1657,6 @@ static void audio_mixeng_backend_finalize(Object *obj)
QLIST_REMOVE(hwi, entries);
}
- s->drv = NULL;
if (s->dev) {
qapi_free_Audiodev(s->dev);
s->dev = NULL;
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
index a69baad4aec..d78d5799952 100644
--- a/audio/dbusaudio.c
+++ b/audio/dbusaudio.c
@@ -61,7 +61,6 @@ struct AudioDbus {
GHashTable *in_listeners;
};
-static struct audio_driver dbus_audio_driver;
typedef struct DBusVoiceOut {
HWVoiceOut hw;
@@ -709,15 +708,6 @@ static struct audio_pcm_ops dbus_pcm_ops = {
.volume_in = dbus_volume_in,
};
-static struct audio_driver dbus_audio_driver = {
- .name = "dbus",
- .pcm_ops = &dbus_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof(DBusVoiceOut),
- .voice_size_in = sizeof(DBusVoiceIn)
-};
-
static void audio_dbus_class_init(ObjectClass *klass, const void *data)
{
AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
@@ -727,7 +717,12 @@ static void audio_dbus_class_init(ObjectClass *klass, const void *data)
b->realize = audio_dbus_realize;
b->set_dbus_server = dbus_audio_set_server;
- k->driver = &dbus_audio_driver;
+ k->name = "dbus";
+ k->pcm_ops = &dbus_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(DBusVoiceOut);
+ k->voice_size_in = sizeof(DBusVoiceIn);
}
static const TypeInfo audio_dbus_info = {
diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c
index 4ecf2ade003..b8bc6c8c7be 100644
--- a/audio/dsoundaudio.c
+++ b/audio/dsoundaudio.c
@@ -55,7 +55,6 @@ struct AudioDsound {
struct audsettings settings;
};
-static struct audio_driver dsound_audio_driver;
/* #define DEBUG_DSOUND */
@@ -685,15 +684,6 @@ static struct audio_pcm_ops dsound_pcm_ops = {
.enable_in = dsound_enable_in,
};
-static struct audio_driver dsound_audio_driver = {
- .name = "dsound",
- .pcm_ops = &dsound_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = 1,
- .voice_size_out = sizeof (DSoundVoiceOut),
- .voice_size_in = sizeof (DSoundVoiceIn)
-};
-
static void audio_dsound_class_init(ObjectClass *klass, const void *data)
{
AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
@@ -702,7 +692,12 @@ static void audio_dsound_class_init(ObjectClass *klass, const void *data)
audio_dsound_parent_class = AUDIO_BACKEND_CLASS(object_class_get_parent(klass));
b->realize = audio_dsound_realize;
- k->driver = &dsound_audio_driver;
+ k->name = "dsound";
+ k->pcm_ops = &dsound_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = 1;
+ k->voice_size_out = sizeof(DSoundVoiceOut);
+ k->voice_size_in = sizeof(DSoundVoiceIn);
}
static const TypeInfo audio_dsound_info = {
diff --git a/audio/jackaudio.c b/audio/jackaudio.c
index 650ec230846..e69b313afe5 100644
--- a/audio/jackaudio.c
+++ b/audio/jackaudio.c
@@ -42,7 +42,6 @@ struct AudioJack {
AudioMixengBackend parent;
};
-static struct audio_driver jack_driver;
struct QJack;
@@ -668,15 +667,6 @@ static struct audio_pcm_ops jack_pcm_ops = {
.enable_in = qjack_enable_in
};
-static struct audio_driver jack_driver = {
- .name = "jack",
- .pcm_ops = &jack_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof(QJackOut),
- .voice_size_in = sizeof(QJackIn)
-};
-
static void qjack_error(const char *msg)
{
dolog("E: %s\n", msg);
@@ -691,7 +681,12 @@ static void audio_jack_class_init(ObjectClass *klass, const void *data)
{
AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
- k->driver = &jack_driver;
+ k->name = "jack";
+ k->pcm_ops = &jack_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(QJackOut);
+ k->voice_size_in = sizeof(QJackIn);
}
static const TypeInfo audio_jack_info = {
diff --git a/audio/noaudio.c b/audio/noaudio.c
index 5c721ed69d0..d1fba117133 100644
--- a/audio/noaudio.c
+++ b/audio/noaudio.c
@@ -37,15 +37,6 @@ struct AudioNone {
AudioMixengBackend parent;
};
-static struct audio_driver no_audio_driver;
-
-static void audio_none_class_init(ObjectClass *klass, const void *data)
-{
- AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
-
- k->driver = &no_audio_driver;
-}
-
typedef struct NoVoiceOut {
HWVoiceOut hw;
RateCtl rate;
@@ -134,14 +125,17 @@ static struct audio_pcm_ops no_pcm_ops = {
.enable_in = no_enable_in
};
-static struct audio_driver no_audio_driver = {
- .name = "none",
- .pcm_ops = &no_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof (NoVoiceOut),
- .voice_size_in = sizeof (NoVoiceIn)
-};
+static void audio_none_class_init(ObjectClass *klass, const void *data)
+{
+ AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
+
+ k->name = "none";
+ k->pcm_ops = &no_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(NoVoiceOut);
+ k->voice_size_in = sizeof(NoVoiceIn);
+}
static const TypeInfo audio_none_info = {
.name = TYPE_AUDIO_NONE,
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index a4ee6ee3327..15fdf54eb3e 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -46,7 +46,6 @@ struct AudioOss {
AudioMixengBackend parent;
};
-static struct audio_driver oss_audio_driver;
#if defined OSS_GETVERSION && defined SNDCTL_DSP_POLICY
#define USE_DSP_POLICY
@@ -773,15 +772,6 @@ static struct audio_pcm_ops oss_pcm_ops = {
.enable_in = oss_enable_in
};
-static struct audio_driver oss_audio_driver = {
- .name = "oss",
- .pcm_ops = &oss_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof (OSSVoiceOut),
- .voice_size_in = sizeof (OSSVoiceIn)
-};
-
static void audio_oss_class_init(ObjectClass *klass, const void *data)
{
AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
@@ -790,7 +780,12 @@ static void audio_oss_class_init(ObjectClass *klass, const void *data)
audio_oss_parent_class = AUDIO_BACKEND_CLASS(object_class_get_parent(klass));
b->realize = audio_oss_realize;
- k->driver = &oss_audio_driver;
+ k->name = "oss";
+ k->pcm_ops = &oss_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(OSSVoiceOut);
+ k->voice_size_in = sizeof(OSSVoiceIn);
}
static const TypeInfo audio_oss_info = {
diff --git a/audio/paaudio.c b/audio/paaudio.c
index 4d77f341b5f..056158755c6 100644
--- a/audio/paaudio.c
+++ b/audio/paaudio.c
@@ -16,7 +16,6 @@ OBJECT_DECLARE_SIMPLE_TYPE(AudioPa, AUDIO_PA)
static AudioBackendClass *audio_pa_parent_class;
-static struct audio_driver pa_audio_driver;
typedef struct PAConnection {
char *server;
@@ -931,15 +930,6 @@ static struct audio_pcm_ops qpa_pcm_ops = {
.volume_in = qpa_volume_in
};
-static struct audio_driver pa_audio_driver = {
- .name = "pa",
- .pcm_ops = &qpa_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof (PAVoiceOut),
- .voice_size_in = sizeof (PAVoiceIn),
-};
-
static void audio_pa_class_init(ObjectClass *klass, const void *data)
{
AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
@@ -948,7 +938,12 @@ static void audio_pa_class_init(ObjectClass *klass, const void *data)
audio_pa_parent_class = AUDIO_BACKEND_CLASS(object_class_get_parent(klass));
b->realize = audio_pa_realize;
- k->driver = &pa_audio_driver;
+ k->name = "pa";
+ k->pcm_ops = &qpa_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(PAVoiceOut);
+ k->voice_size_in = sizeof(PAVoiceIn);
}
static const TypeInfo audio_pa_info = {
diff --git a/audio/pwaudio.c b/audio/pwaudio.c
index c1cc945e659..7cadf7121bb 100644
--- a/audio/pwaudio.c
+++ b/audio/pwaudio.c
@@ -44,7 +44,6 @@ struct AudioPw {
int last_seq, pending_seq, error;
};
-static struct audio_driver pw_audio_driver;
typedef struct pwvolume {
uint32_t channels;
@@ -840,15 +839,6 @@ static struct audio_pcm_ops qpw_pcm_ops = {
.enable_in = qpw_enable_in
};
-static struct audio_driver pw_audio_driver = {
- .name = "pipewire",
- .pcm_ops = &qpw_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof(PWVoiceOut),
- .voice_size_in = sizeof(PWVoiceIn),
-};
-
static void audio_pw_class_init(ObjectClass *klass, const void *data)
{
AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
@@ -857,7 +847,12 @@ static void audio_pw_class_init(ObjectClass *klass, const void *data)
audio_pw_parent_class = AUDIO_BACKEND_CLASS(object_class_get_parent(klass));
b->realize = audio_pw_realize;
- k->driver = &pw_audio_driver;
+ k->name = "pipewire";
+ k->pcm_ops = &qpw_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(PWVoiceOut);
+ k->voice_size_in = sizeof(PWVoiceIn);
}
static const TypeInfo audio_pw_info = {
diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c
index 2e9bc255a41..90867c0c11d 100644
--- a/audio/sdlaudio.c
+++ b/audio/sdlaudio.c
@@ -50,7 +50,6 @@ struct AudioSdl {
AudioMixengBackend parent;
};
-static struct audio_driver sdl_audio_driver;
typedef struct SDLVoiceOut {
HWVoiceOut hw;
@@ -492,15 +491,6 @@ static struct audio_pcm_ops sdl_pcm_ops = {
.enable_in = sdl_enable_in,
};
-static struct audio_driver sdl_audio_driver = {
- .name = "sdl",
- .pcm_ops = &sdl_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof(SDLVoiceOut),
- .voice_size_in = sizeof(SDLVoiceIn),
-};
-
static void audio_sdl_class_init(ObjectClass *klass, const void *data)
{
AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
@@ -509,7 +499,12 @@ static void audio_sdl_class_init(ObjectClass *klass, const void *data)
audio_sdl_parent_class = AUDIO_BACKEND_CLASS(object_class_get_parent(klass));
b->realize = audio_sdl_realize;
- k->driver = &sdl_audio_driver;
+ k->name = "sdl";
+ k->pcm_ops = &sdl_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(SDLVoiceOut);
+ k->voice_size_in = sizeof(SDLVoiceIn);
}
static const TypeInfo audio_sdl_info = {
diff --git a/audio/sndioaudio.c b/audio/sndioaudio.c
index de2ee44fa0d..8be0efbc2d6 100644
--- a/audio/sndioaudio.c
+++ b/audio/sndioaudio.c
@@ -32,14 +32,6 @@ struct AudioSndio {
AudioMixengBackend parent;
};
-static struct audio_driver sndio_audio_driver;
-
-static void audio_sndio_class_init(ObjectClass *klass, const void *data)
-{
- AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
-
- k->driver = &sndio_audio_driver;
-}
/* default latency in microseconds if no option is set */
#define SNDIO_LATENCY_US 50000
@@ -551,14 +543,17 @@ static struct audio_pcm_ops sndio_pcm_ops = {
.put_buffer_in = sndio_put_buffer_in,
};
-static struct audio_driver sndio_audio_driver = {
- .name = "sndio",
- .pcm_ops = &sndio_pcm_ops,
- .max_voices_out = INT_MAX,
- .max_voices_in = INT_MAX,
- .voice_size_out = sizeof(SndioVoice),
- .voice_size_in = sizeof(SndioVoice)
-};
+static void audio_sndio_class_init(ObjectClass *klass, const void *data)
+{
+ AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
+
+ k->name = "sndio";
+ k->pcm_ops = &sndio_pcm_ops;
+ k->max_voices_out = INT_MAX;
+ k->max_voices_in = INT_MAX;
+ k->voice_size_out = sizeof(SndioVoice);
+ k->voice_size_in = sizeof(SndioVoice);
+}
static const TypeInfo audio_sndio_info = {
.name = TYPE_AUDIO_SNDIO,
diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c
index 248249cef61..4f20f7f73a9 100644
--- a/audio/spiceaudio.c
+++ b/audio/spiceaudio.c
@@ -39,8 +39,6 @@ struct AudioSpice {
AudioMixengBackend parent;
};
-static struct audio_driver spice_audio_driver;
-
static bool spice_audio_realize(AudioBackend *abe, Audiodev *dev, Error **errp)
{
if (!using_spice) {
@@ -52,17 +50,6 @@ static bool spice_audio_realize(AudioBackend *abe, Audiodev *dev, Error **errp)
return audio_spice_parent_class->realize(abe, dev, errp);
}
-static void audio_spice_class_init(ObjectClass *klass, const void *data)
-{
- AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
- AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
-
- audio_spice_parent_class = AUDIO_BACKEND_CLASS(object_class_get_parent(klass));
-
- b->realize = spice_audio_realize;
- k->driver = &spice_audio_driver;
-}
-
#if SPICE_INTERFACE_PLAYBACK_MAJOR > 1 || SPICE_INTERFACE_PLAYBACK_MINOR >= 3
#define LINE_OUT_SAMPLES (480 * 4)
#else
@@ -332,14 +319,21 @@ static struct audio_pcm_ops audio_callbacks = {
#endif
};
-static struct audio_driver spice_audio_driver = {
- .name = "spice",
- .pcm_ops = &audio_callbacks,
- .max_voices_out = 1,
- .max_voices_in = 1,
- .voice_size_out = sizeof (SpiceVoiceOut),
- .voice_size_in = sizeof (SpiceVoiceIn),
-};
+static void audio_spice_class_init(ObjectClass *klass, const void *data)
+{
+ AudioBackendClass *b = AUDIO_BACKEND_CLASS(klass);
+ AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
+
+ audio_spice_parent_class = AUDIO_BACKEND_CLASS(object_class_get_parent(klass));
+
+ b->realize = spice_audio_realize;
+ k->name = "spice";
+ k->pcm_ops = &audio_callbacks;
+ k->max_voices_out = 1;
+ k->max_voices_in = 1;
+ k->voice_size_out = sizeof(SpiceVoiceOut);
+ k->voice_size_in = sizeof(SpiceVoiceIn);
+}
static const TypeInfo audio_spice_info = {
.name = TYPE_AUDIO_SPICE,
diff --git a/audio/wavaudio.c b/audio/wavaudio.c
index 56b3122938f..57a2e686785 100644
--- a/audio/wavaudio.c
+++ b/audio/wavaudio.c
@@ -37,15 +37,6 @@ struct AudioWav {
AudioMixengBackend parent;
};
-static struct audio_driver wav_audio_driver;
-
-static void audio_wav_class_init(ObjectClass *klass, const void *data)
-{
- AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
-
- k->driver = &wav_audio_driver;
-}
-
typedef struct WAVVoiceOut {
HWVoiceOut hw;
FILE *f;
@@ -208,14 +199,17 @@ static struct audio_pcm_ops wav_pcm_ops = {
.enable_out = wav_enable_out,
};
-static struct audio_driver wav_audio_driver = {
- .name = "wav",
- .pcm_ops = &wav_pcm_ops,
- .max_voices_out = 1,
- .max_voices_in = 0,
- .voice_size_out = sizeof (WAVVoiceOut),
- .voice_size_in = 0
-};
+static void audio_wav_class_init(ObjectClass *klass, const void *data)
+{
+ AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
+
+ k->name = "wav";
+ k->pcm_ops = &wav_pcm_ops;
+ k->max_voices_out = 1;
+ k->max_voices_in = 0;
+ k->voice_size_out = sizeof(WAVVoiceOut);
+ k->voice_size_in = 0;
+}
static const TypeInfo audio_wav_info = {
.name = TYPE_AUDIO_WAV,
diff --git a/audio/coreaudio.m b/audio/coreaudio.m
index 925c68e8da4..c7602dad223 100644
--- a/audio/coreaudio.m
+++ b/audio/coreaudio.m
@@ -41,15 +41,6 @@
AudioMixengBackend parent;
};
-static struct audio_driver coreaudio_audio_driver;
-
-static void audio_coreaudio_class_init(ObjectClass *klass, const void *data)
-{
- AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
-
- k->driver = &coreaudio_audio_driver;
-}
-
typedef struct coreaudioVoiceOut {
HWVoiceOut hw;
pthread_mutex_t buf_mutex;
@@ -669,14 +660,17 @@ static void coreaudio_enable_out(HWVoiceOut *hw, bool enable)
.enable_out = coreaudio_enable_out
};
-static struct audio_driver coreaudio_audio_driver = {
- .name = "coreaudio",
- .pcm_ops = &coreaudio_pcm_ops,
- .max_voices_out = 1,
- .max_voices_in = 0,
- .voice_size_out = sizeof (coreaudioVoiceOut),
- .voice_size_in = 0
-};
+static void audio_coreaudio_class_init(ObjectClass *klass, const void *data)
+{
+ AudioMixengBackendClass *k = AUDIO_MIXENG_BACKEND_CLASS(klass);
+
+ k->name = "coreaudio";
+ k->pcm_ops = &coreaudio_pcm_ops;
+ k->max_voices_out = 1;
+ k->max_voices_in = 0;
+ k->voice_size_out = sizeof(coreaudioVoiceOut);
+ k->voice_size_in = 0;
+}
static const TypeInfo audio_coreaudio_info = {
.name = TYPE_AUDIO_COREAUDIO,
--
2.52.0