[AudioServer][Strategies] Fix Min/Max index overwritting
When a strategy holds 2 stream types, following the same volume group (aka same volume curves), when audioservice initializes, it may overwritte the Min/max for the volume group. This is due to the fact that the second stream type is not recognized and falls back on default volume group (aka Music). So, Min/max are overwritten with music Min/max. This CL fixes the bug by formatting correctly the AudioAttributesGroups of a product strategy by checking not only the volume group id but also the stream type. Bug: 136121584 Test: build & run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioProductStrategyTest run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioVolumeGroupTest run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioVolumeGroupChangeHandlerTest run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioManagerTest#testPermissionsForVolumePerAttributes run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioManagerTest#testGetAndValidateProductStrategies run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioManagerTest#testGetAndValidateVolumeGroups run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioManagerTest#testSetGetVolumePerAttributesWithInvalidAttributes run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioManagerTest#testSetGetVolumePerAttributes run cts-dev -m CtsMediaTestCase --test android.media.cts.AudioManagerTest#testVolumeGroupCallback Change-Id: I3aab572ef4daeecce13bbcef6278edcc42b7d594 Signed-off-by: François Gaffie <francois.gaffie@renault.com>
This commit is contained in:
committed by
Eric Laurent
parent
fd99a18c12
commit
176dc1fc03
@@ -85,10 +85,23 @@ static jint convertAudioProductStrategiesFromNative(
|
|||||||
jStrategyId = static_cast<jint>(strategy.getId());
|
jStrategyId = static_cast<jint>(strategy.getId());
|
||||||
|
|
||||||
// Audio Attributes Group array
|
// Audio Attributes Group array
|
||||||
std::map<int, std::vector<AudioAttributes> > groups;
|
int attrGroupIndex = 0;
|
||||||
|
std::map<int /**attributesGroupIndex*/, std::vector<AudioAttributes> > groups;
|
||||||
for (const auto &attr : strategy.getAudioAttributes()) {
|
for (const auto &attr : strategy.getAudioAttributes()) {
|
||||||
int attrGroupId = attr.getGroupId();
|
int groupId = attr.getGroupId();
|
||||||
groups[attrGroupId].push_back(attr);
|
int streamType = attr.getStreamType();
|
||||||
|
const auto &iter = std::find_if(begin(groups), end(groups),
|
||||||
|
[groupId, streamType](const auto &iter) {
|
||||||
|
const auto &frontAttr = iter.second.front();
|
||||||
|
return frontAttr.getGroupId() == groupId && frontAttr.getStreamType() == streamType;
|
||||||
|
});
|
||||||
|
// Same Volume Group Id and same stream type
|
||||||
|
if (iter != end(groups)) {
|
||||||
|
groups[iter->first].push_back(attr);
|
||||||
|
} else {
|
||||||
|
// Add a new Group of AudioAttributes for this product strategy
|
||||||
|
groups[attrGroupIndex++].push_back(attr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
numAttributesGroups = groups.size();
|
numAttributesGroups = groups.size();
|
||||||
|
|
||||||
@@ -97,7 +110,7 @@ static jint convertAudioProductStrategiesFromNative(
|
|||||||
for (const auto &iter : groups) {
|
for (const auto &iter : groups) {
|
||||||
std::vector<AudioAttributes> audioAttributesGroups = iter.second;
|
std::vector<AudioAttributes> audioAttributesGroups = iter.second;
|
||||||
jint numAttributes = audioAttributesGroups.size();
|
jint numAttributes = audioAttributesGroups.size();
|
||||||
jint jGroupId = iter.first;
|
jint jGroupId = audioAttributesGroups.front().getGroupId();
|
||||||
jint jLegacyStreamType = audioAttributesGroups.front().getStreamType();
|
jint jLegacyStreamType = audioAttributesGroups.front().getStreamType();
|
||||||
|
|
||||||
jStatus = JNIAudioAttributeHelper::getJavaArray(env, &jAudioAttributes, numAttributes);
|
jStatus = JNIAudioAttributeHelper::getJavaArray(env, &jAudioAttributes, numAttributes);
|
||||||
|
|||||||
Reference in New Issue
Block a user