From 7cc0c29d6a7b76520ec588437ab51d5b8eac9ebc Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Fri, 1 Feb 2013 11:43:44 -0800 Subject: Revive the code to support TCP interleaved transport Also support non-interleaved transport now, but the sink gets to decide what mode it wants to run in, _not_ the source. Change-Id: I3b6057f86871084e4decf930bb4a7a2d7517b0f2 --- .../wifi-display/source/PlaybackSession.cpp | 12 +++++++ .../wifi-display/source/WifiDisplaySource.cpp | 40 ++++++++++++---------- .../wifi-display/source/WifiDisplaySource.h | 1 + 3 files changed, 34 insertions(+), 19 deletions(-) (limited to 'media/libstagefright/wifi-display/source') diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.cpp b/media/libstagefright/wifi-display/source/PlaybackSession.cpp index 91dc1fa..453cbc5 100644 --- a/media/libstagefright/wifi-display/source/PlaybackSession.cpp +++ b/media/libstagefright/wifi-display/source/PlaybackSession.cpp @@ -546,6 +546,18 @@ void WifiDisplaySource::PlaybackSession::onMessageReceived( onFinishPlay2(); } else if (what == Sender::kWhatSessionDead) { notifySessionDead(); + } else if (what == Sender::kWhatBinaryData) { + sp notify = mNotify->dup(); + notify->setInt32("what", kWhatBinaryData); + + int32_t channel; + CHECK(msg->findInt32("channel", &channel)); + notify->setInt32("channel", channel); + + sp data; + CHECK(msg->findBuffer("data", &data)); + notify->setBuffer("data", data); + notify->post(); } else { TRESPASS(); } diff --git a/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp b/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp index 981d5f9..825ebc6 100644 --- a/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp +++ b/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp @@ -597,15 +597,6 @@ status_t WifiDisplaySource::sendM3(int32_t sessionID) { status_t WifiDisplaySource::sendM4(int32_t sessionID) { CHECK_EQ(sessionID, mClientSessionID); - AString transportString = "UDP"; - - char val[PROPERTY_VALUE_MAX]; - if (property_get("media.wfd.enable-tcp", val, NULL) - && (!strcasecmp("true", val) || !strcmp("1", val))) { - ALOGI("Using TCP transport."); - transportString = "TCP"; - } - AString body; if (mSinkSupportsVideo) { @@ -630,11 +621,11 @@ status_t WifiDisplaySource::sendM4(int32_t sessionID) { body.append( StringPrintf( - "wfd_presentation_URL: rtsp://%s/wfd1.0/streamid=0 none\r\n" - "wfd_client_rtp_ports: RTP/AVP/%s;unicast %d 0 mode=play\r\n", - mClientInfo.mLocalIP.c_str(), - transportString.c_str(), - mChosenRTPPort)); + "wfd_presentation_URL: rtsp://%s/wfd1.0/streamid=0 none\r\n", + mClientInfo.mLocalIP.c_str())); + + body.append(mWfdClientRtpPorts); + body.append("\r\n"); AString request = "SET_PARAMETER rtsp://localhost/wfd1.0 RTSP/1.0\r\n"; AppendCommonResponse(&request, mNextCSeq); @@ -797,18 +788,29 @@ status_t WifiDisplaySource::onReceiveM3Response( return ERROR_MALFORMED; } - unsigned port0, port1; + unsigned port0 = 0, port1 = 0; if (sscanf(value.c_str(), "RTP/AVP/UDP;unicast %u %u mode=play", &port0, - &port1) != 2 - || port0 == 0 || port0 > 65535 || port1 != 0) { - ALOGE("Sink chose its wfd_client_rtp_ports poorly (%s)", + &port1) == 2 + || sscanf(value.c_str(), + "RTP/AVP/TCP;unicast %u %u mode=play", + &port0, + &port1) == 2) { + if (port0 == 0 || port0 > 65535 || port1 != 0) { + ALOGE("Sink chose its wfd_client_rtp_ports poorly (%s)", + value.c_str()); + + return ERROR_MALFORMED; + } + } else if (strcmp(value.c_str(), "RTP/AVP/TCP;interleaved mode=play")) { + ALOGE("Unsupported value for wfd_client_rtp_ports (%s)", value.c_str()); - return ERROR_MALFORMED; + return ERROR_UNSUPPORTED; } + mWfdClientRtpPorts = value; mChosenRTPPort = port0; if (!params->findParameter("wfd_video_formats", &value)) { diff --git a/media/libstagefright/wifi-display/source/WifiDisplaySource.h b/media/libstagefright/wifi-display/source/WifiDisplaySource.h index fec2c6d..724462c 100644 --- a/media/libstagefright/wifi-display/source/WifiDisplaySource.h +++ b/media/libstagefright/wifi-display/source/WifiDisplaySource.h @@ -119,6 +119,7 @@ private: uint32_t mStopReplyID; + AString mWfdClientRtpPorts; int32_t mChosenRTPPort; // extracted from "wfd_client_rtp_ports" bool mSinkSupportsVideo; -- cgit v1.1