diff options
author | Andreas Huber <andih@google.com> | 2010-08-19 09:11:28 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-08-19 09:11:28 -0700 |
commit | b9b08ff55456fe845cb4c64500e9cb53682e202f (patch) | |
tree | 3da43a1cb177bb1126c2b8016542006e5ad70af1 /media/libstagefright/rtsp/ARTSPConnection.cpp | |
parent | 58ac7a3e15fc9ab5432aa94037c268fef7bcb667 (diff) | |
parent | 34c9ad88d3d827cca0c7b5f2fb1b0d4a1a20a2d1 (diff) | |
download | frameworks_av-b9b08ff55456fe845cb4c64500e9cb53682e202f.zip frameworks_av-b9b08ff55456fe845cb4c64500e9cb53682e202f.tar.gz frameworks_av-b9b08ff55456fe845cb4c64500e9cb53682e202f.tar.bz2 |
am 8c192fe9: Merge "Better support for rtsp streamed through VLC. Temporarily make the socket blocking to read all of the session description." into gingerbread
Merge commit '8c192fe990d7bc7149d2ec1a7c9f4ada3f32e52a' into gingerbread-plus-aosp
* commit '8c192fe990d7bc7149d2ec1a7c9f4ada3f32e52a':
Better support for rtsp streamed through VLC. Temporarily make the socket blocking to read all of the session description.
Diffstat (limited to 'media/libstagefright/rtsp/ARTSPConnection.cpp')
-rw-r--r-- | media/libstagefright/rtsp/ARTSPConnection.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/media/libstagefright/rtsp/ARTSPConnection.cpp b/media/libstagefright/rtsp/ARTSPConnection.cpp index e9162c0..5f8f5fd 100644 --- a/media/libstagefright/rtsp/ARTSPConnection.cpp +++ b/media/libstagefright/rtsp/ARTSPConnection.cpp @@ -136,6 +136,20 @@ bool ARTSPConnection::ParseURL( return true; } +static void MakeSocketBlocking(int s, bool blocking) { + // Make socket non-blocking. + int flags = fcntl(s, F_GETFL, 0); + CHECK_NE(flags, -1); + + if (blocking) { + flags &= ~O_NONBLOCK; + } else { + flags |= O_NONBLOCK; + } + + CHECK_NE(fcntl(s, F_SETFL, flags), -1); +} + void ARTSPConnection::onConnect(const sp<AMessage> &msg) { ++mConnectionID; @@ -150,10 +164,7 @@ void ARTSPConnection::onConnect(const sp<AMessage> &msg) { mSocket = socket(AF_INET, SOCK_STREAM, 0); - // Make socket non-blocking. - int flags = fcntl(mSocket, F_GETFL, 0); - CHECK_NE(flags, -1); - CHECK_NE(fcntl(mSocket, F_SETFL, flags | O_NONBLOCK), -1); + MakeSocketBlocking(mSocket, false); AString url; CHECK(msg->findString("url", &url)); @@ -210,7 +221,7 @@ void ARTSPConnection::onDisconnect(const sp<AMessage> &msg) { mSocket = -1; flushPendingRequests(); - } + } sp<AMessage> reply; CHECK(msg->findMessage("reply", &reply)); @@ -347,7 +358,13 @@ void ARTSPConnection::onReceiveResponse() { CHECK_GE(res, 0); if (res == 1) { - if (!receiveRTSPReponse()) { + MakeSocketBlocking(mSocket, true); + + bool success = receiveRTSPReponse(); + + MakeSocketBlocking(mSocket, false); + + if (!success) { // Something horrible, irreparable has happened. flushPendingRequests(); return; |