diff mbox series

[09/11] paaudio: fix playback glitches

Message ID 090ab2fb6a10d601e68012b4152c2dba7a902ca4.1562695780.git.DirtY.iCE.hu@gmail.com
State New
Headers show
Series Multiple simultaneous audio backends | expand

Commit Message

=?UTF-8?B?Wm9sdMOhbiBLxZF2w6Fnw7M=?= July 9, 2019, 6:35 p.m. UTC
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.

Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com>
---
 audio/paaudio.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Comments

Marc-André Lureau July 10, 2019, 7:58 p.m. UTC | #1
On Tue, Jul 9, 2019 at 10:49 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.
>
> Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com>

Could you explain how this is related to PA_STREAM_ADJUST_LATENCY ?


> ---
>  audio/paaudio.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/audio/paaudio.c b/audio/paaudio.c
> index 9d46f11b0a..d320d2e453 100644
> --- a/audio/paaudio.c
> +++ b/audio/paaudio.c
> @@ -512,10 +512,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 */
> --
> 2.22.0
>
>


--
Marc-André Lureau
=?UTF-8?B?Wm9sdMOhbiBLxZF2w6Fnw7M=?= July 14, 2019, 3:21 p.m. UTC | #2
On 2019-07-10 21:58, Marc-André Lureau wrote:
> On Tue, Jul 9, 2019 at 10:49 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.
>>
>> Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com>
> 
> Could you explain how this is related to PA_STREAM_ADJUST_LATENCY ?

According to the pulseaudio documentation[1], you can't use
PA_STREAM_ADJUST_LATENCY and PA_STREAM_EARLY_REQUESTS at the same time.

[1]:
https://www.freedesktop.org/software/pulseaudio/doxygen/def_8h.html#a6966d809483170bc6d2e6c16188850fca98e436f686fc385697e565eb1ecb2609

>> ---
>>  audio/paaudio.c | 6 ++----
>>  1 file changed, 2 insertions(+), 4 deletions(-)
>>
>> diff --git a/audio/paaudio.c b/audio/paaudio.c
>> index 9d46f11b0a..d320d2e453 100644
>> --- a/audio/paaudio.c
>> +++ b/audio/paaudio.c
>> @@ -512,10 +512,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 */
>> --
>> 2.22.0
>>
>>
> 
> 
> --
> Marc-André Lureau
>
diff mbox series

Patch

diff --git a/audio/paaudio.c b/audio/paaudio.c
index 9d46f11b0a..d320d2e453 100644
--- a/audio/paaudio.c
+++ b/audio/paaudio.c
@@ -512,10 +512,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 */