Commit f6142777 authored by Martin Schrodt's avatar Martin Schrodt Committed by Gerd Hoffmann
Browse files

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: default avatarMartin Schrodt <martin@schrodt.org>
Message-id: 20190315084653.120020-3-martin@schrodt.org
Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
parent baea032e
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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;
}

+5 −1
Original line number Diff line number Diff line
@@ -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: