From 85e48142f726770d3b65caa1f29d8b98f8d5db6b Mon Sep 17 00:00:00 2001 From: Andy Hung Date: Sun, 31 May 2015 23:04:15 -0700 Subject: 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 --- media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp') 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::AudioSinkCallback( 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 @@ void NuPlayer::Renderer::onFlush(const sp &msg) { if (offloadingAudio()) { mAudioSink->pause(); mAudioSink->flush(); - mAudioSink->start(); + if (!mPaused) { + mAudioSink->start(); + } } else { mAudioSink->pause(); mAudioSink->flush(); @@ -1665,7 +1667,9 @@ status_t NuPlayer::Renderer::onOpenAudioSink( // 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) { -- cgit v1.1