Prefix non-static RTSP functions with ff_.

Originally committed as revision 21974 to svn://svn.ffmpeg.org/ffmpeg/trunk
release/0.6
Ronald S. Bultje 15 years ago
parent fc5607f862
commit 3307e6ea86
  1. 2
      ffserver.c
  2. 2
      libavformat/rtp_h264.c
  3. 2
      libavformat/rtpdec.h
  4. 2
      libavformat/rtpdec_amr.c
  5. 70
      libavformat/rtsp.c
  6. 19
      libavformat/rtsp.h
  7. 12
      libavformat/rtspenc.c

@ -2693,7 +2693,7 @@ static int rtsp_parse_request(HTTPContext *c)
len = sizeof(line) - 1; len = sizeof(line) - 1;
memcpy(line, p, len); memcpy(line, p, len);
line[len] = '\0'; line[len] = '\0';
rtsp_parse_line(header, line); ff_rtsp_parse_line(header, line);
p = p1 + 1; p = p1 + 1;
} }

@ -388,7 +388,7 @@ static int parse_h264_sdp_line(AVFormatContext *s, int st_index,
while (*p && *p == ' ') p++; // strip trailing spaces. while (*p && *p == ' ') p++; // strip trailing spaces.
/* loop on each attribute */ /* loop on each attribute */
while (rtsp_next_attr_and_value while (ff_rtsp_next_attr_and_value
(&p, attr, sizeof(attr), value, sizeof(value))) { (&p, attr, sizeof(attr), value, sizeof(value))) {
/* grab the codec extra_data from the config parameter of the fmtp line */ /* grab the codec extra_data from the config parameter of the fmtp line */
sdp_parse_fmtp_config_h264(stream, h264_data, attr, value); sdp_parse_fmtp_config_h264(stream, h264_data, attr, value);

@ -192,7 +192,7 @@ struct RTPDemuxContext {
extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler; extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
void ff_register_dynamic_payload_handler(RTPDynamicProtocolHandler *handler); void ff_register_dynamic_payload_handler(RTPDynamicProtocolHandler *handler);
int rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size); ///< from rtsp.c, but used by rtp dynamic protocol handlers. int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size); ///< from rtsp.c, but used by rtp dynamic protocol handlers.
void av_register_rtp_dynamic_payload_handlers(void); void av_register_rtp_dynamic_payload_handlers(void);

@ -141,7 +141,7 @@ static int amr_parse_sdp_line(AVFormatContext *s, int st_index,
while (*p && *p != ' ') p++; /* eat protocol identifier */ while (*p && *p != ' ') p++; /* eat protocol identifier */
while (*p && *p == ' ') p++; /* strip trailing spaces */ while (*p && *p == ' ') p++; /* strip trailing spaces */
while (rtsp_next_attr_and_value(&p, attr, sizeof(attr), value, sizeof(value))) { while (ff_rtsp_next_attr_and_value(&p, attr, sizeof(attr), value, sizeof(value))) {
if (!strcmp(attr, "octet-align")) if (!strcmp(attr, "octet-align"))
octet_align = atoi(value); octet_align = atoi(value);
else if (!strcmp(attr, "crc")) else if (!strcmp(attr, "crc"))

@ -250,7 +250,7 @@ static const AttrNameMap attr_names[]=
/* parse the attribute line from the fmtp a line of an sdp resonse. This /* parse the attribute line from the fmtp a line of an sdp resonse. This
* is broken out as a function because it is used in rtp_h264.c, which is * is broken out as a function because it is used in rtp_h264.c, which is
* forthcoming. */ * forthcoming. */
int rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size,
char *value, int value_size) char *value, int value_size)
{ {
skip_spaces(p); skip_spaces(p);
@ -279,7 +279,7 @@ static void sdp_parse_fmtp(AVStream *st, const char *p)
RTPPayloadData *rtp_payload_data = &rtsp_st->rtp_payload_data; RTPPayloadData *rtp_payload_data = &rtsp_st->rtp_payload_data;
/* loop on each attribute */ /* loop on each attribute */
while (rtsp_next_attr_and_value(&p, attr, sizeof(attr), while (ff_rtsp_next_attr_and_value(&p, attr, sizeof(attr),
value, sizeof(value))) { value, sizeof(value))) {
/* grab the codec extra_data from the config parameter of the fmtp /* grab the codec extra_data from the config parameter of the fmtp
* line */ * line */
@ -572,7 +572,7 @@ static int sdp_parse(AVFormatContext *s, const char *content)
} }
/* close and free RTSP streams */ /* close and free RTSP streams */
void rtsp_close_streams(AVFormatContext *s) void ff_rtsp_close_streams(AVFormatContext *s)
{ {
RTSPState *rt = s->priv_data; RTSPState *rt = s->priv_data;
int i; int i;
@ -819,7 +819,7 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p)
} }
} }
void rtsp_parse_line(RTSPMessageHeader *reply, const char *buf) void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf)
{ {
const char *p; const char *p;
@ -881,7 +881,7 @@ static void rtsp_skip_packet(AVFormatContext *s)
} }
} }
int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply, int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
unsigned char **content_ptr, unsigned char **content_ptr,
int return_on_interleaved_data) int return_on_interleaved_data)
{ {
@ -932,7 +932,7 @@ int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
get_word(buf1, sizeof(buf1), &p); get_word(buf1, sizeof(buf1), &p);
reply->status_code = atoi(buf1); reply->status_code = atoi(buf1);
} else { } else {
rtsp_parse_line(reply, p); ff_rtsp_parse_line(reply, p);
av_strlcat(rt->last_reply, p, sizeof(rt->last_reply)); av_strlcat(rt->last_reply, p, sizeof(rt->last_reply));
av_strlcat(rt->last_reply, "\n", sizeof(rt->last_reply)); av_strlcat(rt->last_reply, "\n", sizeof(rt->last_reply));
} }
@ -968,7 +968,7 @@ int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
return 0; return 0;
} }
void rtsp_send_cmd_with_content_async(AVFormatContext *s, void ff_rtsp_send_cmd_with_content_async(AVFormatContext *s,
const char *cmd, const char *cmd,
const unsigned char *send_content, const unsigned char *send_content,
int send_content_length) int send_content_length)
@ -1000,30 +1000,30 @@ void rtsp_send_cmd_with_content_async(AVFormatContext *s,
rt->last_cmd_time = av_gettime(); rt->last_cmd_time = av_gettime();
} }
void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd) void ff_rtsp_send_cmd_async(AVFormatContext *s, const char *cmd)
{ {
rtsp_send_cmd_with_content_async(s, cmd, NULL, 0); ff_rtsp_send_cmd_with_content_async(s, cmd, NULL, 0);
} }
void rtsp_send_cmd(AVFormatContext *s, void ff_rtsp_send_cmd(AVFormatContext *s,
const char *cmd, RTSPMessageHeader *reply, const char *cmd, RTSPMessageHeader *reply,
unsigned char **content_ptr) unsigned char **content_ptr)
{ {
rtsp_send_cmd_async(s, cmd); ff_rtsp_send_cmd_async(s, cmd);
rtsp_read_reply(s, reply, content_ptr, 0); ff_rtsp_read_reply(s, reply, content_ptr, 0);
} }
void rtsp_send_cmd_with_content(AVFormatContext *s, void ff_rtsp_send_cmd_with_content(AVFormatContext *s,
const char *cmd, const char *cmd,
RTSPMessageHeader *reply, RTSPMessageHeader *reply,
unsigned char **content_ptr, unsigned char **content_ptr,
const unsigned char *send_content, const unsigned char *send_content,
int send_content_length) int send_content_length)
{ {
rtsp_send_cmd_with_content_async(s, cmd, send_content, send_content_length); ff_rtsp_send_cmd_with_content_async(s, cmd, send_content, send_content_length);
rtsp_read_reply(s, reply, content_ptr, 0); ff_rtsp_read_reply(s, reply, content_ptr, 0);
} }
/** /**
@ -1162,7 +1162,7 @@ static int make_setup_request(AVFormatContext *s, const char *host, int port,
"RealChallenge2: %s, sd=%s\r\n", "RealChallenge2: %s, sd=%s\r\n",
rt->session_id, real_res, real_csum); rt->session_id, real_res, real_csum);
} }
rtsp_send_cmd(s, cmd, reply, NULL); ff_rtsp_send_cmd(s, cmd, reply, NULL);
if (reply->status_code == 461 /* Unsupported protocol */ && i == 0) { if (reply->status_code == 461 /* Unsupported protocol */ && i == 0) {
err = 1; err = 1;
goto fail; goto fail;
@ -1282,7 +1282,7 @@ static int rtsp_read_play(AVFormatContext *s)
rt->control_uri, rt->control_uri,
(double)rt->seek_timestamp / AV_TIME_BASE); (double)rt->seek_timestamp / AV_TIME_BASE);
} }
rtsp_send_cmd(s, cmd, reply, NULL); ff_rtsp_send_cmd(s, cmd, reply, NULL);
if (reply->status_code != RTSP_STATUS_OK) { if (reply->status_code != RTSP_STATUS_OK) {
return -1; return -1;
} }
@ -1313,7 +1313,7 @@ static int rtsp_setup_input_streams(AVFormatContext *s)
"Require: com.real.retain-entity-for-setup\r\n", "Require: com.real.retain-entity-for-setup\r\n",
sizeof(cmd)); sizeof(cmd));
} }
rtsp_send_cmd(s, cmd, reply, &content); ff_rtsp_send_cmd(s, cmd, reply, &content);
if (!content) if (!content)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
if (reply->status_code != RTSP_STATUS_OK) { if (reply->status_code != RTSP_STATUS_OK) {
@ -1351,7 +1351,7 @@ static int rtsp_setup_output_streams(AVFormatContext *s)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
av_log(s, AV_LOG_INFO, "SDP:\n%s\n", sdp); av_log(s, AV_LOG_INFO, "SDP:\n%s\n", sdp);
rtsp_send_cmd_with_content(s, cmd, reply, NULL, sdp, strlen(sdp)); ff_rtsp_send_cmd_with_content(s, cmd, reply, NULL, sdp, strlen(sdp));
av_free(sdp); av_free(sdp);
if (reply->status_code != RTSP_STATUS_OK) if (reply->status_code != RTSP_STATUS_OK)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
@ -1378,7 +1378,7 @@ static int rtsp_setup_output_streams(AVFormatContext *s)
return 0; return 0;
} }
int rtsp_connect(AVFormatContext *s) int ff_rtsp_connect(AVFormatContext *s)
{ {
RTSPState *rt = s->priv_data; RTSPState *rt = s->priv_data;
char host[1024], path[1024], tcpname[1024], cmd[2048], auth[128]; char host[1024], path[1024], tcpname[1024], cmd[2048], auth[128];
@ -1478,7 +1478,7 @@ redirect:
"CompanyID: KnKV4M4I/B2FjJ1TToLycw==\r\n" "CompanyID: KnKV4M4I/B2FjJ1TToLycw==\r\n"
"GUID: 00000000-0000-0000-0000-000000000000\r\n", "GUID: 00000000-0000-0000-0000-000000000000\r\n",
sizeof(cmd)); sizeof(cmd));
rtsp_send_cmd(s, cmd, reply, NULL); ff_rtsp_send_cmd(s, cmd, reply, NULL);
if (reply->status_code != RTSP_STATUS_OK) { if (reply->status_code != RTSP_STATUS_OK) {
err = AVERROR_INVALIDDATA; err = AVERROR_INVALIDDATA;
goto fail; goto fail;
@ -1522,7 +1522,7 @@ redirect:
rt->seek_timestamp = 0; /* default is to start stream at position zero */ rt->seek_timestamp = 0; /* default is to start stream at position zero */
return 0; return 0;
fail: fail:
rtsp_close_streams(s); ff_rtsp_close_streams(s);
url_close(rt->rtsp_hd); url_close(rt->rtsp_hd);
if (reply->status_code >=300 && reply->status_code < 400 && s->iformat) { if (reply->status_code >=300 && reply->status_code < 400 && s->iformat) {
av_strlcpy(s->filename, reply->location, sizeof(s->filename)); av_strlcpy(s->filename, reply->location, sizeof(s->filename));
@ -1542,7 +1542,7 @@ static int rtsp_read_header(AVFormatContext *s,
RTSPState *rt = s->priv_data; RTSPState *rt = s->priv_data;
int ret; int ret;
ret = rtsp_connect(s); ret = ff_rtsp_connect(s);
if (ret) if (ret)
return ret; return ret;
@ -1550,7 +1550,7 @@ static int rtsp_read_header(AVFormatContext *s,
/* do not start immediately */ /* do not start immediately */
} else { } else {
if (rtsp_read_play(s) < 0) { if (rtsp_read_play(s) < 0) {
rtsp_close_streams(s); ff_rtsp_close_streams(s);
url_close(rt->rtsp_hd); url_close(rt->rtsp_hd);
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
@ -1611,7 +1611,7 @@ static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st,
if (tcp_fd != -1 && FD_ISSET(tcp_fd, &rfds)) { if (tcp_fd != -1 && FD_ISSET(tcp_fd, &rfds)) {
RTSPMessageHeader reply; RTSPMessageHeader reply;
rtsp_read_reply(s, &reply, NULL, 0); ff_rtsp_read_reply(s, &reply, NULL, 0);
/* XXX: parse message */ /* XXX: parse message */
if (rt->state != RTSP_STATE_STREAMING) if (rt->state != RTSP_STATE_STREAMING)
return 0; return 0;
@ -1635,7 +1635,7 @@ redo:
for (;;) { for (;;) {
RTSPMessageHeader reply; RTSPMessageHeader reply;
ret = rtsp_read_reply(s, &reply, NULL, 1); ret = ff_rtsp_read_reply(s, &reply, NULL, 1);
if (ret == -1) if (ret == -1)
return -1; return -1;
if (ret == 1) /* received '$' */ if (ret == 1) /* received '$' */
@ -1751,7 +1751,7 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
"SET_PARAMETER %s RTSP/1.0\r\n" "SET_PARAMETER %s RTSP/1.0\r\n"
"Unsubscribe: %s\r\n", "Unsubscribe: %s\r\n",
rt->control_uri, rt->last_subscription); rt->control_uri, rt->last_subscription);
rtsp_send_cmd(s, cmd, reply, NULL); ff_rtsp_send_cmd(s, cmd, reply, NULL);
if (reply->status_code != RTSP_STATUS_OK) if (reply->status_code != RTSP_STATUS_OK)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
rt->need_subscription = 1; rt->need_subscription = 1;
@ -1787,7 +1787,7 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
} }
} }
av_strlcatf(cmd, sizeof(cmd), "%s\r\n", rt->last_subscription); av_strlcatf(cmd, sizeof(cmd), "%s\r\n", rt->last_subscription);
rtsp_send_cmd(s, cmd, reply, NULL); ff_rtsp_send_cmd(s, cmd, reply, NULL);
if (reply->status_code != RTSP_STATUS_OK) if (reply->status_code != RTSP_STATUS_OK)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
rt->need_subscription = 0; rt->need_subscription = 0;
@ -1809,9 +1809,9 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
snprintf(cmd, sizeof(cmd) - 1, snprintf(cmd, sizeof(cmd) - 1,
"GET_PARAMETER %s RTSP/1.0\r\n", "GET_PARAMETER %s RTSP/1.0\r\n",
rt->control_uri); rt->control_uri);
rtsp_send_cmd_async(s, cmd); ff_rtsp_send_cmd_async(s, cmd);
} else { } else {
rtsp_send_cmd_async(s, "OPTIONS * RTSP/1.0\r\n"); ff_rtsp_send_cmd_async(s, "OPTIONS * RTSP/1.0\r\n");
} }
} }
@ -1833,7 +1833,7 @@ static int rtsp_read_pause(AVFormatContext *s)
snprintf(cmd, sizeof(cmd), snprintf(cmd, sizeof(cmd),
"PAUSE %s RTSP/1.0\r\n", "PAUSE %s RTSP/1.0\r\n",
rt->control_uri); rt->control_uri);
rtsp_send_cmd(s, cmd, reply, NULL); ff_rtsp_send_cmd(s, cmd, reply, NULL);
if (reply->status_code != RTSP_STATUS_OK) { if (reply->status_code != RTSP_STATUS_OK) {
return -1; return -1;
} }
@ -1882,9 +1882,9 @@ static int rtsp_read_close(AVFormatContext *s)
snprintf(cmd, sizeof(cmd), snprintf(cmd, sizeof(cmd),
"TEARDOWN %s RTSP/1.0\r\n", "TEARDOWN %s RTSP/1.0\r\n",
s->filename); s->filename);
rtsp_send_cmd_async(s, cmd); ff_rtsp_send_cmd_async(s, cmd);
rtsp_close_streams(s); ff_rtsp_close_streams(s);
url_close(rt->rtsp_hd); url_close(rt->rtsp_hd);
return 0; return 0;
} }
@ -1964,13 +1964,13 @@ static int sdp_read_header(AVFormatContext *s, AVFormatParameters *ap)
} }
return 0; return 0;
fail: fail:
rtsp_close_streams(s); ff_rtsp_close_streams(s);
return err; return err;
} }
static int sdp_read_close(AVFormatContext *s) static int sdp_read_close(AVFormatContext *s)
{ {
rtsp_close_streams(s); ff_rtsp_close_streams(s);
return 0; return 0;
} }

@ -315,7 +315,7 @@ typedef struct RTSPStream {
//@} //@}
} RTSPStream; } RTSPStream;
void rtsp_parse_line(RTSPMessageHeader *reply, const char *buf); void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf);
#if LIBAVFORMAT_VERSION_INT < (53 << 16) #if LIBAVFORMAT_VERSION_INT < (53 << 16)
extern int rtsp_default_protocols; extern int rtsp_default_protocols;
@ -323,9 +323,6 @@ extern int rtsp_default_protocols;
extern int rtsp_rtp_port_min; extern int rtsp_rtp_port_min;
extern int rtsp_rtp_port_max; extern int rtsp_rtp_port_max;
int rtsp_pause(AVFormatContext *s);
int rtsp_resume(AVFormatContext *s);
/** /**
* Send a command to the RTSP server without waiting for the reply. * Send a command to the RTSP server without waiting for the reply.
* *
@ -335,7 +332,7 @@ int rtsp_resume(AVFormatContext *s);
* @param send_content_length the length of the send_content data, or 0 if * @param send_content_length the length of the send_content data, or 0 if
* send_content is null * send_content is null
*/ */
void rtsp_send_cmd_with_content_async(AVFormatContext *s, void ff_rtsp_send_cmd_with_content_async(AVFormatContext *s,
const char *cmd, const char *cmd,
const unsigned char *send_content, const unsigned char *send_content,
int send_content_length); int send_content_length);
@ -344,7 +341,7 @@ void rtsp_send_cmd_with_content_async(AVFormatContext *s,
* *
* @see rtsp_send_cmd_with_content_async * @see rtsp_send_cmd_with_content_async
*/ */
void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd); void ff_rtsp_send_cmd_async(AVFormatContext *s, const char *cmd);
/** /**
* Send a command to the RTSP server and wait for the reply. * Send a command to the RTSP server and wait for the reply.
@ -358,7 +355,7 @@ void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd);
* @param send_content_length the length of the send_content data, or 0 if * @param send_content_length the length of the send_content data, or 0 if
* send_content is null * send_content is null
*/ */
void rtsp_send_cmd_with_content(AVFormatContext *s, void ff_rtsp_send_cmd_with_content(AVFormatContext *s,
const char *cmd, const char *cmd,
RTSPMessageHeader *reply, RTSPMessageHeader *reply,
unsigned char **content_ptr, unsigned char **content_ptr,
@ -370,7 +367,7 @@ void rtsp_send_cmd_with_content(AVFormatContext *s,
* *
* @see rtsp_send_cmd_with_content * @see rtsp_send_cmd_with_content
*/ */
void rtsp_send_cmd(AVFormatContext *s, const char *cmd, void ff_rtsp_send_cmd(AVFormatContext *s, const char *cmd,
RTSPMessageHeader *reply, unsigned char **content_ptr); RTSPMessageHeader *reply, unsigned char **content_ptr);
/** /**
@ -394,7 +391,7 @@ void rtsp_send_cmd(AVFormatContext *s, const char *cmd,
* @returns 1 if a data packets is ready to be received, -1 on error, * @returns 1 if a data packets is ready to be received, -1 on error,
* and 0 on success. * and 0 on success.
*/ */
int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply, int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
unsigned char **content_ptr, unsigned char **content_ptr,
int return_on_interleaved_data); int return_on_interleaved_data);
@ -407,13 +404,13 @@ int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
* @returns 0 on success, < 0 on error. Cleans up all allocations done * @returns 0 on success, < 0 on error. Cleans up all allocations done
* within the function on error. * within the function on error.
*/ */
int rtsp_connect(AVFormatContext *s); int ff_rtsp_connect(AVFormatContext *s);
/** /**
* Close and free all streams within the RTSP (de)muxer * Close and free all streams within the RTSP (de)muxer
* *
* @param s RTSP (de)muxer context * @param s RTSP (de)muxer context
*/ */
void rtsp_close_streams(AVFormatContext *s); void ff_rtsp_close_streams(AVFormatContext *s);
#endif /* AVFORMAT_RTSP_H */ #endif /* AVFORMAT_RTSP_H */

@ -39,7 +39,7 @@ static int rtsp_write_record(AVFormatContext *s)
"Range: npt=%0.3f-\r\n", "Range: npt=%0.3f-\r\n",
s->filename, s->filename,
(double) 0); (double) 0);
rtsp_send_cmd(s, cmd, reply, NULL); ff_rtsp_send_cmd(s, cmd, reply, NULL);
if (reply->status_code != RTSP_STATUS_OK) if (reply->status_code != RTSP_STATUS_OK)
return -1; return -1;
rt->state = RTSP_STATE_STREAMING; rt->state = RTSP_STATE_STREAMING;
@ -51,12 +51,12 @@ static int rtsp_write_header(AVFormatContext *s)
RTSPState *rt = s->priv_data; RTSPState *rt = s->priv_data;
int ret; int ret;
ret = rtsp_connect(s); ret = ff_rtsp_connect(s);
if (ret) if (ret)
return ret; return ret;
if (rtsp_write_record(s) < 0) { if (rtsp_write_record(s) < 0) {
rtsp_close_streams(s); ff_rtsp_close_streams(s);
url_close(rt->rtsp_hd); url_close(rt->rtsp_hd);
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
@ -83,7 +83,7 @@ static int rtsp_write_packet(AVFormatContext *s, AVPacket *pkt)
if (FD_ISSET(tcp_fd, &rfds)) { if (FD_ISSET(tcp_fd, &rfds)) {
RTSPMessageHeader reply; RTSPMessageHeader reply;
if (rtsp_read_reply(s, &reply, NULL, 0) < 0) if (ff_rtsp_read_reply(s, &reply, NULL, 0) < 0)
return AVERROR(EPIPE); return AVERROR(EPIPE);
/* XXX: parse message */ /* XXX: parse message */
if (rt->state != RTSP_STATE_STREAMING) if (rt->state != RTSP_STATE_STREAMING)
@ -108,9 +108,9 @@ static int rtsp_write_close(AVFormatContext *s)
snprintf(cmd, sizeof(cmd), snprintf(cmd, sizeof(cmd),
"TEARDOWN %s RTSP/1.0\r\n", "TEARDOWN %s RTSP/1.0\r\n",
s->filename); s->filename);
rtsp_send_cmd_async(s, cmd); ff_rtsp_send_cmd_async(s, cmd);
rtsp_close_streams(s); ff_rtsp_close_streams(s);
url_close(rt->rtsp_hd); url_close(rt->rtsp_hd);
return 0; return 0;
} }

Loading…
Cancel
Save