From d3195ea13f4a9aae546ff996e53681349a1a3cdb Mon Sep 17 00:00:00 2001
From: sherpya <sherpya@netfarm.it>
Date: Fri, 14 Jun 2013 05:25:38 +0200
Subject: [PATCH 25/27] mpdemux: live555 async interface

From: https://raw.github.com/sherpya/mplayer-be/master/patches/mp/0025-mpdemux-live555-async-interface.patch

Adjust live555 interface code for modern versions of live555.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
---
 libmpdemux/demux_rtp.cpp | 51 ++++++++++++++++++++++++++++++++----------------
 2 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/libmpdemux/demux_rtp.cpp b/libmpdemux/demux_rtp.cpp
index ad7a7f1..05d06e0 100644
--- a/libmpdemux/demux_rtp.cpp
+++ b/libmpdemux/demux_rtp.cpp
@@ -19,8 +19,6 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#define RTSPCLIENT_SYNCHRONOUS_INTERFACE 1
-
 extern "C" {
 // on MinGW, we must include windows.h before the things it conflicts
 #ifdef __MINGW32__    // with.  they are each protected from
@@ -94,15 +92,6 @@ struct RTPState {
 
 extern "C" char* network_username;
 extern "C" char* network_password;
-static char* openURL_rtsp(RTSPClient* client, char const* url) {
-  // If we were given a user name (and optional password), then use them:
-  if (network_username != NULL) {
-    char const* password = network_password == NULL ? "" : network_password;
-    return client->describeWithPassword(url, network_username, password);
-  } else {
-    return client->describeURL(url);
-  }
-}
 
 static char* openURL_sip(SIPClient* client, char const* url) {
   // If we were given a user name (and optional password), then use them:
@@ -118,6 +107,19 @@ static char* openURL_sip(SIPClient* client, char const* url) {
 extern AVCodecContext *avcctx;
 #endif
 
+static char fWatchVariableForSyncInterface;
+static char* fResultString;
+static int fResultCode;
+
+static void responseHandlerForSyncInterface(RTSPClient* rtspClient, int responseCode, char* responseString) {
+  // Set result values:
+  fResultCode = responseCode;
+  fResultString = responseString;
+
+  // Signal a break from the event loop (thereby returning from the blocking command):
+  fWatchVariableForSyncInterface = ~0;
+}
+
 extern "C" int audio_id, video_id, dvdsub_id;
 extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
   Boolean success = False;
@@ -146,13 +148,19 @@ extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
 	  rtsp_transport_http = demuxer->stream->streaming_ctrl->url->port;
 	  rtsp_transport_tcp = 1;
 	}
-	rtspClient = RTSPClient::createNew(*env, verbose, "MPlayer", rtsp_transport_http);
+	rtspClient = RTSPClient::createNew(*env, url, verbose, "MPlayer", rtsp_transport_http);
 	if (rtspClient == NULL) {
 	  fprintf(stderr, "Failed to create RTSP client: %s\n",
 		  env->getResultMsg());
 	  break;
 	}
-	sdpDescription = openURL_rtsp(rtspClient, url);
+	fWatchVariableForSyncInterface = 0;
+	rtspClient->sendDescribeCommand(responseHandlerForSyncInterface);
+	env->taskScheduler().doEventLoop(&fWatchVariableForSyncInterface);
+	if (fResultCode == 0)
+	    sdpDescription = fResultString;
+	else
+	    delete[] fResultString;
       } else { // SIP
 	unsigned char desiredAudioType = 0; // PCMU (use 3 for GSM)
 	sipClient = SIPClient::createNew(*env, desiredAudioType, NULL,
@@ -236,8 +244,12 @@ extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
 
 	if (rtspClient != NULL) {
 	  // Issue a RTSP "SETUP" command on the chosen subsession:
-	  if (!rtspClient->setupMediaSubsession(*subsession, False,
-						rtsp_transport_tcp)) break;
+	  fWatchVariableForSyncInterface = 0;
+	  rtspClient->sendSetupCommand(*subsession, responseHandlerForSyncInterface, False, rtsp_transport_tcp);
+	  env->taskScheduler().doEventLoop(&fWatchVariableForSyncInterface);
+	  delete[] fResultString;
+	  if (fResultCode != 0) break;
+
 	  if (!strcmp(subsession->mediumName(), "audio"))
 	    audiofound = 1;
 	  if (!strcmp(subsession->mediumName(), "video"))
@@ -248,7 +260,11 @@ extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
 
     if (rtspClient != NULL) {
       // Issue a RTSP aggregate "PLAY" command on the whole session:
-      if (!rtspClient->playMediaSession(*mediaSession)) break;
+      fWatchVariableForSyncInterface = 0;
+      rtspClient->sendPlayCommand(*mediaSession, responseHandlerForSyncInterface);
+      env->taskScheduler().doEventLoop(&fWatchVariableForSyncInterface);
+      delete[] fResultString;
+      if (fResultCode != 0) break;
     } else if (sipClient != NULL) {
       sipClient->sendACK(); // to start the stream flowing
     }
@@ -637,7 +653,8 @@ static void teardownRTSPorSIPSession(RTPState* rtpState) {
   MediaSession* mediaSession = rtpState->mediaSession;
   if (mediaSession == NULL) return;
   if (rtpState->rtspClient != NULL) {
-    rtpState->rtspClient->teardownMediaSession(*mediaSession);
+    fWatchVariableForSyncInterface = 0;
+    rtpState->rtspClient->sendTeardownCommand(*mediaSession, NULL);
   } else if (rtpState->sipClient != NULL) {
     rtpState->sipClient->sendBYE();
   }
-- 
1.8.5.2

