aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-02-24 22:33:45 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-02-24 22:33:49 +0100
commit4c8a556a773c9706618b8e5d14b68a06631fb79f (patch)
treea5720f08f734268d88502845e0f99ebe4bd8b4e8
parent2bedcbf82274c08ad137257ed6d81962cf3a9ffd (diff)
parentb7a4c319fda22aa91ce29692d728ec6103b514f6 (diff)
downloadffmpeg-4c8a556a773c9706618b8e5d14b68a06631fb79f.tar.gz
Merge commit 'b7a4c319fda22aa91ce29692d728ec6103b514f6'
* commit 'b7a4c319fda22aa91ce29692d728ec6103b514f6': rtpdec: Allow setting the need_parsing field in RTPDynamicProtocolHandler Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/rtpdec.h1
-rw-r--r--libavformat/rtsp.c9
2 files changed, 7 insertions, 3 deletions
diff --git a/libavformat/rtpdec.h b/libavformat/rtpdec.h
index 384f7e6fe6..3de3e7dc01 100644
--- a/libavformat/rtpdec.h
+++ b/libavformat/rtpdec.h
@@ -116,6 +116,7 @@ struct RTPDynamicProtocolHandler {
const char *enc_name;
enum AVMediaType codec_type;
enum AVCodecID codec_id;
+ enum AVStreamParseType need_parsing;
int static_payload_id; /* 0 means no payload id is set. 0 is a valid
* payload ID (PCMU), too, but that format doesn't
* require any custom depacketization code. */
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 8999f5736c..b9edd46724 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -181,13 +181,16 @@ static int get_sockaddr(const char *buf, struct sockaddr_storage *sock)
#if CONFIG_RTPDEC
static void init_rtp_handler(RTPDynamicProtocolHandler *handler,
- RTSPStream *rtsp_st, AVCodecContext *codec)
+ RTSPStream *rtsp_st, AVStream *st)
{
+ AVCodecContext *codec = st ? st->codec : NULL;
if (!handler)
return;
if (codec)
codec->codec_id = handler->codec_id;
rtsp_st->dynamic_handler = handler;
+ if (st)
+ st->need_parsing = handler->need_parsing;
if (handler->alloc) {
rtsp_st->dynamic_protocol_context = handler->alloc();
if (!rtsp_st->dynamic_protocol_context)
@@ -220,7 +223,7 @@ static int sdp_parse_rtpmap(AVFormatContext *s,
if (codec->codec_id == AV_CODEC_ID_NONE) {
RTPDynamicProtocolHandler *handler =
ff_rtp_handler_find_by_name(buf, codec->codec_type);
- init_rtp_handler(handler, rtsp_st, codec);
+ init_rtp_handler(handler, rtsp_st, st);
/* If no dynamic handler was found, check with the list of standard
* allocated types, if such a stream for some reason happens to
* use a private payload type. This isn't handled in rtpdec.c, since
@@ -472,7 +475,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
/* Even static payload types may need a custom depacketizer */
handler = ff_rtp_handler_find_by_id(
rtsp_st->sdp_payload_type, st->codec->codec_type);
- init_rtp_handler(handler, rtsp_st, st->codec);
+ init_rtp_handler(handler, rtsp_st, st);
if (handler && handler->init)
handler->init(s, st->index,
rtsp_st->dynamic_protocol_context);