summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-06-22 18:44:11 +0000
committerBenny Prijono <bennylp@teluu.com>2006-06-22 18:44:11 +0000
commit9f837639562ef282625d862ec223ee585038147a (patch)
tree53d6c4e094496d9fbece2169fc7873fc8648dcef /pjmedia
parent9d93457bad88472dfd53fa844758bc5acc3a10ef (diff)
Fixed RTCP statistic returning fraction lost instead of total lost
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@537 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/include/pjmedia/rtcp.h8
-rw-r--r--pjmedia/src/pjmedia/rtcp.c14
2 files changed, 16 insertions, 6 deletions
diff --git a/pjmedia/include/pjmedia/rtcp.h b/pjmedia/include/pjmedia/rtcp.h
index 60ad19f1..b515dac7 100644
--- a/pjmedia/include/pjmedia/rtcp.h
+++ b/pjmedia/include/pjmedia/rtcp.h
@@ -156,10 +156,10 @@ struct pjmedia_rtcp_stream_stat
unsigned update_cnt; /**< Number of updates (to calculate avg) */
pj_uint32_t pkt; /**< Total number of packets */
pj_uint32_t bytes; /**< Total number of payload/bytes */
- unsigned discard; /**< Number of discarded packets. */
- unsigned loss; /**< Number of packets lost */
- unsigned reorder; /**< Number of out of order packets */
- unsigned dup; /**< Number of duplicates packets */
+ unsigned discard; /**< Total number of discarded packets. */
+ unsigned loss; /**< Total number of packets lost */
+ 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) */
diff --git a/pjmedia/src/pjmedia/rtcp.c b/pjmedia/src/pjmedia/rtcp.c
index 7c5b8d5f..f96d818c 100644
--- a/pjmedia/src/pjmedia/rtcp.c
+++ b/pjmedia/src/pjmedia/rtcp.c
@@ -207,13 +207,19 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp(pjmedia_rtcp_session *sess,
rtcp_init_seq(sess);
}
- if (seq_st.status.flag.dup)
+ if (seq_st.status.flag.dup) {
sess->stat.rx.dup++;
- if (seq_st.status.flag.outorder)
+ TRACE_((sess->name, "Duplicate packet detected"));
+ }
+
+ if (seq_st.status.flag.outorder) {
sess->stat.rx.reorder++;
+ TRACE_((sess->name, "Out-of-order packet detected"));
+ }
if (seq_st.status.flag.bad) {
sess->stat.rx.discard++;
+ TRACE_((sess->name, "Bad packet discarded"));
return;
}
@@ -233,6 +239,7 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp(pjmedia_rtcp_session *sess,
* outbound RTCP RR.
*/
sess->stat.rx.loss += (seq_st.diff - 1);
+ TRACE_((sess->name, "%d packet(s) lost", seq_st.diff - 1));
/* Update loss period stat */
if (sess->stat.rx.loss_period.count == 0 ||
@@ -541,10 +548,13 @@ PJ_DEF(void) pjmedia_rtcp_build_rtcp(pjmedia_rtcp_session *sess,
/* Total lost. */
expected = pj_ntohl(rtcp_pkt->rr.last_seq) - sess->seq_ctrl.base_seq;
+
+ /* This is bug: total lost already calculated on each incoming RTP!
if (expected >= sess->received)
sess->stat.rx.loss = expected - sess->received;
else
sess->stat.rx.loss = 0;
+ */
rtcp_pkt->rr.total_lost_2 = (sess->stat.rx.loss >> 16) & 0xFF;
rtcp_pkt->rr.total_lost_1 = (sess->stat.rx.loss >> 8) & 0xFF;