AudioTrack offload: fix EVENT_STREAM_END not called
If the track thread is paused, EVENT_STREAM_END will not delivered
for offload. This event is required for PRESENTATION_END to
be delivered for Java AudioTrack offload.
Bug: 86837964
Test: cts-tradefed run cts -m CtsMediaTestCases -t android.media.cts.AudioTrackOffloadTest
Change-Id: I491cdb0a6faa69e5c37139c0364b5c9079ff1f14
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index 8b35a85..96fccae 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -810,6 +810,13 @@
if (t != 0) {
if (!isOffloaded_l()) {
t->pause();
+ } else if (mTransfer == TRANSFER_SYNC_NOTIF_CALLBACK) {
+ const sp<AudioTrackThread> t = mAudioTrackThread;
+ if (t != 0) {
+ // causes wake up of the playback thread, that will callback the client for
+ // EVENT_STREAM_END in processAudioBuffer()
+ t->wake();
+ }
}
} else {
setpriority(PRIO_PROCESS, 0, mPreviousPriority);