diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2008-05-17 14:54:18 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2008-05-17 14:54:18 +0000 |
commit | 99cee13d826450735fbe4d0891c8d286a861d4e8 (patch) | |
tree | 9491350404737c301bd4b7ddec84333cf5c6ef57 /pjmedia | |
parent | a33c7aeaee65347f44c7da1612c904b7becb324f (diff) |
More on ticket #535: updated files using and related to math.h
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1961 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r-- | pjmedia/include/pjmedia/jbuf.h | 5 | ||||
-rw-r--r-- | pjmedia/include/pjmedia/rtcp.h | 26 | ||||
-rw-r--r-- | pjmedia/include/pjmedia/rtcp_xr.h | 36 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/jbuf.c | 28 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/rtcp.c | 81 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/rtcp_xr.c | 108 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/stream.c | 8 |
7 files changed, 71 insertions, 221 deletions
diff --git a/pjmedia/include/pjmedia/jbuf.h b/pjmedia/include/pjmedia/jbuf.h index a527d57b..229f3f05 100644 --- a/pjmedia/include/pjmedia/jbuf.h +++ b/pjmedia/include/pjmedia/jbuf.h @@ -76,7 +76,10 @@ struct pjmedia_jb_state unsigned min_prefetch; /**< Minimum allowed prefetch, in frms. */ unsigned max_prefetch; /**< Maximum allowed prefetch, in frms. */ unsigned size; /**< Current buffer size, in frames. */ - unsigned max_size; /**< Maximum size ever. */ + unsigned avg_delay; /**< Average delay, in ms. */ + unsigned min_delay; /**< Minimum delay, in ms. */ + unsigned max_delay; /**< Maximum delay, in ms. */ + unsigned dev_delay; /**< Standard deviation of delay, in ms. */ }; diff --git a/pjmedia/include/pjmedia/rtcp.h b/pjmedia/include/pjmedia/rtcp.h index 2633224e..bffb5f83 100644 --- a/pjmedia/include/pjmedia/rtcp.h +++ b/pjmedia/include/pjmedia/rtcp.h @@ -28,7 +28,6 @@ #include <pjmedia/rtcp_xr.h> #include <pjmedia/rtp.h> - PJ_BEGIN_DECL @@ -180,26 +179,14 @@ struct pjmedia_rtcp_stream_stat unsigned reorder; /**< Total number of out of order packets */ unsigned dup; /**< Total number of duplicates packets */ - struct { - unsigned count; /**< Number of period samples(to calc avg) */ - unsigned min; /**< Minimum loss period (in usec) */ - unsigned avg; /**< Average loss period (in usec) */ - unsigned max; /**< Maximum loss period (in usec) */ - unsigned last; /**< Last loss period (in usec) */ - } loss_period; /**< Lost period history. */ + pj_math_stat loss_period;/**< Loss period statistics (in usec) */ struct { unsigned burst:1; /**< Burst/sequential packet lost detected */ unsigned random:1; /**< Random packet lost detected. */ } loss_type; /**< Types of loss detected. */ - struct { - unsigned count; /**< Number of updates. */ - unsigned min; /**< Minimum jitter (in usec) */ - unsigned avg; /**< Average jitter (in usec) */ - unsigned max; /**< Maximum jitter (in usec) */ - unsigned last; /**< Last jitter (in usec) */ - } jitter; /**< Jitter history. */ + pj_math_stat jitter; /**< Jitter statistics (in usec) */ }; @@ -220,14 +207,7 @@ struct pjmedia_rtcp_stat pjmedia_rtcp_stream_stat tx; /**< Encoder stream statistics. */ pjmedia_rtcp_stream_stat rx; /**< Decoder stream statistics. */ - struct { - unsigned min; /**< Minimum round-trip delay (in usec) */ - unsigned avg; /**< Average round-trip delay (in usec) */ - unsigned max; /**< Maximum round-trip delay (in usec) */ - unsigned last; /**< Last round-trip delay (in usec) */ - } rtt; /**< Round trip delay history. */ - - unsigned rtt_update_cnt; /**< Nb of times rtt is updated. */ + pj_math_stat rtt; /**< Round trip delay statistic(in usec)*/ }; diff --git a/pjmedia/include/pjmedia/rtcp_xr.h b/pjmedia/include/pjmedia/rtcp_xr.h index cdedc1dd..c1eafa97 100644 --- a/pjmedia/include/pjmedia/rtcp_xr.h +++ b/pjmedia/include/pjmedia/rtcp_xr.h @@ -25,6 +25,7 @@ */ #include <pjmedia/types.h> +#include <pj/math.h> PJ_BEGIN_DECL @@ -246,22 +247,8 @@ typedef struct pjmedia_rtcp_xr_stream_stat unsigned lost; /**< Number of packets lost */ unsigned dup; /**< Number of duplicated packets */ - - struct { - unsigned min; /**< Minimum jitter (in usec) */ - unsigned max; /**< Maximum jitter (in usec) */ - unsigned dev; /**< Jitter deviation (in usec) */ - unsigned mean; /**< Average jitter (in usec) */ - unsigned count; /**< Update count */ - } jitter; /**< Jitter history. */ - - struct { - unsigned min; /**< Minimum ToH */ - unsigned max; /**< Maximum ToH */ - unsigned dev; /**< ToH deviation */ - unsigned mean; /**< Average ToH */ - unsigned count; /**< Update count */ - } toh; /**< TTL of hop limit history. */ + pj_math_stat jitter; /**< Jitter statistics (in usec) */ + pj_math_stat toh; /**< TTL of hop limit statistics. */ } stat_sum; struct { @@ -300,18 +287,11 @@ typedef struct pjmedia_rtcp_xr_stream_stat typedef struct pjmedia_rtcp_xr_stat { - pjmedia_rtcp_xr_stream_stat rx; - pjmedia_rtcp_xr_stream_stat tx; - - /* RTT calculated from receiver side */ - struct { - unsigned min; /**< Minimum round-trip delay (in usec) */ - unsigned avg; /**< Average round-trip delay (in usec) */ - unsigned max; /**< Maximum round-trip delay (in usec) */ - unsigned last; /**< Last round-trip delay (in usec) */ - unsigned update_cnt; /**< Nb of times rtt is updated. */ - } rtt; /**< Round trip delay history. */ - + pjmedia_rtcp_xr_stream_stat rx; /**< Decoding direction statistics. */ + pjmedia_rtcp_xr_stream_stat tx; /**< Encoding direction statistics. */ + pj_math_stat rtt; /**< Round-trip delay stat (in usec) + the value is calculated from + receiver side. */ } pjmedia_rtcp_xr_stat; /** diff --git a/pjmedia/src/pjmedia/jbuf.c b/pjmedia/src/pjmedia/jbuf.c index 4ae3b308..e3aa86e7 100644 --- a/pjmedia/src/pjmedia/jbuf.c +++ b/pjmedia/src/pjmedia/jbuf.c @@ -24,6 +24,7 @@ #include <pj/pool.h> #include <pj/assert.h> #include <pj/log.h> +#include <pj/math.h> #include <pj/string.h> @@ -66,19 +67,13 @@ struct pjmedia_jbuf int jb_min_prefetch; // Minimum allowable prefetch int jb_max_prefetch; // Maximum allowable prefetch int jb_status; // status is 'init' until the first 'put' operation - - int jb_max_size; // Maximum frames buffered ever + pj_math_stat jb_delay; // Delay statistics of jitter buffer (in frame unit) }; #define JB_STATUS_INITIALIZING 0 #define JB_STATUS_PROCESSING 1 -#define PJ_ABS(x) ((x > 0) ? (x) : -(x)) -#define PJ_MAX(x, y) ((x > y) ? (x) : (y)) -#define PJ_MIN(x, y) ((x < y) ? (x) : (y)) - - /* Enabling this would log the jitter buffer state about once per * second. */ @@ -313,6 +308,8 @@ PJ_DEF(pj_status_t) pjmedia_jbuf_create(pj_pool_t *pool, jb->jb_max_hist_level = 0; jb->jb_max_count = max_count; + pj_math_stat_init(&jb->jb_delay); + *p_jb = jb; return PJ_SUCCESS; } @@ -368,10 +365,12 @@ PJ_DEF(pj_status_t) pjmedia_jbuf_reset(pjmedia_jbuf *jb) jb->jb_stable_hist = 0; jb->jb_status = JB_STATUS_INITIALIZING; jb->jb_max_hist_level = 0; - jb->jb_max_size = 0; jb_framelist_remove_head(&jb->jb_framelist, jb_framelist_size(&jb->jb_framelist)); + + pj_math_stat_init(&jb->jb_delay); + return PJ_SUCCESS; } @@ -388,8 +387,6 @@ static void jbuf_calculate_jitter(pjmedia_jbuf *jb) /* Update jb_max_size */ cur_size = jb_framelist_size(&jb->jb_framelist); - if (cur_size > jb->jb_max_size) - jb->jb_max_size = cur_size; /* Only apply burst-level calculation on PUT operation since if VAD is * active the burst-level may not be accurate. @@ -456,9 +453,13 @@ static void jbuf_calculate_jitter(pjmedia_jbuf *jb) /* Drop frame(s)! */ jb_framelist_remove_head(&jb->jb_framelist, diff); + pj_math_stat_update(&jb->jb_delay, cur_size - diff); + TRACE__((jb->name.ptr, "JB shrinking %d frame(s), size=%d", diff, jb_framelist_size(&jb->jb_framelist))); + } else { + pj_math_stat_update(&jb->jb_delay, cur_size); } jb->jb_level = 0; @@ -611,8 +612,11 @@ PJ_DEF(pj_status_t) pjmedia_jbuf_get_state( pjmedia_jbuf *jb, state->min_prefetch = jb->jb_min_prefetch; state->max_prefetch = jb->jb_max_prefetch; state->size = jb_framelist_size(&jb->jb_framelist); - state->max_size = jb->jb_max_size; + state->avg_delay = jb->jb_delay.mean * jb->jb_frame_ptime; + state->min_delay = jb->jb_delay.min * jb->jb_frame_ptime; + state->max_delay = jb->jb_delay.max * jb->jb_frame_ptime; + state->dev_delay = pj_math_stat_get_stddev(&jb->jb_delay) * + jb->jb_frame_ptime; return PJ_SUCCESS; } - diff --git a/pjmedia/src/pjmedia/rtcp.c b/pjmedia/src/pjmedia/rtcp.c index 5dc7623d..c4a914b1 100644 --- a/pjmedia/src/pjmedia/rtcp.c +++ b/pjmedia/src/pjmedia/rtcp.c @@ -166,6 +166,13 @@ PJ_DEF(void) pjmedia_rtcp_init(pjmedia_rtcp_session *sess, pj_get_timestamp(&sess->ts_base); pj_get_timestamp_freq(&sess->ts_freq); + /* Initialize statistics states */ + pj_math_stat_init(&sess->stat.rtt); + pj_math_stat_init(&sess->stat.rx.loss_period); + pj_math_stat_init(&sess->stat.rx.jitter); + pj_math_stat_init(&sess->stat.tx.loss_period); + pj_math_stat_init(&sess->stat.tx.jitter); + /* RR will be initialized on receipt of the first RTP packet. */ } @@ -274,18 +281,7 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp2(pjmedia_rtcp_session *sess, TRACE_((sess->name, "%d packet(s) lost", seq_st.diff - 1)); /* Update loss period stat */ - if (sess->stat.rx.loss_period.count == 0 || - period < sess->stat.rx.loss_period.min) - { - sess->stat.rx.loss_period.min = period; - } - if (period > sess->stat.rx.loss_period.max) - sess->stat.rx.loss_period.max = period; - sess->stat.rx.loss_period.avg = - (sess->stat.rx.loss_period.avg * sess->stat.rx.loss_period.count + - period) / (sess->stat.rx.loss_period.count + 1); - sess->stat.rx.loss_period.last = period; - ++sess->stat.rx.loss_period.count; + pj_math_stat_update(&sess->stat.rx.loss_period, period); } @@ -329,20 +325,8 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp2(pjmedia_rtcp_session *sess, jitter *= 1000; } - /* Add to average */ - sess->avg_jitter = - (jitter + sess->avg_jitter * sess->stat.rx.jitter.count) / - (sess->stat.rx.jitter.count + 1); - sess->stat.rx.jitter.avg = (unsigned)sess->avg_jitter; - ++sess->stat.rx.jitter.count; - /* Update jitter stat */ - if (jitter < sess->stat.rx.jitter.min) - sess->stat.rx.jitter.min = jitter; - if (jitter > sess->stat.rx.jitter.max) - sess->stat.rx.jitter.max = jitter; - - sess->stat.rx.jitter.last = jitter; + pj_math_stat_update(&sess->stat.rx.jitter, jitter); #if defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0) pjmedia_rtcp_xr_rx_rtp(&sess->xr_session, seq, @@ -463,17 +447,8 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtcp( pjmedia_rtcp_session *sess, /* Loss period in usec */ period *= 1000; - if (sess->stat.tx.update_cnt==0||sess->stat.tx.loss_period.min==0) - sess->stat.tx.loss_period.min = period; - if (period < sess->stat.tx.loss_period.min) - sess->stat.tx.loss_period.min = period; - if (period > sess->stat.tx.loss_period.max) - sess->stat.tx.loss_period.max = period; - - sess->stat.tx.loss_period.avg = - (sess->stat.tx.loss_period.avg*sess->stat.tx.update_cnt+period) - / (sess->stat.tx.update_cnt + 1); - sess->stat.tx.loss_period.last = period; + /* Update loss period stat */ + pj_math_stat_update(&sess->stat.tx.loss_period, period); } /* Get jitter value in usec */ @@ -487,18 +462,7 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtcp( pjmedia_rtcp_session *sess, } /* Update jitter statistics */ - if (sess->stat.tx.jitter.count == 0) - sess->stat.tx.jitter.min = jitter; - if (jitter < sess->stat.tx.jitter.min && jitter) - sess->stat.tx.jitter.min = jitter; - if (jitter > sess->stat.tx.jitter.max) - sess->stat.tx.jitter.max = jitter; - sess->stat.tx.jitter.avg = - (sess->stat.tx.jitter.avg * sess->stat.tx.jitter.count + jitter) / - (sess->stat.tx.jitter.count + 1); - ++sess->stat.tx.jitter.count; - sess->stat.tx.jitter.last = jitter; - + pj_math_stat_update(&sess->stat.tx.jitter, jitter); /* Can only calculate if LSR and DLSR is present in RR */ if (rr->lsr && rr->dlsr) { @@ -552,16 +516,14 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtcp( pjmedia_rtcp_session *sess, goto end_rtt_calc; } - if (sess->stat.rtt_update_cnt == 0) - sess->stat.rtt.min = rtt; - /* "Normalize" rtt value that is exceptionally high. * For such values, "normalize" the rtt to be three times * the average value. */ - if (rtt > (sess->stat.rtt.avg*3) && sess->stat.rtt_update_cnt!=0) { + if (rtt > ((unsigned)sess->stat.rtt.mean*3) && sess->stat.rtt.n!=0) + { unsigned orig_rtt = rtt; - rtt = sess->stat.rtt.avg*3; + rtt = sess->stat.rtt.mean*3; PJ_LOG(5,(sess->name, "RTT value %d usec is normalized to %d usec", orig_rtt, rtt)); @@ -569,17 +531,8 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtcp( pjmedia_rtcp_session *sess, TRACE_((sess->name, "RTCP RTT is set to %d usec", rtt)); - if (rtt < sess->stat.rtt.min && rtt) - sess->stat.rtt.min = rtt; - if (rtt > sess->stat.rtt.max) - sess->stat.rtt.max = rtt; - - sess->stat.rtt.avg = - (sess->stat.rtt.avg * sess->stat.rtt_update_cnt + rtt) / - (sess->stat.rtt_update_cnt + 1); - - sess->stat.rtt.last = rtt; - sess->stat.rtt_update_cnt++; + /* Update RTT stat */ + pj_math_stat_update(&sess->stat.rtt, rtt); } else { PJ_LOG(5, (sess->name, "Internal RTCP NTP clock skew detected: " diff --git a/pjmedia/src/pjmedia/rtcp_xr.c b/pjmedia/src/pjmedia/rtcp_xr.c index 7bb7cb53..6c49999c 100644 --- a/pjmedia/src/pjmedia/rtcp_xr.c +++ b/pjmedia/src/pjmedia/rtcp_xr.c @@ -26,7 +26,7 @@ #include <pj/sock.h> #include <pj/string.h> -#if defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0) +#if 1 //defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0) #define THIS_FILE "rtcp_xr.c" @@ -58,27 +58,6 @@ # define TRACE_(x) ; #endif -/* Integer square root for calculating standard deviation */ -static pj_uint32_t my_isqrt(pj_uint32_t i) -{ - pj_uint32_t res = 1, prev; - - /* Rough guess */ - prev = i >> 2; - while (prev) { - prev >>= 2; - res <<= 1; - } - - /* Babilonian method */ - do { - prev = res; - res = (prev + i/prev) >> 1; - } while ((prev+res)>>1 != res); - - return res; -} - void pjmedia_rtcp_xr_init( pjmedia_rtcp_xr_session *session, struct pjmedia_rtcp_session *parent_session, pj_uint8_t gmin, @@ -230,18 +209,16 @@ PJ_DEF(void) pjmedia_rtcp_build_rtcp_xr( pjmedia_rtcp_xr_session *sess, if (sess->stat.rx.stat_sum.j) { r->jitter_min = pj_htonl(sess->stat.rx.stat_sum.jitter.min); r->jitter_max = pj_htonl(sess->stat.rx.stat_sum.jitter.max); - r->jitter_mean = pj_htonl(sess->stat.rx.stat_sum.jitter.mean); - sess->stat.rx.stat_sum.jitter.dev = - my_isqrt(sess->stat.rx.stat_sum.jitter.dev); - r->jitter_dev = pj_htonl(sess->stat.rx.stat_sum.jitter.dev); + r->jitter_mean = + pj_htonl((unsigned)sess->stat.rx.stat_sum.jitter.mean); + r->jitter_dev = + pj_htonl(pj_math_stat_get_stddev(&sess->stat.rx.stat_sum.jitter)); } if (sess->stat.rx.stat_sum.t) { r->toh_min = sess->stat.rx.stat_sum.toh.min; r->toh_max = sess->stat.rx.stat_sum.toh.max; - r->toh_mean = sess->stat.rx.stat_sum.toh.mean; - sess->stat.rx.stat_sum.toh.dev = - my_isqrt(sess->stat.rx.stat_sum.toh.dev); - r->toh_dev = sess->stat.rx.stat_sum.toh.dev; + r->toh_mean = (unsigned) sess->stat.rx.stat_sum.toh.mean; + r->toh_dev = pj_math_stat_get_stddev(&sess->stat.rx.stat_sum.toh); } /* Reset TX statistics summary each time built */ @@ -292,7 +269,7 @@ PJ_DEF(void) pjmedia_rtcp_build_rtcp_xr( pjmedia_rtcp_xr_session *sess, m = sess->ptime * sess->frames_per_packet; /* Calculate burst and densities. */ - if (ctotal) { + if (c11 && (c23 || c33)) { p32 = c32 / (c31 + c32 + c33); if((c22 + c23) < 1) { p23 = 1; @@ -517,35 +494,21 @@ void pjmedia_rtcp_xr_rx_rtcp_xr( pjmedia_rtcp_xr_session *sess, * We allow up to 30 seconds RTT! */ if (eedelay <= 30 * 1000 * 1000UL) { - if (sess->stat.rtt.update_cnt == 0) - sess->stat.rtt.min = rtt; - /* "Normalize" rtt value that is exceptionally high. * For such values, "normalize" the rtt to be three times * the average value. */ - if (rtt>(sess->stat.rtt.avg*3) && sess->stat.rtt.update_cnt!=0) + if (rtt>((unsigned)sess->stat.rtt.mean*3) && sess->stat.rtt.n!=0) { unsigned orig_rtt = rtt; - rtt = sess->stat.rtt.avg*3; + rtt = (unsigned)sess->stat.rtt.mean*3; PJ_LOG(5,(sess->name, "RTT value %d usec is normalized to %d usec", orig_rtt, rtt)); } TRACE_((sess->name, "RTCP RTT is set to %d usec", rtt)); - - if (rtt < sess->stat.rtt.min && rtt) - sess->stat.rtt.min = rtt; - if (rtt > sess->stat.rtt.max) - sess->stat.rtt.max = rtt; - - sess->stat.rtt.avg = - (sess->stat.rtt.avg * sess->stat.rtt.update_cnt + rtt) / - (sess->stat.rtt.update_cnt + 1); - - sess->stat.rtt.last = rtt; - sess->stat.rtt.update_cnt++; + pj_math_stat_update(&sess->stat.rtt, rtt); } } else { PJ_LOG(5, (sess->name, "Internal RTCP NTP clock skew detected: " @@ -585,15 +548,17 @@ void pjmedia_rtcp_xr_rx_rtcp_xr( pjmedia_rtcp_xr_session *sess, if (sess->stat.tx.stat_sum.j) { sess->stat.tx.stat_sum.jitter.min = pj_ntohl(rb_stats->jitter_min); sess->stat.tx.stat_sum.jitter.max = pj_ntohl(rb_stats->jitter_max); - sess->stat.tx.stat_sum.jitter.mean = pj_ntohl(rb_stats->jitter_mean); - sess->stat.tx.stat_sum.jitter.dev = pj_ntohl(rb_stats->jitter_dev); + sess->stat.tx.stat_sum.jitter.mean= pj_ntohl(rb_stats->jitter_mean); + pj_math_stat_set_stddev(&sess->stat.tx.stat_sum.jitter, + pj_ntohl(rb_stats->jitter_dev)); } if (sess->stat.tx.stat_sum.t) { sess->stat.tx.stat_sum.toh.min = rb_stats->toh_min; sess->stat.tx.stat_sum.toh.max = rb_stats->toh_max; - sess->stat.tx.stat_sum.toh.mean = rb_stats->toh_mean; - sess->stat.tx.stat_sum.toh.dev = rb_stats->toh_dev; + sess->stat.tx.stat_sum.toh.mean= rb_stats->toh_mean; + pj_math_stat_set_stddev(&sess->stat.tx.stat_sum.toh, + pj_ntohl(rb_stats->toh_dev)); } pj_gettimeofday(&sess->stat.tx.stat_sum.update); @@ -727,48 +692,13 @@ void pjmedia_rtcp_xr_rx_rtp( pjmedia_rtcp_xr_session *sess, } if (jitter >= 0) { - pj_int32_t diff; - sess->stat.rx.stat_sum.j = PJ_TRUE; - if (sess->stat.rx.stat_sum.jitter.min > (pj_uint32_t)jitter) - sess->stat.rx.stat_sum.jitter.min = jitter; - if (sess->stat.rx.stat_sum.jitter.max < (pj_uint32_t)jitter) - sess->stat.rx.stat_sum.jitter.max = jitter; - sess->stat.rx.stat_sum.jitter.mean = - (jitter + sess->stat.rx.stat_sum.jitter.mean * - sess->stat.rx.stat_sum.jitter.count) / - (sess->stat.rx.stat_sum.jitter.count + 1); - - diff = sess->stat.rx.stat_sum.jitter.mean - jitter; - sess->stat.rx.stat_sum.jitter.dev = - (diff * diff + sess->stat.rx.stat_sum.jitter.dev * - sess->stat.rx.stat_sum.jitter.count) / - (sess->stat.rx.stat_sum.jitter.count + 1); - - ++sess->stat.rx.stat_sum.jitter.count; + pj_math_stat_update(&sess->stat.rx.stat_sum.jitter, jitter); } if (toh >= 0) { - pj_int32_t diff; - sess->stat.rx.stat_sum.t = toh_ipv4? 1 : 2; - - if (sess->stat.rx.stat_sum.toh.min > (pj_uint32_t)toh) - sess->stat.rx.stat_sum.toh.min = toh; - if (sess->stat.rx.stat_sum.toh.max < (pj_uint32_t)toh) - sess->stat.rx.stat_sum.toh.max = toh; - sess->stat.rx.stat_sum.toh.mean = - (toh + sess->stat.rx.stat_sum.toh.mean * - sess->stat.rx.stat_sum.toh.count) / - (sess->stat.rx.stat_sum.toh.count + 1); - - diff = sess->stat.rx.stat_sum.toh.mean - toh; - sess->stat.rx.stat_sum.toh.dev = - (diff * diff + sess->stat.rx.stat_sum.toh.dev * - sess->stat.rx.stat_sum.toh.count) / - (sess->stat.rx.stat_sum.toh.count + 1); - - ++sess->stat.rx.stat_sum.toh.count; + pj_math_stat_update(&sess->stat.rx.stat_sum.toh, toh); } /* Update burst metrics. diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c index edf8a230..2122033b 100644 --- a/pjmedia/src/pjmedia/stream.c +++ b/pjmedia/src/pjmedia/stream.c @@ -500,12 +500,12 @@ static void check_tx_rtcp(pjmedia_stream *stream, pj_uint32_t timestamp) /* Update RTCP XR with current JB states */ pjmedia_jbuf_get_state(stream->jb, &jb_state); - i = jb_state.size * stream->codec_param.info.frm_ptime; + i = jb_state.avg_delay; pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, PJMEDIA_RTCP_XR_INFO_JB_NOM, i); - i = jb_state.max_size* stream->codec_param.info.frm_ptime; + i = jb_state.max_delay; pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, PJMEDIA_RTCP_XR_INFO_JB_MAX, i); @@ -1673,12 +1673,12 @@ PJ_DEF(pj_status_t) pjmedia_stream_destroy( pjmedia_stream *stream ) /* Update RTCP XR with current JB states */ pjmedia_jbuf_get_state(stream->jb, &jb_state); - i = jb_state.size * stream->codec_param.info.frm_ptime; + i = jb_state.avg_delay; pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, PJMEDIA_RTCP_XR_INFO_JB_NOM, i); - i = jb_state.max_size* stream->codec_param.info.frm_ptime; + i = jb_state.max_delay; pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, PJMEDIA_RTCP_XR_INFO_JB_MAX, i); |