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>
This commit is contained in:
parent
c0fb8e88cb
commit
19c628f2f5
@ -43,9 +43,10 @@
|
|||||||
|
|
||||||
#define DBUS_DISPLAY1_AUDIO_PATH DBUS_DISPLAY1_ROOT "/Audio"
|
#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 {
|
typedef struct DBusAudio {
|
||||||
|
Audiodev *dev;
|
||||||
GDBusObjectManagerServer *server;
|
GDBusObjectManagerServer *server;
|
||||||
bool p2p;
|
bool p2p;
|
||||||
GDBusObjectSkeleton *audio;
|
GDBusObjectSkeleton *audio;
|
||||||
@ -151,6 +152,18 @@ dbus_init_out_listener(QemuDBusDisplay1AudioOutListener *listener,
|
|||||||
G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
|
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
|
static int
|
||||||
dbus_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque)
|
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;
|
QemuDBusDisplay1AudioOutListener *listener = NULL;
|
||||||
|
|
||||||
audio_pcm_init_info(&hw->info, as);
|
audio_pcm_init_info(&hw->info, as);
|
||||||
hw->samples = DBUS_AUDIO_NSAMPLES;
|
hw->samples = dbus_audio_get_nsamples(da);
|
||||||
audio_rate_start(&vo->rate);
|
audio_rate_start(&vo->rate);
|
||||||
|
|
||||||
g_hash_table_iter_init(&iter, da->out_listeners);
|
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;
|
QemuDBusDisplay1AudioInListener *listener = NULL;
|
||||||
|
|
||||||
audio_pcm_init_info(&hw->info, as);
|
audio_pcm_init_info(&hw->info, as);
|
||||||
hw->samples = DBUS_AUDIO_NSAMPLES;
|
hw->samples = dbus_audio_get_nsamples(da);
|
||||||
audio_rate_start(&vo->rate);
|
audio_rate_start(&vo->rate);
|
||||||
|
|
||||||
g_hash_table_iter_init(&iter, da->in_listeners);
|
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);
|
DBusAudio *da = g_new0(DBusAudio, 1);
|
||||||
|
|
||||||
|
da->dev = dev;
|
||||||
da->out_listeners = g_hash_table_new_full(g_str_hash, g_str_equal,
|
da->out_listeners = g_hash_table_new_full(g_str_hash, g_str_equal,
|
||||||
g_free, g_object_unref);
|
g_free, g_object_unref);
|
||||||
da->in_listeners = g_hash_table_new_full(g_str_hash, g_str_equal,
|
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",
|
"swapped-signal::handle-register-out-listener",
|
||||||
dbus_audio_register_out_listener, s,
|
dbus_audio_register_out_listener, s,
|
||||||
NULL);
|
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_object_skeleton_add_interface(G_DBUS_OBJECT_SKELETON(da->audio),
|
||||||
G_DBUS_INTERFACE_SKELETON(da->iface));
|
G_DBUS_INTERFACE_SKELETON(da->iface));
|
||||||
|
@ -65,6 +65,26 @@
|
|||||||
'*in': 'AudiodevPerDirectionOptions',
|
'*in': 'AudiodevPerDirectionOptions',
|
||||||
'*out': 'AudiodevPerDirectionOptions' } }
|
'*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:
|
# @AudiodevAlsaPerDirectionOptions:
|
||||||
#
|
#
|
||||||
@ -490,7 +510,7 @@
|
|||||||
'if': 'CONFIG_AUDIO_ALSA' },
|
'if': 'CONFIG_AUDIO_ALSA' },
|
||||||
'coreaudio': { 'type': 'AudiodevCoreaudioOptions',
|
'coreaudio': { 'type': 'AudiodevCoreaudioOptions',
|
||||||
'if': 'CONFIG_AUDIO_COREAUDIO' },
|
'if': 'CONFIG_AUDIO_COREAUDIO' },
|
||||||
'dbus': { 'type': 'AudiodevGenericOptions',
|
'dbus': { 'type': 'AudiodevDBusOptions',
|
||||||
'if': 'CONFIG_DBUS_DISPLAY' },
|
'if': 'CONFIG_DBUS_DISPLAY' },
|
||||||
'dsound': { 'type': 'AudiodevDsoundOptions',
|
'dsound': { 'type': 'AudiodevDsoundOptions',
|
||||||
'if': 'CONFIG_AUDIO_DSOUND' },
|
'if': 'CONFIG_AUDIO_DSOUND' },
|
||||||
|
@ -773,6 +773,18 @@
|
|||||||
<?endif?>
|
<?endif?>
|
||||||
</method>
|
</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:
|
Interfaces:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user