audiopolicy: allows to fallback or not on default strategy/group
When attributes does not match a group or strategy, it falls back on
respectively default group or strategy.
This CL allows to control whether fallback shall be done or not.
It allows for example to detect orphans attributes and prevent from
overwritting volume for example.
Bug: 179759299
Test: make
Signed-off-by: Francois Gaffie <francois.gaffie@renault.com>
Change-Id: Ieeeab48ca3ec2b031b7a99e2e7ab26d2e4d70535
diff --git a/media/libaudioclient/AudioSystem.cpp b/media/libaudioclient/AudioSystem.cpp
index 14578d6..4a3069e 100644
--- a/media/libaudioclient/AudioSystem.cpp
+++ b/media/libaudioclient/AudioSystem.cpp
@@ -1994,7 +1994,8 @@
}
status_t AudioSystem::getProductStrategyFromAudioAttributes(const AudioAttributes& aa,
- product_strategy_t& productStrategy) {
+ product_strategy_t& productStrategy,
+ bool fallbackOnDefault) {
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
if (aps == 0) return PERMISSION_DENIED;
@@ -2003,7 +2004,8 @@
int32_t productStrategyAidl;
RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
- aps->getProductStrategyFromAudioAttributes(aaAidl, &productStrategyAidl)));
+ aps->getProductStrategyFromAudioAttributes(aaAidl, fallbackOnDefault,
+ &productStrategyAidl)));
productStrategy = VALUE_OR_RETURN_STATUS(
aidl2legacy_int32_t_product_strategy_t(productStrategyAidl));
return OK;
@@ -2022,7 +2024,8 @@
}
status_t AudioSystem::getVolumeGroupFromAudioAttributes(const AudioAttributes& aa,
- volume_group_t& volumeGroup) {
+ volume_group_t& volumeGroup,
+ bool fallbackOnDefault) {
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
if (aps == 0) return PERMISSION_DENIED;
@@ -2030,7 +2033,7 @@
legacy2aidl_AudioAttributes_AudioAttributesEx(aa));
int32_t volumeGroupAidl;
RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
- aps->getVolumeGroupFromAudioAttributes(aaAidl, &volumeGroupAidl)));
+ aps->getVolumeGroupFromAudioAttributes(aaAidl, fallbackOnDefault, &volumeGroupAidl)));
volumeGroup = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_volume_group_t(volumeGroupAidl));
return OK;
}
diff --git a/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl b/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
index 75dfc36..6588acc 100644
--- a/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
+++ b/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
@@ -296,10 +296,12 @@
boolean isHapticPlaybackSupported();
AudioProductStrategy[] listAudioProductStrategies();
- int /* product_strategy_t */ getProductStrategyFromAudioAttributes(in AudioAttributesEx aa);
+ int /* product_strategy_t */ getProductStrategyFromAudioAttributes(in AudioAttributesEx aa,
+ boolean fallbackOnDefault);
AudioVolumeGroup[] listAudioVolumeGroups();
- int /* volume_group_t */ getVolumeGroupFromAudioAttributes(in AudioAttributesEx aa);
+ int /* volume_group_t */ getVolumeGroupFromAudioAttributes(in AudioAttributesEx aa,
+ boolean fallbackOnDefault);
void setRttEnabled(boolean enabled);
diff --git a/media/libaudioclient/include/media/AudioSystem.h b/media/libaudioclient/include/media/AudioSystem.h
index db4c28f..694f2d0 100644
--- a/media/libaudioclient/include/media/AudioSystem.h
+++ b/media/libaudioclient/include/media/AudioSystem.h
@@ -428,16 +428,17 @@
static bool isHapticPlaybackSupported();
static status_t listAudioProductStrategies(AudioProductStrategyVector &strategies);
- static status_t getProductStrategyFromAudioAttributes(const AudioAttributes &aa,
- product_strategy_t &productStrategy);
+ static status_t getProductStrategyFromAudioAttributes(
+ const AudioAttributes &aa, product_strategy_t &productStrategy,
+ bool fallbackOnDefault = true);
static audio_attributes_t streamTypeToAttributes(audio_stream_type_t stream);
static audio_stream_type_t attributesToStreamType(const audio_attributes_t &attr);
static status_t listAudioVolumeGroups(AudioVolumeGroupVector &groups);
- static status_t getVolumeGroupFromAudioAttributes(const AudioAttributes &aa,
- volume_group_t &volumeGroup);
+ static status_t getVolumeGroupFromAudioAttributes(
+ const AudioAttributes &aa, volume_group_t &volumeGroup, bool fallbackOnDefault = true);
static status_t setRttEnabled(bool enabled);