diff options
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayer.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 11 |
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 { |