More on ticket #535: updated files using and related to math.h

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1961 74dad513-b988-da41-8d7b-12977e46ad98
This commit is contained in:
Nanang Izzuddin 2008-05-17 14:54:18 +00:00
parent 415fc6fedf
commit 2d4ee7d379
12 changed files with 131 additions and 267 deletions

View File

@ -42,6 +42,7 @@
#include <pj/list.h>
#include <pj/lock.h>
#include <pj/log.h>
#include <pj/math.h>
#include <pj/os.h>
#include <pj/pool.h>
#include <pj/pool_buf.h>

View File

@ -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. */
};

View File

@ -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)*/
};

View File

@ -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;
/**

View File

@ -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;
}

View File

@ -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: "

View File

@ -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.

View File

@ -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);

View File

@ -1659,7 +1659,7 @@ static void print_avg_stat(void)
/* Jitter */
MIN_(min_stat.rx.jitter.min, audio->rtcp.stat.rx.jitter.min);
MAX_(max_stat.rx.jitter.max, audio->rtcp.stat.rx.jitter.max);
AVG_(avg_stat.rx.jitter.avg, audio->rtcp.stat.rx.jitter.avg);
AVG_(avg_stat.rx.jitter.mean, audio->rtcp.stat.rx.jitter.mean);
/* TX Statistisc: */
@ -1692,13 +1692,13 @@ static void print_avg_stat(void)
/* Jitter */
MIN_(min_stat.tx.jitter.min, audio->rtcp.stat.tx.jitter.min);
MAX_(max_stat.tx.jitter.max, audio->rtcp.stat.tx.jitter.max);
AVG_(avg_stat.tx.jitter.avg, audio->rtcp.stat.tx.jitter.avg);
AVG_(avg_stat.tx.jitter.mean, audio->rtcp.stat.tx.jitter.mean);
/* RTT */
MIN_(min_stat.rtt.min, audio->rtcp.stat.rtt.min);
MAX_(max_stat.rtt.max, audio->rtcp.stat.rtt.max);
AVG_(avg_stat.rtt.avg, audio->rtcp.stat.rtt.avg);
AVG_(avg_stat.rtt.mean, audio->rtcp.stat.rtt.mean);
++count;
}
@ -1767,7 +1767,7 @@ static void print_avg_stat(void)
"packets",
min_stat.rx.jitter.min/1000.0,
avg_stat.rx.jitter.avg/1000.0,
avg_stat.rx.jitter.mean/1000.0,
max_stat.rx.jitter.max/1000.0,
"ms",
@ -1798,13 +1798,13 @@ static void print_avg_stat(void)
"packets",
min_stat.tx.jitter.min/1000.0,
avg_stat.tx.jitter.avg/1000.0,
avg_stat.tx.jitter.mean/1000.0,
max_stat.tx.jitter.max/1000.0,
"ms",
/* rtt */
min_stat.rtt.min/1000.0,
avg_stat.rtt.avg/1000.0,
avg_stat.rtt.mean/1000.0,
max_stat.rtt.max/1000.0,
"ms"
);

View File

@ -160,12 +160,12 @@ static void print_call(int call_index)
audio->rtcp.stat.rx.reorder * 100.0 / (audio->rtcp.stat.rx.pkt + audio->rtcp.stat.rx.loss),
"",
audio->rtcp.stat.rx.loss_period.min / 1000.0,
audio->rtcp.stat.rx.loss_period.avg / 1000.0,
audio->rtcp.stat.rx.loss_period.mean / 1000.0,
audio->rtcp.stat.rx.loss_period.max / 1000.0,
audio->rtcp.stat.rx.loss_period.last / 1000.0,
"",
audio->rtcp.stat.rx.jitter.min / 1000.0,
audio->rtcp.stat.rx.jitter.avg / 1000.0,
audio->rtcp.stat.rx.jitter.mean / 1000.0,
audio->rtcp.stat.rx.jitter.max / 1000.0,
audio->rtcp.stat.rx.jitter.last / 1000.0,
""
@ -204,12 +204,12 @@ static void print_call(int call_index)
audio->rtcp.stat.tx.reorder * 100.0 / (audio->rtcp.stat.tx.pkt + audio->rtcp.stat.tx.loss),
"",
audio->rtcp.stat.tx.loss_period.min / 1000.0,
audio->rtcp.stat.tx.loss_period.avg / 1000.0,
audio->rtcp.stat.tx.loss_period.mean / 1000.0,
audio->rtcp.stat.tx.loss_period.max / 1000.0,
audio->rtcp.stat.tx.loss_period.last / 1000.0,
"",
audio->rtcp.stat.tx.jitter.min / 1000.0,
audio->rtcp.stat.tx.jitter.avg / 1000.0,
audio->rtcp.stat.tx.jitter.mean / 1000.0,
audio->rtcp.stat.tx.jitter.max / 1000.0,
audio->rtcp.stat.tx.jitter.last / 1000.0,
""
@ -219,7 +219,7 @@ static void print_call(int call_index)
PJ_LOG(3, (THIS_FILE,
" RTT delay : %7.3f %7.3f %7.3f %7.3f%s\n",
audio->rtcp.stat.rtt.min / 1000.0,
audio->rtcp.stat.rtt.avg / 1000.0,
audio->rtcp.stat.rtt.mean / 1000.0,
audio->rtcp.stat.rtt.max / 1000.0,
audio->rtcp.stat.rtt.last / 1000.0,
""

View File

@ -768,9 +768,9 @@ static void print_stream_stat(pjmedia_stream *stream)
printf(" RX stat last update: %s\n"
" total %s packets %sB received (%sB +IP hdr)%s\n"
" pkt loss=%d (%3.1f%%), dup=%d (%3.1f%%), reorder=%d (%3.1f%%)%s\n"
" (msec) min avg max last\n"
" loss period: %7.3f %7.3f %7.3f %7.3f%s\n"
" jitter : %7.3f %7.3f %7.3f %7.3f%s\n",
" (msec) min avg max last dev\n"
" loss period: %7.3f %7.3f %7.3f %7.3f %7.3f%s\n"
" jitter : %7.3f %7.3f %7.3f %7.3f %7.3f%s\n",
last_update,
good_number(packets, stat.rx.pkt),
good_number(bytes, stat.rx.bytes),
@ -784,14 +784,16 @@ static void print_stream_stat(pjmedia_stream *stream)
stat.rx.reorder * 100.0 / (stat.rx.pkt + stat.rx.loss),
"",
stat.rx.loss_period.min / 1000.0,
stat.rx.loss_period.avg / 1000.0,
stat.rx.loss_period.mean / 1000.0,
stat.rx.loss_period.max / 1000.0,
stat.rx.loss_period.last / 1000.0,
pj_math_stat_get_stddev(&stat.rx.loss_period) / 1000.0,
"",
stat.rx.jitter.min / 1000.0,
stat.rx.jitter.avg / 1000.0,
stat.rx.jitter.mean / 1000.0,
stat.rx.jitter.max / 1000.0,
stat.rx.jitter.last / 1000.0,
pj_math_stat_get_stddev(&stat.rx.jitter) / 1000.0,
""
);
@ -811,9 +813,9 @@ static void print_stream_stat(pjmedia_stream *stream)
printf(" TX stat last update: %s\n"
" total %s packets %sB sent (%sB +IP hdr)%s\n"
" pkt loss=%d (%3.1f%%), dup=%d (%3.1f%%), reorder=%d (%3.1f%%)%s\n"
" (msec) min avg max last\n"
" loss period: %7.3f %7.3f %7.3f %7.3f%s\n"
" jitter : %7.3f %7.3f %7.3f %7.3f%s\n",
" (msec) min avg max last dev\n"
" loss period: %7.3f %7.3f %7.3f %7.3f %7.3f%s\n"
" jitter : %7.3f %7.3f %7.3f %7.3f %7.3f%s\n",
last_update,
good_number(packets, stat.tx.pkt),
good_number(bytes, stat.tx.bytes),
@ -827,23 +829,26 @@ static void print_stream_stat(pjmedia_stream *stream)
stat.tx.reorder * 100.0 / (stat.tx.pkt + stat.tx.loss),
"",
stat.tx.loss_period.min / 1000.0,
stat.tx.loss_period.avg / 1000.0,
stat.tx.loss_period.mean / 1000.0,
stat.tx.loss_period.max / 1000.0,
stat.tx.loss_period.last / 1000.0,
pj_math_stat_get_stddev(&stat.tx.loss_period) / 1000.0,
"",
stat.tx.jitter.min / 1000.0,
stat.tx.jitter.avg / 1000.0,
stat.tx.jitter.mean / 1000.0,
stat.tx.jitter.max / 1000.0,
stat.tx.jitter.last / 1000.0,
pj_math_stat_get_stddev(&stat.tx.jitter) / 1000.0,
""
);
printf(" RTT delay : %7.3f %7.3f %7.3f %7.3f%s\n",
printf(" RTT delay : %7.3f %7.3f %7.3f %7.3f %7.3f%s\n",
stat.rtt.min / 1000.0,
stat.rtt.avg / 1000.0,
stat.rtt.mean / 1000.0,
stat.rtt.max / 1000.0,
stat.rtt.last / 1000.0,
pj_math_stat_get_stddev(&stat.rtt) / 1000.0,
""
);
@ -885,8 +890,9 @@ static void print_stream_stat(pjmedia_stream *stream)
port->info.clock_rate);
SAMPLES_TO_USEC(jmean, xr_stat.rx.stat_sum.jitter.mean,
port->info.clock_rate);
SAMPLES_TO_USEC(jdev, xr_stat.rx.stat_sum.jitter.dev,
port->info.clock_rate);
SAMPLES_TO_USEC(jdev,
pj_math_stat_get_stddev(&xr_stat.rx.stat_sum.jitter),
port->info.clock_rate);
sprintf(jitter, "%7.3f %7.3f %7.3f %7.3f",
jmin/1000.0, jmean/1000.0, jmax/1000.0, jdev/1000.0);
} else
@ -897,7 +903,7 @@ static void print_stream_stat(pjmedia_stream *stream)
xr_stat.rx.stat_sum.toh.min,
xr_stat.rx.stat_sum.toh.mean,
xr_stat.rx.stat_sum.toh.max,
xr_stat.rx.stat_sum.toh.dev);
pj_math_stat_get_stddev(&xr_stat.rx.stat_sum.toh));
} else
sprintf(toh, "(report not available)");
@ -947,8 +953,9 @@ static void print_stream_stat(pjmedia_stream *stream)
port->info.clock_rate);
SAMPLES_TO_USEC(jmean, xr_stat.tx.stat_sum.jitter.mean,
port->info.clock_rate);
SAMPLES_TO_USEC(jdev, xr_stat.tx.stat_sum.jitter.dev,
port->info.clock_rate);
SAMPLES_TO_USEC(jdev,
pj_math_stat_get_stddev(&xr_stat.tx.stat_sum.jitter),
port->info.clock_rate);
sprintf(jitter, "%7.3f %7.3f %7.3f %7.3f",
jmin/1000.0, jmean/1000.0, jmax/1000.0, jdev/1000.0);
} else
@ -959,7 +966,7 @@ static void print_stream_stat(pjmedia_stream *stream)
xr_stat.tx.stat_sum.toh.min,
xr_stat.tx.stat_sum.toh.mean,
xr_stat.tx.stat_sum.toh.max,
xr_stat.tx.stat_sum.toh.dev);
pj_math_stat_get_stddev(&xr_stat.rx.stat_sum.toh));
} else
sprintf(toh, "(report not available)");
@ -1168,13 +1175,14 @@ static void print_stream_stat(pjmedia_stream *stream)
);
/* RTT delay, need this? */
printf(" (msec) min avg max last\n");
printf(" RTT delay : %7.3f %7.3f %7.3f %7.3f%s\n",
/* RTT delay (by receiver side) */
printf(" (msec) min avg max last dev\n");
printf(" RTT delay : %7.3f %7.3f %7.3f %7.3f %7.3f%s\n",
xr_stat.rtt.min / 1000.0,
xr_stat.rtt.avg / 1000.0,
xr_stat.rtt.mean / 1000.0,
xr_stat.rtt.max / 1000.0,
xr_stat.rtt.last / 1000.0,
pj_math_stat_get_stddev(&xr_stat.rtt) / 1000.0,
""
);
} while (0);

View File

@ -2058,9 +2058,9 @@ static void dump_media_session(const char *indent,
"%s RX pt=%d, stat last update: %s\n"
"%s total %spkt %sB (%sB +IP hdr) @avg=%sbps/%sbps\n"
"%s pkt loss=%d (%3.1f%%), dup=%d (%3.1f%%), reorder=%d (%3.1f%%)\n"
"%s (msec) min avg max last\n"
"%s loss period: %7.3f %7.3f %7.3f %7.3f\n"
"%s jitter : %7.3f %7.3f %7.3f %7.3f%s",
"%s (msec) min avg max last dev\n"
"%s loss period: %7.3f %7.3f %7.3f %7.3f %7.3f\n"
"%s jitter : %7.3f %7.3f %7.3f %7.3f %7.3f%s",
indent, info.stream_info[i].fmt.pt,
last_update,
indent,
@ -2078,14 +2078,16 @@ static void dump_media_session(const char *indent,
stat.rx.reorder * 100.0 / (stat.rx.pkt + stat.rx.loss),
indent, indent,
stat.rx.loss_period.min / 1000.0,
stat.rx.loss_period.avg / 1000.0,
stat.rx.loss_period.mean / 1000.0,
stat.rx.loss_period.max / 1000.0,
stat.rx.loss_period.last / 1000.0,
pj_math_stat_get_stddev(&stat.rx.loss_period) / 1000.0,
indent,
stat.rx.jitter.min / 1000.0,
stat.rx.jitter.avg / 1000.0,
stat.rx.jitter.mean / 1000.0,
stat.rx.jitter.max / 1000.0,
stat.rx.jitter.last / 1000.0,
pj_math_stat_get_stddev(&stat.rx.jitter) / 1000.0,
""
);
@ -2114,9 +2116,9 @@ static void dump_media_session(const char *indent,
"%s TX pt=%d, ptime=%dms, stat last update: %s\n"
"%s total %spkt %sB (%sB +IP hdr) @avg %sbps/%sbps\n"
"%s pkt loss=%d (%3.1f%%), dup=%d (%3.1f%%), reorder=%d (%3.1f%%)\n"
"%s (msec) min avg max last\n"
"%s loss period: %7.3f %7.3f %7.3f %7.3f\n"
"%s jitter : %7.3f %7.3f %7.3f %7.3f%s",
"%s (msec) min avg max last dev \n"
"%s loss period: %7.3f %7.3f %7.3f %7.3f %7.3f\n"
"%s jitter : %7.3f %7.3f %7.3f %7.3f %7.3f%s",
indent,
info.stream_info[i].tx_pt,
info.stream_info[i].param->info.frm_ptime *
@ -2140,14 +2142,16 @@ static void dump_media_session(const char *indent,
indent, indent,
stat.tx.loss_period.min / 1000.0,
stat.tx.loss_period.avg / 1000.0,
stat.tx.loss_period.mean / 1000.0,
stat.tx.loss_period.max / 1000.0,
stat.tx.loss_period.last / 1000.0,
pj_math_stat_get_stddev(&stat.tx.loss_period) / 1000.0,
indent,
stat.tx.jitter.min / 1000.0,
stat.tx.jitter.avg / 1000.0,
stat.tx.jitter.mean / 1000.0,
stat.tx.jitter.max / 1000.0,
stat.tx.jitter.last / 1000.0,
pj_math_stat_get_stddev(&stat.tx.jitter) / 1000.0,
""
);
@ -2161,12 +2165,13 @@ static void dump_media_session(const char *indent,
*p = '\0';
len = pj_ansi_snprintf(p, end-p,
"%s RTT msec : %7.3f %7.3f %7.3f %7.3f",
"%s RTT msec : %7.3f %7.3f %7.3f %7.3f %7.3f",
indent,
stat.rtt.min / 1000.0,
stat.rtt.avg / 1000.0,
stat.rtt.mean / 1000.0,
stat.rtt.max / 1000.0,
stat.rtt.last / 1000.0
stat.rtt.last / 1000.0,
pj_math_stat_get_stddev(&stat.rtt) / 1000.0
);
if (len < 1 || len > end-p) {
*p = '\0';