Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc

Issue 2491293002: Make FlexFEC packets paceable through RTPSender. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 rtp_sender_.reset( 488 rtp_sender_.reset(
489 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, 489 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_,
490 nullptr, &seq_num_allocator_, &feedback_observer_, nullptr, 490 nullptr, &seq_num_allocator_, &feedback_observer_, nullptr,
491 nullptr, nullptr, &mock_rtc_event_log_, 491 nullptr, nullptr, &mock_rtc_event_log_,
492 &send_packet_observer_, &retransmission_rate_limiter_)); 492 &send_packet_observer_, &retransmission_rate_limiter_));
493 rtp_sender_->SetStorePacketsStatus(true, 10); 493 rtp_sender_->SetStorePacketsStatus(true, 10);
494 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 494 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
495 kRtpExtensionTransportSequenceNumber, 495 kRtpExtensionTransportSequenceNumber,
496 kTransportSequenceNumberExtensionId)); 496 kTransportSequenceNumberExtensionId));
497 497
498 uint32_t ssrc = 0;
498 uint16_t seq_num = 0; 499 uint16_t seq_num = 0;
499 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) 500 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
500 .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num)); 501 .Times(1)
502 .WillOnce(testing::Invoke([&ssrc, &seq_num](
503 RtpPacketSender::Priority arg0, uint32_t arg1, uint16_t arg2,
504 int64_t arg3, size_t arg4, bool arg5) {
505 ssrc = arg1;
506 seq_num = arg2;
507 }));
501 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 508 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
502 .WillOnce(testing::Return(kTransportSequenceNumber)); 509 .WillOnce(testing::Return(kTransportSequenceNumber));
503 EXPECT_CALL(send_packet_observer_, 510 EXPECT_CALL(send_packet_observer_,
504 OnSendPacket(kTransportSequenceNumber, _, _)) 511 OnSendPacket(kTransportSequenceNumber, _, _))
505 .Times(1); 512 .Times(1);
506 const int kProbeClusterId = 1; 513 const int kProbeClusterId = 1;
507 EXPECT_CALL( 514 EXPECT_CALL(
508 feedback_observer_, 515 feedback_observer_,
509 AddPacket(kTransportSequenceNumber, 516 AddPacket(kTransportSequenceNumber,
510 sizeof(kPayloadData) + kGenericHeaderLength, kProbeClusterId)) 517 sizeof(kPayloadData) + kGenericHeaderLength, kProbeClusterId))
511 .Times(1); 518 .Times(1);
512 519
513 SendGenericPayload(); 520 SendGenericPayload();
514 rtp_sender_->TimeToSendPacket(seq_num, fake_clock_.TimeInMilliseconds(), 521 rtp_sender_->TimeToSendPacket(ssrc, seq_num, fake_clock_.TimeInMilliseconds(),
515 false, kProbeClusterId); 522 false, kProbeClusterId);
516 523
517 const auto& packet = transport_.last_sent_packet(); 524 const auto& packet = transport_.last_sent_packet();
518 uint16_t transport_seq_no; 525 uint16_t transport_seq_no;
519 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); 526 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no));
520 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); 527 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no);
521 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); 528 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no);
522 } 529 }
523 530
524 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { 531 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
532 uint32_t ssrc;
525 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 533 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
526 _, kSeqNum, _, _, _)); 534 _, kSeqNum, _, _, _))
535 .WillOnce(testing::SaveArg<1>(&ssrc));
527 EXPECT_CALL(mock_rtc_event_log_, 536 EXPECT_CALL(mock_rtc_event_log_,
528 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 537 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
529 538
530 rtp_sender_->SetStorePacketsStatus(true, 10); 539 rtp_sender_->SetStorePacketsStatus(true, 10);
531 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 540 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
532 kRtpExtensionTransmissionTimeOffset, 541 kRtpExtensionTransmissionTimeOffset,
533 kTransmissionTimeOffsetExtensionId)); 542 kTransmissionTimeOffsetExtensionId));
534 EXPECT_EQ( 543 EXPECT_EQ(
535 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 544 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
536 kAbsoluteSendTimeExtensionId)); 545 kAbsoluteSendTimeExtensionId));
537 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 546 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
538 auto packet = 547 auto packet =
539 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms); 548 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
540 size_t packet_size = packet->size(); 549 size_t packet_size = packet->size();
541 550
542 // Packet should be stored in a send bucket. 551 // Packet should be stored in a send bucket.
543 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 552 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
544 kAllowRetransmission, 553 kAllowRetransmission,
545 RtpPacketSender::kNormalPriority)); 554 RtpPacketSender::kNormalPriority));
546 555
547 EXPECT_EQ(0, transport_.packets_sent()); 556 EXPECT_EQ(0, transport_.packets_sent());
548 557
549 const int kStoredTimeInMs = 100; 558 const int kStoredTimeInMs = 100;
550 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 559 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
551 560
552 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 561 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, capture_time_ms, false,
553 PacketInfo::kNotAProbe); 562 PacketInfo::kNotAProbe);
554 563
555 // Process send bucket. Packet should now be sent. 564 // Process send bucket. Packet should now be sent.
556 EXPECT_EQ(1, transport_.packets_sent()); 565 EXPECT_EQ(1, transport_.packets_sent());
557 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); 566 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
558 567
559 webrtc::RTPHeader rtp_header; 568 webrtc::RTPHeader rtp_header;
560 transport_.last_sent_packet().GetHeader(&rtp_header); 569 transport_.last_sent_packet().GetHeader(&rtp_header);
561 570
562 // Verify transmission time offset. 571 // Verify transmission time offset.
563 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 572 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
564 uint64_t expected_send_time = 573 uint64_t expected_send_time =
565 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 574 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
566 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 575 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
567 } 576 }
568 577
569 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { 578 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
579 uint32_t ssrc;
570 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 580 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
571 _, kSeqNum, _, _, _)); 581 _, kSeqNum, _, _, _))
582 .WillOnce(testing::SaveArg<1>(&ssrc));
572 EXPECT_CALL(mock_rtc_event_log_, 583 EXPECT_CALL(mock_rtc_event_log_,
573 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 584 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
574 585
575 rtp_sender_->SetStorePacketsStatus(true, 10); 586 rtp_sender_->SetStorePacketsStatus(true, 10);
576 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 587 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
577 kRtpExtensionTransmissionTimeOffset, 588 kRtpExtensionTransmissionTimeOffset,
578 kTransmissionTimeOffsetExtensionId)); 589 kTransmissionTimeOffsetExtensionId));
579 EXPECT_EQ( 590 EXPECT_EQ(
580 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 591 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
581 kAbsoluteSendTimeExtensionId)); 592 kAbsoluteSendTimeExtensionId));
(...skipping 11 matching lines...) Expand all
593 604
594 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 605 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
595 _, kSeqNum, _, _, _)); 606 _, kSeqNum, _, _, _));
596 607
597 const int kStoredTimeInMs = 100; 608 const int kStoredTimeInMs = 100;
598 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 609 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
599 610
600 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum)); 611 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum));
601 EXPECT_EQ(0, transport_.packets_sent()); 612 EXPECT_EQ(0, transport_.packets_sent());
602 613
603 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 614 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, capture_time_ms, false,
604 PacketInfo::kNotAProbe); 615 PacketInfo::kNotAProbe);
605 616
606 // Process send bucket. Packet should now be sent. 617 // Process send bucket. Packet should now be sent.
607 EXPECT_EQ(1, transport_.packets_sent()); 618 EXPECT_EQ(1, transport_.packets_sent());
608 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); 619 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
609 620
610 webrtc::RTPHeader rtp_header; 621 webrtc::RTPHeader rtp_header;
611 transport_.last_sent_packet().GetHeader(&rtp_header); 622 transport_.last_sent_packet().GetHeader(&rtp_header);
612 623
613 // Verify transmission time offset. 624 // Verify transmission time offset.
614 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 625 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
615 uint64_t expected_send_time = 626 uint64_t expected_send_time =
616 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 627 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
617 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 628 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
618 } 629 }
619 630
620 // This test sends 1 regular video packet, then 4 padding packets, and then 631 // This test sends 1 regular video packet, then 4 padding packets, and then
621 // 1 more regular packet. 632 // 1 more regular packet.
622 TEST_F(RtpSenderTest, SendPadding) { 633 TEST_F(RtpSenderTest, SendPadding) {
634 uint32_t ssrc;
623 // Make all (non-padding) packets go to send queue. 635 // Make all (non-padding) packets go to send queue.
624 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 636 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
625 _, kSeqNum, _, _, _)); 637 _, kSeqNum, _, _, _))
638 .WillOnce(testing::SaveArg<1>(&ssrc));
626 EXPECT_CALL(mock_rtc_event_log_, 639 EXPECT_CALL(mock_rtc_event_log_,
627 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 640 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
628 .Times(1 + 4 + 1); 641 .Times(1 + 4 + 1);
629 642
630 uint16_t seq_num = kSeqNum; 643 uint16_t seq_num = kSeqNum;
631 uint32_t timestamp = kTimestamp; 644 uint32_t timestamp = kTimestamp;
632 rtp_sender_->SetStorePacketsStatus(true, 10); 645 rtp_sender_->SetStorePacketsStatus(true, 10);
633 size_t rtp_header_len = kRtpHeaderSize; 646 size_t rtp_header_len = kRtpHeaderSize;
634 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 647 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
635 kRtpExtensionTransmissionTimeOffset, 648 kRtpExtensionTransmissionTimeOffset,
(...skipping 16 matching lines...) Expand all
652 // Packet should be stored in a send bucket. 665 // Packet should be stored in a send bucket.
653 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 666 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
654 kAllowRetransmission, 667 kAllowRetransmission,
655 RtpPacketSender::kNormalPriority)); 668 RtpPacketSender::kNormalPriority));
656 669
657 int total_packets_sent = 0; 670 int total_packets_sent = 0;
658 EXPECT_EQ(total_packets_sent, transport_.packets_sent()); 671 EXPECT_EQ(total_packets_sent, transport_.packets_sent());
659 672
660 const int kStoredTimeInMs = 100; 673 const int kStoredTimeInMs = 100;
661 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 674 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
662 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, 675 rtp_sender_->TimeToSendPacket(ssrc, seq_num++, capture_time_ms, false,
663 PacketInfo::kNotAProbe); 676 PacketInfo::kNotAProbe);
664 // Packet should now be sent. This test doesn't verify the regular video 677 // Packet should now be sent. This test doesn't verify the regular video
665 // packet, since it is tested in another test. 678 // packet, since it is tested in another test.
666 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); 679 EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
667 timestamp += 90 * kStoredTimeInMs; 680 timestamp += 90 * kStoredTimeInMs;
668 681
669 // Send padding 4 times, waiting 50 ms between each. 682 // Send padding 4 times, waiting 50 ms between each.
670 for (int i = 0; i < 4; ++i) { 683 for (int i = 0; i < 4; ++i) {
671 const int kPaddingPeriodMs = 50; 684 const int kPaddingPeriodMs = 50;
672 const size_t kPaddingBytes = 100; 685 const size_t kPaddingBytes = 100;
(...skipping 30 matching lines...) Expand all
703 packet_size = packet->size(); 716 packet_size = packet->size();
704 717
705 EXPECT_CALL(mock_paced_sender_, 718 EXPECT_CALL(mock_paced_sender_,
706 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); 719 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _));
707 720
708 // Packet should be stored in a send bucket. 721 // Packet should be stored in a send bucket.
709 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 722 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
710 kAllowRetransmission, 723 kAllowRetransmission,
711 RtpPacketSender::kNormalPriority)); 724 RtpPacketSender::kNormalPriority));
712 725
713 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, 726 rtp_sender_->TimeToSendPacket(ssrc, seq_num, capture_time_ms, false,
714 PacketInfo::kNotAProbe); 727 PacketInfo::kNotAProbe);
715 // Process send bucket. 728 // Process send bucket.
716 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); 729 EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
717 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); 730 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
718 transport_.last_sent_packet().GetHeader(&rtp_header); 731 transport_.last_sent_packet().GetHeader(&rtp_header);
719 732
720 // Verify sequence number and timestamp. 733 // Verify sequence number and timestamp.
721 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 734 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
722 EXPECT_EQ(timestamp, rtp_header.timestamp); 735 EXPECT_EQ(timestamp, rtp_header.timestamp);
723 // Verify transmission time offset. This packet is sent without delay. 736 // Verify transmission time offset. This packet is sent without delay.
724 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 737 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
725 uint64_t expected_send_time = 738 uint64_t expected_send_time =
726 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 739 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
727 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 740 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
728 } 741 }
729 742
730 TEST_F(RtpSenderTest, OnSendPacketUpdated) { 743 TEST_F(RtpSenderTest, OnSendPacketUpdated) {
731 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 744 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
732 kRtpExtensionTransportSequenceNumber, 745 kRtpExtensionTransportSequenceNumber,
733 kTransportSequenceNumberExtensionId)); 746 kTransportSequenceNumberExtensionId));
734 rtp_sender_->SetStorePacketsStatus(true, 10); 747 rtp_sender_->SetStorePacketsStatus(true, 10);
735 748
736 EXPECT_CALL(send_packet_observer_, 749 EXPECT_CALL(send_packet_observer_,
737 OnSendPacket(kTransportSequenceNumber, _, _)) 750 OnSendPacket(kTransportSequenceNumber, _, _))
738 .Times(1); 751 .Times(1);
739 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 752 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
740 .WillOnce(testing::Return(kTransportSequenceNumber)); 753 .WillOnce(testing::Return(kTransportSequenceNumber));
741 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); 754 uint32_t ssrc;
755 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
756 .Times(1)
757 .WillOnce(testing::SaveArg<1>(&ssrc));
742 758
743 SendGenericPayload(); // Packet passed to pacer. 759 SendGenericPayload(); // Packet passed to pacer.
744 const bool kIsRetransmit = false; 760 const bool kIsRetransmit = false;
745 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), 761 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(),
746 kIsRetransmit, PacketInfo::kNotAProbe); 762 kIsRetransmit, PacketInfo::kNotAProbe);
747 EXPECT_EQ(1, transport_.packets_sent()); 763 EXPECT_EQ(1, transport_.packets_sent());
748 } 764 }
749 765
750 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { 766 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) {
751 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 767 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
752 kRtpExtensionTransportSequenceNumber, 768 kRtpExtensionTransportSequenceNumber,
753 kTransportSequenceNumberExtensionId)); 769 kTransportSequenceNumberExtensionId));
754 rtp_sender_->SetStorePacketsStatus(true, 10); 770 rtp_sender_->SetStorePacketsStatus(true, 10);
755 771
756 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); 772 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
757 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 773 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
758 .WillOnce(testing::Return(kTransportSequenceNumber)); 774 .WillOnce(testing::Return(kTransportSequenceNumber));
759 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); 775 uint32_t ssrc;
776 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
777 .Times(1)
778 .WillOnce(testing::SaveArg<1>(&ssrc));
760 779
761 SendGenericPayload(); // Packet passed to pacer. 780 SendGenericPayload(); // Packet passed to pacer.
762 const bool kIsRetransmit = true; 781 const bool kIsRetransmit = true;
763 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), 782 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(),
764 kIsRetransmit, PacketInfo::kNotAProbe); 783 kIsRetransmit, PacketInfo::kNotAProbe);
765 EXPECT_EQ(1, transport_.packets_sent()); 784 EXPECT_EQ(1, transport_.packets_sent());
766 } 785 }
767 786
768 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { 787 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) {
769 rtp_sender_.reset(new RTPSender( 788 rtp_sender_.reset(new RTPSender(
770 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, 789 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr,
771 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, 790 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr,
772 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_)); 791 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_));
773 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 792 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
774 kRtpExtensionTransportSequenceNumber, 793 kRtpExtensionTransportSequenceNumber,
775 kTransportSequenceNumberExtensionId)); 794 kTransportSequenceNumberExtensionId));
776 rtp_sender_->SetSequenceNumber(kSeqNum); 795 rtp_sender_->SetSequenceNumber(kSeqNum);
777 rtp_sender_->SetStorePacketsStatus(true, 10); 796 rtp_sender_->SetStorePacketsStatus(true, 10);
778 797
779 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); 798 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
780 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); 799 uint32_t ssrc;
800 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
801 .Times(1)
802 .WillOnce(testing::SaveArg<1>(&ssrc));
781 803
782 SendGenericPayload(); // Packet passed to pacer. 804 SendGenericPayload(); // Packet passed to pacer.
783 const bool kIsRetransmit = false; 805 const bool kIsRetransmit = false;
784 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), 806 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(),
785 kIsRetransmit, PacketInfo::kNotAProbe); 807 kIsRetransmit, PacketInfo::kNotAProbe);
786 EXPECT_EQ(1, transport_.packets_sent()); 808 EXPECT_EQ(1, transport_.packets_sent());
787 } 809 }
788 810
789 TEST_F(RtpSenderTest, SendRedundantPayloads) { 811 TEST_F(RtpSenderTest, SendRedundantPayloads) {
790 MockTransport transport; 812 MockTransport transport;
791 rtp_sender_.reset(new RTPSender( 813 rtp_sender_.reset(new RTPSender(
792 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, 814 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr,
793 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, 815 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr,
794 &retransmission_rate_limiter_)); 816 &retransmission_rate_limiter_));
(...skipping 10 matching lines...) Expand all
805 rtp_header_len += 4; // 4 bytes extension. 827 rtp_header_len += 4; // 4 bytes extension.
806 rtp_header_len += 4; // 4 extra bytes common to all extension headers. 828 rtp_header_len += 4; // 4 extra bytes common to all extension headers.
807 829
808 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 830 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
809 rtp_sender_->SetRtxSsrc(1234); 831 rtp_sender_->SetRtxSsrc(1234);
810 832
811 const size_t kNumPayloadSizes = 10; 833 const size_t kNumPayloadSizes = 10;
812 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, 834 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700,
813 750, 800, 850, 900, 950}; 835 750, 800, 850, 900, 950};
814 // Expect all packets go through the pacer. 836 // Expect all packets go through the pacer.
837 uint32_t ssrc;
815 EXPECT_CALL(mock_paced_sender_, 838 EXPECT_CALL(mock_paced_sender_,
816 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) 839 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
817 .Times(kNumPayloadSizes); 840 .Times(kNumPayloadSizes)
841 .WillOnce(testing::SaveArg<1>(&ssrc));
818 EXPECT_CALL(mock_rtc_event_log_, 842 EXPECT_CALL(mock_rtc_event_log_,
819 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 843 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
820 .Times(kNumPayloadSizes); 844 .Times(kNumPayloadSizes);
821 845
822 // Send 10 packets of increasing size. 846 // Send 10 packets of increasing size.
823 for (size_t i = 0; i < kNumPayloadSizes; ++i) { 847 for (size_t i = 0; i < kNumPayloadSizes; ++i) {
824 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 848 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
825 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); 849 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true));
826 SendPacket(capture_time_ms, kPayloadSizes[i]); 850 SendPacket(capture_time_ms, kPayloadSizes[i]);
827 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, 851 rtp_sender_->TimeToSendPacket(ssrc, seq_num++, capture_time_ms, false,
828 PacketInfo::kNotAProbe); 852 PacketInfo::kNotAProbe);
829 fake_clock_.AdvanceTimeMilliseconds(33); 853 fake_clock_.AdvanceTimeMilliseconds(33);
830 } 854 }
831 855
832 EXPECT_CALL(mock_rtc_event_log_, 856 EXPECT_CALL(mock_rtc_event_log_,
833 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 857 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
834 .Times(::testing::AtLeast(4)); 858 .Times(::testing::AtLeast(4));
835 859
836 // The amount of padding to send it too small to send a payload packet. 860 // The amount of padding to send it too small to send a payload packet.
837 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) 861 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _))
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 rtp_sender_->SetSendPayloadType(kMediaPayloadType); 943 rtp_sender_->SetSendPayloadType(kMediaPayloadType);
920 rtp_sender_->SetStorePacketsStatus(true, 10); 944 rtp_sender_->SetStorePacketsStatus(true, 10);
921 945
922 // Parameters selected to generate a single FEC packet per media packet. 946 // Parameters selected to generate a single FEC packet per media packet.
923 FecProtectionParams params; 947 FecProtectionParams params;
924 params.fec_rate = 15; 948 params.fec_rate = 15;
925 params.max_fec_frames = 1; 949 params.max_fec_frames = 1;
926 params.fec_mask_type = kFecMaskRandom; 950 params.fec_mask_type = kFecMaskRandom;
927 rtp_sender_->SetFecParameters(params, params); 951 rtp_sender_->SetFecParameters(params, params);
928 952
929 uint16_t media_seq_num; 953 EXPECT_CALL(mock_paced_sender_,
954 InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, kSeqNum,
955 _, _, false));
956 uint16_t flexfec_seq_num;
930 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, 957 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority,
931 kMediaSsrc, _, _, _, false)) 958 kFlexfecSsrc, _, _, _, false))
932 .WillOnce(testing::SaveArg<2>(&media_seq_num)); 959 .WillOnce(testing::SaveArg<2>(&flexfec_seq_num));
933 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority,
934 kFlexfecSsrc, _, _, _, false));
935 SendGenericPayload(); 960 SendGenericPayload();
936 // TODO(brandtr): Make these tests stricter when the FlexFEC packets are no
937 // longer lost between PacedSender and RTPSender.
938 EXPECT_CALL(mock_rtc_event_log_, 961 EXPECT_CALL(mock_rtc_event_log_,
939 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 962 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
940 .Times(testing::AtLeast(1)); 963 .Times(2);
941 EXPECT_TRUE(rtp_sender_->TimeToSendPacket( 964 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(
942 media_seq_num, fake_clock_.TimeInMilliseconds(), false, 0)); 965 kMediaSsrc, kSeqNum, fake_clock_.TimeInMilliseconds(), false, 0));
943 EXPECT_LE(1, transport_.packets_sent()); 966 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num,
967 fake_clock_.TimeInMilliseconds(),
968 false, 0));
969 EXPECT_EQ(2, transport_.packets_sent());
944 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; 970 const RtpPacketReceived& media_packet = transport_.sent_packets_[0];
945 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); 971 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType());
946 EXPECT_EQ(media_seq_num, media_packet.SequenceNumber()); 972 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber());
947 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); 973 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc());
974 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1];
975 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType());
976 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber());
977 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc());
948 } 978 }
949 979
950 TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) { 980 TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) {
951 constexpr int kMediaPayloadType = 127; 981 constexpr int kMediaPayloadType = 127;
952 constexpr int kFlexfecPayloadType = 118; 982 constexpr int kFlexfecPayloadType = 118;
953 constexpr uint32_t kMediaSsrc = 1234; 983 constexpr uint32_t kMediaSsrc = 1234;
954 constexpr uint32_t kFlexfecSsrc = 5678; 984 constexpr uint32_t kFlexfecSsrc = 5678;
955 const std::vector<RtpExtension> kNoRtpExtensions; 985 const std::vector<RtpExtension> kNoRtpExtensions;
956 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 986 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
957 kNoRtpExtensions, &fake_clock_); 987 kNoRtpExtensions, &fake_clock_);
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
1472 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); 1502 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0));
1473 EXPECT_EQ(kVideoRotation_90, 1503 EXPECT_EQ(kVideoRotation_90,
1474 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); 1504 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1));
1475 EXPECT_EQ(kVideoRotation_180, 1505 EXPECT_EQ(kVideoRotation_180,
1476 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); 1506 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2));
1477 EXPECT_EQ(kVideoRotation_270, 1507 EXPECT_EQ(kVideoRotation_270,
1478 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); 1508 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3));
1479 } 1509 }
1480 1510
1481 } // namespace webrtc 1511 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698