我想使用snd_pcm_delay()
来查询延迟,直到我要写入ALSA缓冲区的样本是可以接受的。我希望这个值在不同的电话之间有所不同。虽然,在两个系统上,这个值是不变的。该函数返回的值始终等于一个平台上的周期大小,而另一个平台上的值等于缓冲区大小(我的代码中周期大小的两倍)。
我对snd_pcm_delay()
的理解是错误的吗?这是司机问题吗?
答案 0 :(得分:1)
延迟与缓冲区中的样本数量(snd_pcm_avail()
的倒数)成正比,加上描述将样本从缓冲区移动到扬声器所需的时间。后一部分取决于驱动程序,可能无法实现。
如果设备一次取出一个整个周期的样本(某些DMA控制器没有更好的粒度来报告当前位置),那么延迟值看起来会保持一段时间不变,然后跳过整个周期。并且只有在重新填充缓冲区之前才能看到跳转。