From: Marc-André Lureau Date: Mon, 27 Oct 2025 14:31:32 +0000 (+0400) Subject: audio/dbus: use a helper function to set the backend dbus server X-Git-Tag: v10.2.0-rc1~29^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2d18978b7fdd4b226fe9bef1a8df53c7dfede3a5;p=thirdparty%2Fqemu.git audio/dbus: use a helper function to set the backend dbus server Signed-off-by: Marc-André Lureau Reviewed-by: Philippe Mathieu-Daudé --- diff --git a/audio/audio.c b/audio/audio.c index d9a5695eb8..3229829bef 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -2223,6 +2223,23 @@ AudioBackend *audio_be_by_name(const char *name, Error **errp) } } +#ifdef CONFIG_GIO +bool audio_be_set_dbus_server(AudioBackend *be, + GDBusObjectManagerServer *server, + bool p2p, + Error **errp) +{ + assert(be != NULL); + + if (!be->drv->set_dbus_server) { + error_setg(errp, "Audiodev '%s' is not compatible with DBus", be->dev->id); + return false; + } + + return be->drv->set_dbus_server(be, server, p2p, errp); +} +#endif + const char *audio_be_get_id(AudioBackend *be) { if (be) { diff --git a/audio/audio.h b/audio/audio.h index 0a016bdabc..08753f621a 100644 --- a/audio/audio.h +++ b/audio/audio.h @@ -28,6 +28,9 @@ #include "qemu/queue.h" #include "qapi/qapi-types-audio.h" #include "hw/qdev-properties-system.h" +#ifdef CONFIG_GIO +#include "gio/gio.h" +#endif typedef void (*audio_callback_fn) (void *opaque, int avail); @@ -162,6 +165,12 @@ void audio_help(void); AudioBackend *audio_be_by_name(const char *name, Error **errp); AudioBackend *audio_get_default_audio_be(Error **errp); const char *audio_be_get_id(AudioBackend *be); +#ifdef CONFIG_GIO +bool audio_be_set_dbus_server(AudioBackend *be, + GDBusObjectManagerServer *server, + bool p2p, + Error **errp); +#endif #define DEFINE_AUDIO_PROPERTIES(_s, _f) \ DEFINE_PROP_AUDIODEV("audiodev", _s, _f) diff --git a/audio/audio_int.h b/audio/audio_int.h index c4453b3a29..d66f7aac32 100644 --- a/audio/audio_int.h +++ b/audio/audio_int.h @@ -148,7 +148,10 @@ struct audio_driver { void *(*init) (Audiodev *, Error **); void (*fini) (void *); #ifdef CONFIG_GIO - void (*set_dbus_server)(AudioBackend *s, GDBusObjectManagerServer *manager, bool p2p); + bool (*set_dbus_server)(AudioBackend *be, + GDBusObjectManagerServer *manager, + bool p2p, + Error **errp); #endif struct audio_pcm_ops *pcm_ops; int max_voices_out; diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c index 49cef38e3e..c97c34b486 100644 --- a/audio/dbusaudio.c +++ b/audio/dbusaudio.c @@ -645,8 +645,11 @@ dbus_audio_register_in_listener(AudioBackend *s, arg_listener, false); } -static void -dbus_audio_set_server(AudioBackend *s, GDBusObjectManagerServer *server, bool p2p) +static bool +dbus_audio_set_server(AudioBackend *s, + GDBusObjectManagerServer *server, + bool p2p, + Error **errp) { DBusAudio *da = s->drv_opaque; @@ -669,6 +672,8 @@ dbus_audio_set_server(AudioBackend *s, GDBusObjectManagerServer *server, bool p2 g_dbus_object_skeleton_add_interface(G_DBUS_OBJECT_SKELETON(da->audio), G_DBUS_INTERFACE_SKELETON(da->iface)); g_dbus_object_manager_server_export(da->server, da->audio); + + return true; } static struct audio_pcm_ops dbus_pcm_ops = { diff --git a/ui/dbus.c b/ui/dbus.c index 84cff47ec7..fbe108af1e 100644 --- a/ui/dbus.c +++ b/ui/dbus.c @@ -221,15 +221,9 @@ dbus_display_complete(UserCreatable *uc, Error **errp) if (dd->audiodev && *dd->audiodev) { AudioBackend *audio_be = audio_be_by_name(dd->audiodev, errp); - if (!audio_be) { + if (!audio_be || !audio_be_set_dbus_server(audio_be, dd->server, dd->p2p, errp)) { return; } - if (!g_str_equal(audio_be->drv->name, "dbus")) { - error_setg(errp, "Audiodev '%s' is not compatible with DBus", - dd->audiodev); - return; - } - audio_be->drv->set_dbus_server(audio_be, dd->server, dd->p2p); } consoles = g_array_new(FALSE, FALSE, sizeof(guint32));