[alsa-devel] ALSA Underrun / Silence playback
Hello devel,
I am trying to implement s/w params for ALSA playback device such that there is SILENCE playback for UNDERRUN (-32). To achieve above i used below s/w params API's. But still i observe UNDERRUN in my AUDIO Playback. Please correct me if i am mising somenting. {When i do get boundry, i get some weird value 1572864000. Thus i tried to use alsa buffer size for threshold}
/*************************************************************************************/
if (snd_pcm_sw_params_get_boundary (alsaParams->p_swparams, &boundary) < 0) { printf ("Could not gete snd_pcm_sw_params_get_boundary"); return NULL; }
// threshold = boundary; threshold = alsaParams->periodsize * alsaParams->no_of_periods;
if (snd_pcm_sw_params_set_stop_threshold (alsaParams->pcm_handle, alsaParams->p_swparams, threshold) < 0) { printf("Could not gete snd_pcm_sw_params_get_boundary"); return NULL; }
if (snd_pcm_sw_params_set_silence_threshold (alsaParams->pcm_handle, alsaParams->p_swparams, 0) < 0 || snd_pcm_sw_params_set_silence_size (alsaParams->pcm_handle, alsaParams->p_swparams, boundary) < 0) /* play silence on XRUN */ { printf("Could not set silence params"); return NULL; } /*************************************************************************************/
Thanks in advance !!
Regards,
Hello Clemens,
I have used my threshold as boundary value {after calling snd_pcm_sw_params_get_boundary() } also and checked the audio performance. I was still getting UNDERRUN's (-32).
if (snd_pcm_sw_params_set_stop_threshold (alsaParams->pcm_handle, alsaParams->p_swparams, threshold) < 0) { printf("Could not gete snd_pcm_sw_params_get_boundary"); return NULL; }
What's weird about this number?
--> I set my alsa buffer size as (512 period size and 16 periods) As snd_pcm_sw_params_get_boundary(), returns boundary in frames. I was not able to get how the boundry which i get (1572864000) is more than the buffer size (512 X 16) which i have set.
Regards Irfan
On 12/05/2011 03:20 PM, Clemens Ladisch wrote:
Irfan shaikh wrote:
When i do get boundry, i get some weird value 1572864000.
What's weird about this number?
Thus i tried to use alsa buffer size for threshold
Use the boundary value.
Regards, Clemens
Irfan shaikh wrote:
I have used my threshold as boundary value also and checked the audio performance. I was still getting UNDERRUN's (-32).
Did you actually call snd_pcm_sw_params()?
I was not able to get how the boundry which i get (1572864000) is more than the buffer size (512 X 16) which i have set.
The boundary value is a large multiple of the buffer size.
Regards, Clemens
On 12/05/2011 04:15 PM, Clemens Ladisch wrote:
Irfan shaikh wrote:
I have used my threshold as boundary value also and checked the audio performance. I was still getting UNDERRUN's (-32).
Did you actually call snd_pcm_sw_params()?
Hi thanks a lot for hint provided by you. It works fine now. What threshold value is better boundary value OR alsa buffer size value for good performance ?
Observation : I do lot of console operation purposely to get ALSA underrun. After above implementation i do not see any UNDERRUN. ###### But Audio goes out of sync and playes jerky ? ######## Is there any way we can avoid above jerks ?
xfer_align function is depreciated.
Thanks and regards Irfan
participants (2)
-
Clemens Ladisch
-
Irfan shaikh