summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-04-09 17:12:05 +0000
committerBenny Prijono <bennylp@teluu.com>2006-04-09 17:12:05 +0000
commitb94d4e4598916374739ac48bb9eae2bfcb5ff166 (patch)
treea7ff10b69d2106dd42837ea7f07dd6aec450b697
parent7c33ce56e9b9399e0f437553102d9a4d612502f7 (diff)
Added loss period for rx stream implementation
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@399 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/include/pjmedia/rtcp.h1
-rw-r--r--pjmedia/src/pjmedia/rtcp.c23
2 files changed, 24 insertions, 0 deletions
diff --git a/pjmedia/include/pjmedia/rtcp.h b/pjmedia/include/pjmedia/rtcp.h
index a5c3afeb..472cc1c3 100644
--- a/pjmedia/include/pjmedia/rtcp.h
+++ b/pjmedia/include/pjmedia/rtcp.h
@@ -160,6 +160,7 @@ struct pjmedia_rtcp_stream_stat
unsigned dup; /**< 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) */
diff --git a/pjmedia/src/pjmedia/rtcp.c b/pjmedia/src/pjmedia/rtcp.c
index 2a36f278..3eeeea5c 100644
--- a/pjmedia/src/pjmedia/rtcp.c
+++ b/pjmedia/src/pjmedia/rtcp.c
@@ -205,6 +205,29 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp(pjmedia_rtcp_session *sess,
return;
}
+ /* Calculate loss periods. */
+ if (seq_st.diff > 1) {
+ unsigned count = seq_st.diff - 1;
+ unsigned period;
+
+ period = count * sess->pkt_size * 1000 / sess->clock_rate;
+ period *= 1000;
+
+ /* 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;
+ }
+
/* Only mark "good" packets */
++sess->received;