diff options
author | Olle Johansson <oej@edvina.net> | 2007-04-18 20:39:31 +0000 |
---|---|---|
committer | Olle Johansson <oej@edvina.net> | 2007-04-18 20:39:31 +0000 |
commit | c4cd1b67615c7d0c2edf4c054a579de2d1dd32b8 (patch) | |
tree | 351f4107e51f3e2749549cd2db10df704e2ad1f5 /main/rtp.c | |
parent | c72efe27bee4f1f666b49c840e5486c9b87a754e (diff) |
Merged revisions 61674 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r61674 | oej | 2007-04-18 22:28:53 +0200 (Wed, 18 Apr 2007) | 2 lines
Issue #9554 - Improve RTCP (Dave Troy)
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@61675 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/rtp.c')
-rw-r--r-- | main/rtp.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/main/rtp.c b/main/rtp.c index bcb86e4df..d316ae7a1 100644 --- a/main/rtp.c +++ b/main/rtp.c @@ -995,6 +995,7 @@ struct ast_frame *ast_rtcp_read(struct ast_rtp *rtp) lsr = (double)((ntohl(rtcpheader[i + 4]) & 0xffff0000) >> 16) + (double)((double)(ntohl(rtcpheader[i + 4]) & 0xffff) / 1000000.); dlsr = (double)(ntohl(rtcpheader[i + 5])/65536.); rtt = a - dlsr - lsr; + if (rtt>=0) { rtp->rtcp->accumulated_transit += rtt; rtp->rtcp->rtt = rtt; if (rtp->rtcp->maxrtt<rtt) @@ -1002,6 +1003,7 @@ struct ast_frame *ast_rtcp_read(struct ast_rtp *rtp) if (rtp->rtcp->minrtt>rtt) rtp->rtcp->minrtt = rtt; } + } rtp->rtcp->reported_jitter = ntohl(rtcpheader[i + 3]); rtp->rtcp->reported_lost = ntohl(rtcpheader[i + 1]) & 0xffffff; if (rtcp_debug_test_addr(&sin)) { @@ -1155,7 +1157,6 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp) unsigned int seqno; int version; int payloadtype; - int tseqno; int hdrlen = 12; int padding; int mark; @@ -1276,8 +1277,6 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp) rtp->rxcount++; /* Only count reasonably valid packets, this'll make the rtcp stats more accurate */ - tseqno = rtp->lastrxseqno +1; - if (rtp->rxcount==1) { /* This is the first RTP packet successfully received from source */ rtp->seedrxseqno = seqno; @@ -1288,8 +1287,7 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp) /* Schedule transmission of Receiver Report */ rtp->rtcp->schedid = ast_sched_add(rtp->sched, ast_rtcp_calc_interval(rtp), ast_rtcp_write, rtp); } - - if (tseqno > RTP_SEQ_MOD) { /* if tseqno is greater than RTP_SEQ_MOD it would indicate that the sender cycled */ + if ( rtp->lastrxseqno - seqno > 100) { /* if so it would indicate that the sender cycled; allow for misordering */ rtp->cycles += RTP_SEQ_MOD; ast_verbose("SEQNO cycled: %u\t%d\n", rtp->cycles, seqno); } @@ -2452,7 +2450,7 @@ static int ast_rtcp_write_sr(void *data) rtcpheader[7] = htonl(rtp->themssrc); rtcpheader[8] = htonl(((fraction & 0xff) << 24) | (lost & 0xffffff)); rtcpheader[9] = htonl((rtp->cycles) | ((rtp->lastrxseqno & 0xffff))); - rtcpheader[10] = htonl((unsigned int)rtp->rxjitter); + rtcpheader[10] = htonl((unsigned int)(rtp->rxjitter * 65536.)); rtcpheader[11] = htonl(rtp->rtcp->themrxlsr); rtcpheader[12] = htonl((((dlsr.tv_sec * 1000) + (dlsr.tv_usec / 1000)) * 65536) / 1000); len += 24; @@ -2554,7 +2552,7 @@ static int ast_rtcp_write_rr(void *data) rtcpheader[2] = htonl(rtp->themssrc); rtcpheader[3] = htonl(((fraction & 0xff) << 24) | (lost & 0xffffff)); rtcpheader[4] = htonl((rtp->cycles) | ((rtp->lastrxseqno & 0xffff))); - rtcpheader[5] = htonl((unsigned int)rtp->rxjitter); + rtcpheader[5] = htonl((unsigned int)(rtp->rxjitter * 65536.)); rtcpheader[6] = htonl(rtp->rtcp->themrxlsr); rtcpheader[7] = htonl((((dlsr.tv_sec * 1000) + (dlsr.tv_usec / 1000)) * 65536) / 1000); |