From 215420dd62ecfbcab437570e3532c25ec86d5181 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Wed, 16 Jan 2019 18:24:30 +0100 Subject: [PATCH] Pbuf: slightly fixed output When there is a packet reordering, max loss number was wrong. --- src/rtp/pbuf.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/rtp/pbuf.cpp b/src/rtp/pbuf.cpp index 4abf4ab45..18a3ae2d5 100644 --- a/src/rtp/pbuf.cpp +++ b/src/rtp/pbuf.cpp @@ -318,9 +318,11 @@ void pbuf_insert(struct pbuf *playout_buf, rtp_packet * pkt) } else { int gap = (uint16_t) pkt->seq - playout_buf->last_rtp_seq; gap -= 1; - if (gap > playout_buf->longest_gap && - gap < 1<<16 / 2) { // to eliminate errors, misordered pckts etc. - playout_buf->longest_gap = gap; + if (gap > 1<<16 / 2) { // to eliminate errors, misordered pckts etc. + playout_buf->longest_gap = 1<<16; + } + if (gap > playout_buf->longest_gap) { + gap = playout_buf->longest_gap; } playout_buf->last_rtp_seq = pkt->seq; @@ -348,15 +350,21 @@ void pbuf_insert(struct pbuf *playout_buf, rtp_packet * pkt) // print statistics after 5 seconds if ((pkt->ts - playout_buf->last_display_ts) > 90000 * 5 && playout_buf->expected_pkts > 0) { + char loss_str[128]; + if (playout_buf->longest_gap == 1<<16) { + snprintf(loss_str, sizeof loss_str, "reordered pkts"); + } else { + snprintf(loss_str, sizeof loss_str, "max loss %d", playout_buf->longest_gap); + } // print stats log_msg(LOG_LEVEL_INFO, "SSRC %08x: %d/%d packets received " - "(%.5f%%), max loss %d.\n", + "(%.5f%%), %s.\n", pkt->ssrc, playout_buf->received_pkts, playout_buf->expected_pkts, (double) playout_buf->received_pkts / playout_buf->expected_pkts * 100.0, - playout_buf->longest_gap); + loss_str); playout_buf->received_pkts_last = playout_buf->received_pkts; playout_buf->expected_pkts_last = playout_buf->expected_pkts; playout_buf->expected_pkts = playout_buf->received_pkts = 0;