Android O配置audio_policy

Android 7.0之前

一直是用

device/<company>/<device>/audio/audio_policy.conf

这个文件来描述音频设备.

audio_policy_conf.h中定义了audio_policy.conf路径.

AudioPolicyManager.cpp:40: #include "audio_policy_conf.h"

AudioPolicyManager.cpp中使用了这个路径!

AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientInterface) 
...
{
    
    
    ConfigParsingUtils::loadAudioPolicyConfig(AUDIO_POLICY_VENDOR_CONFIG_FILE,
    ...
}

就在构造函数中,用ConfigParsingUtils对这个audio_policy.conf进行了解析.


status_t ConfigParsingUtils::loadAudioPolicyConfig()
{
    
    
    ...
    root = config_node("", "");
    config_load(root, data);
    
    loadHwModules(root, hwModules,
                  availableInputDevices, availableOutputDevices,
                  defaultOutputDevices, isSpeakerDrcEnabled);
    loadGlobalConfig(root,      hwModules.getModuleFromName(AUDIO_HARDWARE_MODULE_ID_PRIMARY),
                     availableInputDevices, availableOutputDevices,
                     defaultOutputDevices, isSpeakerDrcEnabled);
}

对audio_policy.conf做个遍历,挨个audio device去做load.

Android 7.0之后

在device.mk中可以用USE_XML_AUDIO_POLICY_CONF := 1这个宏来弃用一个新的方式.


//还是AudioPolicyManager的构造函数
#ifdef USE_XML_AUDIO_POLICY_CONF
    mVolumeCurves = new VolumeCurvesCollection();
    AudioPolicyConfig config(mHwModules, mAvailableOutputDevices, mAvailableInputDevices,
                             mDefaultOutputDevice, speakerDrcEnabled,
                             static_cast<VolumeCurvesCollection *>(mVolumeCurves));
if (deserializeAudioPolicyXmlConfig(config) != NO_ERROR) {
    
    
#else
  ...

就是在deserializeAudioPolicyXmlConfig里,对audio_policy_configuration.xml进行了解析.

扫描二维码关注公众号,回复: 14748851 查看本文章

与在 .conf 文件中一样,新的 XML 文件支持定义输出输入流配置文件、可用于播放和捕获的设备以及音频属性的数量和类型。此外,XML 格式还提供以下增强功能:

1.音频配置文件目前的结构类似于 HDMI 简单音频描述符,支持每种音频格式使用一组不同的采样率/声道掩码。

2.显式定义设备和流之间所有可能的连接。 以前,隐式规则使连接到同一HAL模块的所有设备互连成为可能,从而防止音频策略控制使用音频补丁API请求的连接。 在XML格式中,拓扑描述现在定义连接限制。

3.对“include”的支持可避免出现重复的标准 A2DP、USB 或重新导向提交定义。

4.可自定义的音量曲线。以前,音量表采用硬编码格式。在 XML 格式中,音量表通过描述来定义,并且可自定义。

frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml 中的模板展示了很多已在使用的上述功能。

猜你喜欢

转载自blog.csdn.net/bberdong/article/details/79910736