Browse Source

rtsp: Factorize code for initializing the rtp payload handler

Originally committed as revision 25892 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/n0.8
Martin Storsjö 15 years ago
parent
commit
003eb64217
1 changed files with 14 additions and 12 deletions
  1. +14
    -12
      libavformat/rtsp.c

+ 14
- 12
libavformat/rtsp.c View File

@@ -122,6 +122,17 @@ static int get_sockaddr(const char *buf, struct sockaddr_storage *sock)
} }


#if CONFIG_RTPDEC #if CONFIG_RTPDEC
static void init_rtp_handler(RTPDynamicProtocolHandler *handler,
RTSPStream *rtsp_st, AVCodecContext *codec)
{
if (!handler)
return;
codec->codec_id = handler->codec_id;
rtsp_st->dynamic_handler = handler;
if (handler->open)
rtsp_st->dynamic_protocol_context = handler->open();
}

/* parse the rtpmap description: <codec_name>/<clock_rate>[/<other params>] */ /* parse the rtpmap description: <codec_name>/<clock_rate>[/<other params>] */
static int sdp_parse_rtpmap(AVFormatContext *s, static int sdp_parse_rtpmap(AVFormatContext *s,
AVCodecContext *codec, RTSPStream *rtsp_st, AVCodecContext *codec, RTSPStream *rtsp_st,
@@ -139,18 +150,9 @@ static int sdp_parse_rtpmap(AVFormatContext *s,
* have a trailing space. */ * have a trailing space. */
get_word_sep(buf, sizeof(buf), "/ ", &p); get_word_sep(buf, sizeof(buf), "/ ", &p);
if (payload_type >= RTP_PT_PRIVATE) { if (payload_type >= RTP_PT_PRIVATE) {
RTPDynamicProtocolHandler *handler;
for (handler = RTPFirstDynamicPayloadHandler;
handler; handler = handler->next) {
if (!strcasecmp(buf, handler->enc_name) &&
codec->codec_type == handler->codec_type) {
codec->codec_id = handler->codec_id;
rtsp_st->dynamic_handler = handler;
if (handler->open)
rtsp_st->dynamic_protocol_context = handler->open();
break;
}
}
RTPDynamicProtocolHandler *handler =
ff_rtp_handler_find_by_name(buf, codec->codec_type);
init_rtp_handler(handler, rtsp_st, codec);
/* If no dynamic handler was found, check with the list of standard /* If no dynamic handler was found, check with the list of standard
* allocated types, if such a stream for some reason happens to * allocated types, if such a stream for some reason happens to
* use a private payload type. This isn't handled in rtpdec.c, since * use a private payload type. This isn't handled in rtpdec.c, since


Loading…
Cancel
Save