[pulseaudio-discuss] [PATCH] alsa: Disable timer-scheduling for PCMs with the BATCH flag

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Fri Dec 6 03:06:05 PST 2013


On Sat, 2013-11-30 at 18:07 +0100, Lars-Peter Clausen wrote:
> PCM Devices which have the BATCH flag set update the PCM pointer only with
> period size granularity. Using timer based scheduling does not have any
> advantage in this mode. For one devices which have that flag set usually update
> the position pointer in software after getting the period interrupt. So
> disabling the period interrupt is not possible for this kind of devices.
> Furthermore writing to or reading from the buffer slice for the current period
> is not possible since the position inside the buffer is not known. On the other
> hand the tsched algorithm seems to get easily confused for this kind of
> hardware, which results in garbled audio output. This typically means that timer
> based scheduling needs to be manually disabled on systems with such devices.
> Auto disabling tsched in this case allows these systems to run with the default
> configuration.
> 
> Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
> ---
>  src/modules/alsa/alsa-util.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
> index 75f5858..4b24e47 100644
> --- a/src/modules/alsa/alsa-util.c
> +++ b/src/modules/alsa/alsa-util.c
> @@ -245,6 +245,10 @@ int pa_alsa_set_hw_params(
>      if (!pa_alsa_pcm_is_hw(pcm_handle))
>          _use_tsched = false;
>  
> +    /* The PCM pointer is only updated with period granularity */
> +    if (snd_pcm_hw_params_is_batch(hwparams))
> +        _use_tsched = false;
> +
>  #if (SND_LIB_VERSION >= ((1<<16)|(0<<8)|24)) /* API additions in 1.0.24 */
>      if (_use_tsched) {
>  

Thanks! I applied the patch.

-- 
Tanu



More information about the pulseaudio-discuss mailing list