ALSA的snd_pcm_delay()究竟返回了什么?



我想使用 snd_pcm_delay()查询延迟,直到我要写入ALSA缓冲区的样本可以听到。我希望这个价值在单个呼叫之间有所不同。但是,在两个系统上,此值是恒定的。该函数返回一个始终等于一个平台上的周期大小的值,在另一个平台上等于缓冲区大小(我代码中的周期大小的两倍)。

我对snd_pcm_delay()的理解是错误的吗?是驱动程序问题吗?

延迟与缓冲区中的样本数量成正比(snd_pcm_avail()的倒数),再加上描述将样本从缓冲区移至扬声器需要多少时间。后一部分是驱动程序依赖的,可能无法实现。

如果设备一次一次将样本取出一个周期(某些DMA控制器没有更好的粒度来报告当前位置),则延迟值似乎会保持恒定一段时间,然后在整个时段跳下。而且您只会在重新装满缓冲区之前就看到跳跃。

最新更新