summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2011-02-14 14:14:23 -0800
committerAndreas Huber <andih@google.com>2011-02-14 14:14:23 -0800
commitf1958f9442bc937e1f8c8d9175901500b944b021 (patch)
tree38afd720c953a64aa9d547ea6a37613da5098a17 /media
parent126ea73dd1919c8a176019c50b1ca96035aef45b (diff)
downloadframeworks_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.cpp11
-rw-r--r--media/libstagefright/include/AwesomePlayer.h1
-rw-r--r--media/libstagefright/rtsp/ARTSPController.cpp9
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;
}