主要分成两种方式:buffer,和mmap,在这个基础上,又衍生出了根据IO中断和poll轮询来确定什么时候可读写两种不同的方式,他们都使用了注册事件的方法,至于事件的触发问题由内核系统来处理,我们不需要考虑。
int snd_async_add_pcm_handler(snd_async_handler_t **handler, snd_pcm_t *pcm,
snd_async_callback_t callback, void *private_data)
:这个函数为PCM增加了一个handle,设置了callback函数,安装了IO信号处理函数,IO信号发生时调用callback函数来处理读写。其中snd_async_handler_t 结构体中的glist没搞懂是做什么用的。
这种方式是不会产生Xrun的,所以不需要处理,但是当PCM的状态为SND_PCM_STATE_PREPARED的时候,还是要打开PCM的。
以上理解也许有误,后面如果发现错了,及时修正。
阅读(2352) | 评论(0) | 转发(0) |