[alsa-devel] snd_pcm_sw_params_set_start_threshold() functionality

irfanks irfan.shaikh at sasken.com
Mon Oct 29 13:28:50 CET 2012

Please let me know if my below understanding is correct :

snd_pcm_sw_params_set_start_threshold() explains :
"PCM is automatically started when playback frames available to PCM are 
 >= threshold or when requested capture frames are >= threshold"

PCM has below states :

SND_PCM_STATE_OPEN                      Open
SND_PCM_STATE_SETUP                     Setup installed
SND_PCM_STATE_PREPARED              Ready to start
SND_PCM_STATE_RUNNING                Running
SND_PCM_STATE_XRUN                      Stopped: underrun (playback) or 
overrun (capture) detected
SND_PCM_STATE_DRAINING               Draining: running (playback) or 
stopped (capture)
SND_PCM_STATE_PAUSED                  Paused
SND_PCM_STATE_SUSPENDED           Hardware is suspended
SND_PCM_STATE_DISCONNECTED     Hardware is disconnected

When ever underrun occurs, PCM device state goes to XRUN state.
To bring back the PCM playback device to playback {Ready to start}, we 
use snd_pcm_prepare().

*Thus snd_pcm_sw_params_set_start_threshold() should again 
prebuffer(threshold) X periods of data {which we have set in software 
params}, once again after the XRUN state is recovered.*

Thanks and regards,

On 10/29/2012 04:50 PM, irfanks wrote:
> Hello,
>             snd_pcm_sw_params_set_start_threshold() API description 
> explains, "PCM is automatically started when playback frames available 
> to PCM are >= threshold"
>              I want to know,  whether above pre-buffering(threshold) 
> mechanism is only during the start of playback ?
> OR
>             Also if my playback device goes to XRUN state, Again next 
> time when i prepare my playback device using snd_pcm_prepare(). Again 
> the prebuffering (threshold) will occur since i have set 
> snd_pcm_sw_params_set_start_threshold() to N periods in software params.
> Best Regards,
> Thanks in advance,
> Irfan...

More information about the Alsa-devel mailing list