diff --git a/modules/rtp_rtcp/source/receive_statistics_impl.cc b/modules/rtp_rtcp/source/receive_statistics_impl.cc index d140eb04fe..f6bcddb5c8 100644 --- a/modules/rtp_rtcp/source/receive_statistics_impl.cc +++ b/modules/rtp_rtcp/source/receive_statistics_impl.cc @@ -240,7 +240,10 @@ RtcpStatistics StreamStatisticianImpl::CalculateRtcpStatistics( // Since cumulative loss is carried in a signed 24-bit field in RTCP, we may // need to clamp it. statistics.packets_lost = std::min(statistics.packets_lost, 0x7fffff); - statistics.packets_lost = std::max(statistics.packets_lost, -0x800000); + // TODO(bugs.webrtc.org/9598): This packets_lost should be signed according to + // RFC3550. However, old WebRTC implementations reads it as unsigned. + // Therefore we limit this to 0. + statistics.packets_lost = std::max(statistics.packets_lost, 0); statistics.extended_highest_sequence_number = extended_seq_max; // Note: internal jitter value is in Q4 and needs to be scaled by 1/16. statistics.jitter = jitter_q4_ >> 4; diff --git a/modules/rtp_rtcp/source/receive_statistics_unittest.cc b/modules/rtp_rtcp/source/receive_statistics_unittest.cc index 3c7fb6f83c..eedcf46df7 100644 --- a/modules/rtp_rtcp/source/receive_statistics_unittest.cc +++ b/modules/rtp_rtcp/source/receive_statistics_unittest.cc @@ -479,7 +479,9 @@ TEST_F(ReceiveStatisticsTest, NegativeLoss) { receive_statistics_->GetStatistician(kSsrc1)->GetStatistics( &statistics, /*update_fraction_lost=*/true); EXPECT_EQ(0u, statistics.fraction_lost); - EXPECT_EQ(-1, statistics.packets_lost); + // TODO(bugs.webrtc.org/9598): Since old WebRTC implementations reads this + // value as unsigned we currently limit it to 0. + EXPECT_EQ(0, statistics.packets_lost); // Lose 2 packets; now cumulative loss should become positive again. header1_.sequenceNumber = 7; @@ -521,7 +523,9 @@ TEST_F(ReceiveStatisticsTest, NegativeCumulativeLossClamped) { RtcpStatistics statistics; receive_statistics_->GetStatistician(kSsrc1)->GetStatistics( &statistics, /*update_fraction_lost=*/false); - EXPECT_EQ(-0x800000, statistics.packets_lost); + // TODO(bugs.webrtc.org/9598): Since old WebRTC implementations reads this + // value as unsigned we currently limit it to 0. + EXPECT_EQ(0, statistics.packets_lost); } // Test that the extended highest sequence number is computed correctly when