diff options
author | Ronghua Wu <ronghuawu@google.com> | 2014-10-03 21:54:42 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-03 21:54:42 +0000 |
commit | e9c83ef28c876389812b69ef9625305066ec5fd3 (patch) | |
tree | bc6e7b47da525ed2764d42912cf289cd1dc8f091 | |
parent | 4d9aba92e64eed4e09431a6544df27ab0b7ceff8 (diff) | |
parent | af1a4dc989d6707116eaefab300ad55124aace66 (diff) | |
download | frameworks_av-e9c83ef28c876389812b69ef9625305066ec5fd3.zip frameworks_av-e9c83ef28c876389812b69ef9625305066ec5fd3.tar.gz frameworks_av-e9c83ef28c876389812b69ef9625305066ec5fd3.tar.bz2 |
am af1a4dc9: Merge "NuPlayer: don\'t restart AudioSink when torn down due to pause timeout." into lmp-dev
* commit 'af1a4dc989d6707116eaefab300ad55124aace66':
NuPlayer: don't restart AudioSink when torn down due to pause timeout.
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 11 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 8 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h | 7 |
3 files changed, 21 insertions, 5 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 { diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 7e5087f..d6bf1de 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -274,7 +274,7 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { case kWhatAudioOffloadTearDown: { - onAudioOffloadTearDown(); + onAudioOffloadTearDown(kDueToError); break; } @@ -285,7 +285,8 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { if (generation != mAudioOffloadPauseTimeoutGeneration) { break; } - onAudioOffloadTearDown(); + ALOGV("Audio Offload tear down due to pause timeout."); + onAudioOffloadTearDown(kDueToTimeout); break; } @@ -1089,7 +1090,7 @@ int64_t NuPlayer::Renderer::getPlayedOutAudioDurationUs(int64_t nowUs) { return durationUs; } -void NuPlayer::Renderer::onAudioOffloadTearDown() { +void NuPlayer::Renderer::onAudioOffloadTearDown(AudioOffloadTearDownReason reason) { if (mAudioOffloadTornDown) { return; } @@ -1110,6 +1111,7 @@ void NuPlayer::Renderer::onAudioOffloadTearDown() { sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatAudioOffloadTearDown); notify->setInt64("positionUs", currentPositionUs); + notify->setInt32("reason", reason); notify->post(); } diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h index 8e6112b..4237902 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h @@ -69,6 +69,11 @@ struct NuPlayer::Renderer : public AHandler { kWhatAudioOffloadPauseTimeout = 'aOPT', }; + enum AudioOffloadTearDownReason { + kDueToError = 0, + kDueToTimeout, + }; + protected: virtual ~Renderer(); @@ -157,7 +162,7 @@ private: void onPause(); void onResume(); void onSetVideoFrameRate(float fps); - void onAudioOffloadTearDown(); + void onAudioOffloadTearDown(AudioOffloadTearDownReason reason); void notifyEOS(bool audio, status_t finalResult, int64_t delayUs = 0); void notifyFlushComplete(bool audio); |