ALSA PCM回调有哪些限制?

时间:2012-02-28 22:41:39

标签: c asynchronous concurrency callback alsa

我正在Linux下编写一个程序,它使用ALSA(连接到自定义设备)来回放和记录。我想使用异步回调架构来读取和写入数据。

但是,我无法获得有关我在回调中允许做的限制的任何信息。具体来说,我必须是同步安全的吗?如果是这样,这似乎严重限制了可以做的事情,因为除其他事项外,我不应该引用任何全局变量,例如,从执行或写入的主线程填充的缓冲区读取相当困难到缓冲区,随后将其保存到回调之外的文件中。

我是否可以在ALSA回调中使用任何C并发构造来协调全局与主线程的使用?例如,我可以使用POSIX信号量吗?我是否能保证ALSA回调在主线程方面是原子的(我知道它对其他ALSA回调不是原子的)?

非常感谢人们可以对此提出的任何见解。

1 个答案:

答案 0 :(得分:3)

我不知道这个答案是否会被人们认为对ALSA过于消极,但无论如何我都会给予答案。

我已经拼命尝试在几个异步应用程序中使用ALSA。它是如此的错误,记录不清,难以使用,经过几天努力使事情发挥作用我最终放弃了。

我最终使用ALSA OSS仿真层,只是为声音设备打开一个fd,并使用libevent作为异步回调的一种方式。这个解决方案非常适合我,我对结果非常满意 - 我已经使用了一段时间了。

回想起来,ALSA令人惊讶地过于复杂,过度设计,错误,文档记录错误,与设计人员事先没有想到的I / O多路复用技术不兼容等等 - 我无法理解为什么它最终变成了Linux系统中的标准,当在其他Unix操作系统上提供更简单和更好的设计时。