<p>Kevin Harwell has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/15689">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">res_rtp_asterisk: Fix standard deviation calculation<br><br>For some input to the standard deviation algorithm extremely large,<br>and wrong numbers were being calculated.<br><br>This patch uses a new formula for correctly calculating both the<br>running mean and standard deviation for the given inputs.<br><br>ASTERISK-29364 #close<br><br>Change-Id: Ibc6e18be41c28bed3fde06d612607acc3fbd621f<br>---<br>M res/res_rtp_asterisk.c<br>1 file changed, 60 insertions(+), 99 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/89/15689/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c</span><br><span>index b0a3f2a..575b156 100644</span><br><span>--- a/res/res_rtp_asterisk.c</span><br><span>+++ b/res/res_rtp_asterisk.c</span><br><span>@@ -383,7 +383,7 @@</span><br><span>        unsigned int txcount;           /*!< How many packets have we sent? */</span><br><span>    unsigned int txoctetcount;      /*!< How many octets have we sent? (txcount*160)*/</span><br><span>        unsigned int cycles;            /*!< Shifted count of sequence number cycles */</span><br><span style="color: hsl(0, 100%, 40%);">-      double rxjitter;                /*!< Interarrival jitter at the moment in seconds */</span><br><span style="color: hsl(120, 100%, 40%);">+       double rxjitter;                /*!< Interarrival jitter at the moment in seconds to be reported */</span><br><span>       double rxtransit;               /*!< Relative transit time for previous packet */</span><br><span>         struct ast_format *lasttxformat;</span><br><span>     struct ast_format *lastrxformat;</span><br><span>@@ -510,34 +510,36 @@</span><br><span>     unsigned int reported_jitter;   /*!< The contents of their last jitter entry in the RR */</span><br><span>         unsigned int reported_lost;     /*!< Reported lost packets in their RR */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        double reported_maxjitter;</span><br><span style="color: hsl(0, 100%, 40%);">-      double reported_minjitter;</span><br><span style="color: hsl(0, 100%, 40%);">-      double reported_normdev_jitter;</span><br><span style="color: hsl(0, 100%, 40%);">- double reported_stdev_jitter;</span><br><span style="color: hsl(0, 100%, 40%);">-   unsigned int reported_jitter_count;</span><br><span style="color: hsl(120, 100%, 40%);">+   double reported_maxjitter; /*!< Maximum reported interarrival jitter */</span><br><span style="color: hsl(120, 100%, 40%);">+    double reported_minjitter; /*!< Minimum reported interarrival jitter */</span><br><span style="color: hsl(120, 100%, 40%);">+    double reported_normdev_jitter; /*!< Mean of reported interarrival jitter */</span><br><span style="color: hsl(120, 100%, 40%);">+       double reported_stdev_jitter; /*!< Standard deviation of reported interarrival jitter */</span><br><span style="color: hsl(120, 100%, 40%);">+   unsigned int reported_jitter_count; /*!< Reported interarrival jitter count */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   double reported_maxlost;</span><br><span style="color: hsl(0, 100%, 40%);">-        double reported_minlost;</span><br><span style="color: hsl(0, 100%, 40%);">-        double reported_normdev_lost;</span><br><span style="color: hsl(0, 100%, 40%);">-   double reported_stdev_lost;</span><br><span style="color: hsl(120, 100%, 40%);">+   double reported_maxlost; /*!< Maximum reported packets lost */</span><br><span style="color: hsl(120, 100%, 40%);">+     double reported_minlost; /*!< Minimum reported packets lost */</span><br><span style="color: hsl(120, 100%, 40%);">+     double reported_normdev_lost; /*!< Mean of reported packets lost */</span><br><span style="color: hsl(120, 100%, 40%);">+        double reported_stdev_lost; /*!< Standard deviation of reported packets lost */</span><br><span style="color: hsl(120, 100%, 40%);">+    unsigned int reported_lost_count; /*!< Reported packets lost count */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    double rxlost;</span><br><span style="color: hsl(0, 100%, 40%);">-  double maxrxlost;</span><br><span style="color: hsl(0, 100%, 40%);">-       double minrxlost;</span><br><span style="color: hsl(0, 100%, 40%);">-       double normdev_rxlost;</span><br><span style="color: hsl(0, 100%, 40%);">-  double stdev_rxlost;</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int rxlost_count;</span><br><span style="color: hsl(120, 100%, 40%);">+    double rxlost; /*!< Calculated number of lost packets to be reported */</span><br><span style="color: hsl(120, 100%, 40%);">+    double maxrxlost; /*!< Maximum calculated lost number of packets */</span><br><span style="color: hsl(120, 100%, 40%);">+        double minrxlost; /*!< Minimum calculated lost number of packets */</span><br><span style="color: hsl(120, 100%, 40%);">+        double normdev_rxlost; /*!< Mean of calculated lost packets */</span><br><span style="color: hsl(120, 100%, 40%);">+     double stdev_rxlost; /*!< Standard deviation of calculated lost packets */</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int rxlost_count; /*!< Calculated lost packets count */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- double maxrxjitter;</span><br><span style="color: hsl(0, 100%, 40%);">-     double minrxjitter;</span><br><span style="color: hsl(0, 100%, 40%);">-     double normdev_rxjitter;</span><br><span style="color: hsl(0, 100%, 40%);">-        double stdev_rxjitter;</span><br><span style="color: hsl(0, 100%, 40%);">-  unsigned int rxjitter_count;</span><br><span style="color: hsl(0, 100%, 40%);">-    double maxrtt;</span><br><span style="color: hsl(0, 100%, 40%);">-  double minrtt;</span><br><span style="color: hsl(0, 100%, 40%);">-  double normdevrtt;</span><br><span style="color: hsl(0, 100%, 40%);">-      double stdevrtt;</span><br><span style="color: hsl(0, 100%, 40%);">-        unsigned int rtt_count;</span><br><span style="color: hsl(120, 100%, 40%);">+       double maxrxjitter; /*!< Maximum of calculated interarrival jitter */</span><br><span style="color: hsl(120, 100%, 40%);">+      double minrxjitter; /*!< Minimum of calculated interarrival jitter */</span><br><span style="color: hsl(120, 100%, 40%);">+      double normdev_rxjitter; /*!< Mean of calculated interarrival jitter */</span><br><span style="color: hsl(120, 100%, 40%);">+    double stdev_rxjitter; /*!< Standard deviation of calculated interarrival jitter */</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int rxjitter_count; /*!< Calculated interarrival jitter count */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        double maxrtt; /*!< Maximum of calculated round trip time */</span><br><span style="color: hsl(120, 100%, 40%);">+       double minrtt; /*!< Minimum of calculated round trip time */</span><br><span style="color: hsl(120, 100%, 40%);">+       double normdevrtt; /*!< Mean of calculated round trip time */</span><br><span style="color: hsl(120, 100%, 40%);">+      double stdevrtt; /*!< Standard deviation of calculated round trip time */</span><br><span style="color: hsl(120, 100%, 40%);">+  unsigned int rtt_count; /*!< Calculated round trip time count */</span><br><span> </span><br><span>      /* VP8: sequence number for the RTCP FIR FCI */</span><br><span>      int firseq;</span><br><span>@@ -3316,49 +3318,32 @@</span><br><span>        return interval;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Calculate normal deviation */</span><br><span style="color: hsl(0, 100%, 40%);">-static double normdev_compute(double normdev, double sample, unsigned int sample_count)</span><br><span style="color: hsl(120, 100%, 40%);">+static void calc_mean_and_standard_deviation(double new_sample, double *mean, double *std_dev, unsigned int *count)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      normdev = normdev * sample_count + sample;</span><br><span style="color: hsl(0, 100%, 40%);">-      sample_count++;</span><br><span style="color: hsl(120, 100%, 40%);">+       double delta1;</span><br><span style="color: hsl(120, 100%, 40%);">+        double delta2;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      /*</span><br><span style="color: hsl(0, 100%, 40%);">-       It's possible the sample_count hits the maximum value and back to 0.</span><br><span style="color: hsl(0, 100%, 40%);">-        Set to 1 to prevent the divide by zero crash if the sample_count is 0.</span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (sample_count == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                sample_count = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* First convert the standard deviation back into a sum of squares. */</span><br><span style="color: hsl(120, 100%, 40%);">+        double last_sum_of_squares = (*std_dev) * (*std_dev) * (*count ?: 1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (++(*count) == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                /* Avoid potential divide by zero on an overflow */</span><br><span style="color: hsl(120, 100%, 40%);">+           *count = 1;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return normdev / sample_count;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static double stddev_compute(double stddev, double sample, double normdev, double normdev_curent, unsigned int sample_count)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">-          for the formula check http://www.cs.umd.edu/~austinjp/constSD.pdf</span><br><span style="color: hsl(0, 100%, 40%);">-               return sqrt( (sample_count*pow(stddev,2) + sample_count*pow((sample-normdev)/(sample_count+1),2) + pow(sample-normdev_curent,2)) / (sample_count+1));</span><br><span style="color: hsl(0, 100%, 40%);">-           we can compute the sigma^2 and that way we would have to do the sqrt only 1 time at the end and would save another pow 2 compute</span><br><span style="color: hsl(0, 100%, 40%);">-                optimized formula</span><br><span style="color: hsl(0, 100%, 40%);">-*/</span><br><span style="color: hsl(0, 100%, 40%);">-#define SQUARE(x) ((x) * (x))</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        stddev = sample_count * stddev;</span><br><span style="color: hsl(0, 100%, 40%);">- sample_count++;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>      /*</span><br><span style="color: hsl(0, 100%, 40%);">-       It's possible the sample_count hits the maximum value and back to 0.</span><br><span style="color: hsl(0, 100%, 40%);">-        Set to 1 to prevent the divide by zero crash if the sample_count is 0.</span><br><span style="color: hsl(120, 100%, 40%);">+        * Below is an implementation of Welford's online algorithm [1] for calculating</span><br><span style="color: hsl(120, 100%, 40%);">+    * mean and variance in a single pass.</span><br><span style="color: hsl(120, 100%, 40%);">+         *</span><br><span style="color: hsl(120, 100%, 40%);">+     * [1] https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance</span><br><span>      */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (sample_count == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                sample_count = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return stddev +</span><br><span style="color: hsl(0, 100%, 40%);">-         ( sample_count * SQUARE( (sample - normdev) / sample_count ) ) +</span><br><span style="color: hsl(0, 100%, 40%);">-                ( SQUARE(sample - normdev_curent) / sample_count );</span><br><span style="color: hsl(120, 100%, 40%);">+   delta1 = new_sample - *mean;</span><br><span style="color: hsl(120, 100%, 40%);">+  *mean += (delta1 / *count);</span><br><span style="color: hsl(120, 100%, 40%);">+   delta2 = new_sample - *mean;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#undef SQUARE</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Now calculate the new variance, and subsequent standard deviation */</span><br><span style="color: hsl(120, 100%, 40%);">+       *std_dev = sqrt((last_sum_of_squares + (delta1 * delta2)) / *count);</span><br><span> }</span><br><span> </span><br><span> static int create_new_socket(const char *type, int af)</span><br><span>@@ -4433,7 +4418,6 @@</span><br><span>      unsigned int expected_packets;</span><br><span>       unsigned int expected_interval;</span><br><span>      unsigned int received_interval;</span><br><span style="color: hsl(0, 100%, 40%);">- double rxlost_current;</span><br><span>       int lost_interval;</span><br><span> </span><br><span>       /* Compute statistics */</span><br><span>@@ -4477,16 +4461,9 @@</span><br><span>    if (lost_interval > rtp->rtcp->maxrxlost) {</span><br><span>                 rtp->rtcp->maxrxlost = rtp->rtcp->rxlost;</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       rxlost_current = normdev_compute(rtp->rtcp->normdev_rxlost,</span><br><span style="color: hsl(0, 100%, 40%);">-                       rtp->rtcp->rxlost,</span><br><span style="color: hsl(0, 100%, 40%);">-                        rtp->rtcp->rxlost_count);</span><br><span style="color: hsl(0, 100%, 40%);">- rtp->rtcp->stdev_rxlost = stddev_compute(rtp->rtcp->stdev_rxlost,</span><br><span style="color: hsl(0, 100%, 40%);">-                   rtp->rtcp->rxlost,</span><br><span style="color: hsl(0, 100%, 40%);">-                        rtp->rtcp->normdev_rxlost,</span><br><span style="color: hsl(0, 100%, 40%);">-                        rxlost_current,</span><br><span style="color: hsl(0, 100%, 40%);">-                 rtp->rtcp->rxlost_count);</span><br><span style="color: hsl(0, 100%, 40%);">- rtp->rtcp->normdev_rxlost = rxlost_current;</span><br><span style="color: hsl(0, 100%, 40%);">-       rtp->rtcp->rxlost_count++;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    calc_mean_and_standard_deviation(rtp->rtcp->rxlost, &rtp->rtcp->normdev_rxlost,</span><br><span style="color: hsl(120, 100%, 40%);">+               &rtp->rtcp->stdev_rxlost, &rtp->rtcp->rxlost_count);</span><br><span> }</span><br><span> </span><br><span> static int ast_rtcp_generate_report(struct ast_rtp_instance *instance, unsigned char *rtcpheader,</span><br><span>@@ -5422,7 +5399,6 @@</span><br><span>       double prog;</span><br><span>         int rate = ast_rtp_get_rate(rtp->f.subclass.format);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     double normdev_rxjitter_current;</span><br><span>     if ((!rtp->rxcore.tv_sec && !rtp->rxcore.tv_usec) || mark) {</span><br><span>           gettimeofday(&rtp->rxcore, NULL);</span><br><span>             rtp->drxcore = (double) rtp->rxcore.tv_sec + (double) rtp->rxcore.tv_usec / 1000000;</span><br><span>@@ -5457,11 +5433,8 @@</span><br><span>               if (rtp->rtcp && rtp->rxjitter < rtp->rtcp->minrxjitter)</span><br><span>                      rtp->rtcp->minrxjitter = rtp->rxjitter;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            normdev_rxjitter_current = normdev_compute(rtp->rtcp->normdev_rxjitter,rtp->rxjitter,rtp->rtcp->rxjitter_count);</span><br><span style="color: hsl(0, 100%, 40%);">-         rtp->rtcp->stdev_rxjitter = stddev_compute(rtp->rtcp->stdev_rxjitter,rtp->rxjitter,rtp->rtcp->normdev_rxjitter,normdev_rxjitter_current,rtp->rtcp->rxjitter_count);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-          rtp->rtcp->normdev_rxjitter = normdev_rxjitter_current;</span><br><span style="color: hsl(0, 100%, 40%);">-           rtp->rtcp->rxjitter_count++;</span><br><span style="color: hsl(120, 100%, 40%);">+            calc_mean_and_standard_deviation(rtp->rxjitter, &rtp->rtcp->normdev_rxjitter,</span><br><span style="color: hsl(120, 100%, 40%);">+                    &rtp->rtcp->stdev_rxjitter, &rtp->rtcp->rxjitter_count);</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span>@@ -5768,7 +5741,6 @@</span><br><span>   unsigned int rtt_lsw;</span><br><span>        unsigned int lsr_a;</span><br><span>  unsigned int rtt;</span><br><span style="color: hsl(0, 100%, 40%);">-       double normdevrtt_current;</span><br><span> </span><br><span>       gettimeofday(&now, NULL);</span><br><span>        timeval2ntp(now, &msw, &lsw);</span><br><span>@@ -5805,16 +5777,8 @@</span><br><span>               rtp->rtcp->maxrtt = rtp->rtcp->rtt;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   normdevrtt_current = normdev_compute(rtp->rtcp->normdevrtt,</span><br><span style="color: hsl(0, 100%, 40%);">-                       rtp->rtcp->rtt,</span><br><span style="color: hsl(0, 100%, 40%);">-                   rtp->rtcp->rtt_count);</span><br><span style="color: hsl(0, 100%, 40%);">-    rtp->rtcp->stdevrtt = stddev_compute(rtp->rtcp->stdevrtt,</span><br><span style="color: hsl(0, 100%, 40%);">-                   rtp->rtcp->rtt,</span><br><span style="color: hsl(0, 100%, 40%);">-                   rtp->rtcp->normdevrtt,</span><br><span style="color: hsl(0, 100%, 40%);">-                    normdevrtt_current,</span><br><span style="color: hsl(0, 100%, 40%);">-                     rtp->rtcp->rtt_count);</span><br><span style="color: hsl(0, 100%, 40%);">-    rtp->rtcp->normdevrtt = normdevrtt_current;</span><br><span style="color: hsl(0, 100%, 40%);">-       rtp->rtcp->rtt_count++;</span><br><span style="color: hsl(120, 100%, 40%);">+ calc_mean_and_standard_deviation(rtp->rtcp->rtt, &rtp->rtcp->normdevrtt,</span><br><span style="color: hsl(120, 100%, 40%);">+              &rtp->rtcp->stdevrtt, &rtp->rtcp->rtt_count);</span><br><span> </span><br><span>        return 0;</span><br><span> }</span><br><span>@@ -5826,7 +5790,6 @@</span><br><span> static void update_jitter_stats(struct ast_rtp *rtp, unsigned int ia_jitter)</span><br><span> {</span><br><span>  double reported_jitter;</span><br><span style="color: hsl(0, 100%, 40%);">- double reported_normdev_jitter_current;</span><br><span> </span><br><span>  rtp->rtcp->reported_jitter = ia_jitter;</span><br><span>        reported_jitter = (double) rtp->rtcp->reported_jitter;</span><br><span>@@ -5839,9 +5802,9 @@</span><br><span>         if (reported_jitter > rtp->rtcp->reported_maxjitter) {</span><br><span>              rtp->rtcp->reported_maxjitter = reported_jitter;</span><br><span>       }</span><br><span style="color: hsl(0, 100%, 40%);">-       reported_normdev_jitter_current = normdev_compute(rtp->rtcp->reported_normdev_jitter, reported_jitter, rtp->rtcp->reported_jitter_count);</span><br><span style="color: hsl(0, 100%, 40%);">-   rtp->rtcp->reported_stdev_jitter = stddev_compute(rtp->rtcp->reported_stdev_jitter, reported_jitter, rtp->rtcp->reported_normdev_jitter, reported_normdev_jitter_current, rtp->rtcp->reported_jitter_count);</span><br><span style="color: hsl(0, 100%, 40%);">-    rtp->rtcp->reported_normdev_jitter = reported_normdev_jitter_current;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ calc_mean_and_standard_deviation(reported_jitter, &rtp->rtcp->reported_normdev_jitter,</span><br><span style="color: hsl(120, 100%, 40%);">+              &rtp->rtcp->reported_stdev_jitter, &rtp->rtcp->reported_jitter_count);</span><br><span> }</span><br><span> </span><br><span> /*!</span><br><span>@@ -5851,11 +5814,10 @@</span><br><span> static void update_lost_stats(struct ast_rtp *rtp, unsigned int lost_packets)</span><br><span> {</span><br><span>   double reported_lost;</span><br><span style="color: hsl(0, 100%, 40%);">-   double reported_normdev_lost_current;</span><br><span> </span><br><span>    rtp->rtcp->reported_lost = lost_packets;</span><br><span>       reported_lost = (double)rtp->rtcp->reported_lost;</span><br><span style="color: hsl(0, 100%, 40%);">- if (rtp->rtcp->reported_jitter_count == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rtp->rtcp->reported_lost_count == 0) {</span><br><span>             rtp->rtcp->reported_minlost = reported_lost;</span><br><span>   }</span><br><span>    if (reported_lost < rtp->rtcp->reported_minlost) {</span><br><span>@@ -5864,9 +5826,9 @@</span><br><span>  if (reported_lost > rtp->rtcp->reported_maxlost) {</span><br><span>          rtp->rtcp->reported_maxlost = reported_lost;</span><br><span>   }</span><br><span style="color: hsl(0, 100%, 40%);">-       reported_normdev_lost_current = normdev_compute(rtp->rtcp->reported_normdev_lost, reported_lost, rtp->rtcp->reported_jitter_count);</span><br><span style="color: hsl(0, 100%, 40%);">- rtp->rtcp->reported_stdev_lost = stddev_compute(rtp->rtcp->reported_stdev_lost, reported_lost, rtp->rtcp->reported_normdev_lost, reported_normdev_lost_current, rtp->rtcp->reported_jitter_count);</span><br><span style="color: hsl(0, 100%, 40%);">-      rtp->rtcp->reported_normdev_lost = reported_normdev_lost_current;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     calc_mean_and_standard_deviation(reported_lost, &rtp->rtcp->reported_normdev_lost,</span><br><span style="color: hsl(120, 100%, 40%);">+          &rtp->rtcp->reported_stdev_lost, &rtp->rtcp->reported_lost_count);</span><br><span> }</span><br><span> </span><br><span> /*! \pre instance is locked */</span><br><span>@@ -6439,7 +6401,6 @@</span><br><span>                            }</span><br><span>                            update_jitter_stats(rtp, report_block->ia_jitter);</span><br><span>                                update_lost_stats(rtp, report_block->lost_count.packets);</span><br><span style="color: hsl(0, 100%, 40%);">-                            rtp->rtcp->reported_jitter_count++;</span><br><span> </span><br><span>                                if (rtcp_debug_test_addr(addr)) {</span><br><span>                                    ast_verbose("  Fraction lost: %d\n", report_block->lost_count.fraction);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/15689">change 15689</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/15689"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 16 </div>
<div style="display:none"> Gerrit-Change-Id: Ibc6e18be41c28bed3fde06d612607acc3fbd621f </div>
<div style="display:none"> Gerrit-Change-Number: 15689 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kevin Harwell <kharwell@digium.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>