diff options
author | Robert Schlabbach <robert_s@gmx.net> | 2010-10-06 16:59:14 +0000 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2010-10-06 16:59:14 +0000 |
commit | 9446b4bbbc60c2b1241911efb65401b3ab83810a (patch) | |
tree | 9e6d35cbf3d43aa328e0889f32983e32bf0d9a9f | |
parent | 3ece3e4c56d1bcd64f9e180b896b3c0f1dd17e4e (diff) | |
download | ffmpeg-streaming-9446b4bbbc60c2b1241911efb65401b3ab83810a.zip ffmpeg-streaming-9446b4bbbc60c2b1241911efb65401b3ab83810a.tar.gz |
rtpdec: Handle RTP header extension
This fixes roundup issue 2270.
Patch by Robert Schlabbach, robert_s at gmx dot net
Originally committed as revision 25372 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/rtpdec.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index 8c8d1fa..d134ebc 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -421,10 +421,12 @@ static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt, { unsigned int ssrc, h; int payload_type, seq, ret, flags = 0; + int ext; AVStream *st; uint32_t timestamp; int rv= 0; + ext = buf[0] & 0x10; payload_type = buf[1] & 0x7f; if (buf[1] & 0x80) flags |= RTP_FLAG_MARKER; @@ -451,6 +453,21 @@ static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt, len -= 12; buf += 12; + /* RFC 3550 Section 5.3.1 RTP Header Extension handling */ + if (ext) { + if (len < 4) + return -1; + /* calculate the header extension length (stored as number + * of 32-bit words) */ + ext = (AV_RB16(buf + 2) + 1) << 2; + + if (len < ext) + return -1; + // skip past RTP header extension + len -= ext; + buf += ext; + } + if (!st) { /* specific MPEG2TS demux support */ ret = ff_mpegts_parse_packet(s->ts, pkt, buf, len); |