diff options
author | Martin Schrodt <martin@schrodt.org> | 2019-03-15 09:46:52 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2019-03-18 12:21:15 +0100 |
commit | f6142777659f2e7ad143f2850f1f036f899f475f (patch) | |
tree | cded3595db62bb7213492afb1e7e50fd82e8f184 | |
parent | baea032ec751306805214190b1ac23f409e9739a (diff) |
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.c | 12 | ||||
-rw-r--r-- | qapi/audio.json | 6 |
2 files changed, 11 insertions, 7 deletions
diff --git a/audio/paaudio.c b/audio/paaudio.c index ab2a37bbdb..be27c73f09 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 97aee37288..9fefdf5186 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: |