All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/15] reduce audio playback latency
@ 2022-01-22 12:52 Volker Rümelin
  2022-01-22 12:57 ` [PATCH v2 01/15] audio: replace open-coded buffer arithmetic Volker Rümelin
                   ` (14 more replies)
  0 siblings, 15 replies; 22+ messages in thread
From: Volker Rümelin @ 2022-01-22 12:52 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Thomas Huth, Christian Schoenebeck, qemu-devel,
	Philippe Mathieu-Daudé

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.

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.

For JACK users these patches don't reduce the playback latency
but improve drop-out safety. After patch "audio: restore mixing-
engine playback buffer size" the buffer size used is exactly
the same as before these patches.

v2:
[PATCH v2 01/15] audio: replace open-coded buffer arithmetic
Replaced the audio_ring_posb macro with an inline function. The
macro trick made the code quite unreadable. Compared to v1 the
generated code size stays the same.

[PATCH v2 06/15] jackaudio: use more jack audio buffers
Improved commit message.

[PATCH v2 09/15] Revert "audio: fix wavcapture segfault"
Used git revert cbaf25d1f5.

[PATCH v2 13/15] ossaudio: reduce effective playback buffer size
Improved commit message.

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
   Revert "audio: fix wavcapture segfault"
   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   |  13 ++-
  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, 203 insertions(+), 142 deletions(-)

-- 
2.31.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2022-03-01 19:01 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-22 12:52 [PATCH v2 00/15] reduce audio playback latency Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 01/15] audio: replace open-coded buffer arithmetic Volker Rümelin
2022-01-23 17:40   ` Christian Schoenebeck
2022-01-25 18:57     ` Volker Rümelin
2022-01-26  8:48       ` Gerd Hoffmann
2022-03-01 18:59         ` Volker Rümelin
2022-01-26 12:01       ` Christian Schoenebeck
2022-01-22 12:57 ` [PATCH v2 02/15] audio: move function audio_pcm_hw_clip_out() Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 03/15] audio: add function audio_pcm_hw_conv_in() Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 04/15] audio: inline function audio_pcm_sw_get_rpos_in() Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 05/15] paaudio: increase default latency to 46ms Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 06/15] jackaudio: use more jack audio buffers Volker Rümelin
2022-01-23 17:51   ` Christian Schoenebeck
2022-01-22 12:57 ` [PATCH v2 07/15] audio: copy playback stream in sequential order Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 08/15] audio: add pcm_ops function table for capture backend Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 09/15] Revert "audio: fix wavcapture segfault" Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 10/15] audio: restore mixing-engine playback buffer size Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 11/15] paaudio: reduce effective " Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 12/15] dsoundaudio: " Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 13/15] ossaudio: " Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 14/15] paaudio: fix samples vs. frames mix-up Volker Rümelin
2022-01-22 12:57 ` [PATCH v2 15/15] sdlaudio: " Volker Rümelin

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.