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

问题描述 投票:1回答:1

我正在使用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设备以从写入期间可能发生的欠载或其他错误中恢复。

linux alsa
1个回答
1
投票

snd_pcm_recover()函数处理更多错误代码,因此您应该使用它。但无论如何它最终都会调用snd_pcm_prepare()(参见source code)。

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

© www.soinside.com 2019 - 2024. All rights reserved.