diff --git a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc index 51f93f96ce..eace9fc8b0 100644 --- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc +++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc @@ -106,7 +106,9 @@ void RemoteEstimatorProxy::OnPacketArrival(uint16_t sequence_number, window_start_seq_ = seq; } - RTC_DCHECK(packet_arrival_times_.end() == packet_arrival_times_.find(seq)); + // We are only interested in the first time a packet is received. + if (packet_arrival_times_.find(seq) != packet_arrival_times_.end()) + return; packet_arrival_times_[seq] = arrival_time; } diff --git a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc index 7ddd31467b..3c3c7297e1 100644 --- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc +++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc @@ -82,6 +82,31 @@ TEST_F(RemoteEstimatorProxyTest, SendsSinglePacketFeedback) { Process(); } +TEST_F(RemoteEstimatorProxyTest, DuplicatedPackets) { + IncomingPacket(kBaseSeq, kBaseTimeMs); + IncomingPacket(kBaseSeq, kBaseTimeMs + 1000); + + EXPECT_CALL(router_, SendFeedback(_)) + .Times(1) + .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) { + packet->Build(); + EXPECT_EQ(kBaseSeq, packet->GetBaseSequence()); + EXPECT_EQ(kMediaSsrc, packet->GetMediaSourceSsrc()); + + std::vector status_vec = + packet->GetStatusVector(); + EXPECT_EQ(1u, status_vec.size()); + EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedSmallDelta, + status_vec[0]); + std::vector delta_vec = packet->GetReceiveDeltasUs(); + EXPECT_EQ(1u, delta_vec.size()); + EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000); + return true; + })); + + Process(); +} + TEST_F(RemoteEstimatorProxyTest, SendsFeedbackWithVaryingDeltas) { IncomingPacket(kBaseSeq, kBaseTimeMs); IncomingPacket(kBaseSeq + 1, kBaseTimeMs + kMaxSmallDeltaMs);