summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2014-02-07 09:32:44 -0800
committerChong Zhang <chz@google.com>2014-02-07 12:58:29 -0800
commit456fa912e46edf0b01ea3b7760ea922c01ca1866 (patch)
tree7997373321e52e748baa5d273b2adc39bc6f4ba0
parent7ca6e73bed1d2e1a928104feb6e9ae92953bfff5 (diff)
downloadframeworks_av-456fa912e46edf0b01ea3b7760ea922c01ca1866.zip
frameworks_av-456fa912e46edf0b01ea3b7760ea922c01ca1866.tar.gz
frameworks_av-456fa912e46edf0b01ea3b7760ea922c01ca1866.tar.bz2
fix delay when shutting down wifi display
RepeaterSource needs to stop SurfaceMediaSource before stopping its looper, otherwise the stop could get queued behind the last read(), which will not return until a new frame comes. Change SurfaceMediaSource stop to signal frame avalable first, so that its read() returns EOS to reader upon stop. Bug: 11677087 Change-Id: Ie331cc8c7f4824fd3930f3e909b53db4463902fb
-rw-r--r--media/libstagefright/SurfaceMediaSource.cpp5
-rw-r--r--media/libstagefright/wifi-display/source/RepeaterSource.cpp3
2 files changed, 5 insertions, 3 deletions
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp
index 6b934d4..94c0a1e 100644
--- a/media/libstagefright/SurfaceMediaSource.cpp
+++ b/media/libstagefright/SurfaceMediaSource.cpp
@@ -202,6 +202,9 @@ status_t SurfaceMediaSource::stop()
return OK;
}
+ mStarted = false;
+ mFrameAvailableCondition.signal();
+
while (mNumPendingBuffers > 0) {
ALOGI("Still waiting for %d buffers to be returned.",
mNumPendingBuffers);
@@ -215,8 +218,6 @@ status_t SurfaceMediaSource::stop()
mMediaBuffersAvailableCondition.wait(mMutex);
}
- mStarted = false;
- mFrameAvailableCondition.signal();
mMediaBuffersAvailableCondition.signal();
return mBufferQueue->consumerDisconnect();
diff --git a/media/libstagefright/wifi-display/source/RepeaterSource.cpp b/media/libstagefright/wifi-display/source/RepeaterSource.cpp
index cc8dee3..59d7e6e 100644
--- a/media/libstagefright/wifi-display/source/RepeaterSource.cpp
+++ b/media/libstagefright/wifi-display/source/RepeaterSource.cpp
@@ -79,6 +79,8 @@ status_t RepeaterSource::stop() {
ALOGV("stopping");
+ status_t err = mSource->stop();
+
if (mLooper != NULL) {
mLooper->stop();
mLooper.clear();
@@ -92,7 +94,6 @@ status_t RepeaterSource::stop() {
mBuffer = NULL;
}
- status_t err = mSource->stop();
ALOGV("stopped");