diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2025-01-24 17:29:24 +0400 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2025-02-03 21:16:07 +0400 |
commit | 19c628f2f579f2702dd13192b7c2de6bc8d665ce (patch) | |
tree | 28c172bdeb5f256d76cc134533c2690983ad9939 | |
parent | c0fb8e88cbbfc140800e614586b446193a3fd93a (diff) | |
download | qemu-19c628f2f579f2702dd13192b7c2de6bc8d665ce.zip qemu-19c628f2f579f2702dd13192b7c2de6bc8d665ce.tar.gz qemu-19c628f2f579f2702dd13192b7c2de6bc8d665ce.tar.bz2 |
dbus: add -audio dbus nsamples option
Allow to set the number of audio samples per read/write to dbus.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
-rw-r--r-- | audio/dbusaudio.c | 21 | ||||
-rw-r--r-- | qapi/audio.json | 22 | ||||
-rw-r--r-- | ui/dbus-display1.xml | 12 |
3 files changed, 51 insertions, 4 deletions
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c index af77e7c..b44fdd1 100644 --- a/audio/dbusaudio.c +++ b/audio/dbusaudio.c @@ -43,9 +43,10 @@ #define DBUS_DISPLAY1_AUDIO_PATH DBUS_DISPLAY1_ROOT "/Audio" -#define DBUS_AUDIO_NSAMPLES 1024 /* could be configured? */ +#define DBUS_DEFAULT_AUDIO_NSAMPLES 480 typedef struct DBusAudio { + Audiodev *dev; GDBusObjectManagerServer *server; bool p2p; GDBusObjectSkeleton *audio; @@ -151,6 +152,18 @@ dbus_init_out_listener(QemuDBusDisplay1AudioOutListener *listener, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); } +static guint +dbus_audio_get_nsamples(DBusAudio *da) +{ + AudiodevDBusOptions *opts = &da->dev->u.dbus; + + if (opts->has_nsamples && opts->nsamples) { + return opts->nsamples; + } else { + return DBUS_DEFAULT_AUDIO_NSAMPLES; + } +} + static int dbus_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque) { @@ -160,7 +173,7 @@ dbus_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque) QemuDBusDisplay1AudioOutListener *listener = NULL; audio_pcm_init_info(&hw->info, as); - hw->samples = DBUS_AUDIO_NSAMPLES; + hw->samples = dbus_audio_get_nsamples(da); audio_rate_start(&vo->rate); g_hash_table_iter_init(&iter, da->out_listeners); @@ -274,7 +287,7 @@ dbus_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque) QemuDBusDisplay1AudioInListener *listener = NULL; audio_pcm_init_info(&hw->info, as); - hw->samples = DBUS_AUDIO_NSAMPLES; + hw->samples = dbus_audio_get_nsamples(da); audio_rate_start(&vo->rate); g_hash_table_iter_init(&iter, da->in_listeners); @@ -399,6 +412,7 @@ dbus_audio_init(Audiodev *dev, Error **errp) { DBusAudio *da = g_new0(DBusAudio, 1); + da->dev = dev; da->out_listeners = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref); da->in_listeners = g_hash_table_new_full(g_str_hash, g_str_equal, @@ -652,6 +666,7 @@ dbus_audio_set_server(AudioState *s, GDBusObjectManagerServer *server, bool p2p) "swapped-signal::handle-register-out-listener", dbus_audio_register_out_listener, s, NULL); + qemu_dbus_display1_audio_set_nsamples(da->iface, dbus_audio_get_nsamples(da)); g_dbus_object_skeleton_add_interface(G_DBUS_OBJECT_SKELETON(da->audio), G_DBUS_INTERFACE_SKELETON(da->iface)); diff --git a/qapi/audio.json b/qapi/audio.json index 519697c..dd5a58d 100644 --- a/qapi/audio.json +++ b/qapi/audio.json @@ -66,6 +66,26 @@ '*out': 'AudiodevPerDirectionOptions' } } ## +# @AudiodevDBusOptions: +# +# Options of the D-Bus audio backend. +# +# @in: options of the capture stream +# +# @out: options of the playback stream +# +# @nsamples: set the number of samples per read/write calls (default to 480, +# 10ms at 48kHz). +# +# Since: 10.0 +## +{ 'struct': 'AudiodevDBusOptions', + 'data': { + '*in': 'AudiodevPerDirectionOptions', + '*out': 'AudiodevPerDirectionOptions', + '*nsamples': 'uint32'} } + +## # @AudiodevAlsaPerDirectionOptions: # # Options of the ALSA backend that are used for both playback and @@ -490,7 +510,7 @@ 'if': 'CONFIG_AUDIO_ALSA' }, 'coreaudio': { 'type': 'AudiodevCoreaudioOptions', 'if': 'CONFIG_AUDIO_COREAUDIO' }, - 'dbus': { 'type': 'AudiodevGenericOptions', + 'dbus': { 'type': 'AudiodevDBusOptions', 'if': 'CONFIG_DBUS_DISPLAY' }, 'dsound': { 'type': 'AudiodevDsoundOptions', 'if': 'CONFIG_AUDIO_DSOUND' }, diff --git a/ui/dbus-display1.xml b/ui/dbus-display1.xml index d702253..72deefa 100644 --- a/ui/dbus-display1.xml +++ b/ui/dbus-display1.xml @@ -774,6 +774,18 @@ </method> <!-- + NSamples: + + The number of samples per read/write frames. (for example the default is + 480, or 10ms at 48kHz) + + (earlier version of the display interface do not provide this property) + --> + <property name="NSamples" type="u" access="read"> + <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> + </property> + + <!-- Interfaces: This property lists extra interfaces provided by the |