summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayer.cpp')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index d225851..5270efc 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -966,6 +966,8 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
ALOGV("Tear down audio offload, fall back to s/w path");
int64_t positionUs;
CHECK(msg->findInt64("positionUs", &positionUs));
+ int32_t reason;
+ CHECK(msg->findInt32("reason", &reason));
closeAudioSink();
mAudioDecoder.clear();
++mAudioDecoderGeneration;
@@ -977,7 +979,9 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
mOffloadAudio = false;
performSeek(positionUs, false /* needNotify */);
- instantiateDecoder(true /* audio */, &mAudioDecoder);
+ if (reason == Renderer::kDueToError) {
+ instantiateDecoder(true /* audio */, &mAudioDecoder);
+ }
}
break;
}
@@ -1044,6 +1048,11 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
} else {
ALOGW("resume called when source is gone or not set");
}
+ // |mAudioDecoder| may have been released due to the pause timeout, so try to re-create
+ // it if needed.
+ if (mFlushingAudio != SHUT_DOWN) {
+ instantiateDecoder(true /* audio */, &mAudioDecoder);
+ }
if (mRenderer != NULL) {
mRenderer->resume();
} else {