AudioTrack: explain why FAST mixer denied
Also for AudioRecord
Bug: 62692443
Test: write_sine.cpp
Change-Id: I5b281476af4703798129df66584d813b9a8db8bb
Signed-off-by: Phil Burk <philburk@google.com>
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index 98ec7d7..e1805a7 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -1268,6 +1268,20 @@
}
}
+// TODO Move this macro to a common header file for enum to string conversion in audio framework.
+#define MEDIA_CASE_ENUM(name) case name: return #name
+const char * AudioTrack::convertTransferToText(transfer_type transferType) {
+ switch (transferType) {
+ MEDIA_CASE_ENUM(TRANSFER_DEFAULT);
+ MEDIA_CASE_ENUM(TRANSFER_CALLBACK);
+ MEDIA_CASE_ENUM(TRANSFER_OBTAIN);
+ MEDIA_CASE_ENUM(TRANSFER_SYNC);
+ MEDIA_CASE_ENUM(TRANSFER_SHARED);
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+
status_t AudioTrack::createTrack_l()
{
const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
@@ -1343,22 +1357,32 @@
// Client can only express a preference for FAST. Server will perform additional tests.
if (mFlags & AUDIO_OUTPUT_FLAG_FAST) {
- bool useCaseAllowed =
- // either of these use cases:
- // use case 1: shared buffer
- (mSharedBuffer != 0) ||
+ // either of these use cases:
+ // use case 1: shared buffer
+ bool sharedBuffer = mSharedBuffer != 0;
+ bool transferAllowed =
// use case 2: callback transfer mode
(mTransfer == TRANSFER_CALLBACK) ||
// use case 3: obtain/release mode
(mTransfer == TRANSFER_OBTAIN) ||
// use case 4: synchronous write
((mTransfer == TRANSFER_SYNC) && mThreadCanCallJava);
+
+ bool useCaseAllowed = sharedBuffer || transferAllowed;
+ if (!useCaseAllowed) {
+ ALOGW("AUDIO_OUTPUT_FLAG_FAST denied, not shared buffer and transfer = %s",
+ convertTransferToText(mTransfer));
+ }
+
// sample rates must also match
- bool fastAllowed = useCaseAllowed && (mSampleRate == mAfSampleRate);
+ bool sampleRateAllowed = mSampleRate == mAfSampleRate;
+ if (!sampleRateAllowed) {
+ ALOGW("AUDIO_OUTPUT_FLAG_FAST denied, rates do not match %u Hz, require %u Hz",
+ mSampleRate, mAfSampleRate);
+ }
+
+ bool fastAllowed = useCaseAllowed && sampleRateAllowed;
if (!fastAllowed) {
- ALOGW("AUDIO_OUTPUT_FLAG_FAST denied by client; transfer %d, "
- "track %u Hz, output %u Hz",
- mTransfer, mSampleRate, mAfSampleRate);
mFlags = (audio_output_flags_t) (mFlags & ~AUDIO_OUTPUT_FLAG_FAST);
}
}