Loading media/libeffects/config/src/EffectsConfig.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ constexpr std::pair<audio_stream_type_t, const char*> STREAM_NAME_MAP<audio_stre {AUDIO_STREAM_ENFORCED_AUDIBLE, "enforced_audible"}, {AUDIO_STREAM_DTMF, "dtmf"}, {AUDIO_STREAM_TTS, "tts"}, {AUDIO_STREAM_ASSISTANT, "assistant"}, }; /** All input stream types which support effects. Loading media/libmediahelper/TypeConverter.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -312,6 +312,7 @@ const StreamTypeConverter::Table StreamTypeConverter::mTable[] = { MAKE_STRING_FROM_ENUM(AUDIO_STREAM_DTMF), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_TTS), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ACCESSIBILITY), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ASSISTANT), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_REROUTING), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_PATCH), TERMINATOR Loading services/audiopolicy/config/audio_policy_volumes.xml +10 −0 Original line number Diff line number Diff line Loading @@ -181,6 +181,16 @@ volume index from 0 to 100. ref="DEFAULT_NON_MUTABLE_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ACCESSIBILITY" deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="DEFAULT_NON_MUTABLE_HEARING_AID_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_MEDIA_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_DEVICE_CATEGORY_SPEAKER_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_MEDIA_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_MEDIA_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="DEFAULT_HEARING_AID_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_REROUTING" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="FULL_SCALE_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_REROUTING" deviceCategory="DEVICE_CATEGORY_SPEAKER" Loading services/audiopolicy/engine/common/src/EngineBase.cpp +53 −40 Original line number Diff line number Diff line Loading @@ -106,30 +106,7 @@ product_strategy_t EngineBase::getProductStrategyByName(const std::string &name) engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig() { auto loadProductStrategies = [](auto& strategyConfigs, auto& productStrategies, auto& volumeGroups) { for (auto& strategyConfig : strategyConfigs) { sp<ProductStrategy> strategy = new ProductStrategy(strategyConfig.name); for (const auto &group : strategyConfig.attributesGroups) { const auto &iter = std::find_if(begin(volumeGroups), end(volumeGroups), [&group](const auto &volumeGroup) { return group.volumeGroup == volumeGroup.second->getName(); }); ALOG_ASSERT(iter != end(volumeGroups), "Invalid Volume Group Name %s", group.volumeGroup.c_str()); if (group.stream != AUDIO_STREAM_DEFAULT) { iter->second->addSupportedStream(group.stream); } for (const auto &attr : group.attributesVect) { strategy->addAttributes({group.stream, iter->second->getId(), attr}); iter->second->addSupportedAttributes(attr); } } product_strategy_t strategyId = strategy->getId(); productStrategies[strategyId] = strategy; } }; auto loadVolumeGroups = [](auto &volumeConfigs, auto &volumeGroups) { for (auto &volumeConfig : volumeConfigs) { auto loadVolumeConfig = [](auto &volumeGroups, auto &volumeConfig) { sp<VolumeGroup> volumeGroup = new VolumeGroup(volumeConfig.name, volumeConfig.indexMin, volumeConfig.indexMax); volumeGroups[volumeGroup->getId()] = volumeGroup; Loading @@ -146,8 +123,16 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig() } volumeGroup->add(curve); } return volumeGroup; }; auto addSupportedStreamAttributes = [](auto &group, auto &volumeGroup, auto &strategy) { volumeGroup->addSupportedStream(group.stream); for (const auto &attr : group.attributesVect) { strategy->addAttributes({group.stream, volumeGroup->getId(), attr}); volumeGroup->addSupportedAttributes(attr); } }; auto result = engineConfig::parse(); if (result.parsedConfig == nullptr) { ALOGW("%s: No configuration found, using default matching phone experience.", __FUNCTION__); Loading @@ -157,9 +142,37 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig() static_cast<size_t>(ret == NO_ERROR ? 0 : 1)}; } ALOGE_IF(result.nbSkippedElement != 0, "skipped %zu elements", result.nbSkippedElement); loadVolumeGroups(result.parsedConfig->volumeGroups, mVolumeGroups); loadProductStrategies(result.parsedConfig->productStrategies, mProductStrategies, mVolumeGroups); engineConfig::VolumeGroup defaultVolumeConfig; for (auto &volumeConfig : result.parsedConfig->volumeGroups) { // save default volume config for streams not defined in configuration if (volumeConfig.name.compare("AUDIO_STREAM_MUSIC") == 0) { defaultVolumeConfig = volumeConfig; } loadVolumeConfig(mVolumeGroups, volumeConfig); } for (auto& strategyConfig : result.parsedConfig->productStrategies) { sp<ProductStrategy> strategy = new ProductStrategy(strategyConfig.name); for (const auto &group : strategyConfig.attributesGroups) { const auto &iter = std::find_if(begin(mVolumeGroups), end(mVolumeGroups), [&group](const auto &volumeGroup) { return group.volumeGroup == volumeGroup.second->getName(); }); if (group.stream != AUDIO_STREAM_DEFAULT) { if (iter == end(mVolumeGroups)) { ALOGW("%s: No configuration of %s found, using default volume configuration" , __FUNCTION__, group.volumeGroup.c_str()); defaultVolumeConfig.name = group.volumeGroup; sp<VolumeGroup> volumeGroup = loadVolumeConfig(mVolumeGroups, defaultVolumeConfig); addSupportedStreamAttributes(group, volumeGroup, strategy); } else { addSupportedStreamAttributes(group, iter->second, strategy); } } } product_strategy_t strategyId = strategy->getId(); mProductStrategies[strategyId] = strategy; } mProductStrategies.initialize(); return result; } Loading services/audiopolicy/engine/common/src/EngineDefaultConfig.h +4 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,10 @@ const engineConfig::ProductStrategies gOrderedStrategies = { }, {"STRATEGY_MEDIA", { {"assistant", AUDIO_STREAM_ASSISTANT, "AUDIO_STREAM_ASSISTANT", {{AUDIO_CONTENT_TYPE_SPEECH, AUDIO_USAGE_ASSISTANT, AUDIO_SOURCE_DEFAULT, 0, ""}} }, {"music", AUDIO_STREAM_MUSIC, "AUDIO_STREAM_MUSIC", { {AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_MEDIA, AUDIO_SOURCE_DEFAULT, 0, ""}, Loading Loading
media/libeffects/config/src/EffectsConfig.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ constexpr std::pair<audio_stream_type_t, const char*> STREAM_NAME_MAP<audio_stre {AUDIO_STREAM_ENFORCED_AUDIBLE, "enforced_audible"}, {AUDIO_STREAM_DTMF, "dtmf"}, {AUDIO_STREAM_TTS, "tts"}, {AUDIO_STREAM_ASSISTANT, "assistant"}, }; /** All input stream types which support effects. Loading
media/libmediahelper/TypeConverter.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -312,6 +312,7 @@ const StreamTypeConverter::Table StreamTypeConverter::mTable[] = { MAKE_STRING_FROM_ENUM(AUDIO_STREAM_DTMF), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_TTS), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ACCESSIBILITY), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ASSISTANT), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_REROUTING), MAKE_STRING_FROM_ENUM(AUDIO_STREAM_PATCH), TERMINATOR Loading
services/audiopolicy/config/audio_policy_volumes.xml +10 −0 Original line number Diff line number Diff line Loading @@ -181,6 +181,16 @@ volume index from 0 to 100. ref="DEFAULT_NON_MUTABLE_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ACCESSIBILITY" deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="DEFAULT_NON_MUTABLE_HEARING_AID_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_MEDIA_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_DEVICE_CATEGORY_SPEAKER_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_MEDIA_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_MEDIA_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_ASSISTANT" deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="DEFAULT_HEARING_AID_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_REROUTING" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="FULL_SCALE_VOLUME_CURVE"/> <volume stream="AUDIO_STREAM_REROUTING" deviceCategory="DEVICE_CATEGORY_SPEAKER" Loading
services/audiopolicy/engine/common/src/EngineBase.cpp +53 −40 Original line number Diff line number Diff line Loading @@ -106,30 +106,7 @@ product_strategy_t EngineBase::getProductStrategyByName(const std::string &name) engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig() { auto loadProductStrategies = [](auto& strategyConfigs, auto& productStrategies, auto& volumeGroups) { for (auto& strategyConfig : strategyConfigs) { sp<ProductStrategy> strategy = new ProductStrategy(strategyConfig.name); for (const auto &group : strategyConfig.attributesGroups) { const auto &iter = std::find_if(begin(volumeGroups), end(volumeGroups), [&group](const auto &volumeGroup) { return group.volumeGroup == volumeGroup.second->getName(); }); ALOG_ASSERT(iter != end(volumeGroups), "Invalid Volume Group Name %s", group.volumeGroup.c_str()); if (group.stream != AUDIO_STREAM_DEFAULT) { iter->second->addSupportedStream(group.stream); } for (const auto &attr : group.attributesVect) { strategy->addAttributes({group.stream, iter->second->getId(), attr}); iter->second->addSupportedAttributes(attr); } } product_strategy_t strategyId = strategy->getId(); productStrategies[strategyId] = strategy; } }; auto loadVolumeGroups = [](auto &volumeConfigs, auto &volumeGroups) { for (auto &volumeConfig : volumeConfigs) { auto loadVolumeConfig = [](auto &volumeGroups, auto &volumeConfig) { sp<VolumeGroup> volumeGroup = new VolumeGroup(volumeConfig.name, volumeConfig.indexMin, volumeConfig.indexMax); volumeGroups[volumeGroup->getId()] = volumeGroup; Loading @@ -146,8 +123,16 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig() } volumeGroup->add(curve); } return volumeGroup; }; auto addSupportedStreamAttributes = [](auto &group, auto &volumeGroup, auto &strategy) { volumeGroup->addSupportedStream(group.stream); for (const auto &attr : group.attributesVect) { strategy->addAttributes({group.stream, volumeGroup->getId(), attr}); volumeGroup->addSupportedAttributes(attr); } }; auto result = engineConfig::parse(); if (result.parsedConfig == nullptr) { ALOGW("%s: No configuration found, using default matching phone experience.", __FUNCTION__); Loading @@ -157,9 +142,37 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig() static_cast<size_t>(ret == NO_ERROR ? 0 : 1)}; } ALOGE_IF(result.nbSkippedElement != 0, "skipped %zu elements", result.nbSkippedElement); loadVolumeGroups(result.parsedConfig->volumeGroups, mVolumeGroups); loadProductStrategies(result.parsedConfig->productStrategies, mProductStrategies, mVolumeGroups); engineConfig::VolumeGroup defaultVolumeConfig; for (auto &volumeConfig : result.parsedConfig->volumeGroups) { // save default volume config for streams not defined in configuration if (volumeConfig.name.compare("AUDIO_STREAM_MUSIC") == 0) { defaultVolumeConfig = volumeConfig; } loadVolumeConfig(mVolumeGroups, volumeConfig); } for (auto& strategyConfig : result.parsedConfig->productStrategies) { sp<ProductStrategy> strategy = new ProductStrategy(strategyConfig.name); for (const auto &group : strategyConfig.attributesGroups) { const auto &iter = std::find_if(begin(mVolumeGroups), end(mVolumeGroups), [&group](const auto &volumeGroup) { return group.volumeGroup == volumeGroup.second->getName(); }); if (group.stream != AUDIO_STREAM_DEFAULT) { if (iter == end(mVolumeGroups)) { ALOGW("%s: No configuration of %s found, using default volume configuration" , __FUNCTION__, group.volumeGroup.c_str()); defaultVolumeConfig.name = group.volumeGroup; sp<VolumeGroup> volumeGroup = loadVolumeConfig(mVolumeGroups, defaultVolumeConfig); addSupportedStreamAttributes(group, volumeGroup, strategy); } else { addSupportedStreamAttributes(group, iter->second, strategy); } } } product_strategy_t strategyId = strategy->getId(); mProductStrategies[strategyId] = strategy; } mProductStrategies.initialize(); return result; } Loading
services/audiopolicy/engine/common/src/EngineDefaultConfig.h +4 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,10 @@ const engineConfig::ProductStrategies gOrderedStrategies = { }, {"STRATEGY_MEDIA", { {"assistant", AUDIO_STREAM_ASSISTANT, "AUDIO_STREAM_ASSISTANT", {{AUDIO_CONTENT_TYPE_SPEECH, AUDIO_USAGE_ASSISTANT, AUDIO_SOURCE_DEFAULT, 0, ""}} }, {"music", AUDIO_STREAM_MUSIC, "AUDIO_STREAM_MUSIC", { {AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_MEDIA, AUDIO_SOURCE_DEFAULT, 0, ""}, Loading