Merge "audio: Prolong reading attempts from the remote submix pipe" into main
diff --git a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
index ca3f91a..a266b54 100644
--- a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
+++ b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
@@ -285,9 +285,12 @@
char* buff = (char*)buffer;
size_t actuallyRead = 0;
long remainingFrames = frameCount;
- const int64_t deadlineTimeNs =
- ::android::uptimeNanos() +
- getDelayInUsForFrameCount(frameCount) * NANOS_PER_MICROSECOND / 2;
+ // Try to wait as long as possible for the audio duration, but leave some time for the call to
+ // 'transfer' to complete. 'kReadAttemptSleepUs' is a good constant for this purpose because it
+ // is by definition "strictly inferior" to the typical buffer duration.
+ const long durationUs =
+ std::max(0L, getDelayInUsForFrameCount(frameCount) - kReadAttemptSleepUs);
+ const int64_t deadlineTimeNs = ::android::uptimeNanos() + durationUs * NANOS_PER_MICROSECOND;
while (remainingFrames > 0) {
ssize_t framesRead = source->read(buff, remainingFrames);
LOG(VERBOSE) << __func__ << ": frames read " << framesRead;