aaudio: allow AudioRecord to use FAST mode for TRANSFER_SYNC
Bug: 34093052
Test: loopback.cpp
Change-Id: I3bf4ee6f58fad017a038edfd50475d5dd5a4fca5
Signed-off-by: Phil Burk <philburk@google.com>
diff --git a/media/libaudioclient/AudioRecord.cpp b/media/libaudioclient/AudioRecord.cpp
index 5c54bb2..750e8ad 100644
--- a/media/libaudioclient/AudioRecord.cpp
+++ b/media/libaudioclient/AudioRecord.cpp
@@ -576,10 +576,17 @@
// Client can only express a preference for FAST. Server will perform additional tests.
if (mFlags & AUDIO_INPUT_FLAG_FAST) {
bool useCaseAllowed =
- // either of these use cases:
+ // any of these use cases:
// use case 1: callback transfer mode
(mTransfer == TRANSFER_CALLBACK) ||
- // use case 2: obtain/release mode
+ // use case 2: blocking read mode
+ // The default buffer capacity at 48 kHz is 2048 frames, or ~42.6 ms.
+ // That's enough for double-buffering with our standard 20 ms rule of thumb for
+ // the minimum period of a non-SCHED_FIFO thread.
+ // This is needed so that AAudio apps can do a low latency non-blocking read from a
+ // callback running with SCHED_FIFO.
+ (mTransfer == TRANSFER_SYNC) ||
+ // use case 3: obtain/release mode
(mTransfer == TRANSFER_OBTAIN);
// sample rates must also match
bool fastAllowed = useCaseAllowed && (mSampleRate == afSampleRate);