Update written size correctly in callback thread
The original refactor did not update buffer.size correctly before
calling releaseBuffer leading to skipping issues when the requested
size was not provided. This fixes this issue.
Bug: 204055298
Test: Identical callback trace for YTMusic
Test: YTMusic plays back successfully
Test: OpenSLES pathway in Oboe Tester has expected output
Change-Id: Ifbf177ae43fa4c2a61027af6c131846961c09cd8
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index 5e2dfcc..9617556 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -2689,7 +2689,7 @@
// written in the next write() call, since it's not passed through the callback
audioBuffer.size += nonContig;
}
- size_t writtenSize = (mTransfer == TRANSFER_CALLBACK)
+ const size_t writtenSize = (mTransfer == TRANSFER_CALLBACK)
? callback->onMoreData(audioBuffer)
: callback->onCanWriteMoreData(audioBuffer);
// Validate on returned size
@@ -2751,6 +2751,9 @@
return ns;
}
+ // releaseBuffer reads from audioBuffer.size
+ audioBuffer.size = writtenSize;
+
size_t releasedFrames = writtenSize / mFrameSize;
audioBuffer.frameCount = releasedFrames;
mRemainingFrames -= releasedFrames;