audio_policy_configuration.xml解读与配置

audio_policy_configuration.xml
xml中 的<modules>对应每一个audio hal 的so,module中列出的mixPorts,devicePorts和routes解析之后完整的描述了音频的路由规则,

  • module name。 支持“primary”(用于车载使用场景)、“A2DP”、“remote_submix”和“USB”。模块名称和相应音频驱动程序应编译到 audio.primary.$(variant).so 中。
  • devicePorts。 包含可从此模块访问的所有输入和输出设备(包括永久连接的设备和可移除设备)的设备描述符列表。
  • mixPorts。  包含由音频 HAL 提供的所有输出流和输入流的列表。每个 mixPort 实例都可被视为传输到 Android AudioService 的物理音频流。
  • routes。 定义输入和输出设备之间或音频流和设备之间可能存在的连接的列表。

mixPorts和devicePorts的 区别

devicePort有实际的物理设备,在android中有定义的设备类型,比如AUDIO_DEVICE_OUT_SPEAKER、AUDIO_DEVICE_IN_HDMI、AUDIO_DEVICE_OUT_BLUETOOTH_A2DP等等

mixPort为逻辑上的音频流,在xml里我们可以自定义逻辑音频流的名字,一般默认的primary_out流

    <mixPort name="primary_out" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY">
                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
                </mixPort>

从属与primary的module ,这个primary out的流作为一个route的source,也是要通过primary hal来达到这个目标的,这个route的描述如下

.......
<devicePort tagName="Speaker" role="sink" type="AUDIO_DEVICE_OUT_SPEAKER">
                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                             samplingRates="48000"
                             channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
......
...... 

 <route type="mix" sink="Speaker"
                       sources="primary_out"/>
......
......

flag为AUDIO_OUTPUT_FLAG_PRIMARY的音频流“primary_out”将通过primary hal流向设备为AUDIO_DEVICE_OUT_SPEAKER的sink设备Speaker

图示如下:

这里介绍一种通过配置xml,独特的一种输出模式 ,a2dp的tunnel mode,由于蓝牙音箱输出的不稳定,所以通过很难做做同步,一般soc厂商在经过自己的primary hal都有办法去调整同步,所以可以利用这一点让连接蓝牙音箱时音频流也可以先经过primary hal。有过同步处理之后再发送给BT协议栈,这就可以通过配置xml来做到这一点

我们定义一种mixPort的音频流叫做a2dp_output,devicePorts和route规则都放在primary hal的module 里面就可以做到这一点

<mixPort name="a2dp_output" role="source">
                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                        samplingRates="48000"
                        channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
                </mixPort>
....
            
                <devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink">
                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                            samplingRates="44100"
                            channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
....
                <route type="mix" sink="BT A2DP Out"
                        sources="a2dp_out"/>

流向图如下:

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值