comparison rtpdec.c @ 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 37944ce385a0
children cb5f5fc848b0
comparison
equal deleted inserted replaced
6420:e3eb93b5a119 6421:6bb1bf74f9ce
72 ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfa_handler); 72 ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfa_handler);
73 } 73 }
74 74
75 static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int len) 75 static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int len)
76 { 76 {
77 if (buf[1] != RTCP_SR) 77 int payload_len;
78 return -1; 78 while (len >= 2) {
79 switch (buf[1]) {
80 case RTCP_SR:
81 if (len < 16) {
82 av_log(NULL, AV_LOG_ERROR, "Invalid length for RTCP SR packet\n");
83 return AVERROR_INVALIDDATA;
84 }
85 payload_len = (AV_RB16(buf + 2) + 1) * 4;
86
79 s->last_rtcp_ntp_time = AV_RB64(buf + 8); 87 s->last_rtcp_ntp_time = AV_RB64(buf + 8);
80 if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE) 88 if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE)
81 s->first_rtcp_ntp_time = s->last_rtcp_ntp_time; 89 s->first_rtcp_ntp_time = s->last_rtcp_ntp_time;
82 s->last_rtcp_timestamp = AV_RB32(buf + 16); 90 s->last_rtcp_timestamp = AV_RB32(buf + 16);
91
92 buf += payload_len;
93 len -= payload_len;
94 break;
95 default:
96 return -1;
97 }
98 }
83 return 0; 99 return 0;
84 } 100 }
85 101
86 #define RTP_SEQ_MOD (1<<16) 102 #define RTP_SEQ_MOD (1<<16)
87 103