diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2010-07-15 14:45:47 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2010-07-15 14:45:47 +0000 |
commit | 2493e2b525ad94e031c40acb5506fc5e1cd99266 (patch) | |
tree | aafa1ee1b295d5d861eec710d5321d06ac47d365 /pjmedia/src | |
parent | f086c93150a5743a95a71779c4739c2b151aea2f (diff) |
Re #1103:
- Added (back) raw jitter statistics into RTCP statistics, with the new name "rx_raw_jitter".
- Added IPDV statistics into RTCP statistics.
- Added new compile-time settings to enable/disable raw jitter and IPDV statistics.
- Updated call dump in pjsua-lib.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3239 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src')
-rw-r--r-- | pjmedia/src/pjmedia/rtcp.c | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/pjmedia/src/pjmedia/rtcp.c b/pjmedia/src/pjmedia/rtcp.c index 5c6c63f6..7d0a8f5c 100644 --- a/pjmedia/src/pjmedia/rtcp.c +++ b/pjmedia/src/pjmedia/rtcp.c @@ -153,6 +153,14 @@ PJ_DEF(void) pjmedia_rtcp_init_stat(pjmedia_rtcp_stat *stat) pj_math_stat_init(&stat->tx.loss_period); pj_math_stat_init(&stat->tx.jitter); +#if defined(PJMEDIA_RTCP_STAT_HAS_IPDV) && PJMEDIA_RTCP_STAT_HAS_IPDV!=0 + pj_math_stat_init(&stat->rx_ipdv); +#endif + +#if defined(PJMEDIA_RTCP_STAT_HAS_RAW_JITTER) && PJMEDIA_RTCP_STAT_HAS_RAW_JITTER!=0 + pj_math_stat_init(&stat->rx_raw_jitter); +#endif + pj_gettimeofday(&now); stat->start = now; } @@ -360,9 +368,8 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp2(pjmedia_rtcp_session *sess, } else { pj_int32_t d; pj_uint32_t jitter; - + d = transit - sess->transit; - sess->transit = transit; if (d < 0) d = -d; @@ -381,6 +388,42 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp2(pjmedia_rtcp_session *sess, pj_math_stat_update(&sess->stat.rx.jitter, jitter); +#if defined(PJMEDIA_RTCP_STAT_HAS_RAW_JITTER) && PJMEDIA_RTCP_STAT_HAS_RAW_JITTER!=0 + { + pj_uint32_t raw_jitter; + + /* Convert raw jitter unit from samples to usec */ + if (d < 4294) + raw_jitter = d * 1000000 / sess->clock_rate; + else { + raw_jitter = d * 1000 / sess->clock_rate; + raw_jitter *= 1000; + } + + /* Update jitter stat */ + pj_math_stat_update(&sess->stat.rx_raw_jitter, raw_jitter); + } +#endif + + +#if defined(PJMEDIA_RTCP_STAT_HAS_IPDV) && PJMEDIA_RTCP_STAT_HAS_IPDV!=0 + { + pj_int32_t ipdv; + + ipdv = transit - sess->transit; + /* Convert IPDV unit from samples to usec */ + if (ipdv > -2147 && ipdv < 2147) + ipdv = ipdv * 1000000 / (int)sess->clock_rate; + else { + ipdv = ipdv * 1000 / (int)sess->clock_rate; + ipdv *= 1000; + } + + /* Update jitter stat */ + pj_math_stat_update(&sess->stat.rx_ipdv, ipdv); + } +#endif + #if defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0) pjmedia_rtcp_xr_rx_rtp(&sess->xr_session, seq, 0, /* lost */ @@ -389,6 +432,9 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp2(pjmedia_rtcp_session *sess, (sess->jitter >> 4), /* jitter */ -1, 0); /* toh */ #endif + + /* Update session transit */ + sess->transit = transit; } #if defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0) } else if (seq_st.diff > 1) { |