加载中…
个人资料
蓝人
蓝人
  • 博客等级:
  • 博客积分:0
  • 博客访问:135,849
  • 关注人气:61
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

MTK_FAQ:设置PA_delay后,通话过程中切换到Handfree_mode时无法开启PA

(2019-08-29 13:57:19)
标签:

mtk

faq

分类: mtk
客户修改padelay的参数,改到100.结果发现通话过程中切换到handfreemode无法开启PA.原因:因为PA的delay的机制加上delay的时间过长再加上通话中会有一个checkvoicevolume的过程,这三点如果巧合的遭遇下面这种case,就会出现这种问题。首先介绍delay机制:在需要开启PA时,我们在AFE_Event_Handler中设置delay的参数afe.ext_op_delay=(int16)Ext_op_on_delay;而在AFE_manager中去递减这个delay以达到delay的目的
://////////////////////////////////if(afe.ext_op_delay!=0){if(afe.ext_op_delay>0){if(--
afe.ext_op_delay==0){AFE_SwitchExtAmplifier(true);afe.ext_op_on=KAL_TRUE;}}else{if
(++afe.ext_op_delay==0){AFE_SwitchExtAmplifier(false);afe.ext_op_on=KAL_FALSE;}}}///////////////////////
///////////这样就存在一个问题,如果delay的时间设为delay_time,当AFE_Manager在delay_time之内唤醒了AFE_Event_Handler,就会在PA开启之前再次resetdelay的参数:afe.ext_op_delay=(int16)Ext_op_on_delay;(因为当前仍在通话中,所有执行条件都满足)。在通常的操作下,这个delay_time很短,基本没有机会在这个时间点AFE_event_handler被唤醒,或者即使第一次被唤醒了,但是不会总被唤醒,也就是不会送是resetdelay的参数,最终PA还是可以开启的。而在通话过程中有一个checkvoicevolume的动作,这个动作是由dsp发起,要求l1audiodriver重新设置speechvolume,且这个动作是在通话过程中按照一定的时间间隔持续存在的。而l1audiodrvier重新设置volume就会导致AFE_Manager去唤醒AFE_event_handler来updatevolume.综上这三个要素都满足的时候,PAdelay的参数afe.ext_op_delay就一直在被reset,导致PA永远没有办法打开。而当缩短delay时间之后,就可以在checkvoicevolume之前把PA打开,这个时候afe.ext_op_delay==0就不会再被reset了。经过计算,得出在这种情况下,PAdelay的值最大是5,再大就会导致此问题。

[SOLUTION]
如上所述,减小PAdelay时间。

来源:http://bbs.16rd.com/thread-479917-1-1.html

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有