audio/dbus: use a helper function to set the backend dbus server
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
9628ad8a6e
commit
2d18978b7f
5 changed files with 38 additions and 10 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue