From: "Kővágó Zoltán" <dirty.ice.hu@gmail.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: QEMU <qemu-devel@nongnu.org>, Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 19/25] paaudio: fix playback glitches
Date: Fri, 21 Aug 2015 15:18:10 +0200 [thread overview]
Message-ID: <55D72512.7050202@gmail.com> (raw)
In-Reply-To: <CAJ+F1CJkhJe0GDy0Lxk4j+ah-p74TJknJQnUwg6geRYbT+ky+Q@mail.gmail.com>
2015-08-21 00:08 keltezéssel, Marc-André Lureau írta:
> Hi
>
> On Thu, Aug 6, 2015 at 8:28 PM, Kővágó, Zoltán <dirty.ice.hu@gmail.com> wrote:
>> Pulseaudio normally assumes that when the server wants it, the client
>> can generate the audio samples and send it right away. Unfortunately
>> this is not the case with QEMU -- it's up to the emulated system when
>> does it generate the samples. Buffering the samples and sending them
>> from a background thread is just a workaround, that doesn't work too
>> well. Instead enable pa's compatibility support and let pa worry about
>> the details.
>
> Afaik, it's not a problem if the audio data is not available right
> away (live sources): PulseAudio should deal with that. I think it will
> simply silence and wait (but it could actually be smarter than that?)
Yes, it will simply silence and wait, until more data arrives. The
problem is that thing happens, like 10 times each second. (If I watch
pacmd list-sink-inputs, I can see that status quickly varies between
drained and running, while playing an audio file in the guest)
> PA_STREAM_EARLY_REQUESTS is going to make PA request data more
> frequently (every minreq). I don't get why that would help here. It's
> meant for bad behaving applications using usleep and such that aren't
> fixable, not a solution for audio glitches.
The problem is that normally pulseaudio sends requests for data very
late -- assuming that the application will quickly generate the required
samples and send them back. The problem is that the audio subsystem
only "runs" each 10 ms, so it may take up to 10ms until qemu sends back
data after the request, which is apparently too much. With
PA_STREAM_EARLY_REQUEST pulseaudio will request data as soon as it has
enough free space in it's buffer, and not wait until the last moment.
Maybe tweaking pa buffer settings would help too, I'm not sure. And
yes, qemu is pretty much a bad behaving application that, while not
using usleep directly, only produces audio every 10ms (by default).
>
> If qemu produces too much data than what PA can consume, it should
> drop the old data, and only play current audio (unfortunately, that
> doesn't seem to be the case looking at audio_pcm_sw_write). If qemu
> produces too little, it can still write whatever it has when it has
> it.
>
> Could you provide a way to reproduce the glitch you experience or
> explain more clearly how this flag helps?
It happens for me with a pretty much a default pulseaudio configuration,
even with the stable release. For example day24 from last year qemu
advent calendar with pulseaudio backend. (Sometimes it fixes itself
after some time, very rarely it work normally, but most cases I just get
that constant buffer underflow.)
>
>
> thanks
>
>>
>> Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com>
>> ---
>> audio/paaudio.c | 6 ++----
>> 1 file changed, 2 insertions(+), 4 deletions(-)
>>
>> diff --git a/audio/paaudio.c b/audio/paaudio.c
>> index 2aee22f..3990a80 100644
>> --- a/audio/paaudio.c
>> +++ b/audio/paaudio.c
>> @@ -510,10 +510,8 @@ static pa_stream *qpa_simple_new (
>>
>> flags =
>> PA_STREAM_INTERPOLATE_TIMING
>> -#ifdef PA_STREAM_ADJUST_LATENCY
>> - |PA_STREAM_ADJUST_LATENCY
>> -#endif
>> - |PA_STREAM_AUTO_TIMING_UPDATE;
>> + |PA_STREAM_AUTO_TIMING_UPDATE
>> + |PA_STREAM_EARLY_REQUESTS;
>> if (dev) {
>> /* don't move the stream if the user specified a sink/source */
>> flags |= PA_STREAM_DONT_MOVE;
>> --
>> 2.4.5
>>
>>
>
>
>
next prev parent reply other threads:[~2015-08-21 13:18 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-06 18:28 [Qemu-devel] [PATCH 00/25] audio: -audiodev option, multiple options Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 01/25] qapi: support implicit structs in OptsVisitor Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 02/25] qapi: convert NumaOptions into a flat union Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 03/25] net: remove NetLegacy struct Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 04/25] net: use Netdev instead of NetClientOptions in client init Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 05/25] qapi: change Netdev into a flat union Kővágó, Zoltán
2015-08-20 15:03 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 06/25] qapi: reorder NetdevBase and Netdev Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 07/25] qapi: qapi for audio backends Kővágó, Zoltán
2015-08-20 15:30 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 08/25] qapi: support nested structs in OptsVisitor Kővágó, Zoltán
2015-08-20 15:55 ` Marc-André Lureau
2015-08-20 21:21 ` Kővágó Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 09/25] audio: use qapi AudioFormat instead of audfmt_e Kővágó, Zoltán
2015-08-20 16:00 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 10/25] audio: -audiodev command line option Kővágó, Zoltán
2015-08-20 17:17 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 11/25] audio: reduce glob_audio_state usage Kővágó, Zoltán
2015-08-20 17:39 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 12/25] audio: basic support for multi backend audio Kővágó, Zoltán
2015-08-20 18:01 ` Marc-André Lureau
2015-08-21 12:23 ` Kővágó Zoltán
2015-08-21 14:24 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 13/25] audio: add audiodev properties to frontends Kővágó, Zoltán
2015-08-20 18:55 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 14/25] audio: audiodev= parameters no longer optional when -audiodev present Kővágó, Zoltán
2015-08-20 19:15 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 15/25] paaudio: do not create multiple connections to the same server Kővágó, Zoltán
2015-08-20 19:38 ` Marc-André Lureau
2015-08-21 12:41 ` Kővágó Zoltán
2015-08-21 14:36 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 16/25] paaudio: properly disconnect streams in fini_* Kővágó, Zoltán
2015-08-20 20:29 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 17/25] audio: remove gcc specific audio_MIN, audio_MAX Kővágó, Zoltán
2015-08-19 18:17 ` Gerd Hoffmann
2015-08-19 23:31 ` Peter Maydell
2015-08-20 20:36 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 18/25] audio: do not run each backend in audio_run Kővágó, Zoltán
2015-08-20 20:49 ` Marc-André Lureau
2015-08-21 12:59 ` Kővágó Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 19/25] paaudio: fix playback glitches Kővágó, Zoltán
2015-08-20 22:08 ` Marc-André Lureau
2015-08-21 13:18 ` Kővágó Zoltán [this message]
2015-08-06 18:28 ` [Qemu-devel] [PATCH 20/25] audio: remove mixeng specific code from backends Kővágó, Zoltán
2015-08-19 19:07 ` Gerd Hoffmann
2015-08-20 22:28 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 21/25] audio: common rate control code for timer based outputs Kővágó, Zoltán
2015-08-20 22:37 ` Marc-André Lureau
2015-08-21 13:34 ` Kővágó Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 22/25] audio: add mixeng option (documentation) Kővágó, Zoltán
2015-08-20 22:49 ` Marc-André Lureau
2015-08-21 13:46 ` Kővágó Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 23/25] audio: make mixeng optional Kővágó, Zoltán
2015-08-20 22:56 ` Marc-André Lureau
2015-08-06 18:28 ` [Qemu-devel] [PATCH 24/25] paaudio: get/put_buffer functions Kővágó, Zoltán
2015-08-06 18:28 ` [Qemu-devel] [PATCH 25/25] audio: split ctl_* functions into enable_* and volume_* Kővágó, Zoltán
2015-08-20 23:05 ` Marc-André Lureau
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=55D72512.7050202@gmail.com \
--to=dirty.ice.hu@gmail.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@gmail.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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).