From: Christian Schoenebeck <qemu_oss@crudebyte.com>
To: "Volker Rümelin" <vr_qemu@t-online.de>
Cc: Gerd Hoffmann <kraxel@redhat.com>,
qemu-devel@nongnu.org, Thomas Huth <huth@tuxfamily.org>
Subject: Re: [PATCH 00/15] reduce audio playback latency
Date: Sun, 09 Jan 2022 15:17:51 +0100 [thread overview]
Message-ID: <1981711.luYxhZlUWu@silver> (raw)
In-Reply-To: <cfcae86f-59c3-a2c5-76cd-1ab5e23e20f3@t-online.de>
On Donnerstag, 6. Januar 2022 10:21:47 CET Volker Rümelin wrote:
> This patch series reduces the playback latency for audio backends,
> in some cases significantly. For PulseAudio, the audio buffer is
> also moved from the QEMU side to the PulseAudio server side. This
> improves the drop-out safety for PulseAudio.
>
> I actually measured the latency reduction with the PulseAudio
> backend. For the test I used my Linux host configured to play
> audio with PulseAudio. The guest was a Linux guest, also
> configured to use PulseAudio.
I haven't reviewed all the patches yet, but from what I read so far, does that
mean the additional 3rd buffer is solely for PulseAudio, so for JACK and other
backends these changes would overall be a degradation, wouldn't they?
> Measuring audio latencies is difficult. I played a sine tone in
> the guest with Audacity and measured the time from releasing the
> left mouse button until the tone can be heard. A few seconds
> before the measurement I started playback of an audio file with
> 10 minutes of silence to fill the audio buffers. The over-all
> latency can't be used to estimate the playback latency, but it
> can be used to calculate the playback latency reduction.
>
> The measured over-all latency with PulseAudio is around 200ms
> without these patches and around 135ms with these patches. The
> difference of 65ms agrees well with the expected value of
> 46.4ms * 2 + 15ms - 46.4ms = 61.4ms. 46.4ms * 2 is the size of
> the mixing-engine buffer ("[PATCH 14/15] paaudio: fix samples vs.
> frames mix-up" explains the factor 2), 15ms is the server side
> PulseAudio buffer size used before these patches and 46.4ms is
> the new server side PulseAudio buffer size.
>
> Volker Rümelin (15):
> audio: replace open-coded buffer arithmetic
> audio: move function audio_pcm_hw_clip_out()
> audio: add function audio_pcm_hw_conv_in()
> audio: inline function audio_pcm_sw_get_rpos_in()
> paaudio: increase default latency to 46ms
> jackaudio: use more jack audio buffers
> audio: copy playback stream in sequential order
> audio: add pcm_ops function table for capture backend
> audio: revert tests for pcm_ops table
> audio: restore mixing-engine playback buffer size
> paaudio: reduce effective playback buffer size
> dsoundaudio: reduce effective playback buffer size
> ossaudio: reduce effective playback buffer size
> paaudio: fix samples vs. frames mix-up
> sdlaudio: fix samples vs. frames mix-up
>
> audio/alsaaudio.c | 1 +
> audio/audio.c | 194 ++++++++++++++++++++++++--------------------
> audio/audio_int.h | 9 +-
> audio/coreaudio.c | 13 +--
> audio/dsoundaudio.c | 30 ++++---
> audio/jackaudio.c | 5 +-
> audio/noaudio.c | 1 +
> audio/ossaudio.c | 17 +++-
> audio/paaudio.c | 49 ++++++-----
> audio/sdlaudio.c | 21 +++--
> audio/wavaudio.c | 1 +
> 11 files changed, 199 insertions(+), 142 deletions(-)
next prev parent reply other threads:[~2022-01-09 14:19 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-06 9:21 [PATCH 00/15] reduce audio playback latency Volker Rümelin
2022-01-06 9:23 ` [PATCH 01/15] audio: replace open-coded buffer arithmetic Volker Rümelin
2022-01-06 10:18 ` Thomas Huth
2022-01-07 12:10 ` Volker Rümelin
2022-01-06 9:23 ` [PATCH 02/15] audio: move function audio_pcm_hw_clip_out() Volker Rümelin
2022-01-07 13:30 ` Philippe Mathieu-Daudé
2022-01-06 9:23 ` [PATCH 03/15] audio: add function audio_pcm_hw_conv_in() Volker Rümelin
2022-01-06 9:23 ` [PATCH 04/15] audio: inline function audio_pcm_sw_get_rpos_in() Volker Rümelin
2022-01-06 9:23 ` [PATCH 05/15] paaudio: increase default latency to 46ms Volker Rümelin
2022-01-06 9:23 ` [PATCH 06/15] jackaudio: use more jack audio buffers Volker Rümelin
2022-01-06 9:23 ` [PATCH 07/15] audio: copy playback stream in sequential order Volker Rümelin
2022-01-06 9:23 ` [PATCH 08/15] audio: add pcm_ops function table for capture backend Volker Rümelin
2022-01-06 9:23 ` [PATCH 09/15] audio: revert tests for pcm_ops table Volker Rümelin
2022-01-13 9:43 ` Gerd Hoffmann
2022-01-06 9:23 ` [PATCH 10/15] audio: restore mixing-engine playback buffer size Volker Rümelin
2022-01-06 9:23 ` [PATCH 11/15] paaudio: reduce effective " Volker Rümelin
2022-01-06 9:23 ` [PATCH 12/15] dsoundaudio: " Volker Rümelin
2022-01-06 9:23 ` [PATCH 13/15] ossaudio: " Volker Rümelin
2022-01-07 13:42 ` Philippe Mathieu-Daudé
2022-01-06 9:23 ` [PATCH 14/15] paaudio: fix samples vs. frames mix-up Volker Rümelin
2022-01-06 9:23 ` [PATCH 15/15] sdlaudio: " Volker Rümelin
2022-01-06 9:48 ` [PATCH 00/15] reduce audio playback latency Volker Rümelin
2022-01-09 14:17 ` Christian Schoenebeck [this message]
2022-01-09 17:06 ` Volker Rümelin
2022-01-10 13:11 ` Christian Schoenebeck
2022-01-10 21:50 ` Volker Rümelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1981711.luYxhZlUWu@silver \
--to=qemu_oss@crudebyte.com \
--cc=huth@tuxfamily.org \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=vr_qemu@t-online.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.