| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 4  *  Use of this source code is governed by a BSD-style license | 
| 5  *  that can be found in the LICENSE file in the root of the source | 5  *  that can be found in the LICENSE file in the root of the source | 
| 6  *  tree. An additional intellectual property rights grant can be found | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 | 10 | 
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 190   const uint32_t kSenderSsrc = 0x10203; | 190   const uint32_t kSenderSsrc = 0x10203; | 
| 191   const uint32_t kSourceSsrc = 0x123456; | 191   const uint32_t kSourceSsrc = 0x123456; | 
| 192   std::set<uint32_t> ssrcs; | 192   std::set<uint32_t> ssrcs; | 
| 193   ssrcs.insert(kSourceSsrc); | 193   ssrcs.insert(kSourceSsrc); | 
| 194   rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 194   rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 
| 195 | 195 | 
| 196   rtcp::ReportBlock rb; | 196   rtcp::ReportBlock rb; | 
| 197   rb.To(kSourceSsrc + 1); | 197   rb.To(kSourceSsrc + 1); | 
| 198   rtcp::ReceiverReport rr; | 198   rtcp::ReceiverReport rr; | 
| 199   rr.From(kSenderSsrc); | 199   rr.From(kSenderSsrc); | 
| 200   rr.WithReportBlock(&rb); | 200   rr.WithReportBlock(rb); | 
| 201   rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 201   rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 
| 202   EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 202   EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 
| 203   EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 203   EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 
| 204   EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 204   EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 
| 205   ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size()); | 205   ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size()); | 
| 206 | 206 | 
| 207   std::vector<RTCPReportBlock> received_blocks; | 207   std::vector<RTCPReportBlock> received_blocks; | 
| 208   rtcp_receiver_->StatisticsReceived(&received_blocks); | 208   rtcp_receiver_->StatisticsReceived(&received_blocks); | 
| 209   EXPECT_TRUE(received_blocks.empty()); | 209   EXPECT_TRUE(received_blocks.empty()); | 
| 210 } | 210 } | 
| 211 | 211 | 
| 212 TEST_F(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) { | 212 TEST_F(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) { | 
| 213   const uint32_t kSenderSsrc = 0x10203; | 213   const uint32_t kSenderSsrc = 0x10203; | 
| 214   const uint32_t kSourceSsrc = 0x123456; | 214   const uint32_t kSourceSsrc = 0x123456; | 
| 215   std::set<uint32_t> ssrcs; | 215   std::set<uint32_t> ssrcs; | 
| 216   ssrcs.insert(kSourceSsrc); | 216   ssrcs.insert(kSourceSsrc); | 
| 217   rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 217   rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 
| 218 | 218 | 
| 219   rtcp::ReportBlock rb; | 219   rtcp::ReportBlock rb; | 
| 220   rb.To(kSourceSsrc); | 220   rb.To(kSourceSsrc); | 
| 221   rtcp::ReceiverReport rr; | 221   rtcp::ReceiverReport rr; | 
| 222   rr.From(kSenderSsrc); | 222   rr.From(kSenderSsrc); | 
| 223   rr.WithReportBlock(&rb); | 223   rr.WithReportBlock(rb); | 
| 224   rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 224   rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 
| 225   EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 225   EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 
| 226   EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 226   EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 
| 227   EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 227   EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 
| 228   ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 228   ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 
| 229 | 229 | 
| 230   std::vector<RTCPReportBlock> received_blocks; | 230   std::vector<RTCPReportBlock> received_blocks; | 
| 231   rtcp_receiver_->StatisticsReceived(&received_blocks); | 231   rtcp_receiver_->StatisticsReceived(&received_blocks); | 
| 232   EXPECT_EQ(1u, received_blocks.size()); | 232   EXPECT_EQ(1u, received_blocks.size()); | 
| 233 } | 233 } | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 248   rb1.WithExtHighestSeqNum(kSequenceNumbers[0]); | 248   rb1.WithExtHighestSeqNum(kSequenceNumbers[0]); | 
| 249   rb1.WithFractionLost(10); | 249   rb1.WithFractionLost(10); | 
| 250   rb1.WithCumulativeLost(5); | 250   rb1.WithCumulativeLost(5); | 
| 251 | 251 | 
| 252   rtcp::ReportBlock rb2; | 252   rtcp::ReportBlock rb2; | 
| 253   rb2.To(kSourceSsrcs[1]); | 253   rb2.To(kSourceSsrcs[1]); | 
| 254   rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); | 254   rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); | 
| 255 | 255 | 
| 256   rtcp::ReceiverReport rr1; | 256   rtcp::ReceiverReport rr1; | 
| 257   rr1.From(kSenderSsrc); | 257   rr1.From(kSenderSsrc); | 
| 258   rr1.WithReportBlock(&rb1); | 258   rr1.WithReportBlock(rb1); | 
| 259   rr1.WithReportBlock(&rb2); | 259   rr1.WithReportBlock(rb2); | 
| 260 | 260 | 
| 261   rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 261   rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 
| 262   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 262   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 
| 263   ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 263   ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 
| 264   EXPECT_EQ(10, rtcp_packet_info_.report_blocks.front().fractionLost); | 264   EXPECT_EQ(10, rtcp_packet_info_.report_blocks.front().fractionLost); | 
| 265   EXPECT_EQ(0, rtcp_packet_info_.report_blocks.back().fractionLost); | 265   EXPECT_EQ(0, rtcp_packet_info_.report_blocks.back().fractionLost); | 
| 266 | 266 | 
| 267   rtcp::ReportBlock rb3; | 267   rtcp::ReportBlock rb3; | 
| 268   rb3.To(kSourceSsrcs[0]); | 268   rb3.To(kSourceSsrcs[0]); | 
| 269   rb3.WithExtHighestSeqNum(kSequenceNumbers[0]); | 269   rb3.WithExtHighestSeqNum(kSequenceNumbers[0]); | 
| 270   rb3.WithFractionLost(kFracLost[0]); | 270   rb3.WithFractionLost(kFracLost[0]); | 
| 271   rb3.WithCumulativeLost(kCumLost[0]); | 271   rb3.WithCumulativeLost(kCumLost[0]); | 
| 272 | 272 | 
| 273   rtcp::ReportBlock rb4; | 273   rtcp::ReportBlock rb4; | 
| 274   rb4.To(kSourceSsrcs[1]); | 274   rb4.To(kSourceSsrcs[1]); | 
| 275   rb4.WithExtHighestSeqNum(kSequenceNumbers[1]); | 275   rb4.WithExtHighestSeqNum(kSequenceNumbers[1]); | 
| 276   rb4.WithFractionLost(kFracLost[1]); | 276   rb4.WithFractionLost(kFracLost[1]); | 
| 277   rb4.WithCumulativeLost(kCumLost[1]); | 277   rb4.WithCumulativeLost(kCumLost[1]); | 
| 278 | 278 | 
| 279   rtcp::ReceiverReport rr2; | 279   rtcp::ReceiverReport rr2; | 
| 280   rr2.From(kSenderSsrc); | 280   rr2.From(kSenderSsrc); | 
| 281   rr2.WithReportBlock(&rb3); | 281   rr2.WithReportBlock(rb3); | 
| 282   rr2.WithReportBlock(&rb4); | 282   rr2.WithReportBlock(rb4); | 
| 283 | 283 | 
| 284   rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 284   rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 
| 285   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 285   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 
| 286   ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 286   ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 
| 287   EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); | 287   EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); | 
| 288   EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.back().fractionLost); | 288   EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.back().fractionLost); | 
| 289 | 289 | 
| 290   std::vector<RTCPReportBlock> received_blocks; | 290   std::vector<RTCPReportBlock> received_blocks; | 
| 291   rtcp_receiver_->StatisticsReceived(&received_blocks); | 291   rtcp_receiver_->StatisticsReceived(&received_blocks); | 
| 292   EXPECT_EQ(2u, received_blocks.size()); | 292   EXPECT_EQ(2u, received_blocks.size()); | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 311   std::set<uint32_t> ssrcs(kSourceSsrcs, kSourceSsrcs + kNumSsrcs); | 311   std::set<uint32_t> ssrcs(kSourceSsrcs, kSourceSsrcs + kNumSsrcs); | 
| 312   rtcp_receiver_->SetSsrcs(kSourceSsrcs[0], ssrcs); | 312   rtcp_receiver_->SetSsrcs(kSourceSsrcs[0], ssrcs); | 
| 313 | 313 | 
| 314   rtcp::ReportBlock rb1; | 314   rtcp::ReportBlock rb1; | 
| 315   rb1.To(kSourceSsrcs[0]); | 315   rb1.To(kSourceSsrcs[0]); | 
| 316   rb1.WithExtHighestSeqNum(kSequenceNumbers[0]); | 316   rb1.WithExtHighestSeqNum(kSequenceNumbers[0]); | 
| 317   rb1.WithFractionLost(kFracLost[0]); | 317   rb1.WithFractionLost(kFracLost[0]); | 
| 318   rb1.WithCumulativeLost(kCumLost[0]); | 318   rb1.WithCumulativeLost(kCumLost[0]); | 
| 319   rtcp::ReceiverReport rr1; | 319   rtcp::ReceiverReport rr1; | 
| 320   rr1.From(kSenderSsrc1); | 320   rr1.From(kSenderSsrc1); | 
| 321   rr1.WithReportBlock(&rb1); | 321   rr1.WithReportBlock(rb1); | 
| 322 | 322 | 
| 323   rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 323   rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 
| 324   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 324   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 
| 325   ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 325   ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 
| 326   EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); | 326   EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); | 
| 327 | 327 | 
| 328   std::vector<RTCPReportBlock> received_blocks; | 328   std::vector<RTCPReportBlock> received_blocks; | 
| 329   rtcp_receiver_->StatisticsReceived(&received_blocks); | 329   rtcp_receiver_->StatisticsReceived(&received_blocks); | 
| 330   EXPECT_EQ(1u, received_blocks.size()); | 330   EXPECT_EQ(1u, received_blocks.size()); | 
| 331   EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); | 331   EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); | 
| 332   EXPECT_EQ(kSourceSsrcs[0], received_blocks[0].sourceSSRC); | 332   EXPECT_EQ(kSourceSsrcs[0], received_blocks[0].sourceSSRC); | 
| 333   EXPECT_EQ(kFracLost[0], received_blocks[0].fractionLost); | 333   EXPECT_EQ(kFracLost[0], received_blocks[0].fractionLost); | 
| 334   EXPECT_EQ(kCumLost[0], received_blocks[0].cumulativeLost); | 334   EXPECT_EQ(kCumLost[0], received_blocks[0].cumulativeLost); | 
| 335   EXPECT_EQ(kSequenceNumbers[0], received_blocks[0].extendedHighSeqNum); | 335   EXPECT_EQ(kSequenceNumbers[0], received_blocks[0].extendedHighSeqNum); | 
| 336 | 336 | 
| 337   rtcp::ReportBlock rb2; | 337   rtcp::ReportBlock rb2; | 
| 338   rb2.To(kSourceSsrcs[0]); | 338   rb2.To(kSourceSsrcs[0]); | 
| 339   rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); | 339   rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); | 
| 340   rb2.WithFractionLost(kFracLost[1]); | 340   rb2.WithFractionLost(kFracLost[1]); | 
| 341   rb2.WithCumulativeLost(kCumLost[1]); | 341   rb2.WithCumulativeLost(kCumLost[1]); | 
| 342   rtcp::ReceiverReport rr2; | 342   rtcp::ReceiverReport rr2; | 
| 343   rr2.From(kSenderSsrc2); | 343   rr2.From(kSenderSsrc2); | 
| 344   rr2.WithReportBlock(&rb2); | 344   rr2.WithReportBlock(rb2); | 
| 345   rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 345   rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 
| 346   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 346   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 
| 347   ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 347   ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 
| 348   EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.front().fractionLost); | 348   EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.front().fractionLost); | 
| 349 | 349 | 
| 350   received_blocks.clear(); | 350   received_blocks.clear(); | 
| 351   rtcp_receiver_->StatisticsReceived(&received_blocks); | 351   rtcp_receiver_->StatisticsReceived(&received_blocks); | 
| 352   ASSERT_EQ(2u, received_blocks.size()); | 352   ASSERT_EQ(2u, received_blocks.size()); | 
| 353   EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); | 353   EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); | 
| 354   EXPECT_EQ(kSenderSsrc2, received_blocks[1].remoteSSRC); | 354   EXPECT_EQ(kSenderSsrc2, received_blocks[1].remoteSSRC); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 367   ssrcs.insert(kSourceSsrc); | 367   ssrcs.insert(kSourceSsrc); | 
| 368   rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 368   rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 
| 369 | 369 | 
| 370   // No report block received. | 370   // No report block received. | 
| 371   EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc, NULL, NULL, NULL, NULL)); | 371   EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc, NULL, NULL, NULL, NULL)); | 
| 372 | 372 | 
| 373   rtcp::ReportBlock rb; | 373   rtcp::ReportBlock rb; | 
| 374   rb.To(kSourceSsrc); | 374   rb.To(kSourceSsrc); | 
| 375   rtcp::ReceiverReport rr; | 375   rtcp::ReceiverReport rr; | 
| 376   rr.From(kSenderSsrc); | 376   rr.From(kSenderSsrc); | 
| 377   rr.WithReportBlock(&rb); | 377   rr.WithReportBlock(rb); | 
| 378   rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 378   rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 
| 379   EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 379   EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 
| 380   EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 380   EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 
| 381   EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 381   EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 
| 382   EXPECT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 382   EXPECT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 
| 383   EXPECT_EQ(0, rtcp_receiver_->RTT(kSenderSsrc, NULL, NULL, NULL, NULL)); | 383   EXPECT_EQ(0, rtcp_receiver_->RTT(kSenderSsrc, NULL, NULL, NULL, NULL)); | 
| 384 | 384 | 
| 385   // Report block not received. | 385   // Report block not received. | 
| 386   EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc + 1, NULL, NULL, NULL, NULL)); | 386   EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc + 1, NULL, NULL, NULL, NULL)); | 
| 387 } | 387 } | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 477 | 477 | 
| 478   std::set<uint32_t> ssrcs(kSourceSsrcs, kSourceSsrcs + kNumSsrcs); | 478   std::set<uint32_t> ssrcs(kSourceSsrcs, kSourceSsrcs + kNumSsrcs); | 
| 479   rtcp_receiver_->SetSsrcs(kSourceSsrcs[0], ssrcs); | 479   rtcp_receiver_->SetSsrcs(kSourceSsrcs[0], ssrcs); | 
| 480 | 480 | 
| 481   rtcp::ReportBlock rb1; | 481   rtcp::ReportBlock rb1; | 
| 482   rb1.To(kSourceSsrcs[0]); | 482   rb1.To(kSourceSsrcs[0]); | 
| 483   rtcp::ReportBlock rb2; | 483   rtcp::ReportBlock rb2; | 
| 484   rb2.To(kSourceSsrcs[1]); | 484   rb2.To(kSourceSsrcs[1]); | 
| 485   rtcp::ReceiverReport rr; | 485   rtcp::ReceiverReport rr; | 
| 486   rr.From(kSenderSsrc); | 486   rr.From(kSenderSsrc); | 
| 487   rr.WithReportBlock(&rb1); | 487   rr.WithReportBlock(rb1); | 
| 488   rr.WithReportBlock(&rb2); | 488   rr.WithReportBlock(rb2); | 
| 489 | 489 | 
| 490   rtc::scoped_ptr<rtcp::RawPacket> p1(rr.Build()); | 490   rtc::scoped_ptr<rtcp::RawPacket> p1(rr.Build()); | 
| 491   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 491   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 
| 492   ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 492   ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 
| 493   std::vector<RTCPReportBlock> received_blocks; | 493   std::vector<RTCPReportBlock> received_blocks; | 
| 494   rtcp_receiver_->StatisticsReceived(&received_blocks); | 494   rtcp_receiver_->StatisticsReceived(&received_blocks); | 
| 495   EXPECT_EQ(2u, received_blocks.size()); | 495   EXPECT_EQ(2u, received_blocks.size()); | 
| 496 | 496 | 
| 497   // Verify that BYE removes the report blocks. | 497   // Verify that BYE removes the report blocks. | 
| 498   rtcp::Bye bye; | 498   rtcp::Bye bye; | 
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 795   // No RR received, shouldn't trigger a timeout. | 795   // No RR received, shouldn't trigger a timeout. | 
| 796   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 796   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 
| 797   EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 797   EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 
| 798 | 798 | 
| 799   // Add a RR and advance the clock just enough to not trigger a timeout. | 799   // Add a RR and advance the clock just enough to not trigger a timeout. | 
| 800   rtcp::ReportBlock rb1; | 800   rtcp::ReportBlock rb1; | 
| 801   rb1.To(kSourceSsrc); | 801   rb1.To(kSourceSsrc); | 
| 802   rb1.WithExtHighestSeqNum(kSequenceNumber); | 802   rb1.WithExtHighestSeqNum(kSequenceNumber); | 
| 803   rtcp::ReceiverReport rr1; | 803   rtcp::ReceiverReport rr1; | 
| 804   rr1.From(kSenderSsrc); | 804   rr1.From(kSenderSsrc); | 
| 805   rr1.WithReportBlock(&rb1); | 805   rr1.WithReportBlock(rb1); | 
| 806   rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 806   rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 
| 807   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 807   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 
| 808   system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs - 1); | 808   system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs - 1); | 
| 809   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 809   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 
| 810   EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 810   EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 
| 811 | 811 | 
| 812   // Add a RR with the same extended max as the previous RR to trigger a | 812   // Add a RR with the same extended max as the previous RR to trigger a | 
| 813   // sequence number timeout, but not a RR timeout. | 813   // sequence number timeout, but not a RR timeout. | 
| 814   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 814   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 
| 815   system_clock_.AdvanceTimeMilliseconds(2); | 815   system_clock_.AdvanceTimeMilliseconds(2); | 
| 816   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 816   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 
| 817   EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 817   EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 
| 818 | 818 | 
| 819   // Advance clock enough to trigger an RR timeout too. | 819   // Advance clock enough to trigger an RR timeout too. | 
| 820   system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs); | 820   system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs); | 
| 821   EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 821   EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 
| 822 | 822 | 
| 823   // We should only get one timeout even though we still haven't received a new | 823   // We should only get one timeout even though we still haven't received a new | 
| 824   // RR. | 824   // RR. | 
| 825   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 825   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 
| 826   EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 826   EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 
| 827 | 827 | 
| 828   // Add a new RR with increase sequence number to reset timers. | 828   // Add a new RR with increase sequence number to reset timers. | 
| 829   rtcp::ReportBlock rb2; | 829   rtcp::ReportBlock rb2; | 
| 830   rb2.To(kSourceSsrc); | 830   rb2.To(kSourceSsrc); | 
| 831   rb2.WithExtHighestSeqNum(kSequenceNumber + 1); | 831   rb2.WithExtHighestSeqNum(kSequenceNumber + 1); | 
| 832   rtcp::ReceiverReport rr2; | 832   rtcp::ReceiverReport rr2; | 
| 833   rr2.From(kSenderSsrc); | 833   rr2.From(kSenderSsrc); | 
| 834   rr2.WithReportBlock(&rb2); | 834   rr2.WithReportBlock(rb2); | 
| 835   rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 835   rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 
| 836   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 836   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 
| 837   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 837   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 
| 838   EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 838   EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 
| 839 | 839 | 
| 840   // Verify we can get a timeout again once we've received new RR. | 840   // Verify we can get a timeout again once we've received new RR. | 
| 841   system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); | 841   system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); | 
| 842   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 842   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 
| 843   system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); | 843   system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); | 
| 844   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 844   EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1001   // First packet, all numbers should just propagate. | 1001   // First packet, all numbers should just propagate. | 
| 1002   rtcp::ReportBlock rb1; | 1002   rtcp::ReportBlock rb1; | 
| 1003   rb1.To(kSourceSsrc); | 1003   rb1.To(kSourceSsrc); | 
| 1004   rb1.WithExtHighestSeqNum(kSequenceNumber); | 1004   rb1.WithExtHighestSeqNum(kSequenceNumber); | 
| 1005   rb1.WithFractionLost(kFractionLoss); | 1005   rb1.WithFractionLost(kFractionLoss); | 
| 1006   rb1.WithCumulativeLost(kCumulativeLoss); | 1006   rb1.WithCumulativeLost(kCumulativeLoss); | 
| 1007   rb1.WithJitter(kJitter); | 1007   rb1.WithJitter(kJitter); | 
| 1008 | 1008 | 
| 1009   rtcp::ReceiverReport rr1; | 1009   rtcp::ReceiverReport rr1; | 
| 1010   rr1.From(kSenderSsrc); | 1010   rr1.From(kSenderSsrc); | 
| 1011   rr1.WithReportBlock(&rb1); | 1011   rr1.WithReportBlock(rb1); | 
| 1012   rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 1012   rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 
| 1013   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 1013   EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 
| 1014   EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, | 1014   EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, | 
| 1015                                kCumulativeLoss, kJitter)); | 1015                                kCumulativeLoss, kJitter)); | 
| 1016 | 1016 | 
| 1017   rtcp_receiver_->RegisterRtcpStatisticsCallback(NULL); | 1017   rtcp_receiver_->RegisterRtcpStatisticsCallback(NULL); | 
| 1018 | 1018 | 
| 1019   // Add arbitrary numbers, callback should not be called (retain old values). | 1019   // Add arbitrary numbers, callback should not be called (retain old values). | 
| 1020   rtcp::ReportBlock rb2; | 1020   rtcp::ReportBlock rb2; | 
| 1021   rb2.To(kSourceSsrc); | 1021   rb2.To(kSourceSsrc); | 
| 1022   rb2.WithExtHighestSeqNum(kSequenceNumber + 1); | 1022   rb2.WithExtHighestSeqNum(kSequenceNumber + 1); | 
| 1023   rb2.WithFractionLost(42); | 1023   rb2.WithFractionLost(42); | 
| 1024   rb2.WithCumulativeLost(137); | 1024   rb2.WithCumulativeLost(137); | 
| 1025   rb2.WithJitter(4711); | 1025   rb2.WithJitter(4711); | 
| 1026 | 1026 | 
| 1027   rtcp::ReceiverReport rr2; | 1027   rtcp::ReceiverReport rr2; | 
| 1028   rr2.From(kSenderSsrc); | 1028   rr2.From(kSenderSsrc); | 
| 1029   rr2.WithReportBlock(&rb2); | 1029   rr2.WithReportBlock(rb2); | 
| 1030   rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 1030   rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 
| 1031   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 1031   EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 
| 1032   EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, | 1032   EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, | 
| 1033                                kCumulativeLoss, kJitter)); | 1033                                kCumulativeLoss, kJitter)); | 
| 1034 } | 1034 } | 
| 1035 | 1035 | 
| 1036 }  // Anonymous namespace | 1036 }  // Anonymous namespace | 
| 1037 | 1037 | 
| 1038 }  // namespace webrtc | 1038 }  // namespace webrtc | 
| OLD | NEW | 
|---|