APM: update logic for output selection with preferred mixer attributes.
1. All playback from the preferred mixer attributes owner will be routed
to output with preferred mixer.
2. If bit-perfect playback is active, APM will route all playback to the
preferred mixer when the routed device is the same as the targeted
device for preferred mixer.
3. The client will be bit-perfect only when it is from the owner of
preferred mixer attributes and the request matches the preferred
mixer attributes.
Bug: 263279716
Test: manually
Test: atest audiopolicy_tests
Change-Id: I74efef10909d888dd47cc66444685f5b19a08a43
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index ac863b5..8470e20 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -792,7 +792,7 @@
" Format Chn mask SRate "
"ST Usg CT "
" G db L dB R dB VS dB "
- " Server FrmCnt FrmRdy F Underruns Flushed"
+ " Server FrmCnt FrmRdy F Underruns Flushed BitPerfect"
"%s\n",
isServerLatencySupported() ? " Latency" : "");
}
@@ -878,7 +878,7 @@
"%08X %08X %6u "
"%2u %3x %2x "
"%5.2g %5.2g %5.2g %5.2g%c "
- "%08X %6zu%c %6zu %c %9u%c %7u",
+ "%08X %6zu%c %6zu %c %9u%c %7u %10s",
active ? "yes" : "no",
(mClient == 0) ? getpid() : mClient->pid(),
mSessionId,
@@ -907,7 +907,8 @@
fillingStatus,
mAudioTrackServerProxy->getUnderrunFrames(),
nowInUnderrun,
- (unsigned)mAudioTrackServerProxy->framesFlushed() % 10000000
+ (unsigned)mAudioTrackServerProxy->framesFlushed() % 10000000,
+ isBitPerfect() ? "true" : "false"
);
if (isServerLatencySupported()) {