summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorRonghua Wu <ronghuawu@google.com>2014-10-03 21:51:37 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-10-03 21:51:37 +0000
commitaf1a4dc989d6707116eaefab300ad55124aace66 (patch)
tree20527dc001bb768a14ee90bb1a906ae146bf9d53 /media/libmediaplayerservice
parent2b217bb3aee87ce8486014f261c0f498f6209e80 (diff)
parent0852917279f79a94907e9906d0533ae409a30f6a (diff)
downloadframeworks_av-af1a4dc989d6707116eaefab300ad55124aace66.zip
frameworks_av-af1a4dc989d6707116eaefab300ad55124aace66.tar.gz
frameworks_av-af1a4dc989d6707116eaefab300ad55124aace66.tar.bz2
Merge "NuPlayer: don't restart AudioSink when torn down due to pause timeout." into lmp-dev
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.cpp11
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp8
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h7
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);