nuplayer: acquire wakelock during offload pause timeout
Hold a wakelock while paused in audio offload mode, until audio
teardown event is received, or pause is canceled.
Since ARM cores are sleeping, the delayed AMessage will not be
received, and the audio output driver will not be closed.
This blocks XO shutdown.
Bug: 19297092
Change-Id: I3d11fef633e3f2783f4aa31e71285e2fa09d234c
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 04e52b8..25225a8 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -24,6 +24,7 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/AUtils.h>
+#include <media/stagefright/foundation/AWakeLock.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/Utils.h>
@@ -87,7 +88,9 @@
mCurrentOffloadInfo(AUDIO_INFO_INITIALIZER),
mCurrentPcmInfo(AUDIO_PCMINFO_INITIALIZER),
mTotalBuffersQueued(0),
- mLastAudioBufferDrained(0) {
+ mLastAudioBufferDrained(0),
+ mWakeLock(new AWakeLock()) {
+
}
NuPlayer::Renderer::~Renderer() {
@@ -514,6 +517,7 @@
}
ALOGV("Audio Offload tear down due to pause timeout.");
onAudioOffloadTearDown(kDueToTimeout);
+ mWakeLock->release();
break;
}
@@ -1385,6 +1389,7 @@
void NuPlayer::Renderer::startAudioOffloadPauseTimeout() {
if (offloadingAudio()) {
+ mWakeLock->acquire();
sp<AMessage> msg = new AMessage(kWhatAudioOffloadPauseTimeout, id());
msg->setInt32("generation", mAudioOffloadPauseTimeoutGeneration);
msg->post(kOffloadPauseMaxUs);
@@ -1393,6 +1398,7 @@
void NuPlayer::Renderer::cancelAudioOffloadPauseTimeout() {
if (offloadingAudio()) {
+ mWakeLock->release(true);
++mAudioOffloadPauseTimeoutGeneration;
}
}