qemu/audio
Volker Rümelin fdc8c5f471 audio: fix bug 1858488
The combined generic buffer management code and buffer run out
code in function audio_generic_put_buffer_out has a problematic
behaviour. A few hundred milliseconds after playback starts the
mixing buffer and the generic buffer are nearly full and the
following pattern can be seen.

On first call of audio_pcm_hw_run_out the buffer run code in
audio_generic_put_buffer_out writes some data to the audio
hardware but the generic buffer will fill faster and is full
when audio_pcm_hw_run_out returns. This is because emulated
audio devices can produce playback data at a higher rate than
the audio backend hardware consumes this data.

On next call of audio_pcm_hw_run_out the buffer run code in
audio_generic_put_buffer_out writes some data to the audio
hardware but no audio data is transferred to the generic buffer
because the buffer is already full.

Then the pattern repeats. For the emulated audio device this
looks like the audio timer period has doubled.

This patch splits the combined generic buffer management code
and buffer run out code and calls the buffer run out code after
buffer management code to break this pattern.

The bug report is for the wav audio backend. But the problem is
not limited to this backend. All audio backends which use the
audio_generic_put_buffer_out function show this problem.

Buglink: https://bugs.launchpad.net/qemu/+bug/1858488
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-Id: <20200123074943.6699-5-vr_qemu@t-online.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2020-01-31 08:48:03 +01:00
..
alsaaudio.c audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
audio.c audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
audio.h audio: support more than two channels in volume setting 2019-10-18 08:14:05 +02:00
audio_int.h audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
audio_legacy.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
audio_template.h audio: make mixeng optional 2019-10-18 08:14:05 +02:00
audio_win_int.c audio: use qapi AudioFormat instead of audfmt_e 2019-03-11 10:29:26 +01:00
audio_win_int.h Windows Waveform Audio driver (no ADC support yet) 2009-10-10 01:18:24 +04:00
coreaudio.c audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
dsound_template.h audio: replace shift in audio_pcm_info with bytes_per_frame 2019-10-18 08:14:05 +02:00
dsoundaudio.c audio: replace shift in audio_pcm_info with bytes_per_frame 2019-10-18 08:14:05 +02:00
Makefile.objs paaudio: port to the new audio backend api 2019-09-23 12:28:47 +02:00
mixeng.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
mixeng.h audio: use size_t where makes sense 2019-08-21 09:13:37 +02:00
mixeng_template.h audio/mixeng_template.h: fix inline declaration 2013-10-26 13:09:34 +04:00
noaudio.c audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
ossaudio.c audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
paaudio.c paaudio: remove unused variables 2020-01-31 08:48:03 +01:00
rate_template.h audio: use size_t where makes sense 2019-08-21 09:13:37 +02:00
sdlaudio.c audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
spiceaudio.c audio: replace shift in audio_pcm_info with bytes_per_frame 2019-10-18 08:14:05 +02:00
trace-events trace-events: Shorten file names in comments 2019-03-22 16:18:07 +00:00
wavaudio.c audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
wavcapture.c audio: basic support for multi backend audio 2019-08-21 09:13:37 +02:00