diff options
author | Andreas Huber <andih@google.com> | 2011-02-14 14:14:23 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-02-14 14:14:23 -0800 |
commit | f1958f9442bc937e1f8c8d9175901500b944b021 (patch) | |
tree | 38afd720c953a64aa9d547ea6a37613da5098a17 /media | |
parent | 126ea73dd1919c8a176019c50b1ca96035aef45b (diff) | |
download | frameworks_av-f1958f9442bc937e1f8c8d9175901500b944b021.zip frameworks_av-f1958f9442bc937e1f8c8d9175901500b944b021.tar.gz frameworks_av-f1958f9442bc937e1f8c8d9175901500b944b021.tar.bz2 |
Enable cancelling the rtsp connection process early.
Change-Id: Ie2059c54541ad8c675944d71b39c772b0f6f04c8
related-to-bug: 3452699
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 11 | ||||
-rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 1 | ||||
-rw-r--r-- | media/libstagefright/rtsp/ARTSPController.cpp | 9 |
3 files changed, 19 insertions, 2 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index e368848..cb08023 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -399,6 +399,9 @@ void AwesomePlayer::reset_l() { if (mConnectingDataSource != NULL) { LOGI("interrupting the connection process"); mConnectingDataSource->disconnect(); + } else if (mConnectingRTSPController != NULL) { + LOGI("interrupting the connection process"); + mConnectingRTSPController->disconnect(); } if (mFlags & PREPARING_CONNECTED) { @@ -409,7 +412,7 @@ void AwesomePlayer::reset_l() { } if (mFlags & PREPARING) { - LOGI("waiting until preparation is completes."); + LOGI("waiting until preparation is completed."); } while (mFlags & PREPARING) { @@ -1633,7 +1636,13 @@ status_t AwesomePlayer::finishSetDataSource_l() { mLooper->start(); } mRTSPController = new ARTSPController(mLooper); + mConnectingRTSPController = mRTSPController; + + mLock.unlock(); status_t err = mRTSPController->connect(mUri.string()); + mLock.lock(); + + mConnectingRTSPController.clear(); LOGI("ARTSPController::connect returned %d", err); diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index 797e5ca..98b8c05 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -205,6 +205,7 @@ private: sp<ALooper> mLooper; sp<ARTSPController> mRTSPController; + sp<ARTSPController> mConnectingRTSPController; sp<LiveSession> mLiveSession; diff --git a/media/libstagefright/rtsp/ARTSPController.cpp b/media/libstagefright/rtsp/ARTSPController.cpp index a7563ff..1328d2e 100644 --- a/media/libstagefright/rtsp/ARTSPController.cpp +++ b/media/libstagefright/rtsp/ARTSPController.cpp @@ -69,7 +69,14 @@ status_t ARTSPController::connect(const char *url) { void ARTSPController::disconnect() { Mutex::Autolock autoLock(mLock); - if (mState != CONNECTED) { + if (mState == CONNECTING) { + mState = DISCONNECTED; + mConnectionResult = ERROR_IO; + mCondition.broadcast(); + + mHandler.clear(); + return; + } else if (mState != CONNECTED) { return; } |