Mercurial > libavformat.hg
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; }