NuPlayer: Play out remaining audio data when recycling isn't possible
Don't flush it immediately.
Bug: 26530291
Change-Id: I0427633402fa251ec62e2b70e47a0a7b451d3ea2
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 0025660..251fc53 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -1578,7 +1578,19 @@
}
if ((mRecycledTrack->getFlags() & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) == 0) {
- mRecycledTrack->flush();
+ int32_t msec = 0;
+ if (!mRecycledTrack->stopped()) { // check if active
+ (void)mRecycledTrack->pendingDuration(&msec);
+ }
+ mRecycledTrack->stop(); // ensure full data drain
+ ALOGD("deleting recycled track, waiting for data drain (%d msec)", msec);
+ if (msec > 0) {
+ static const int32_t WAIT_LIMIT_MS = 3000;
+ if (msec > WAIT_LIMIT_MS) {
+ msec = WAIT_LIMIT_MS;
+ }
+ usleep(msec * 1000LL);
+ }
}
// An offloaded track isn't flushed because the STREAM_END is reported
// slightly prematurely to allow time for the gapless track switch