如何处理ALSA API的返回码snd_pcm_writei()

时间:2015-06-10 11:46:24

标签: linux alsa

我正在使用ASLA Audio API在我的嵌入式Linux应用程序中播放声音。我有时会观察到snd_pcm_writei API返回–EPIPE错误,当错误发生时我会调用snd_pcm_prepare(基本上准备PCM重复使用)。

if ((err = snd_pcm_writei (playback_handle, buf, nframes)) < 0) 
{
    if ((err = snd_pcm_prepare (playback_handle)) < 0)
    return err;
}

我发现一些建议,在这种情况下,使用snd_pcm_prepare代替snd_pcm_recover应该是正确的方法。在尝试修复之前,我只是想知道是否有人可以帮助我理解如何设置PCM设备以从写入期间可能发生的欠载或其他错误中恢复。

1 个答案:

答案 0 :(得分:1)

snd_pcm_recover()函数处理更多错误代码,因此您应该使用它。 但最终还是会调用snd_pcm_prepare()(请参阅source code)。

snd_pcm_prepare()没有什么特别之处;它只是重新初始化流的最简单方法。