On 27/01/2026 18:24, [email protected] wrote:
From: Marc-André Lureau <[email protected]>
Migrate the SPICE audio backend from the legacy driver init/fini
callbacks to proper QOM realize method.
The spice_audio_init() function is replaced with spice_audio_realize(),
which validates that SPICE is enabled before delegating to the parent
class realize method. The empty spice_audio_fini() is removed as no
cleanup is needed.
Signed-off-by: Marc-André Lureau <[email protected]>
---
audio/spiceaudio.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c
index db9158284ce..b72424055c0 100644
--- a/audio/spiceaudio.c
+++ b/audio/spiceaudio.c
@@ -33,16 +33,33 @@
#define TYPE_AUDIO_SPICE "audio-spice"
OBJECT_DECLARE_SIMPLE_TYPE(AudioSpice, AUDIO_SPICE)
+static AudioBackendClass *audio_spice_parent_class;
+
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) {
+ error_setg(errp, "Cannot use spice audio without -spice");
+ qapi_free_Audiodev(dev);
+ return false;
+ }
+
+ 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;
}
@@ -89,21 +106,6 @@ static const SpiceRecordInterface record_sif = {
.base.minor_version = SPICE_INTERFACE_RECORD_MINOR,
};
-static void *spice_audio_init(Audiodev *dev, Error **errp)
-{
- if (!using_spice) {
- error_setg(errp, "Cannot use spice audio without -spice");
- return NULL;
- }
-
- return &spice_audio_init;
-}
-
-static void spice_audio_fini (void *opaque)
-{
- /* nothing */
-}
-
/* playback */
static int line_out_init(HWVoiceOut *hw, struct audsettings *as,
@@ -333,8 +335,6 @@ static struct audio_pcm_ops audio_callbacks = {
static struct audio_driver spice_audio_driver = {
.name = "spice",
- .init = spice_audio_init,
- .fini = spice_audio_fini,
.pcm_ops = &audio_callbacks,
.max_voices_out = 1,
.max_voices_in = 1,
Reviewed-by: Mark Cave-Ayland <[email protected]>
ATB,
Mark.