aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schrodt <martin@schrodt.org>2019-03-15 09:46:52 +0100
committerGerd Hoffmann <kraxel@redhat.com>2019-03-18 12:21:15 +0100
commitf6142777659f2e7ad143f2850f1f036f899f475f (patch)
treecded3595db62bb7213492afb1e7e50fd82e8f184
parentbaea032ec751306805214190b1ac23f409e9739a (diff)
downloadqemu-f6142777659f2e7ad143f2850f1f036f899f475f.zip
qemu-f6142777659f2e7ad143f2850f1f036f899f475f.tar.gz
qemu-f6142777659f2e7ad143f2850f1f036f899f475f.tar.bz2
audio/paaudio: prolong and make latency configurable
The latency of a connection to the PulseAudio server is determined by the tlength parameter. This was hardcoded to 10ms, which is a bit too tight on my machine, causing audio on host and guest to malfunction. A setting of 15ms works fine here. To allow tweaking, I also made the setting configurable via the new -audiodev config. This allows to squeeze out better timings in scenarios where the emulation allows it. I also removed setting of the minreq parameter to (seemingly arbitrary) half the latency, since it showed worse audio quality during my tests. Allowing PulseAudio to request smaller chunks helped. Signed-off-by: Martin Schrodt <martin@schrodt.org> Message-id: 20190315084653.120020-3-martin@schrodt.org Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r--audio/paaudio.c12
-rw-r--r--qapi/audio.json6
2 files changed, 11 insertions, 7 deletions
diff --git a/audio/paaudio.c b/audio/paaudio.c
index ab2a37b..be27c73 100644
--- a/audio/paaudio.c
+++ b/audio/paaudio.c
@@ -549,12 +549,8 @@ static int qpa_init_out(HWVoiceOut *hw, struct audsettings *as,
ss.channels = as->nchannels;
ss.rate = as->freq;
- /*
- * qemu audio tick runs at 100 Hz (by default), so processing
- * data chunks worth 10 ms of sound should be a good fit.
- */
- ba.tlength = pa_usec_to_bytes (10 * 1000, &ss);
- ba.minreq = pa_usec_to_bytes (5 * 1000, &ss);
+ ba.tlength = pa_usec_to_bytes(ppdo->latency, &ss);
+ ba.minreq = -1;
ba.maxlength = -1;
ba.prebuf = -1;
@@ -818,6 +814,10 @@ static int qpa_validate_per_direction_opts(Audiodev *dev,
pdo->has_buffer_length = true;
pdo->buffer_length = 46440;
}
+ if (!pdo->has_latency) {
+ pdo->has_latency = true;
+ pdo->latency = 15000;
+ }
return 1;
}
diff --git a/qapi/audio.json b/qapi/audio.json
index 97aee37..9fefdf5 100644
--- a/qapi/audio.json
+++ b/qapi/audio.json
@@ -206,12 +206,16 @@
#
# @name: name of the sink/source to use
#
+# @latency: latency you want PulseAudio to achieve in microseconds
+# (default 15000)
+#
# Since: 4.0
##
{ 'struct': 'AudiodevPaPerDirectionOptions',
'base': 'AudiodevPerDirectionOptions',
'data': {
- '*name': 'str' } }
+ '*name': 'str',
+ '*latency': 'uint32' } }
##
# @AudiodevPaOptions: