commit | f4de36d17ea278672c61fd1be94d36bc3ea5c340 | [log] [tgz] |
---|---|---|
author | yucliu <yucliu@google.com> | Mon Sep 14 14:57:56 2020 -0700 |
committer | Yuchen Liu <yucliu@google.com> | Tue Sep 15 17:24:47 2020 +0000 |
tree | 17eb2dc1f7c5b7cc4c7b1773ba6ad8684ab5d89d | |
parent | a7f98a1ea6d6896673fa7f027c1ff3fc321f6a32 [diff] |
Invalidate stream when unregistering audio policy mix Invalidate the stream if the audio policy mix on the client is removed, so that the client can reconnect to another output stream. Bug: 167605686 Test: Unregister audio policy by killing the app. Audio resumes. Change-Id: I9a00311142613df8c019206c9b7c873ec8f42b88
diff --git a/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h index 923310c..80afe9d 100644 --- a/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h +++ b/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h
@@ -113,6 +113,9 @@ const sp<AudioPolicyMix> getPrimaryMix() const { return mPrimaryMix.promote(); }; + bool hasLostPrimaryMix() const { + return mPrimaryMix.unsafe_get() && !mPrimaryMix.promote(); + } void setActive(bool active) override {
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index 830b74c..fc3b2a2 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -5354,7 +5354,7 @@ if (status != OK) { continue; } - if (client->getPrimaryMix() != primaryMix) { + if (client->getPrimaryMix() != primaryMix || client->hasLostPrimaryMix()) { invalidate = true; if (desc->isStrategyActive(psId)) { maxLatency = desc->latency();