一直是用
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.
在device.mk中可以用USE_XML_AUDIO_POLICY_CONF := 1这个宏来弃用一个新的方式.
//还是AudioPolicyManager的构造函数
mVolumeCurves = new VolumeCurvesCollection();
AudioPolicyConfig config(mHwModules, mAvailableOutputDevices, mAvailableInputDevices,
mDefaultOutputDevice, speakerDrcEnabled,
static_cast<VolumeCurvesCollection *>(mVolumeCurves));
if (deserializeAudioPolicyXmlConfig(config) != NO_ERROR) {
...
就是在deserializeAudioPolicyXmlConfig里,对audio_policy_configuration.xml进行了解析.
与在 .conf 文件中一样,新的 XML 文件支持定义输出输入流配置文件、可用于播放和捕获的设备以及音频属性的数量和类型。此外,XML 格式还提供以下增强功能:
1.音频配置文件目前的结构类似于 HDMI 简单音频描述符,支持每种音频格式使用一组不同的采样率/声道掩码。
2.显式定义设备和流之间所有可能的连接。 以前,隐式规则使连接到同一HAL模块的所有设备互连成为可能,从而防止音频策略控制使用音频补丁API请求的连接。 在XML格式中,拓扑描述现在定义连接限制。
3.对“include”的支持可避免出现重复的标准 A2DP、USB 或重新导向提交定义。
4.可自定义的音量曲线。以前,音量表采用硬编码格式。在 XML 格式中,音量表通过描述来定义,并且可自定义。
frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml 中的模板展示了很多已在使用的上述功能。