Correct output of RTCP jitter statistics in SR and RR reports
[asterisk/asterisk.git] / res / res_rtp_asterisk.c
index eb1d07d..d804d2c 100644 (file)
@@ -137,7 +137,7 @@ struct ast_rtp {
        unsigned int txcount;           /*!< How many packets have we sent? */
        unsigned int txoctetcount;      /*!< How many octets have we sent? (txcount*160)*/
        unsigned int cycles;            /*!< Shifted count of sequence number cycles */
-       double rxjitter;                /*!< Interarrival jitter at the moment */
+       double rxjitter;                /*!< Interarrival jitter at the moment in seconds */
        double rxtransit;               /*!< Relative transit time for previous packet */
        struct ast_format lasttxformat;
        struct ast_format lastrxformat;
@@ -900,6 +900,7 @@ static int ast_rtcp_write_rr(struct ast_rtp_instance *instance)
        char bdata[1024];
        struct timeval dlsr;
        int fraction;
+       int rate = rtp_get_rate(&rtp->f.subclass.format);
 
        double rxlost_current;
 
@@ -949,7 +950,7 @@ static int ast_rtcp_write_rr(struct ast_rtp_instance *instance)
        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 * 65536.));
+       rtcpheader[5] = htonl((unsigned int)(rtp->rxjitter * rate));
        rtcpheader[6] = htonl(rtp->rtcp->themrxlsr);
        rtcpheader[7] = htonl((((dlsr.tv_sec * 1000) + (dlsr.tv_usec / 1000)) * 65536) / 1000);
 
@@ -1003,6 +1004,7 @@ static int ast_rtcp_write_sr(struct ast_rtp_instance *instance)
        int fraction;
        struct timeval dlsr;
        char bdata[512];
+       int rate = rtp_get_rate(&rtp->f.subclass.format);
 
        if (!rtp || !rtp->rtcp)
                return 0;
@@ -1043,7 +1045,7 @@ static int ast_rtcp_write_sr(struct ast_rtp_instance *instance)
        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 * 65536.));
+       rtcpheader[10] = htonl((unsigned int)(rtp->rxjitter * rate));
        rtcpheader[11] = htonl(rtp->rtcp->themrxlsr);
        rtcpheader[12] = htonl((((dlsr.tv_sec * 1000) + (dlsr.tv_usec / 1000)) * 65536) / 1000);
        len += 24;