changeset 6421:6bb1bf74f9ce libavformat

rtpdec: Read RTCP compound packets Patch by Josh Allmann, joshua dot allmann at gmail
author mstorsjo
date Sun, 29 Aug 2010 10:19:44 +0000
parents e3eb93b5a119
children cb5f5fc848b0
files rtpdec.c
diffstat 1 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/rtpdec.c	Sun Aug 29 10:16:54 2010 +0000
+++ b/rtpdec.c	Sun Aug 29 10:19:44 2010 +0000
@@ -74,12 +74,28 @@
 
 static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int len)
 {
-    if (buf[1] != RTCP_SR)
-        return -1;
+    int payload_len;
+    while (len >= 2) {
+        switch (buf[1]) {
+        case RTCP_SR:
+            if (len < 16) {
+                av_log(NULL, AV_LOG_ERROR, "Invalid length for RTCP SR packet\n");
+                return AVERROR_INVALIDDATA;
+            }
+            payload_len = (AV_RB16(buf + 2) + 1) * 4;
+
     s->last_rtcp_ntp_time = AV_RB64(buf + 8);
     if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE)
         s->first_rtcp_ntp_time = s->last_rtcp_ntp_time;
     s->last_rtcp_timestamp = AV_RB32(buf + 16);
+
+            buf += payload_len;
+            len -= payload_len;
+            break;
+        default:
+            return -1;
+        }
+    }
     return 0;
 }