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 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 595 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
596 | 596 |
597 const uint8_t kLossRate = 123; | 597 const uint8_t kLossRate = 123; |
598 rtcp::VoipMetric voip_metric; | 598 rtcp::VoipMetric voip_metric; |
599 voip_metric.To(kSourceSsrc); | 599 voip_metric.To(kSourceSsrc); |
600 RTCPVoIPMetric metric; | 600 RTCPVoIPMetric metric; |
601 metric.lossRate = kLossRate; | 601 metric.lossRate = kLossRate; |
602 voip_metric.WithVoipMetric(metric); | 602 voip_metric.WithVoipMetric(metric); |
603 rtcp::ExtendedReports xr; | 603 rtcp::ExtendedReports xr; |
604 xr.From(0x2345); | 604 xr.From(0x2345); |
605 xr.WithVoipMetric(&voip_metric); | 605 xr.WithVoipMetric(voip_metric); |
606 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 606 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
607 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 607 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
608 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr); | 608 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr); |
609 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); | 609 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); |
610 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); | 610 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); |
611 } | 611 } |
612 | 612 |
613 TEST_F(RtcpReceiverTest, ExtendedReportsVoipPacketNotToUsIgnored) { | 613 TEST_F(RtcpReceiverTest, ExtendedReportsVoipPacketNotToUsIgnored) { |
614 const uint32_t kSourceSsrc = 0x123456; | 614 const uint32_t kSourceSsrc = 0x123456; |
615 std::set<uint32_t> ssrcs; | 615 std::set<uint32_t> ssrcs; |
616 ssrcs.insert(kSourceSsrc); | 616 ssrcs.insert(kSourceSsrc); |
617 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 617 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
618 | 618 |
619 rtcp::VoipMetric voip_metric; | 619 rtcp::VoipMetric voip_metric; |
620 voip_metric.To(kSourceSsrc + 1); | 620 voip_metric.To(kSourceSsrc + 1); |
621 rtcp::ExtendedReports xr; | 621 rtcp::ExtendedReports xr; |
622 xr.From(0x2345); | 622 xr.From(0x2345); |
623 xr.WithVoipMetric(&voip_metric); | 623 xr.WithVoipMetric(voip_metric); |
624 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 624 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
625 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 625 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
626 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 626 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
627 } | 627 } |
628 | 628 |
629 TEST_F(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) { | 629 TEST_F(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) { |
630 rtcp::Rrtr rrtr; | 630 rtcp::Rrtr rrtr; |
631 rrtr.WithNtp(NtpTime(0x10203, 0x40506)); | 631 rrtr.WithNtp(NtpTime(0x10203, 0x40506)); |
632 rtcp::ExtendedReports xr; | 632 rtcp::ExtendedReports xr; |
633 xr.From(0x2345); | 633 xr.From(0x2345); |
634 xr.WithRrtr(&rrtr); | 634 xr.WithRrtr(rrtr); |
635 | 635 |
636 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 636 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
637 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 637 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
638 EXPECT_EQ(kRtcpXrReceiverReferenceTime, | 638 EXPECT_EQ(kRtcpXrReceiverReferenceTime, |
639 rtcp_packet_info_.rtcpPacketTypeFlags); | 639 rtcp_packet_info_.rtcpPacketTypeFlags); |
640 } | 640 } |
641 | 641 |
642 TEST_F(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) { | 642 TEST_F(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) { |
643 const uint32_t kSourceSsrc = 0x123456; | 643 const uint32_t kSourceSsrc = 0x123456; |
644 std::set<uint32_t> ssrcs; | 644 std::set<uint32_t> ssrcs; |
645 ssrcs.insert(kSourceSsrc); | 645 ssrcs.insert(kSourceSsrc); |
646 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 646 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
647 | 647 |
648 rtcp::Dlrr dlrr; | 648 rtcp::Dlrr dlrr; |
649 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); | 649 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); |
650 rtcp::ExtendedReports xr; | 650 rtcp::ExtendedReports xr; |
651 xr.From(0x2345); | 651 xr.From(0x2345); |
652 xr.WithDlrr(&dlrr); | 652 xr.WithDlrr(dlrr); |
653 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 653 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
654 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 654 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
655 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 655 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
656 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); | 656 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); |
657 } | 657 } |
658 | 658 |
659 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) { | 659 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) { |
660 const uint32_t kSourceSsrc = 0x123456; | 660 const uint32_t kSourceSsrc = 0x123456; |
661 std::set<uint32_t> ssrcs; | 661 std::set<uint32_t> ssrcs; |
662 ssrcs.insert(kSourceSsrc); | 662 ssrcs.insert(kSourceSsrc); |
663 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 663 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
664 | 664 |
665 rtcp::Dlrr dlrr; | 665 rtcp::Dlrr dlrr; |
666 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 666 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
667 rtcp::ExtendedReports xr; | 667 rtcp::ExtendedReports xr; |
668 xr.From(0x2345); | 668 xr.From(0x2345); |
669 xr.WithDlrr(&dlrr); | 669 xr.WithDlrr(dlrr); |
670 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 670 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
671 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 671 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
672 // The parser should note the DLRR report block item, but not flag the packet | 672 // The parser should note the DLRR report block item, but not flag the packet |
673 // since the RTT is not estimated. | 673 // since the RTT is not estimated. |
674 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 674 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
675 } | 675 } |
676 | 676 |
677 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) { | 677 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) { |
678 const uint32_t kSourceSsrc = 0x123456; | 678 const uint32_t kSourceSsrc = 0x123456; |
679 std::set<uint32_t> ssrcs; | 679 std::set<uint32_t> ssrcs; |
680 ssrcs.insert(kSourceSsrc); | 680 ssrcs.insert(kSourceSsrc); |
681 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 681 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
682 | 682 |
683 rtcp::Dlrr dlrr; | 683 rtcp::Dlrr dlrr; |
684 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); | 684 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); |
685 dlrr.WithDlrrItem(kSourceSsrc + 2, 0x12345, 0x67890); | 685 dlrr.WithDlrrItem(kSourceSsrc + 2, 0x12345, 0x67890); |
686 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 686 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
687 rtcp::ExtendedReports xr; | 687 rtcp::ExtendedReports xr; |
688 xr.From(0x2345); | 688 xr.From(0x2345); |
689 xr.WithDlrr(&dlrr); | 689 xr.WithDlrr(dlrr); |
690 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 690 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
691 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 691 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
692 // The parser should note the DLRR report block item, but not flag the packet | 692 // The parser should note the DLRR report block item, but not flag the packet |
693 // since the RTT is not estimated. | 693 // since the RTT is not estimated. |
694 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 694 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
695 } | 695 } |
696 | 696 |
697 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) { | 697 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) { |
698 const uint32_t kSourceSsrc = 0x123456; | 698 const uint32_t kSourceSsrc = 0x123456; |
699 std::set<uint32_t> ssrcs; | 699 std::set<uint32_t> ssrcs; |
700 ssrcs.insert(kSourceSsrc); | 700 ssrcs.insert(kSourceSsrc); |
701 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 701 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
702 | 702 |
703 rtcp::Rrtr rrtr; | 703 rtcp::Rrtr rrtr; |
704 rtcp::Dlrr dlrr; | 704 rtcp::Dlrr dlrr; |
705 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 705 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
706 rtcp::VoipMetric metric; | 706 rtcp::VoipMetric metric; |
707 metric.To(kSourceSsrc); | 707 metric.To(kSourceSsrc); |
708 rtcp::ExtendedReports xr; | 708 rtcp::ExtendedReports xr; |
709 xr.From(0x2345); | 709 xr.From(0x2345); |
710 xr.WithRrtr(&rrtr); | 710 xr.WithRrtr(rrtr); |
711 xr.WithDlrr(&dlrr); | 711 xr.WithDlrr(dlrr); |
712 xr.WithVoipMetric(&metric); | 712 xr.WithVoipMetric(metric); |
713 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 713 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
714 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 714 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
715 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + | 715 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + |
716 kRtcpXrVoipMetric), | 716 kRtcpXrVoipMetric), |
717 rtcp_packet_info_.rtcpPacketTypeFlags); | 717 rtcp_packet_info_.rtcpPacketTypeFlags); |
718 // The parser should note the DLRR report block item, but not flag the packet | 718 // The parser should note the DLRR report block item, but not flag the packet |
719 // since the RTT is not estimated. | 719 // since the RTT is not estimated. |
720 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 720 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
721 } | 721 } |
722 | 722 |
723 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) { | 723 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) { |
724 const uint32_t kSourceSsrc = 0x123456; | 724 const uint32_t kSourceSsrc = 0x123456; |
725 std::set<uint32_t> ssrcs; | 725 std::set<uint32_t> ssrcs; |
726 ssrcs.insert(kSourceSsrc); | 726 ssrcs.insert(kSourceSsrc); |
727 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 727 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
728 std::vector<uint32_t> remote_ssrcs; | 728 std::vector<uint32_t> remote_ssrcs; |
729 remote_ssrcs.push_back(kSourceSsrc); | 729 remote_ssrcs.push_back(kSourceSsrc); |
730 | 730 |
731 rtcp::Rrtr rrtr; | 731 rtcp::Rrtr rrtr; |
732 rtcp::Dlrr dlrr; | 732 rtcp::Dlrr dlrr; |
733 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 733 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
734 rtcp::VoipMetric metric; | 734 rtcp::VoipMetric metric; |
735 metric.To(kSourceSsrc); | 735 metric.To(kSourceSsrc); |
736 rtcp::ExtendedReports xr; | 736 rtcp::ExtendedReports xr; |
737 xr.From(0x2345); | 737 xr.From(0x2345); |
738 xr.WithRrtr(&rrtr); | 738 xr.WithRrtr(rrtr); |
739 xr.WithDlrr(&dlrr); | 739 xr.WithDlrr(dlrr); |
740 xr.WithVoipMetric(&metric); | 740 xr.WithVoipMetric(metric); |
741 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 741 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
742 // Modify the DLRR block to have an unsupported block type, from 5 to 6. | 742 // Modify the DLRR block to have an unsupported block type, from 5 to 6. |
743 uint8_t* buffer = const_cast<uint8_t*>(packet->Buffer()); | 743 uint8_t* buffer = const_cast<uint8_t*>(packet->Buffer()); |
744 EXPECT_EQ(5, buffer[20]); | 744 EXPECT_EQ(5, buffer[20]); |
745 buffer[20] = 6; | 745 buffer[20] = 6; |
746 | 746 |
747 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 747 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
748 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + | 748 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + |
749 kRtcpXrVoipMetric), | 749 kRtcpXrVoipMetric), |
750 rtcp_packet_info_.rtcpPacketTypeFlags); | 750 rtcp_packet_info_.rtcpPacketTypeFlags); |
(...skipping 13 matching lines...) Expand all Loading... |
764 TEST_F(RtcpReceiverTest, GetLastReceivedExtendedReportsReferenceTimeInfo) { | 764 TEST_F(RtcpReceiverTest, GetLastReceivedExtendedReportsReferenceTimeInfo) { |
765 const uint32_t kSenderSsrc = 0x123456; | 765 const uint32_t kSenderSsrc = 0x123456; |
766 const NtpTime kNtp(0x10203, 0x40506); | 766 const NtpTime kNtp(0x10203, 0x40506); |
767 const uint32_t kNtpMid = | 767 const uint32_t kNtpMid = |
768 RTCPUtility::MidNtp(kNtp.seconds(), kNtp.fractions()); | 768 RTCPUtility::MidNtp(kNtp.seconds(), kNtp.fractions()); |
769 | 769 |
770 rtcp::Rrtr rrtr; | 770 rtcp::Rrtr rrtr; |
771 rrtr.WithNtp(kNtp); | 771 rrtr.WithNtp(kNtp); |
772 rtcp::ExtendedReports xr; | 772 rtcp::ExtendedReports xr; |
773 xr.From(kSenderSsrc); | 773 xr.From(kSenderSsrc); |
774 xr.WithRrtr(&rrtr); | 774 xr.WithRrtr(rrtr); |
775 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 775 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
776 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 776 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
777 EXPECT_EQ(kRtcpXrReceiverReferenceTime, | 777 EXPECT_EQ(kRtcpXrReceiverReferenceTime, |
778 rtcp_packet_info_.rtcpPacketTypeFlags); | 778 rtcp_packet_info_.rtcpPacketTypeFlags); |
779 | 779 |
780 RtcpReceiveTimeInfo info; | 780 RtcpReceiveTimeInfo info; |
781 EXPECT_TRUE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); | 781 EXPECT_TRUE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); |
782 EXPECT_EQ(kSenderSsrc, info.sourceSSRC); | 782 EXPECT_EQ(kSenderSsrc, info.sourceSSRC); |
783 EXPECT_EQ(kNtpMid, info.lastRR); | 783 EXPECT_EQ(kNtpMid, info.lastRR); |
784 EXPECT_EQ(0U, info.delaySinceLastRR); | 784 EXPECT_EQ(0U, info.delaySinceLastRR); |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1099 | 1099 |
1100 // Transport feedback should be ignored, but next packet should work. | 1100 // Transport feedback should be ignored, but next packet should work. |
1101 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); | 1101 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); |
1102 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); | 1102 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); |
1103 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); | 1103 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); |
1104 } | 1104 } |
1105 | 1105 |
1106 } // Anonymous namespace | 1106 } // Anonymous namespace |
1107 | 1107 |
1108 } // namespace webrtc | 1108 } // namespace webrtc |
OLD | NEW |