gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:02:14 27 4
gpt4 key购买 nike

我有一个在 linux 上使用 ALSA 驱动程序的音频应用程序,并且该代码在 intel linux 台式机上运行良好。但是,我也想支持 Raspberry Pi,并且我在该平台上遇到了周期性的音频丢失和缓冲区欠载。公平地说,intel 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()在这种情况下,但仍然会听到咔哒声或其他讨厌的声音。有没有办法更优雅地从这个错误中恢复?

最佳答案

任何时候都可能发生欠载,因此任何函数都可以返回 -EPIPE .
snd_pcm_recover()已经打过snd_pcm_prepare()如果成功;您无需再次调用它。

当设备准备好时,它的缓冲区被重置。换句话说,已知它是完全空的,因此您不需要检查有多少帧可用。

由于重置,您应该只听到之后写入缓冲区的数据。
任何静态都将是来自欠载的一些剩余垃圾,并表明驱动程序中存在错误。
您的应用程序对此无能为力。

关于alsa - 如何优雅地从 ALSA 中的 -EPIPE 错误中恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12842395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com