diff options
author | Andreas Huber <andih@google.com> | 2012-09-28 10:23:51 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2012-09-28 10:23:51 -0700 |
commit | 96fc6cc65ca93009a759a3a874b82a35771b9714 (patch) | |
tree | 8084454da63f974ef6ccfe29e5e3760184ec185b /media/libstagefright/wifi-display/source/WifiDisplaySource.cpp | |
parent | de799a74064a363d26f4c1bbc5a59d1b7127f49f (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.cpp | 38 |
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 |