mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
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
This commit is contained in:
parent
e09d7eef37
commit
ee0cb67fa3
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user