aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2008-09-11 17:43:04 +0000
committerRonald S. Bultje <rsbultje@gmail.com>2008-09-11 17:43:04 +0000
commitee0cb67fa3a761a83674412b45ef8ea8bb124366 (patch)
tree771c5b6c8339151a692a631ba17ac9bff6eb557f
parente09d7eef375918fd4218ffb7e0d5c182b3038cb3 (diff)
downloadffmpeg-ee0cb67fa3a761a83674412b45ef8ea8bb124366.tar.gz
Factorize out common code for opening of the RTP parsing context between
SDP and RTSP into a new function. See discussion on ML in "[PATCH] rtsp cleanup part 1: remove duplicate code" thread. Originally committed as revision 15297 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/rtsp.c58
1 files changed, 26 insertions, 32 deletions
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 950ec46474..22ecaef711 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -868,6 +868,30 @@ static void rtsp_close_streams(RTSPState *rt)
av_free(rt->rtsp_streams);
}
+static int
+rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
+{
+ AVStream *st = NULL;
+
+ /* open the RTP context */
+ if (rtsp_st->stream_index >= 0)
+ st = s->streams[rtsp_st->stream_index];
+ if (!st)
+ s->ctx_flags |= AVFMTCTX_NOHEADER;
+ rtsp_st->rtp_ctx = rtp_parse_open(s, st, rtsp_st->rtp_handle, rtsp_st->sdp_payload_type, &rtsp_st->rtp_payload_data);
+
+ if (!rtsp_st->rtp_ctx) {
+ return AVERROR(ENOMEM);
+ } else {
+ if(rtsp_st->dynamic_handler) {
+ rtsp_st->rtp_ctx->dynamic_protocol_context= rtsp_st->dynamic_protocol_context;
+ rtsp_st->rtp_ctx->parse_packet= rtsp_st->dynamic_handler->parse_packet;
+ }
+ }
+
+ return 0;
+}
+
/**
* @returns 0 on success, <0 on error, 1 if protocol is unavailable.
*/
@@ -878,7 +902,6 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
RTSPState *rt = s->priv_data;
int j, i, err;
RTSPStream *rtsp_st;
- AVStream *st;
RTSPHeader reply1, *reply = &reply1;
char cmd[2048];
const char *trans_pref;
@@ -1016,23 +1039,9 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
}
break;
}
- /* open the RTP context */
- st = NULL;
- if (rtsp_st->stream_index >= 0)
- st = s->streams[rtsp_st->stream_index];
- if (!st)
- s->ctx_flags |= AVFMTCTX_NOHEADER;
- rtsp_st->rtp_ctx = rtp_parse_open(s, st, rtsp_st->rtp_handle, rtsp_st->sdp_payload_type, &rtsp_st->rtp_payload_data);
- if (!rtsp_st->rtp_ctx) {
- err = AVERROR(ENOMEM);
+ if ((err = rtsp_open_transport_ctx(s, rtsp_st)))
goto fail;
- } else {
- if(rtsp_st->dynamic_handler) {
- rtsp_st->rtp_ctx->dynamic_protocol_context= rtsp_st->dynamic_protocol_context;
- rtsp_st->rtp_ctx->parse_packet= rtsp_st->dynamic_handler->parse_packet;
- }
- }
}
if (rt->server_type == RTSP_SERVER_RDT)
@@ -1509,7 +1518,6 @@ static int sdp_read_header(AVFormatContext *s,
int size, i, err;
char *content;
char url[1024];
- AVStream *st;
/* read the whole sdp file */
/* XXX: better loading */
@@ -1537,22 +1545,8 @@ static int sdp_read_header(AVFormatContext *s,
err = AVERROR_INVALIDDATA;
goto fail;
}
- /* open the RTP context */
- st = NULL;
- if (rtsp_st->stream_index >= 0)
- st = s->streams[rtsp_st->stream_index];
- if (!st)
- s->ctx_flags |= AVFMTCTX_NOHEADER;
- rtsp_st->rtp_ctx = rtp_parse_open(s, st, rtsp_st->rtp_handle, rtsp_st->sdp_payload_type, &rtsp_st->rtp_payload_data);
- if (!rtsp_st->rtp_ctx) {
- err = AVERROR(ENOMEM);
+ if ((err = rtsp_open_transport_ctx(s, rtsp_st)))
goto fail;
- } else {
- if(rtsp_st->dynamic_handler) {
- rtsp_st->rtp_ctx->dynamic_protocol_context= rtsp_st->dynamic_protocol_context;
- rtsp_st->rtp_ctx->parse_packet= rtsp_st->dynamic_handler->parse_packet;
- }
- }
}
return 0;
fail: