关于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不好处理。

另外欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html
或者
我的3折优惠的专题组合课程:
https://edu.51cto.com/topic/2362.html
或者https://edu.51cto.com/topic/2385.html

原文地址:https://blog.51cto.com/8906847/2398620

时间: 2024-08-02 01:29:24

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

关于android audio路由策略的修改

关于android audio路由策略的修改 在工作时,往往有这样一些需求:1)希望针对不同的audio stream type(例如music.tts), 有输出到不同的输出设备(例如speaker.headset.BT.usb audio等)的需求,另外还有输出设备的优先级的需求.例如AUX(headset) > BT > FMTX > speaker.即例如BT连接了,那么音频就输出到BT,而不是FM发射.2)针对不同的audio stream type和不同的输出设备,有不同的输

路由策略、策略路由

路由就是报文在转发过程中的路径信息,用来指导报文转发 路由可划分为:网段路由.主机路由.直连路由.间接路由把最优的路由放到FIB(forwarding information base),通过它指导报文转发 路由策略是为了改变网络流量所经过的途径而修改路由信息的技术,主要通过改变路由属性来实现 路由策略的应用方式:1.控制路由的发布(路由协议发布路由信息时,对路由进行过滤,只发布满足条件的路由信息acl.prefix-list)2.控制路由的接收(对路由信息进行过滤,只接收满足条件的路由信息,提

Android -- Audio Native服务之启动流程分析(一)

Android -- Audio Native服务之启动流程分析(一) Android中的Audio系统是比较庞大.繁杂的一部分内容, 其中会涉及较多的音频编解码.多媒体制式与Android Audio HAL设备管理的知识.随着Android的发展,其所支持的音频设备也变得越来丰富,如扬声器.耳机.听筒等等:这种变化也为Android管理如此丰富的音频设备以及如何正确.合理地切换音频输出提出了更高的要求.面对如此繁杂的管理要求,我们分析Android Audio服务的历程想必也不会轻松.接下来

Android 系统默认参数的修改

转自: http://www.th7.cn/Program/Android/201505/447097.shtml 写在前面的话 一般在新项目开始之初,我们需要针对客户需求进行各种系统默认属性的配置,通常这些属性都是通过build.prop.settings.db .default.xml.一些功能package下的 config.xml 等来进行初始化配置的. 那么,要满足客户的定制需求,对于我们开发者来说,修改SettingsProvider默认值,而第一次开机时,用来填充settings.

策略路由和路由策略的不同

路由策略(Routing Policy)是为了改变网络流量所经过的途径而修改路由信息的技术,主要通过改变路由属性(包括可达性)来实现. 策略路由(Policy Routing)是一种依据用户制定的策略进行路由选择的机制. 路由器在发布与接收路由信息时,可能需要实施一些策略,以便对路由信息进行过滤,例如只接收或发布满足一定条件的路由信息.一种路由协议可能需要引入其它的路由协议发现的路由信息,路由器在引入其它路由协议的路由信息时,可能只需要引入一部分满足条件的路由信息,并控制所引入的路由信息的某些属

策略路由与路由策略

最近发现技术交流群里边有很多同学对策略路由与路由策略傻傻分不清楚,于是乎在此用简要通俗的语言来对这两个名词进行说明,希望会给迷茫的同学带来帮助. 路由策略:是对路由信息本身的参数进行修改.控制等,达到使设备有选择的学习路由信息的效果,所以你会看到路由策略是在路由学习与路由引入得时候使用的.说白了路由策略就是告诉设备怎么学. 策略路由:重点在路由,这个很好理解,就是通过策略控制数据包的转发方向.直接作用于用户数据,相当于告诉设备让数据包该怎么走.

Android开发之策略模式初探

策略模式主要定义一系列的算法,学过数据结构的朋友肯定知道,对于数组从大到小进行排序有着很多的算法,比如冒泡.交换.快速插入等等,策略模式就是把这些算法封装成一个个独立的类,方便使用时候进行任意的调用.这里以字符串替代为例, 有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案. 首先,我们建立一个抽象类RepTempRule 定义一些公用变量和方法: public abstract class

路由策略与策略路由的区别

路由策略与策略路由的区别这两中方案都是为了控制网络流量的可达性或调整网络流量的路径:一.路由策略.(Route-Policy)路由策略是通过修改路由表的路由条目来控制数据流量的可达性.即对接受和发布的路由进过滤.这种方式称为路由策略.路由策略由于仅仅在路由发现的时候产生作用,在路由表产生且稳定之后,如果网络不发生变化,路由表通常都不会变化,这时候,路由策略没有应用就不会占用资源. 二.策略路由.(Traffic-Policy)策略路由是通过用户制定的策略进行转发,且该策略优于路由表的转发.这种方

路由策略---华为实验,不懂得可以当模板用

路由策略是为了改变网络流量所经过的途径而修改路由信息的技术,主要通过改变路由属性(包括可达性)来实现. 实验拓扑:交换机配置: acl number 3000 rule 5 permit ip source192.168.6.105 0 destination 12.12.12.6 0 q traffic classifier secoperator or if-match acl 3000 q traffic behavior sec redirect ip-nexthop172.16.3.1