您尚未登录。

#2 Re: 全志 SOC » V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久 (问题由 @Andy1234 解决,欢迎大家验证) » 2022-01-11 17:05:31

最近公司拿了块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改成最大,至少个把月不会关,基本能用了。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn