Invalidate all clients when bit-perfect client is active.
When a bit-perfect client becomes active, invalidate all clients on outputs that don't have an active patch or share at least one device with bit-perfect output.
Bug: 366372464
Test: enable touch sound, play DSD file
Flag: EXEMPT bugfix
Change-Id: I3ed943335ce42b2c93ccdec0f3d60e4a2e48120a
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 796e3c7..679a980 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -2379,8 +2379,8 @@
// the bit-perfect sink so that it is guaranteed only bit-perfect stream is active.
PortHandleVector clientsToInvalidate;
for (size_t i = 0; i < mOutputs.size(); i++) {
- if (mOutputs[i] == outputDesc ||
- mOutputs[i]->devices().filter(outputDesc->devices()).isEmpty()) {
+ if (mOutputs[i] == outputDesc || (!mOutputs[i]->devices().isEmpty() &&
+ mOutputs[i]->devices().filter(outputDesc->devices()).isEmpty())) {
continue;
}
for (const auto& c : mOutputs[i]->getClientIterable()) {