页次: 1
@哇酷小二
https://whycan.com/t_1791.html#p73406
这里也看到了帖子,贴一下之前的回复吧
最近公司拿了块V3S的开发板,刚好看到了这个问题,特地注册了用户上来回复一下。
这个音频延迟主要是两个地方,一个是音频播放开始的延迟,一个是结束后的延迟关功放。
走了下代码结合DS,这两个应该都不算问题:
开功放的延迟,来源于内置功放芯片的能力,会慢慢开功放,参考寄存器PA_ANTI_POP_CTRL,地址0x01c22c00 + 0x0E, mask: 0x03,参考值:
PA_ANTI_POP_CTRL, (slopelengthsel)
PA Anti-pop time Control
000: 131ms; 001: 262ms; 010: 393ms; 011: 524ms;
100: 655ms; 101: 786ms; 110: 786ms; 111: 1048ms;
默认值4,也就是100b,约655ms。
默认的声卡驱动代码没有拉出来control,可以自己加上,实测改成0,约200ms。
第二个是关功放的延迟,其实是PCM stream的 PMD delay时间,这个默认已经映射了一个配置到/sys/devices/platform/soc/1c22c00.codec/cdc/pmdown_time,默认5000,也就是5S,可以通过echo方式改大,最大估计是0x7FFFFFFF,要改代码的话在sound/soc/soc-core.c
/*
* This is a timeout to do a DAPM powerdown after a stream is closed().
* It can be used to eliminate pops between different playback streams, e.g.
* between two audio tracks.
*/
static int pmdown_time = 5000;
module_param(pmdown_time, int, 0);
MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)");
要做音频类应用,可以将PA_ANTI_POP_CTRL改成0,大概能有不到200ms延迟,然后将pmdown_time改成最大,至少个把月不会关,基本能用了。
页次: 1