Merge changes from topic "volume_fixes"

* changes:
  audio policy: add call assistant volume stream
  [AudioPolicy] fix volume regression
  [AudioPolicy][Engine] Attributes of strategy not populated
  Revert "Revert "[audiopolicy][enginebase] Fix schema verification""
gugelfrei
Eric Laurent 4 years ago committed by Android (Google) Code Review
commit f29bd6bf29

@ -315,6 +315,7 @@ const StreamTypeConverter::Table StreamTypeConverter::mTable[] = {
MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ASSISTANT),
MAKE_STRING_FROM_ENUM(AUDIO_STREAM_REROUTING),
MAKE_STRING_FROM_ENUM(AUDIO_STREAM_PATCH),
MAKE_STRING_FROM_ENUM(AUDIO_STREAM_CALL_ASSISTANT),
TERMINATOR
};

@ -1902,9 +1902,11 @@ AudioFlinger::PlaybackThread::PlaybackThread(const sp<AudioFlinger>& audioFlinge
mStreamTypes[stream].volume = 0.0f;
mStreamTypes[stream].mute = mAudioFlinger->streamMute_l(stream);
}
// Audio patch volume is always max
// Audio patch and call assistant volume are always max
mStreamTypes[AUDIO_STREAM_PATCH].volume = 1.0f;
mStreamTypes[AUDIO_STREAM_PATCH].mute = false;
mStreamTypes[AUDIO_STREAM_CALL_ASSISTANT].volume = 1.0f;
mStreamTypes[AUDIO_STREAM_CALL_ASSISTANT].mute = false;
}
AudioFlinger::PlaybackThread::~PlaybackThread()

@ -107,6 +107,13 @@ product_strategy_t EngineBase::getProductStrategyByName(const std::string &name)
engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig()
{
auto loadVolumeConfig = [](auto &volumeGroups, auto &volumeConfig) {
// Ensure name unicity to prevent duplicate
LOG_ALWAYS_FATAL_IF(std::any_of(std::begin(volumeGroups), std::end(volumeGroups),
[&volumeConfig](const auto &volumeGroup) {
return volumeConfig.name == volumeGroup.second->getName(); }),
"group name %s defined twice, review the configuration",
volumeConfig.name.c_str());
sp<VolumeGroup> volumeGroup = new VolumeGroup(volumeConfig.name, volumeConfig.indexMin,
volumeConfig.indexMax);
volumeGroups[volumeGroup->getId()] = volumeGroup;
@ -125,13 +132,21 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig()
}
return volumeGroup;
};
auto addSupportedStreamAttributes = [](auto &group, auto &volumeGroup, auto &strategy) {
volumeGroup->addSupportedStream(group.stream);
auto addSupportedAttributesToGroup = [](auto &group, auto &volumeGroup, auto &strategy) {
for (const auto &attr : group.attributesVect) {
strategy->addAttributes({group.stream, volumeGroup->getId(), attr});
volumeGroup->addSupportedAttributes(attr);
}
};
auto checkStreamForGroups = [](auto streamType, const auto &volumeGroups) {
const auto &iter = std::find_if(std::begin(volumeGroups), std::end(volumeGroups),
[&streamType](const auto &volumeGroup) {
const auto& streams = volumeGroup.second->getStreamTypes();
return std::find(std::begin(streams), std::end(streams), streamType) !=
std::end(streams);
});
return iter != end(volumeGroups);
};
auto result = engineConfig::parse();
if (result.parsedConfig == nullptr) {
@ -140,15 +155,30 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig()
android::status_t ret = engineConfig::parseLegacyVolumes(config.volumeGroups);
result = {std::make_unique<engineConfig::Config>(config),
static_cast<size_t>(ret == NO_ERROR ? 0 : 1)};
} else {
// Append for internal use only volume groups (e.g. rerouting/patch)
result.parsedConfig->volumeGroups.insert(
std::end(result.parsedConfig->volumeGroups),
std::begin(gSystemVolumeGroups), std::end(gSystemVolumeGroups));
}
// Append for internal use only strategies (e.g. rerouting/patch)
result.parsedConfig->productStrategies.insert(
std::end(result.parsedConfig->productStrategies),
std::begin(gOrderedSystemStrategies), std::end(gOrderedSystemStrategies));
ALOGE_IF(result.nbSkippedElement != 0, "skipped %zu elements", result.nbSkippedElement);
engineConfig::VolumeGroup defaultVolumeConfig;
engineConfig::VolumeGroup defaultSystemVolumeConfig;
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;
}
if (volumeConfig.name.compare("AUDIO_STREAM_PATCH") == 0) {
defaultSystemVolumeConfig = volumeConfig;
}
loadVolumeConfig(mVolumeGroups, volumeConfig);
}
for (auto& strategyConfig : result.parsedConfig->productStrategies) {
@ -157,18 +187,31 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig()
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);
sp<VolumeGroup> volumeGroup = nullptr;
// If no volume group provided for this strategy, creates a new one using
// Music Volume Group configuration (considered as the default)
if (iter == end(mVolumeGroups)) {
engineConfig::VolumeGroup volumeConfig;
if (group.stream >= AUDIO_STREAM_PUBLIC_CNT) {
volumeConfig = defaultSystemVolumeConfig;
} else {
addSupportedStreamAttributes(group, iter->second, strategy);
volumeConfig = defaultVolumeConfig;
}
ALOGW("%s: No configuration of %s found, using default volume configuration"
, __FUNCTION__, group.volumeGroup.c_str());
volumeConfig.name = group.volumeGroup;
volumeGroup = loadVolumeConfig(mVolumeGroups, volumeConfig);
} else {
volumeGroup = iter->second;
}
if (group.stream != AUDIO_STREAM_DEFAULT) {
// A legacy stream can be assigned once to a volume group
LOG_ALWAYS_FATAL_IF(checkStreamForGroups(group.stream, mVolumeGroups),
"stream %s already assigned to a volume group, "
"review the configuration", toString(group.stream).c_str());
volumeGroup->addSupportedStream(group.stream);
}
addSupportedAttributesToGroup(group, volumeGroup, strategy);
}
product_strategy_t strategyId = strategy->getId();
mProductStrategies[strategyId] = strategy;

@ -113,7 +113,7 @@ const engineConfig::ProductStrategies gOrderedStrategies = {
},
{"STRATEGY_CALL_ASSISTANT",
{
{"", AUDIO_STREAM_PATCH, "AUDIO_STREAM_PATCH",
{"", AUDIO_STREAM_CALL_ASSISTANT, "AUDIO_STREAM_CALL_ASSISTANT",
{{AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_CALL_ASSISTANT, AUDIO_SOURCE_DEFAULT, 0, ""}}
}
},
@ -125,15 +125,22 @@ const engineConfig::ProductStrategies gOrderedStrategies = {
AUDIO_FLAG_BEACON, ""}}
}
},
},
{"STRATEGY_REROUTING",
}
};
/**
* For Internal use of respectively audio policy and audioflinger
* For compatibility reason why apm volume config file, volume group name is the stream type.
*/
const engineConfig::ProductStrategies gOrderedSystemStrategies = {
{"rerouting",
{
{"", AUDIO_STREAM_REROUTING, "AUDIO_STREAM_REROUTING",
{{AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_UNKNOWN, AUDIO_SOURCE_DEFAULT, 0, ""}}
}
},
},
{"STRATEGY_PATCH",
{"patch",
{
{"", AUDIO_STREAM_PATCH, "AUDIO_STREAM_PATCH",
{{AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_UNKNOWN, AUDIO_SOURCE_DEFAULT, 0, ""}}
@ -141,6 +148,28 @@ const engineConfig::ProductStrategies gOrderedStrategies = {
},
}
};
const engineConfig::VolumeGroups gSystemVolumeGroups = {
{"AUDIO_STREAM_REROUTING", 0, 1,
{
{"DEVICE_CATEGORY_SPEAKER", {{0,0}, {100, 0}}},
{"DEVICE_CATEGORY_HEADSET", {{0,0}, {100, 0}}},
{"DEVICE_CATEGORY_EARPIECE", {{0,0}, {100, 0}}},
{"DEVICE_CATEGORY_EXT_MEDIA", {{0,0}, {100, 0}}},
{"DEVICE_CATEGORY_HEARING_AID", {{0,0}, {100, 0}}},
}
},
{"AUDIO_STREAM_PATCH", 0, 1,
{
{"DEVICE_CATEGORY_SPEAKER", {{0,0}, {100, 0}}},
{"DEVICE_CATEGORY_HEADSET", {{0,0}, {100, 0}}},
{"DEVICE_CATEGORY_EARPIECE", {{0,0}, {100, 0}}},
{"DEVICE_CATEGORY_EXT_MEDIA", {{0,0}, {100, 0}}},
{"DEVICE_CATEGORY_HEARING_AID", {{0,0}, {100, 0}}},
}
}
};
const engineConfig::Config gDefaultEngineConfig = {
1.0,

@ -147,10 +147,6 @@ limitations under the License.
<ProductStrategy name="notification">
<AttributesGroup streamType="AUDIO_STREAM_NOTIFICATION" volumeGroup="ring">
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION"/> </Attributes>
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/> </Attributes>
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/> </Attributes>
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/> </Attributes>
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_EVENT"/> </Attributes>
</AttributesGroup>
</ProductStrategy>
<ProductStrategy name="system">
@ -167,19 +163,5 @@ limitations under the License.
</AttributesGroup>
</ProductStrategy>
<!-- Routing Strategy rerouting may be removed as following media??? -->
<ProductStrategy name="rerouting">
<AttributesGroup streamType="AUDIO_STREAM_REROUTING" volumeGroup="rerouting">
<Attributes></Attributes>
</AttributesGroup>
</ProductStrategy>
<!-- Patch stream needs full scale volume, define it otherwise switch to default... -->
<ProductStrategy name="patch">
<AttributesGroup streamType="AUDIO_STREAM_PATCH" volumeGroup="patch">
<Attributes></Attributes>
</AttributesGroup>
</ProductStrategy>
</ProductStrategies>

@ -189,57 +189,5 @@
</volume>
</volumeGroup>
<volumeGroup>
<name>rerouting</name>
<indexMin>0</indexMin>
<indexMax>1</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID">
<point>0,0</point>
<point>100,0</point>
</volume>
</volumeGroup>
<volumeGroup>
<name>patch</name>
<indexMin>0</indexMin>
<indexMax>1</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID">
<point>0,0</point>
<point>100,0</point>
</volume>
</volumeGroup>
</volumeGroups>

@ -147,10 +147,6 @@ limitations under the License.
<ProductStrategy name="notification">
<AttributesGroup streamType="AUDIO_STREAM_NOTIFICATION" volumeGroup="ring">
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION"/> </Attributes>
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/> </Attributes>
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/> </Attributes>
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/> </Attributes>
<Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_EVENT"/> </Attributes>
</AttributesGroup>
</ProductStrategy>
<ProductStrategy name="system">
@ -167,18 +163,5 @@ limitations under the License.
</AttributesGroup>
</ProductStrategy>
<!-- Routing Strategy rerouting may be removed as following media??? -->
<ProductStrategy name="rerouting">
<AttributesGroup streamType="AUDIO_STREAM_REROUTING" volumeGroup="rerouting">
<Attributes></Attributes>
</AttributesGroup>
</ProductStrategy>
<!-- Patch stream needs full scale volume, define it otherwise switch to default... -->
<ProductStrategy name="patch">
<AttributesGroup streamType="AUDIO_STREAM_PATCH" volumeGroup="patch">
<Attributes></Attributes>
</AttributesGroup>
</ProductStrategy>
</ProductStrategies>

@ -189,57 +189,5 @@
</volume>
</volumeGroup>
<volumeGroup>
<name>rerouting</name>
<indexMin>0</indexMin>
<indexMax>1</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID">
<point>0,0</point>
<point>100,0</point>
</volume>
</volumeGroup>
<volumeGroup>
<name>patch</name>
<indexMin>0</indexMin>
<indexMax>1</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA">
<point>0,0</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID">
<point>0,0</point>
<point>100,0</point>
</volume>
</volumeGroup>
</volumeGroups>

@ -97,20 +97,5 @@
</AttributesGroup>
</ProductStrategy>
<!-- Routing Strategy rerouting may be removed as following media??? -->
<ProductStrategy name="STRATEGY_REROUTING">
<AttributesGroup streamType="AUDIO_STREAM_REROUTING" volumeGroup="rerouting">
<Attributes></Attributes>
</AttributesGroup>
</ProductStrategy>
<!-- Default product strategy has empty attributes -->
<ProductStrategy name="STRATEGY_PATCH">
<AttributesGroup streamType="AUDIO_STREAM_PATCH" volumeGroup="patch">
<Attributes></Attributes>
</AttributesGroup>
</ProductStrategy>
</ProductStrategies>

@ -215,26 +215,6 @@ volume index from 0 to 100.
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="DEFAULT_HEARING_AID_VOLUME_CURVE"/>
</volumeGroup>
<volumeGroup>
<name>rerouting</name>
<indexMin>0</indexMin>
<indexMax>1</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="FULL_SCALE_VOLUME_CURVE"/>
</volumeGroup>
<volumeGroup>
<name>patch</name>
<indexMin>0</indexMin>
<indexMax>1</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="FULL_SCALE_VOLUME_CURVE"/>
</volumeGroup>
</volumeGroups>

@ -97,20 +97,5 @@
</AttributesGroup>
</ProductStrategy>
<!-- Routing Strategy rerouting may be removed as following media??? -->
<ProductStrategy name="STRATEGY_REROUTING">
<AttributesGroup streamType="AUDIO_STREAM_REROUTING" volumeGroup="rerouting">
<Attributes></Attributes>
</AttributesGroup>
</ProductStrategy>
<!-- Default product strategy has empty attributes -->
<ProductStrategy name="STRATEGY_PATCH">
<AttributesGroup streamType="AUDIO_STREAM_PATCH" volumeGroup="patch">
<Attributes></Attributes>
</AttributesGroup>
</ProductStrategy>
</ProductStrategies>

@ -217,26 +217,5 @@ volume index from 0 to 100.
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="DEFAULT_HEARING_AID_VOLUME_CURVE"/>
</volumeGroup>
<volumeGroup>
<name>rerouting</name>
<indexMin>0</indexMin>
<indexMax>1</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="FULL_SCALE_VOLUME_CURVE"/>
</volumeGroup>
<volumeGroup>
<name>patch</name>
<indexMin>0</indexMin>
<indexMax>1</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="FULL_SCALE_VOLUME_CURVE"/>
</volumeGroup>
</volumeGroups>

Loading…
Cancel
Save