首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优雅地从ALSA中的-EPIPE错误中恢复?

如何优雅地从ALSA中的-EPIPE错误中恢复?
EN

Stack Overflow用户
提问于 2012-10-11 22:51:03
回答 1查看 4.4K关注 0票数 4

我有一个音频应用程序,它在linux上使用ALSA驱动程序,代码在英特尔linux台式机上运行得很好。然而,我也想支持Raspberry Pi,并且我在该平台上得到了周期性的音频丢失和缓冲区欠载。公平地说,在英特尔linux上也会出现欠载,但它们不会伴随着讨厌的静态突发,这可能与该平台上的ALSA驱动程序有关。

无论如何,我得到了两种类型的错误。首先,我对snd_pcm_wait()的调用有时会返回-EPIPE代码。我捕获了这段代码,然后尝试先调用snd_pcm_recover(),然后再调用snd_pcm_prepare(),但在随后对snd_pcm_writei()的调用中仍然出现了一些静态失真。这是从这样的错误中恢复的正确方法吗?有没有办法在没有静电干扰的情况下恢复过来?

snd_pcm_wait()成功返回时,我调用snd_pcm_avail_update()...我是否也应该在从snd_pcm_recover()成功返回后执行此操作

我遇到的第二个问题是,有时snd_pcm_writei()也会返回-EPIPE返回码。同样,在这种情况下,我尝试调用snd_pcm_recover(),但仍然可以听到滴答声或其他糟糕的声音。有没有办法更优雅地从这个错误中恢复过来?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-12 00:56:47

任何时候都可能发生欠载运行,因此任何函数都可能返回-EPIPE

如果成功,snd_pcm_recover()已经调用了snd_pcm_prepare();您无需再次调用它。

当设备准备就绪时,其缓冲区将被重置。换句话说,它是完全空的,所以你不需要检查有多少帧可用。

由于重置,您应该只听到之后写入缓冲区的数据。任何静电都可能是欠载运行时遗留下来的一些垃圾,并表明驱动程序中存在错误。你的应用程序对此无能为力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12842395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档