QEMU-Devel Archive on lore.kernel.org
 help / color / Atom feed
From: "Volker Rümelin" <vr_qemu@t-online.de>
To: Gerd Hoffmann <kraxel@redhat.com>, Eric Blake <eblake@redhat.com>,
	Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, "Zoltán Kővágó" <dirty.ice.hu@gmail.com>
Subject: [PATCH 00/23] next round of audio patches
Date: Sun, 10 Jan 2021 11:01:29 +0100
Message-ID: <9315afe5-5958-c0b4-ea1e-14769511a9d5@t-online.de> (raw)

A mix of bug fixes and improvements.

Patches 01/23 - 11/23 have a few SDL fixes and add audio recording
functions to the SDL audio backend.

Patch 12/23 removes unnecessary code from audio/audio.c.

Patches 13/23 - 16/23 fix a few PulseAudio backend bugs.

Patch 17/23 shows a PulseAudio backend bug. So far I don't think I
broke any fine tuned user settings and I don't want to do it here.

Patches 18/23 - 19/23 are the first steps towards glitch free and
lower latency PulseAudio playback and recording. Currently qemu
uses incredibly large buffers in the PulseAudio backend. For
playback this just increases the playback latency but doesn't
improve dropout safety, because PulseAudio can't access this buffer
directly. With these patches it's possible to move the large qemu
buffer to the PulseAudio server side and just keep a small buffer
on the qemu side. On the PulseAudio server side PulseAudio tries
to place a part of these buffers directly on the hardware and
PulseAudio runs with a higher priority than qemu, so it has a
better chance to deliver audio data in time.

Here is an example to show how this works:
-device intel-hda -device hda-duplex,audiodev=audio0
-machine pcspk-audiodev=audio0 -audiodev pa,id=audio0,
out.buffer-length=14000,out.latency=46440,in.latency=46440

Due to a bug in the PulseAudio backend, these command line options
actually decrease the playback latency compared to current defaults.
For playback with defaults (16 bits, stereo, 44100 samples/s)
we have a 15ms server side buffer + 2 * 46.44ms qemu audio buffer
+ 23.22ms hda codec buffer = 131.1ms latency. With my example it's
46.44ms + 2 * 14ms + 23.22ms = 97.66ms latency and I guess you
won't hear any drop outs. Btw.: 14ms = 10ms timer-period + 4ms
additional playback data the hda codec can produce in timer-period
time.

Patches 20/23 - 23/23 fix small issues with DirectSound.

Volker Rümelin (23):
  sdlaudio: remove leftover SDL1.2 code
  audio: fix bit-rotted code
  sdlaudio: add -audiodev sdl,out.buffer-count option
  sdlaudio: don't start playback in init routine
  sdlaudio: always clear the sample buffer
  sdlaudio: fill remaining sample buffer with silence
  sdlaudio: replace legacy functions with modern ones
  audio: split pcm_ops function get_buffer_in
  sdlaudio: add recording functions
  audio: break generic buffer dependency on mixing-engine
  sdlaudio: enable (in|out).mixing-engine=off
  audio: remove remaining unused plive code
  paaudio: avoid to clip samples multiple times
  paaudio: wait for PA_STREAM_READY in qpa_write()
  paaudio: wait until the playback stream is ready
  paaudio: remove unneeded code
  paaudio: comment bugs in functions qpa_init_*
  paaudio: limit minreq to 75% of audio timer_rate
  paaudio: send recorded data in smaller chunks
  dsoundaudio: replace GetForegroundWindow()
  dsoundaudio: rename dsound_open()
  dsoundaudio: enable f32 audio sample format
  dsoundaudio: fix log message

 audio/alsaaudio.c       |   3 +-
 audio/audio.c           |  48 +++----
 audio/audio_int.h       |   2 +
 audio/audio_legacy.c    |   3 +-
 audio/audio_template.h  |   2 +-
 audio/audio_win_int.c   |  73 ++++++----
 audio/dsound_template.h |   2 +-
 audio/dsoundaudio.c     |   6 +-
 audio/jackaudio.c       |   1 +
 audio/noaudio.c         |   1 +
 audio/ossaudio.c        |   1 +
 audio/paaudio.c         |  71 ++++++++--
 audio/sdlaudio.c        | 305 ++++++++++++++++++++++++++++------------
 audio/spiceaudio.c      |   1 +
 qapi/audio.json         |  33 ++++-
 qemu-options.hx         |   8 +-
 16 files changed, 399 insertions(+), 161 deletions(-)

-- 
2.26.2


             reply index

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-10 10:01 Volker Rümelin [this message]
2021-01-10 10:02 ` [PATCH 01/23] sdlaudio: remove leftover SDL1.2 code Volker Rümelin
2021-01-14 15:28   ` Thomas Huth
2021-01-10 10:02 ` [PATCH 02/23] audio: fix bit-rotted code Volker Rümelin
2021-01-14 14:32   ` Gerd Hoffmann
2021-01-31 17:13     ` Volker Rümelin
2021-01-10 10:02 ` [PATCH 03/23] sdlaudio: add -audiodev sdl,out.buffer-count option Volker Rümelin
2021-01-14 14:27   ` [PATCH 03/23] sdlaudio: add -audiodev sdl, out.buffer-count option Gerd Hoffmann
2021-01-31 17:30     ` Volker Rümelin
2021-01-15  8:39   ` Markus Armbruster
2021-01-10 10:02 ` [PATCH 04/23] sdlaudio: don't start playback in init routine Volker Rümelin
2021-01-15  6:28   ` Thomas Huth
2021-01-10 10:02 ` [PATCH 05/23] sdlaudio: always clear the sample buffer Volker Rümelin
2021-01-15  6:31   ` Thomas Huth
2021-01-10 10:02 ` [PATCH 06/23] sdlaudio: fill remaining sample buffer with silence Volker Rümelin
2021-01-14 16:58   ` Thomas Huth
2021-01-17  9:41     ` Volker Rümelin
2021-01-10 10:02 ` [PATCH 07/23] sdlaudio: replace legacy functions with modern ones Volker Rümelin
2021-01-15  7:04   ` Thomas Huth
2021-01-10 10:02 ` [PATCH 08/23] audio: split pcm_ops function get_buffer_in Volker Rümelin
2021-01-10 10:02 ` [PATCH 09/23] sdlaudio: add recording functions Volker Rümelin
2021-01-10 10:02 ` [PATCH 10/23] audio: break generic buffer dependency on mixing-engine Volker Rümelin
2021-01-10 10:02 ` [PATCH 11/23] sdlaudio: enable (in|out).mixing-engine=off Volker Rümelin
2021-01-10 10:02 ` [PATCH 12/23] audio: remove remaining unused plive code Volker Rümelin
2021-01-10 10:02 ` [PATCH 13/23] paaudio: avoid to clip samples multiple times Volker Rümelin
2021-01-10 10:02 ` [PATCH 14/23] paaudio: wait for PA_STREAM_READY in qpa_write() Volker Rümelin
2021-01-10 10:02 ` [PATCH 15/23] paaudio: wait until the playback stream is ready Volker Rümelin
2021-01-10 10:02 ` [PATCH 16/23] paaudio: remove unneeded code Volker Rümelin
2021-01-10 10:02 ` [PATCH 17/23] paaudio: comment bugs in functions qpa_init_* Volker Rümelin
2021-01-10 10:02 ` [PATCH 18/23] paaudio: limit minreq to 75% of audio timer_rate Volker Rümelin
2021-01-10 10:02 ` [PATCH 19/23] paaudio: send recorded data in smaller chunks Volker Rümelin
2021-01-10 10:02 ` [PATCH 20/23] dsoundaudio: replace GetForegroundWindow() Volker Rümelin
2021-01-10 10:02 ` [PATCH 21/23] dsoundaudio: rename dsound_open() Volker Rümelin
2021-01-10 10:02 ` [PATCH 22/23] dsoundaudio: enable f32 audio sample format Volker Rümelin
2021-01-10 10:02 ` [PATCH 23/23] dsoundaudio: fix log message Volker Rümelin
2021-01-10 10:24 ` [PATCH 00/23] next round of audio patches no-reply
2021-01-10 23:09   ` Volker Rümelin
2021-01-14 14:36 ` Gerd Hoffmann

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=9315afe5-5958-c0b4-ea1e-14769511a9d5@t-online.de \
    --to=vr_qemu@t-online.de \
    --cc=armbru@redhat.com \
    --cc=dirty.ice.hu@gmail.com \
    --cc=eblake@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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

QEMU-Devel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/qemu-devel/0 qemu-devel/git/0.git
	git clone --mirror https://lore.kernel.org/qemu-devel/1 qemu-devel/git/1.git
	git clone --mirror https://lore.kernel.org/qemu-devel/2 qemu-devel/git/2.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 qemu-devel qemu-devel/ https://lore.kernel.org/qemu-devel \
		qemu-devel@nongnu.org
	public-inbox-index qemu-devel

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.nongnu.qemu-devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git