changeset 3150:095003bbe73e libavformat

Change protocol_mask into protocol, since we always just try a single one per iteration in make_setup_request(), and cycling between the different protocols is now done in the calling function, therefore the need for a mask goes away. This also makes the function somewhat simpler to read. Discussed and approved in "[PATCH] RTSP alternate protocol 3/4".
author rbultje
date Wed, 19 Mar 2008 14:07:31 +0000
parents 5a7a7406ab1f
children 65236eababe9
files rtsp.c
diffstat 1 files changed, 7 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/rtsp.c	Wed Mar 19 14:05:08 2008 +0000
+++ b/rtsp.c	Wed Mar 19 14:07:31 2008 +0000
@@ -850,7 +850,7 @@
  * @returns 0 on success, <0 on error, 1 if protocol is unavailable.
  */
 static int
-make_setup_request (AVFormatContext *s, const char *host, int port, int protocol_mask)
+make_setup_request (AVFormatContext *s, const char *host, int port, int protocol)
 {
     RTSPState *rt = s->priv_data;
     int j, i, err;
@@ -872,7 +872,7 @@
         transport[0] = '\0';
 
         /* RTP/UDP */
-        if (protocol_mask & (1 << RTSP_PROTOCOL_RTP_UDP)) {
+        if (protocol == RTSP_PROTOCOL_RTP_UDP) {
             char buf[256];
 
             /* first try in specified port range */
@@ -903,14 +903,14 @@
         }
 
         /* RTP/TCP */
-        else if (protocol_mask & (1 << RTSP_PROTOCOL_RTP_TCP)) {
+        else if (protocol == RTSP_PROTOCOL_RTP_TCP) {
             if (transport[0] != '\0')
                 av_strlcat(transport, ",", sizeof(transport));
             snprintf(transport + strlen(transport), sizeof(transport) - strlen(transport) - 1,
                      "RTP/AVP/TCP");
         }
 
-        else if (protocol_mask & (1 << RTSP_PROTOCOL_RTP_UDP_MULTICAST)) {
+        else if (protocol == RTSP_PROTOCOL_RTP_UDP_MULTICAST) {
             if (transport[0] != '\0')
                 av_strlcat(transport, ",", sizeof(transport));
             snprintf(transport + strlen(transport),
@@ -944,7 +944,7 @@
 
         /* close RTP connection if not choosen */
         if (reply->transports[0].protocol != RTSP_PROTOCOL_RTP_UDP &&
-            (protocol_mask & (1 << RTSP_PROTOCOL_RTP_UDP))) {
+            (protocol == RTSP_PROTOCOL_RTP_UDP)) {
             url_close(rtsp_st->rtp_handle);
             rtsp_st->rtp_handle = NULL;
         }
@@ -1088,12 +1088,12 @@
     }
 
     do {
-        int protocol = protocol_mask & ~(protocol_mask - 1);
+        int protocol = ff_log2_tab[protocol_mask & ~(protocol_mask - 1)];
 
         err = make_setup_request(s, host, port, protocol);
         if (err < 0)
         goto fail;
-        protocol_mask &= ~protocol;
+        protocol_mask &= ~(1 << protocol);
         if (protocol_mask == 0 && err == 1) {
             err = AVERROR(EPROTONOSUPPORT);
             goto fail;