android路由规则修改,关于android audio路由策略的修改(续)

关于android audio路由策略的修改(续)

承接我的上一篇https://blog.51cto.com/8906847/2367935 文章。

例如你在HUD抬头显示设备中,需要加入FMTX功能,即fm发射功能,另外需要在打开fmtx广播时,音频优先走fmtx芯片,而不是走speaker。

那么可以这样实现:

1)方法一:通过特定状态标记,来修改audiopolicy的engine.cpp

2)方法二:是使用类似如下的方式:

如果是Java的,那么可以仿照类似如下的方式:

private AudioManager getAudioManager() {

AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);

return audioManager;

}

getAudioManager().setWiredDeviceConnectionState(AudioManager.DEVICE_OUT_AUX_DIGITAL, 0, "", "fmtx"); 表示fmtx关闭。

getAudioManager().setWiredDeviceConnectionState(AudioManager.DEVICE_OUT_AUX_DIGITAL, 1, "", "fmtx");表示fmtx开启。

这样更新了audio available output device,并且通知到frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp。

当然,你如果想自己增加一个DEVICE_OUT_FMTX类型也是可以的,但是更改的地方就比较多了,可以整个android代码搜索DEVICE_OUT_AUX_DIGITAL和AUDIO_DEVICE_OUT_AUX_DIGITAL,找到需要修改的地方。

对应的Engine.cpp对audio available output device的输出选择则修改如下:

diff --git a/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp b/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp

index 3dd84c3..5797595 100755

--- a/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp

+++ b/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp

@@ -614,6 +614,12 @@ audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy,

+do {

if (availableOutputDevicesType & AUDIO_DEVICE_OUT_AUX_DIGITAL ) {

device = availableOutputDevicesType & AUDIO_DEVICE_OUT_HEADPHONE;

break;

}

+} while(0);

然后fmtx驱动把HEADPHONE的codec输出,通过switch硬件输出到fmtx的模块上,而不是HEADPHONE上。

利用这种方法,也可以解决例如需求:

1)BT > FMTX > Speaker

2)而且 通话时,必须走speaker,因为AEC回声消除的问题。通过蓝牙音响的话,声音延迟太大,AEC不好处理。

来源:51CTO

作者:GaoNeil

链接:https://blog.51cto.com/8906847/2398620

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值