From 45a272ab22154e72a982a058beeec10aac694411 Mon Sep 17 00:00:00 2001 From: "asapersson@webrtc.org" Date: Wed, 17 Dec 2014 10:27:57 +0000 Subject: [PATCH] Change aggregated fraction loss to be calculated from the cumulative loss and extended sequence number diff between the current and the last report block of two get stats calls. Previously it was derived from the fraction loss of the current report (which could be based on a received report block in between two get stats calls). R=stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/36399004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7928 4adac7df-926f-26a2-2b94-8c16560cd09d --- webrtc/video_engine/vie_channel.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/webrtc/video_engine/vie_channel.cc b/webrtc/video_engine/vie_channel.cc index fffb970cfc..67ec6b8692 100644 --- a/webrtc/video_engine/vie_channel.cc +++ b/webrtc/video_engine/vie_channel.cc @@ -47,8 +47,8 @@ namespace { RTCPReportBlock AggregateReportBlocks( const std::vector& report_blocks, std::map* prev_report_blocks) { - int fraction_lost_sum = 0; - int fl_seq_num_sum = 0; + int num_sequence_numbers = 0; + int num_lost_sequence_numbers = 0; int jitter_sum = 0; int number_of_report_blocks = 0; RTCPReportBlock aggregate; @@ -63,18 +63,20 @@ RTCPReportBlock AggregateReportBlocks( // weight for it. int seq_num_diff = report_block->extendedHighSeqNum - prev_report_block->second.extendedHighSeqNum; - if (seq_num_diff > 0) { - fraction_lost_sum += report_block->fractionLost * seq_num_diff; - fl_seq_num_sum += seq_num_diff; + int cum_loss_diff = report_block->cumulativeLost - + prev_report_block->second.cumulativeLost; + if (seq_num_diff >= 0 && cum_loss_diff >= 0) { + num_sequence_numbers += seq_num_diff; + num_lost_sequence_numbers += cum_loss_diff; } } jitter_sum += report_block->jitter; ++number_of_report_blocks; (*prev_report_blocks)[report_block->sourceSSRC] = *report_block; } - if (fl_seq_num_sum > 0) { - aggregate.fractionLost = - (fraction_lost_sum + fl_seq_num_sum / 2) / fl_seq_num_sum; + if (num_sequence_numbers > 0) { + aggregate.fractionLost = ((num_lost_sequence_numbers * 255) + + (num_sequence_numbers / 2)) / num_sequence_numbers; } if (number_of_report_blocks > 0) { aggregate.jitter =