[alsa-devel] end of playback ... design question

Kai Vehmanen kvlists at nosignal.fi
Fri Aug 2 21:20:23 CEST 2013


Hi,

On Wed, 31 Jul 2013, Jaroslav Kysela wrote:

>> E: The alsa core could detect that condition and solve it equivalent to solution D
>>
>>       I think that´s the proper solution.
>>
>> Did I miss something or do you agree?
>
> Please, see snd_pcm_sw_params_set_silence_threshold() /
> snd_pcm_sw_params_set_silence_size() .

thanks Knut for investigating this.

Ecasound started to use snd_pcm_drain() fairly recently (in 2.8.0) and as 
discovered by Knut, the usage was not quite correct. Drain was run with 
same settings as normal playback (stop_threshold==buffer_size, silence 
threshold set to disabled), and this caused issues with drain as stale 
data sometimes got out at the end.

We now resolved the issue with following code (run at the end of 
playback):

  snd_pcm_sw_params_set_silence_threshold(handle, params, 0);
  snd_pcm_sw_params_set_silence_size(handle, params, boundary);
  snd_pcm_sw_params(handle, params);
  snd_pcm_drain(handle); /* in blocking mode */

... now this does what I was mistakenly assuming snd_pcm_drain() would do
implicitly.

This seems a bit complicated from API usage point of view (reconfiguring 
sw-params for drain), but OTOH is aligned with the rest of the API. As app 
has full control over sw-params, I can imagine that it would be suprising 
as well if snd_pcm_drain() would change sw_params under the hood (even if 
convenient).


More information about the Alsa-devel mailing list