MediaPlayer: overhaul buffering monitor scheme.
GenericSource: buffering monitor runs on a separate looper since readBuffer()
call can be blocked for long time.
When paused, dequeueAccess() returns -EWOULDBLOCK.
For audio offload, take into account cached data in downstream components.
NuPlayerDecoderPassThrough: flush out aggregate buffer when source doesn't have
data available.
Bug: 24295007
Change-Id: I535a438d96ee902c9b4baa7c84ed7e5063a23964
(cherry picked from commit 32ce83cf93e4eb14c9937e4b850e044f9f7fdf2c)
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index ce68bd4..5c13633 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -1564,10 +1564,14 @@
determineAudioModeChange();
if (mOffloadAudio) {
+ mSource->setOffloadAudio(true /* offload */);
+
const bool hasVideo = (mSource->getFormat(false /*audio */) != NULL);
format->setInt32("has-video", hasVideo);
*decoder = new DecoderPassThrough(notify, mSource, mRenderer);
} else {
+ mSource->setOffloadAudio(false /* offload */);
+
*decoder = new Decoder(notify, mSource, mPID, mRenderer);
}
} else {