NuPlayer: Allow audio callback to fill buffer when paused
If a pause lasts more than a few seconds, the audio device
enters standby. When the audio device comes out of standby,
it typically requests a large amount of data to fill its buffers
(especially severe for deep buffer PCM mode).
To avoid a glitch, continue to service the audio callback
when paused.
Also, we do not start the audio sink if we are paused to avoid
audio playback in video preview mode.
Bug: 19062223
Bug: 21198655
Change-Id: I987337a87e6c875aeb381df8ad37c7139c42dc72
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index f8b21e5..5022439 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -692,7 +692,7 @@
size_t NuPlayer::Renderer::fillAudioBuffer(void *buffer, size_t size) {
Mutex::Autolock autoLock(mLock);
- if (!mUseAudioCallback || mPaused) {
+ if (!mUseAudioCallback) {
return 0;
}
@@ -1291,7 +1291,9 @@
if (offloadingAudio()) {
mAudioSink->pause();
mAudioSink->flush();
- mAudioSink->start();
+ if (!mPaused) {
+ mAudioSink->start();
+ }
} else {
mAudioSink->pause();
mAudioSink->flush();
@@ -1665,7 +1667,9 @@
// before reaching the hardware.
// TODO
mCurrentOffloadInfo = offloadInfo;
- err = mAudioSink->start();
+ if (!mPaused) { // for preview mode, don't start if paused
+ err = mAudioSink->start();
+ }
ALOGV_IF(err == OK, "openAudioSink: offload succeeded");
}
if (err != OK) {