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".

Originally committed as revision 12505 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Ronald S. Bultje 17 years ago
parent 8a8754d80f
commit 8792f52a9b
  1. 14
      libavformat/rtsp.c

@ -850,7 +850,7 @@ static void rtsp_close_streams(RTSPState *rt)
* @returns 0 on success, <0 on error, 1 if protocol is unavailable. * @returns 0 on success, <0 on error, 1 if protocol is unavailable.
*/ */
static int 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; RTSPState *rt = s->priv_data;
int j, i, err; int j, i, err;
@ -872,7 +872,7 @@ make_setup_request (AVFormatContext *s, const char *host, int port, int protocol
transport[0] = '\0'; transport[0] = '\0';
/* RTP/UDP */ /* RTP/UDP */
if (protocol_mask & (1 << RTSP_PROTOCOL_RTP_UDP)) { if (protocol == RTSP_PROTOCOL_RTP_UDP) {
char buf[256]; char buf[256];
/* first try in specified port range */ /* first try in specified port range */
@ -903,14 +903,14 @@ make_setup_request (AVFormatContext *s, const char *host, int port, int protocol
} }
/* RTP/TCP */ /* RTP/TCP */
else if (protocol_mask & (1 << RTSP_PROTOCOL_RTP_TCP)) { else if (protocol == RTSP_PROTOCOL_RTP_TCP) {
if (transport[0] != '\0') if (transport[0] != '\0')
av_strlcat(transport, ",", sizeof(transport)); av_strlcat(transport, ",", sizeof(transport));
snprintf(transport + strlen(transport), sizeof(transport) - strlen(transport) - 1, snprintf(transport + strlen(transport), sizeof(transport) - strlen(transport) - 1,
"RTP/AVP/TCP"); "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') if (transport[0] != '\0')
av_strlcat(transport, ",", sizeof(transport)); av_strlcat(transport, ",", sizeof(transport));
snprintf(transport + strlen(transport), snprintf(transport + strlen(transport),
@ -944,7 +944,7 @@ make_setup_request (AVFormatContext *s, const char *host, int port, int protocol
/* close RTP connection if not choosen */ /* close RTP connection if not choosen */
if (reply->transports[0].protocol != RTSP_PROTOCOL_RTP_UDP && 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); url_close(rtsp_st->rtp_handle);
rtsp_st->rtp_handle = NULL; rtsp_st->rtp_handle = NULL;
} }
@ -1088,12 +1088,12 @@ static int rtsp_read_header(AVFormatContext *s,
} }
do { 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); err = make_setup_request(s, host, port, protocol);
if (err < 0) if (err < 0)
goto fail; goto fail;
protocol_mask &= ~protocol; protocol_mask &= ~(1 << protocol);
if (protocol_mask == 0 && err == 1) { if (protocol_mask == 0 && err == 1) {
err = AVERROR(EPROTONOSUPPORT); err = AVERROR(EPROTONOSUPPORT);
goto fail; goto fail;

Loading…
Cancel
Save