音量曲线加载code
路径:frameworks/av/services/audiopolicy/managerdefault/engine/common/src/EngineBase.cpp
engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig(){
...
auto loadVolumeGroups = [](auto &volumeConfigs, auto &volumeGroups) {
for (auto &volumeConfig : volumeConfigs) {
sp<VolumeGroup> volumeGroup = new VolumeGroup(volumeConfig.name, volumeConfig.indexMin,
volumeConfig.indexMax);
ALOGI("hippo id:%d, name:%s, min:%d, max:%d volumeConfig.volumeCurves:%d", volumeGroup->getId(), volumeConfig.name.c_str(), volumeConfig.indexMin,
volumeConfig.indexMax, volumeConfig.volumeCurves.size()); /* 小编的打印 */
volumeGroups[volumeGroup->getId()] = volumeGroup;
for (auto &configCurve : volumeConfig.volumeCurves) {
device_category deviceCat = DEVICE_CATEGORY_SPEAKER;
ALOGI("APM configCurve:%s", configCurve.deviceCategory.c_str()); /* 小编的打印 */
if (!DeviceCategoryConverter::fromString(configCurve.deviceCategory, deviceCat)) {
ALOGE("%s: Invalid %s", __FUNCTION__, configCurve.deviceCategory.c_str());
continue;
}
sp<VolumeCurve> curve = new VolumeCurve(deviceCat);
for (auto &point : configCurve.curvePoints) {
ALOGI("APM index:%d, attenuationInMb:%d", point.index, point.attenuationInMb); /* 小编的打印 */
curve->add({point.index, point.attenuationInMb});
}
volumeGroup->add(curve);
}
}
};
auto result = engineConfig::parse();
if (result.parsedConfig == nullptr) {
ALOGW("%s: No configuration found, using default matching phone experience.", __FUNCTION__);
engineConfig::Config config = gDefaultEngineConfig;
android::status_t ret = engineConfig::parseLegacyVolumes(config.volumeGroups);
result = {std::make_unique<engineConfig::Config>(config),
static_cast<size_t>(ret == NO_ERROR ? 0 : 1)};
}
ALOGE_IF(result.nbSkippedElement != 0, "skipped %zu elements", result.nbSkippedElement);
loadVolumeGroups(result.parsedConfig->volumeGroups, mVolumeGroups);/* 回调上面的loadVolumeGroups函数 */
...
}
共13个volume group:
AUDIO_STREAM_ACCESSIBILITY
AUDIO_STREAM_ALARM
AUDIO_STREAM_BLUETOOTH_SCO
AUDIO_STREAM_DTMF
AUDIO_STREAM_ENFORCED_AUDIBLE
AUDIO_STREAM_MUSIC
AUDIO_STREAM_NOTIFICATION
AUDIO_STREAM_PATCH
AUDIO_STREAM_REROUTING
AUDIO_STREAM_RING
AUDIO_STREAM_SYSTEM
AUDIO_STREAM_TTS
AUDIO_STREAM_VOICE_CALL
每个group有4个设备类型;
每个设备都有一条音量曲线;
参考音量曲线配置文件:
/vendor/etc/audio_policy_volumes.xml
/vendor/etc/default_volume_tables.xml
对应dumpsys media.audio_policy:
Volume Groups dump:字段