aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Schlabbach <robert_s@gmx.net>2010-10-06 16:59:14 +0000
committerMartin Storsjö <martin@martin.st>2010-10-06 16:59:14 +0000
commit9446b4bbbc60c2b1241911efb65401b3ab83810a (patch)
tree9e6d35cbf3d43aa328e0889f32983e32bf0d9a9f
parent3ece3e4c56d1bcd64f9e180b896b3c0f1dd17e4e (diff)
downloadffmpeg-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.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c
index 8c8d1fa793..d134ebcda4 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);