上篇文章中只是讲到配置文件在哪里,怎么读取文件,但是真正的文件解析还没有开始。这篇就开始分析文件解析,认识这些解析的参数。
接着上篇Audio设备文件加载继续进行分析,知道主要是这个函数起到解析的作用。
static status_t deserializeAudioPolicyXmlConfig(AudioPolicyConfig &config) {
char audioPolicyXmlConfigFile[AUDIO_POLICY_XML_CONFIG_FILE_PATH_MAX_LENGTH];
status_t ret;
for (int i = 0; i < kConfigLocationListSize; i++) {
PolicySerializer serializer;
snprintf(audioPolicyXmlConfigFile,
sizeof(audioPolicyXmlConfigFile),
"%s/%s",
kConfigLocationList[i],
AUDIO_POLICY_XML_CONFIG_FILE_NAME);
ret = serializer.deserialize(audioPolicyXmlConfigFile, config);
if (ret == NO_ERROR) {
break;
}
}
return ret;
}
也知道audioPolicyXmlConfigFile的配置文件是/system/etc/auido_policy_configuration.xml文件。传入的参数是AudioPolicyConfig,这个类包含很多变量,
private:
HwModuleCollection &mHwModules; /**< Collection of Module, with Profiles, i.e. Mix Ports. */
DeviceVector &mAvailableOutputDevices;
DeviceVector &mAvailableInputDevices;
sp<DeviceDescriptor> &mDefaultOutputDevices;
VolumeCurvesCollection *mVolumeCurves;
bool &mIsSpeakerDrcEnabled;
也就是需要传递进来进行初始化的变量,解析的作用就是初始化这五个变量。
函数里面有个PolicySerializer类 /frameworks/