问题现象

MTK平台某项目,在voice最大音量通话时,从免提切换到耳机模式后,通话音量变小,此时通过音量键减小一格音量后,通话音量又变大;

根因分析

问题原因:
通话模式从免提切换到耳机模式后,由于MTK上层会设置一个AUDIO_DEVICE_OUT_TELEPHONY_TX 设备的音量,而该设备无对应gaindevice,导致实际在hal层设置对应音量时设置成了speaker的音量,同等级音量下,speaker的音量是比耳机模式小的;

相关代码分析:

在切换设备时,从framework侧会重新设置新通话模式的音量
AudioPolicyManagerCustomImpl::gainTable_applyAnalogGainFromCheckAndSetVolume
调用-->
AudioPolicyManagerCustomImpl::checkAndSetGainTableAnalogGain
调用-->
AudioPolicyManagerCustomImpl::setVolumeParameterToHAL
调用-->
mAudioPolicyManager->mpClientInterface->setParameters
调用-->
AudioALSAStreamManager::setAnalogVolume
调用-->
status_t AudioMTKGainController::setVoiceVolume(int index, int devices, audio_mode_t mode)
调用-->GAIN_DEVICE AudioMTKGainController::getGainDevice(audio_devices_t devices)
在这里会根据setparameters传下来的devices 类型选择GAIN_DEVICE,由于AUDIO_DEVICE_OUT_TELEPHONY_TX 没有对应GAIN_DEVICE, 所以使用默认值speaker,从而将speaker对应的等级音量设置到modem dl下行中去,从而将先前一步设置的耳机音量给覆盖掉,导致问题现象出现;
调用-->
AudioMTKGainController::ApplyMdDlGain
调用-->
SpeechDriverNormal::SetDownlinkGain

解决方案

在AudioPolicyManagerCustomImpl.cpp做如下修改,避免通话模式设置AUDIO_DEVICE_OUT_TELEPHONY_TX 设备音量

status_t AudioPolicyManagerCustomImpl::checkAndSetGainTableAnalogGain(audio_stream_type_t stream, int index, const sp<AudioOutputDescriptor>& outputDesc,DeviceTypeSet device,int delayMs, bool force)
{...if ((activeStream == AUDIO_STREAM_VOICE_CALL || activeStream == AUDIO_STREAM_BLUETOOTH_SCO) &&outputDesc != mAudioPolicyManager->mPrimaryOutput &&!(((sp<SwAudioOutputDescriptor>&)outputDesc)->mFlags & AUDIO_OUTPUT_FLAG_VOIP_RX)) {// in voice, set to primary only once, skip othersbool PrimaryVolSetIsSkipped = false;    //  ALPS05140437  We need to check the primary output due to it may not  necessary to do call routing and  update to the new deviceDeviceTypeSet curPrimaryDevices = mAudioPolicyManager->mPrimaryOutput->devices().types();DeviceTypeSet curDevices = outputDesc->devices().types();PrimaryVolSetIsSkipped = (curDevices.find(Volume::getDeviceForVolume(curPrimaryDevices)) == curDevices.end());if (PrimaryVolSetIsSkipped) {ALOGD("%s skip. Cur device [%s], primary device [%s]", __FUNCTION__, dumpDeviceTypes(curDevices).c_str(), dumpDeviceTypes(curPrimaryDevices).c_str());} else {return NO_ERROR;}
+
+            if (curDevices.count(AUDIO_DEVICE_OUT_TELEPHONY_TX) != 0) {+                ALOGD("AUDIO_DEVICE_OUT_TELEPHONY_TX skip set voice volume");
+                return NO_ERROR;}}
...
}

MTK-voice最大音量通话-免提切到耳机模式后音量变小问题总结相关推荐

  1. 话机耳机模式进入保持状态下每隔1分钟会切换到免提模式后再切回耳机模式

    式后再切回耳机模式 2022-03-03 [描述] 在用耳机模式进行通话保持时,1分钟后耳机模式会跳到免提模式1s后再跳回到耳机模式,是什么原因? [原因] 在通话保持时,因为话机会有保持提示音&qu ...

  2. [FAQ18419][audio speech]通话免提模式如何使用副mic

    扬声器和主mic靠的太近,通话免提模式使用主mic,会导致噪声.回声等比较难消除,影响通话质量 可以在通话免提模式的时候使用副mic [SOLUTION] 1. sim卡通话和voip通话,免提模式都 ...

  3. mtk android 11接打电话默认免提功能

    修改功能的方案为MTK的源码,其他方案源码仅供参考. 1.在mtk源码当中有专门的宏控进行开关一些功能,就像这次的打电话面提功能.在device.mk文件当中可以搜到这个MTK_TB_APP_CALL ...

  4. 安卓 usb音量调节_戴尔推出面向Teams和Zoom视频通话的USB-C免提适配器

    COVID-19 大流行期间,许多企业将会议安排在了线上举办.为方便通过 Microsoft Teams 和 Zoom 之类云视讯平台进行沟通的笔记本电脑用户,戴尔特地推出了新款 USB-C 音频适配 ...

  5. android蓝牙电话音量,android – 蓝牙免提客户端音量控制

    我有一个Android设备作为一个免提客户端设备使用hfp. 我可以接到一个电话,扬声器和麦克风工作正如预期. 我的问题是,我似乎无法控制音量. 我试着使用下面的代码行找到正确的流,但没有一个似乎工作 ...

  6. android 拨打紧急号码,通话时开启免提功能实现

    对应拨打电话只需要调用ACTION_CALL加对应电话号码即可如下: void callPhone(){ Intent intent = new Intent(Intent.ACTION_CALL,U ...

  7. 【Qualcomm高通音频】在设备没有听筒时,如何强制开启免提通话模式?

    由于类似平板.贩卖机.车载等产品定义上都没有听筒这种音频设备,因此会经常遇到这样一个需求:强制免提. 以下是修改diff,请参考. 如果只是APK修改的话,可以参考: diff --git a/pac ...

  8. 高通Android 13默认切换免提功能

    1.测试部反馈 由于平板本身没有听筒功能 因此考虑工厂直接切换到免提功能 2.修改路径 frameworks/av/services/audiopolicy/enginedefault/src/Eng ...

  9. 苹果手机打电话没有声音怎么回事_手机打电话听筒没有声音,只有打开免提时才有声音,该怎么办?...

    您可以检查一下手机声音设置是否有问题,是否静音了全局音量:或者看看听筒是不是被手机壳或者是屏幕膜挡住,导致无法出声.以下是详细介绍: 1.首先,可以查看一下手机声音设置是否有问题.有的时候可能在不经意 ...

最新文章

  1. Nginx+Apache Yii2.0 配置方案
  2. CTF(pwn)-格式化字符串漏洞讲解(二) --攻防世界CGfsb
  3. C. Anton and Making Potions 贪心 + 二分
  4. Facebook的规模还在继续扩大
  5. World Wind Java开发之八——加载本地缓存文件构建大范围三维场景(
  6. 以JQuery的方式封装 cookie 方便调用
  7. hbase 特性与api
  8. c语言如何将8个字符串串联_C ++中的字符串串联:串联字符串的4种方法
  9. Pandas+Pyecharts | 医院药品销售数据可视化
  10. AllenNLP框架学习笔记(模型篇之一)
  11. 常规波束形成法matlab仿真,常规波束形成matlab程序
  12. Canvas箭头动画
  13. 介绍一下实现建模中可能用到的时间序列预测之线性二次移动平均,Excel的简单操作
  14. jpg图片转换为eps_如何将JPG图像转换为EPS
  15. 基于豆瓣哈哈哈哈哈哈小组的数据分析研究
  16. 从Redis List的各种使用场景来深刻理解它
  17. 8年Android开发教你如何写简历,写给正在求职的安卓开发
  18. STM32L151 INA826 ADS1115 PT100测温
  19. 未雨绸缪,数据分析对于企业应对经营危机非常重要
  20. 计算年龄算法(周岁虚岁)

热门文章

  1. mysql 查询 不用星号,MySQL Cookbook系列博客
  2. 一个菜逼程序员的2016年度总结
  3. 当下美容销售该如何做?
  4. time machine_如何将Time Machine驱动器用于文件存储和备份
  5. UR机器人装箱姿态_优傲机器人用户手册, UR3、UR5、UR10 3.11 版本
  6. IOS 之 螺旋仪与加速计, 磁力计
  7. PC端获取摄像头图片并上传的实现
  8. python从入门到走火入魔_Python 函数式编程:从入门到走火入魔
  9. 抓包工具(Fiddler4)
  10. V-model的双向绑定原理