Merge 0b5bf63cec484feba08b773184bc4069bc184633 on remote branch
Change-Id: I8e59ac1c9f946f7600583ac29dffcccfd17b9fb7
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index 28ba3a9..9cf20c7 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -247,6 +247,19 @@
// checkA2dpSuspend must run before checkOutputForAllStrategies so that A2DP
// output is suspended before any tracks are moved to it
checkA2dpSuspend();
+
+ if (!outputs.isEmpty()) {
+ for (size_t i = 0; i < outputs.size(); i++) {
+ sp<SwAudioOutputDescriptor> desc = mOutputs.valueFor(outputs[i]);
+ // close voip output before track invalidation to allow creation of
+ // new voip stream from restoreTrack
+ if((desc->mFlags == (AUDIO_OUTPUT_FLAG_DIRECT | AUDIO_OUTPUT_FLAG_VOIP_RX)) != 0) {
+ closeOutput(outputs[i]);
+ outputs.remove(outputs[i]);
+ }
+ }
+ }
+
checkOutputForAllStrategies();
// outputs must be closed after checkOutputForAllStrategies() is executed
if (!outputs.isEmpty()) {