Merge "policy: Add support for multiple instances of offload playback"
diff --git a/policy_hal/Android.mk b/policy_hal/Android.mk
index 517f207..480df92 100644
--- a/policy_hal/Android.mk
+++ b/policy_hal/Android.mk
@@ -39,6 +39,9 @@
LOCAL_CFLAGS += -DWFD_CONCURRENCY
endif
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_MULTIPLE_TUNNEL)), true)
+LOCAL_CFLAGS += -DMULTIPLE_OFFLOAD_ENABLED
+endif
include $(BUILD_SHARED_LIBRARY)
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index 03f6c41..dfa77f2 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -1324,6 +1324,18 @@
if (profile != NULL) {
AudioOutputDescriptor *outputDesc = NULL;
+#ifdef MULTIPLE_OFFLOAD_ENABLED
+ bool multiOffloadEnabled = false;
+ char value[PROPERTY_VALUE_MAX] = {0};
+ property_get("audio.offload.multiple.enabled", value, NULL);
+ if (atoi(value) || !strncmp("true", value, 4))
+ multiOffloadEnabled = true;
+ // if multiple concurrent offload decode is supported
+ // do no check for reuse and also don't close previous output if its offload
+ // previous output will be closed during track destruction
+ if (multiOffloadEnabled)
+ goto get_output__new_output_desc;
+#endif
for (size_t i = 0; i < mOutputs.size(); i++) {
AudioOutputDescriptor *desc = mOutputs.valueAt(i);
if (!desc->isDuplicated() && (profile == desc->mProfile)) {
@@ -1342,6 +1354,7 @@
if (outputDesc != NULL) {
closeOutput(outputDesc->mId);
}
+get_output__new_output_desc:
outputDesc = new AudioOutputDescriptor(profile);
outputDesc->mDevice = device;
outputDesc->mSamplingRate = samplingRate;