summaryrefslogtreecommitdiff
path: root/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-09-28 10:23:51 -0700
committerAndreas Huber <andih@google.com>2012-09-28 10:23:51 -0700
commit96fc6cc65ca93009a759a3a874b82a35771b9714 (patch)
tree8084454da63f974ef6ccfe29e5e3760184ec185b /media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
parentde799a74064a363d26f4c1bbc5a59d1b7127f49f (diff)
Various improvements to a cleaner shutdown of the wifi display connection.
Change-Id: Id029a89939e53c2bd1d20e572d3975ec2795c239 related-to-bug: 7247918
Diffstat (limited to 'media/libstagefright/wifi-display/source/WifiDisplaySource.cpp')
-rw-r--r--media/libstagefright/wifi-display/source/WifiDisplaySource.cpp38
1 files changed, 29 insertions, 9 deletions
diff --git a/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp b/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
index 16c0f351..8091cc41 100644
--- a/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
+++ b/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
@@ -293,6 +293,8 @@ void WifiDisplaySource::onMessageReceived(const sp<AMessage> &msg) {
mClientInfo.mPlaybackSession->height(),
0 /* flags */);
}
+ } else if (what == PlaybackSession::kWhatSessionDestroyed) {
+ disconnectClient2();
} else {
CHECK_EQ(what, PlaybackSession::kWhatBinaryData);
@@ -1117,6 +1119,12 @@ status_t WifiDisplaySource::onTeardownRequest(
void WifiDisplaySource::finishStop() {
ALOGV("finishStop");
+ disconnectClientAsync();
+}
+
+void WifiDisplaySource::finishStopAfterDisconnectingClient() {
+ ALOGV("finishStopAfterDisconnectingClient");
+
#if REQUIRE_HDCP
if (mHDCP != NULL) {
ALOGI("Initiating HDCP shutdown.");
@@ -1137,14 +1145,12 @@ void WifiDisplaySource::finishStop2() {
mHDCP.clear();
#endif
- disconnectClient();
-
if (mSessionID != 0) {
mNetSession->destroySession(mSessionID);
mSessionID = 0;
}
- ALOGV("finishStop2 completed.");
+ ALOGI("We're stopped.");
status_t err = OK;
@@ -1264,14 +1270,26 @@ sp<WifiDisplaySource::PlaybackSession> WifiDisplaySource::findPlaybackSession(
return mClientInfo.mPlaybackSession;
}
-void WifiDisplaySource::disconnectClient() {
+void WifiDisplaySource::disconnectClientAsync() {
+ ALOGV("disconnectClient");
+
+ if (mClientInfo.mPlaybackSession == NULL) {
+ disconnectClient2();
+ return;
+ }
+
+ if (mClientInfo.mPlaybackSession != NULL) {
+ ALOGV("Destroying PlaybackSession");
+ mClientInfo.mPlaybackSession->destroyAsync();
+ }
+}
+
+void WifiDisplaySource::disconnectClient2() {
+ ALOGV("disconnectClient2");
+
if (mClientInfo.mPlaybackSession != NULL) {
- sp<PlaybackSession> playbackSession = mClientInfo.mPlaybackSession;
+ looper()->unregisterHandler(mClientInfo.mPlaybackSession->id());
mClientInfo.mPlaybackSession.clear();
-
- ALOGI("Destroying PlaybackSession");
- playbackSession->destroy();
- looper()->unregisterHandler(playbackSession->id());
}
if (mClientSessionID != 0) {
@@ -1280,6 +1298,8 @@ void WifiDisplaySource::disconnectClient() {
}
mClient->onDisplayDisconnected();
+
+ finishStopAfterDisconnectingClient();
}
#if REQUIRE_HDCP