[SCM] libav/experimental: rtpdec: Handle RTP header extension

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:17:08 UTC 2013


The following commit has been merged in the experimental branch:
commit 9446b4bbbc60c2b1241911efb65401b3ab83810a
Author: Robert Schlabbach <robert_s at gmx.net>
Date:   Wed Oct 6 16:59:14 2010 +0000

    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

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);

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list