qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RESEND PATCH 2/3] pulseaudio: setup buffer attrs


From: Alon Levy
Subject: Re: [Qemu-devel] [RESEND PATCH 2/3] pulseaudio: setup buffer attrs
Date: Tue, 25 Jan 2011 11:20:21 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Mon, Jan 24, 2011 at 10:07:45PM +0100, Gerd Hoffmann wrote:
> Request reasonable buffer sizes from pulseaudio.  Without this
> pa_simple_write() can block quite long and lead to dropouts,
> especially with guests which use small audio ring buffers.
> 
> Signed-off-by: Gerd Hoffmann <address@hidden>
> ---
>  audio/paaudio.c |   12 +++++++++++-
>  1 files changed, 11 insertions(+), 1 deletions(-)
> 
> diff --git a/audio/paaudio.c b/audio/paaudio.c
> index 858ca81..75e3ea0 100644
> --- a/audio/paaudio.c
> +++ b/audio/paaudio.c
> @@ -289,6 +289,7 @@ static int qpa_init_out (HWVoiceOut *hw, struct 
> audsettings *as)
>  {
>      int error;
>      static pa_sample_spec ss;
> +    static pa_buffer_attr ba;
>      struct audsettings obt_as = *as;
>      PAVoiceOut *pa = (PAVoiceOut *) hw;
>  
> @@ -296,6 +297,15 @@ static int qpa_init_out (HWVoiceOut *hw, struct 
> audsettings *as)
>      ss.channels = as->nchannels;
>      ss.rate = as->freq;
>  
> +    /*
> +     * qemu audio tick runs at 250 Hz (by default), so processing
> +     * data chunks worth 4 ms of sound should be a good fit.
> +     */
> +    ba.tlength = pa_usec_to_bytes (4 * 1000, &ss);
> +    ba.minreq = pa_usec_to_bytes (2 * 1000, &ss);
> +    ba.maxlength = -1;
> +    ba.prebuf = -1;
> +

What's the default buffer size? Is there any reason to query this on startup
somewhere instead of hard coding it?

>      obt_as.fmt = pa_to_audfmt (ss.format, &obt_as.endianness);
>  
>      pa->s = pa_simple_new (
> @@ -306,7 +316,7 @@ static int qpa_init_out (HWVoiceOut *hw, struct 
> audsettings *as)
>          "pcm.playback",
>          &ss,
>          NULL,                   /* channel map */
> -        NULL,                   /* buffering attributes */
> +        &ba,                    /* buffering attributes */
>          &error
>          );
>      if (!pa->s) {
> -- 
> 1.7.1
> 
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]