am bd08223c: Merge "Fix double close."
* commit 'bd08223c450a7a2e8e8d79e6be148ed1ac64caa3':
Fix double close.
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 42977ca..a63a940 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -663,17 +663,8 @@
instantiateDecoder(false, &mVideoDecoder);
}
- // Don't try to re-open audio sink if there's an existing decoder.
- if (mAudioSink != NULL && mAudioDecoder == NULL) {
- sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */);
- sp<AMessage> videoFormat = mSource->getFormat(false /* audio */);
- audio_stream_type_t streamType = mAudioSink->getAudioStreamType();
- bool canOffload = canOffloadStream(audioMeta, (videoFormat != NULL),
- true /* is_streaming */, streamType);
- if (canOffload) {
- if (!mOffloadAudio) {
- mRenderer->signalEnableOffloadAudio();
- }
+ if (mAudioSink != NULL) {
+ if (mOffloadAudio) {
// open audio sink early under offload mode.
sp<AMessage> format = mSource->getFormat(true /*audio*/);
openAudioSink(format, true /*offloadOnly*/);
@@ -910,7 +901,7 @@
ALOGV("media rendering started");
notifyListener(MEDIA_STARTED, 0, 0);
} else if (what == Renderer::kWhatAudioOffloadTearDown) {
- ALOGV("Tear down audio offload, fall back to s/w path if due to error.");
+ ALOGV("Tear down audio offload, fall back to s/w path");
int64_t positionUs;
CHECK(msg->findInt64("positionUs", &positionUs));
int32_t reason;
@@ -922,11 +913,11 @@
if (mVideoDecoder != NULL) {
mRenderer->flush(false /* audio */);
}
+ mRenderer->signalDisableOffloadAudio();
+ mOffloadAudio = false;
performSeek(positionUs, false /* needNotify */);
if (reason == Renderer::kDueToError) {
- mRenderer->signalDisableOffloadAudio();
- mOffloadAudio = false;
instantiateDecoder(true /* audio */, &mAudioDecoder);
}
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index 4bff90f..ab46074 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -316,13 +316,6 @@
}
status_t NuPlayerDriver::pause() {
- // The NuPlayerRenderer may get flushed if pause for long enough, e.g. the pause timeout tear
- // down for audio offload mode. If that happens, the NuPlayerRenderer will no longer know the
- // current position. So similar to seekTo, update |mPositionUs| to the pause position by calling
- // getCurrentPosition here.
- int msec;
- getCurrentPosition(&msec);
-
Mutex::Autolock autoLock(mLock);
switch (mState) {
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index bb6fe41..638d9bc 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -155,10 +155,6 @@
(new AMessage(kWhatDisableOffloadAudio, id()))->post();
}
-void NuPlayer::Renderer::signalEnableOffloadAudio() {
- (new AMessage(kWhatEnableOffloadAudio, id()))->post();
-}
-
void NuPlayer::Renderer::pause() {
(new AMessage(kWhatPause, id()))->post();
}
@@ -410,12 +406,6 @@
break;
}
- case kWhatEnableOffloadAudio:
- {
- onEnableOffloadAudio();
- break;
- }
-
case kWhatPause:
{
onPause();
@@ -1022,7 +1012,6 @@
Mutex::Autolock autoLock(mLock);
syncQueuesDone_l();
setPauseStartedTimeRealUs(-1);
- setAnchorTime(-1, -1);
}
ALOGV("flushing %s", audio ? "audio" : "video");
@@ -1126,12 +1115,6 @@
++mAudioQueueGeneration;
}
-void NuPlayer::Renderer::onEnableOffloadAudio() {
- Mutex::Autolock autoLock(mLock);
- mFlags |= FLAG_OFFLOAD_AUDIO;
- ++mAudioQueueGeneration;
-}
-
void NuPlayer::Renderer::onPause() {
if (mPaused) {
ALOGW("Renderer::onPause() called while already paused!");
@@ -1415,9 +1398,6 @@
if (audioSinkChanged) {
onAudioSinkChanged();
}
- if (offloadingAudio()) {
- mAudioOffloadTornDown = false;
- }
return offloadingAudio();
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
index dc37b93..b15a266 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
@@ -53,7 +53,6 @@
void signalAudioSinkChanged();
void signalDisableOffloadAudio();
- void signalEnableOffloadAudio();
void pause();
void resume();
@@ -113,7 +112,6 @@
kWhatCloseAudioSink = 'clsA',
kWhatStopAudioSink = 'stpA',
kWhatDisableOffloadAudio = 'noOA',
- kWhatEnableOffloadAudio = 'enOA',
kWhatSetVideoFrameRate = 'sVFR',
};
@@ -197,7 +195,6 @@
void onFlush(const sp<AMessage> &msg);
void onAudioSinkChanged();
void onDisableOffloadAudio();
- void onEnableOffloadAudio();
void onPause();
void onResume();
void onSetVideoFrameRate(float fps);
diff --git a/services/audiopolicy/AudioPolicyManager.cpp b/services/audiopolicy/AudioPolicyManager.cpp
index 3e1506d..536987a 100644
--- a/services/audiopolicy/AudioPolicyManager.cpp
+++ b/services/audiopolicy/AudioPolicyManager.cpp
@@ -2561,10 +2561,13 @@
void AudioPolicyManager::clearAudioPatches(uid_t uid)
{
- for (ssize_t i = (ssize_t)mAudioPatches.size() - 1; i >= 0; i--) {
+ for (ssize_t i = 0; i < (ssize_t)mAudioPatches.size(); i++) {
sp<AudioPatch> patchDesc = mAudioPatches.valueAt(i);
if (patchDesc->mUid == uid) {
- releaseAudioPatch(mAudioPatches.keyAt(i), uid);
+ // releaseAudioPatch() removes the patch from mAudioPatches
+ if (releaseAudioPatch(mAudioPatches.keyAt(i), uid) == NO_ERROR) {
+ i--;
+ }
}
}
}