[Bug Fix]Messy Audio语音电话不清晰问题

早在第一家公司的时候,有一个印象深刻的Bug,很值得思考。这个Bug充分说明了有缺点的系统架构是怎么在不经意间影响了产品的。

DSP有一个简单的操作系统,可以运行一些task,这些task有一定的优先级,优先级低的task可以被优先级高的中断。
对MCU来说,DSP就是一个外设,它周期性的给MCU发中断,MCU的中断处理程序会在DSP和MCU之间的DPRAM上读取数据。为了同步DSP和MCU对DPRAM的读写,需要设置和检测一些flag寄存器(DSP上)。
DSP上的task有:
优先级最高的中断级任务 Boot Task,FRAME Task,CMD Task,PCM Task。
当CPU的中断来了的时候,CMD Task激活,然后它将激活PCM Task,顾名思义,PCM Task是处理PCM数据的。
下一优先级的任务是MIX Task,它运行Super Foreground Level,每2ms被执行一次,用来混音。
然后,再下一优先级的任务是Speech tasks,运行在Foreground Level,每20ms运行一次,用来处理语音电话数据。
最低优先级的任务是Music Task,运行在Background Level,处理一切跟Music,Tone相关的事情 。
打3G语音电话的时候,MCU和DSP之间的通信可以用这样的一个抽象图来表示:

这样,当Telecom很频繁的发送AMR语音帧时,可能两个连续的语音帧的时间间隔<DSP读取和回调的时间间隔,这样,当CPU试图写入第二个语音帧时,第一个语音帧还在,于是CPU丢弃了第一帧。这样就出现了Messy Audio的问题。

解决方法很简单,就是增大Buffer的大小,扩容为以前的两倍,这样CPU除非连续三帧来的时间间隔< DSP读取和回调的时间间隔时,CPU才会丢弃语音帧---这个概率基本是不存在的。



<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(3) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:浮点运算是怎么实现的?

给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值