summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/rtsp/ARTSPConnection.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-08-19 09:11:28 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-08-19 09:11:28 -0700
commitb9b08ff55456fe845cb4c64500e9cb53682e202f (patch)
tree3da43a1cb177bb1126c2b8016542006e5ad70af1 /media/libstagefright/rtsp/ARTSPConnection.cpp
parent58ac7a3e15fc9ab5432aa94037c268fef7bcb667 (diff)
parent34c9ad88d3d827cca0c7b5f2fb1b0d4a1a20a2d1 (diff)
downloadframeworks_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.cpp29
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;