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

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

Issue 1247293002: Add support for transport wide sequence numbers (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase, again Created 5 years, 4 months 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
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | webrtc/test/frame_generator_capturer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 uint64_t ConvertMsToAbsSendTime(int64_t time_ms) { 66 uint64_t ConvertMsToAbsSendTime(int64_t time_ms) {
67 return 0x00fffffful & ((time_ms << 18) / 1000); 67 return 0x00fffffful & ((time_ms << 18) / 1000);
68 } 68 }
69 69
70 class LoopbackTransportTest : public webrtc::Transport { 70 class LoopbackTransportTest : public webrtc::Transport {
71 public: 71 public:
72 LoopbackTransportTest() 72 LoopbackTransportTest()
73 : packets_sent_(0), 73 : packets_sent_(0),
74 last_sent_packet_len_(0), 74 last_sent_packet_len_(0),
75 total_bytes_sent_(0), 75 total_bytes_sent_(0),
76 last_sent_packet_(NULL) {} 76 last_sent_packet_(nullptr) {}
77 77
78 ~LoopbackTransportTest() { 78 ~LoopbackTransportTest() {
79 STLDeleteContainerPointers(sent_packets_.begin(), sent_packets_.end()); 79 STLDeleteContainerPointers(sent_packets_.begin(), sent_packets_.end());
80 } 80 }
81 int SendPacket(int channel, const void *data, size_t len) override { 81 int SendPacket(int channel, const void *data, size_t len) override {
82 packets_sent_++; 82 packets_sent_++;
83 rtc::Buffer* buffer = 83 rtc::Buffer* buffer =
84 new rtc::Buffer(reinterpret_cast<const uint8_t*>(data), len); 84 new rtc::Buffer(reinterpret_cast<const uint8_t*>(data), len);
85 last_sent_packet_ = buffer->data(); 85 last_sent_packet_ = buffer->data();
86 last_sent_packet_len_ = len; 86 last_sent_packet_len_ = len;
(...skipping 20 matching lines...) Expand all
107 mock_paced_sender_(), 107 mock_paced_sender_(),
108 rtp_sender_(), 108 rtp_sender_(),
109 payload_(kPayload), 109 payload_(kPayload),
110 transport_(), 110 transport_(),
111 kMarkerBit(true) { 111 kMarkerBit(true) {
112 EXPECT_CALL(mock_paced_sender_, 112 EXPECT_CALL(mock_paced_sender_,
113 SendPacket(_, _, _, _, _, _)).WillRepeatedly(testing::Return(true)); 113 SendPacket(_, _, _, _, _, _)).WillRepeatedly(testing::Return(true));
114 } 114 }
115 115
116 void SetUp() override { 116 void SetUp() override {
117 rtp_sender_.reset(new RTPSender(0, false, &fake_clock_, &transport_, NULL, 117 rtp_sender_.reset(new RTPSender(0, false, &fake_clock_, &transport_,
118 &mock_paced_sender_, NULL, NULL, NULL)); 118 nullptr, &mock_paced_sender_, nullptr,
119 nullptr, nullptr, nullptr, nullptr));
119 rtp_sender_->SetSequenceNumber(kSeqNum); 120 rtp_sender_->SetSequenceNumber(kSeqNum);
120 } 121 }
121 122
122 SimulatedClock fake_clock_; 123 SimulatedClock fake_clock_;
123 MockPacedSender mock_paced_sender_; 124 MockPacedSender mock_paced_sender_;
124 rtc::scoped_ptr<RTPSender> rtp_sender_; 125 rtc::scoped_ptr<RTPSender> rtp_sender_;
125 int payload_; 126 int payload_;
126 LoopbackTransportTest transport_; 127 LoopbackTransportTest transport_;
127 const bool kMarkerBit; 128 const bool kMarkerBit;
128 uint8_t packet_[kMaxPacketLength]; 129 uint8_t packet_[kMaxPacketLength];
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 302
302 TEST_F(RtpSenderTest, BuildRTPPacket) { 303 TEST_F(RtpSenderTest, BuildRTPPacket) {
303 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( 304 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader(
304 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 305 packet_, kPayload, kMarkerBit, kTimestamp, 0));
305 ASSERT_EQ(kRtpHeaderSize, length); 306 ASSERT_EQ(kRtpHeaderSize, length);
306 307
307 // Verify 308 // Verify
308 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 309 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
309 webrtc::RTPHeader rtp_header; 310 webrtc::RTPHeader rtp_header;
310 311
311 const bool valid_rtp_header = rtp_parser.Parse(rtp_header, NULL); 312 const bool valid_rtp_header = rtp_parser.Parse(rtp_header, nullptr);
312 313
313 ASSERT_TRUE(valid_rtp_header); 314 ASSERT_TRUE(valid_rtp_header);
314 ASSERT_FALSE(rtp_parser.RTCP()); 315 ASSERT_FALSE(rtp_parser.RTCP());
315 VerifyRTPHeaderCommon(rtp_header); 316 VerifyRTPHeaderCommon(rtp_header);
316 EXPECT_EQ(length, rtp_header.headerLength); 317 EXPECT_EQ(length, rtp_header.headerLength);
317 EXPECT_FALSE(rtp_header.extension.hasTransmissionTimeOffset); 318 EXPECT_FALSE(rtp_header.extension.hasTransmissionTimeOffset);
318 EXPECT_FALSE(rtp_header.extension.hasAbsoluteSendTime); 319 EXPECT_FALSE(rtp_header.extension.hasAbsoluteSendTime);
319 EXPECT_FALSE(rtp_header.extension.hasAudioLevel); 320 EXPECT_FALSE(rtp_header.extension.hasAudioLevel);
320 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 321 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
321 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime); 322 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime);
(...skipping 22 matching lines...) Expand all
344 345
345 ASSERT_TRUE(valid_rtp_header); 346 ASSERT_TRUE(valid_rtp_header);
346 ASSERT_FALSE(rtp_parser.RTCP()); 347 ASSERT_FALSE(rtp_parser.RTCP());
347 VerifyRTPHeaderCommon(rtp_header); 348 VerifyRTPHeaderCommon(rtp_header);
348 EXPECT_EQ(length, rtp_header.headerLength); 349 EXPECT_EQ(length, rtp_header.headerLength);
349 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); 350 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
350 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset); 351 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
351 352
352 // Parse without map extension 353 // Parse without map extension
353 webrtc::RTPHeader rtp_header2; 354 webrtc::RTPHeader rtp_header2;
354 const bool valid_rtp_header2 = rtp_parser.Parse(rtp_header2, NULL); 355 const bool valid_rtp_header2 = rtp_parser.Parse(rtp_header2, nullptr);
355 356
356 ASSERT_TRUE(valid_rtp_header2); 357 ASSERT_TRUE(valid_rtp_header2);
357 VerifyRTPHeaderCommon(rtp_header2); 358 VerifyRTPHeaderCommon(rtp_header2);
358 EXPECT_EQ(length, rtp_header2.headerLength); 359 EXPECT_EQ(length, rtp_header2.headerLength);
359 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset); 360 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
360 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); 361 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
361 } 362 }
362 363
363 TEST_F(RtpSenderTest, BuildRTPPacketWithNegativeTransmissionOffsetExtension) { 364 TEST_F(RtpSenderTest, BuildRTPPacketWithNegativeTransmissionOffsetExtension) {
364 const int kNegTimeOffset = -500; 365 const int kNegTimeOffset = -500;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 409
409 ASSERT_TRUE(valid_rtp_header); 410 ASSERT_TRUE(valid_rtp_header);
410 ASSERT_FALSE(rtp_parser.RTCP()); 411 ASSERT_FALSE(rtp_parser.RTCP());
411 VerifyRTPHeaderCommon(rtp_header); 412 VerifyRTPHeaderCommon(rtp_header);
412 EXPECT_EQ(length, rtp_header.headerLength); 413 EXPECT_EQ(length, rtp_header.headerLength);
413 EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime); 414 EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
414 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime); 415 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
415 416
416 // Parse without map extension 417 // Parse without map extension
417 webrtc::RTPHeader rtp_header2; 418 webrtc::RTPHeader rtp_header2;
418 const bool valid_rtp_header2 = rtp_parser.Parse(rtp_header2, NULL); 419 const bool valid_rtp_header2 = rtp_parser.Parse(rtp_header2, nullptr);
419 420
420 ASSERT_TRUE(valid_rtp_header2); 421 ASSERT_TRUE(valid_rtp_header2);
421 VerifyRTPHeaderCommon(rtp_header2); 422 VerifyRTPHeaderCommon(rtp_header2);
422 EXPECT_EQ(length, rtp_header2.headerLength); 423 EXPECT_EQ(length, rtp_header2.headerLength);
423 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime); 424 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
424 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); 425 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
425 } 426 }
426 427
427 // Test CVO header extension is only set when marker bit is true. 428 // Test CVO header extension is only set when marker bit is true.
428 TEST_F(RtpSenderTest, BuildRTPPacketWithVideoRotation_MarkerBit) { 429 TEST_F(RtpSenderTest, BuildRTPPacketWithVideoRotation_MarkerBit) {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 ASSERT_FALSE(rtp_parser.RTCP()); 503 ASSERT_FALSE(rtp_parser.RTCP());
503 VerifyRTPHeaderCommon(rtp_header); 504 VerifyRTPHeaderCommon(rtp_header);
504 EXPECT_EQ(length, rtp_header.headerLength); 505 EXPECT_EQ(length, rtp_header.headerLength);
505 EXPECT_TRUE(rtp_header.extension.hasAudioLevel); 506 EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
506 // Expect kAudioLevel + 0x80 because we set "voiced" to true in the call to 507 // Expect kAudioLevel + 0x80 because we set "voiced" to true in the call to
507 // UpdateAudioLevel(), above. 508 // UpdateAudioLevel(), above.
508 EXPECT_EQ(kAudioLevel + 0x80u, rtp_header.extension.audioLevel); 509 EXPECT_EQ(kAudioLevel + 0x80u, rtp_header.extension.audioLevel);
509 510
510 // Parse without map extension 511 // Parse without map extension
511 webrtc::RTPHeader rtp_header2; 512 webrtc::RTPHeader rtp_header2;
512 const bool valid_rtp_header2 = rtp_parser.Parse(rtp_header2, NULL); 513 const bool valid_rtp_header2 = rtp_parser.Parse(rtp_header2, nullptr);
513 514
514 ASSERT_TRUE(valid_rtp_header2); 515 ASSERT_TRUE(valid_rtp_header2);
515 VerifyRTPHeaderCommon(rtp_header2); 516 VerifyRTPHeaderCommon(rtp_header2);
516 EXPECT_EQ(length, rtp_header2.headerLength); 517 EXPECT_EQ(length, rtp_header2.headerLength);
517 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel); 518 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
518 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); 519 EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
519 } 520 }
520 521
521 TEST_F(RtpSenderTest, BuildRTPPacketWithHeaderExtensions) { 522 TEST_F(RtpSenderTest, BuildRTPPacketWithHeaderExtensions) {
522 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); 523 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 EXPECT_TRUE(rtp_header.extension.hasAudioLevel); 565 EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
565 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); 566 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber);
566 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset); 567 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
567 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime); 568 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
568 EXPECT_EQ(kAudioLevel + 0x80u, rtp_header.extension.audioLevel); 569 EXPECT_EQ(kAudioLevel + 0x80u, rtp_header.extension.audioLevel);
569 EXPECT_EQ(kTransportSequenceNumber, 570 EXPECT_EQ(kTransportSequenceNumber,
570 rtp_header.extension.transportSequenceNumber); 571 rtp_header.extension.transportSequenceNumber);
571 572
572 // Parse without map extension 573 // Parse without map extension
573 webrtc::RTPHeader rtp_header2; 574 webrtc::RTPHeader rtp_header2;
574 const bool valid_rtp_header2 = rtp_parser.Parse(rtp_header2, NULL); 575 const bool valid_rtp_header2 = rtp_parser.Parse(rtp_header2, nullptr);
575 576
576 ASSERT_TRUE(valid_rtp_header2); 577 ASSERT_TRUE(valid_rtp_header2);
577 VerifyRTPHeaderCommon(rtp_header2); 578 VerifyRTPHeaderCommon(rtp_header2);
578 EXPECT_EQ(length, rtp_header2.headerLength); 579 EXPECT_EQ(length, rtp_header2.headerLength);
579 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset); 580 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
580 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime); 581 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
581 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel); 582 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
582 EXPECT_FALSE(rtp_header2.extension.hasTransportSequenceNumber); 583 EXPECT_FALSE(rtp_header2.extension.hasTransportSequenceNumber);
583 584
584 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); 585 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 718 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId));
718 rtp_header_len += 4; // 4 bytes extension. 719 rtp_header_len += 4; // 4 bytes extension.
719 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 720 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
720 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 721 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId));
721 rtp_header_len += 4; // 4 bytes extension. 722 rtp_header_len += 4; // 4 bytes extension.
722 rtp_header_len += 4; // 4 extra bytes common to all extension headers. 723 rtp_header_len += 4; // 4 extra bytes common to all extension headers.
723 724
724 // Create and set up parser. 725 // Create and set up parser.
725 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( 726 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser(
726 webrtc::RtpHeaderParser::Create()); 727 webrtc::RtpHeaderParser::Create());
727 ASSERT_TRUE(rtp_parser.get() != NULL); 728 ASSERT_TRUE(rtp_parser.get() != nullptr);
728 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, 729 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
729 kTransmissionTimeOffsetExtensionId); 730 kTransmissionTimeOffsetExtensionId);
730 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 731 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
731 kAbsoluteSendTimeExtensionId); 732 kAbsoluteSendTimeExtensionId);
732 webrtc::RTPHeader rtp_header; 733 webrtc::RTPHeader rtp_header;
733 734
734 rtp_sender_->SetTargetBitrate(300000); 735 rtp_sender_->SetTargetBitrate(300000);
735 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 736 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
736 int rtp_length_int = rtp_sender_->BuildRTPheader( 737 int rtp_length_int = rtp_sender_->BuildRTPheader(
737 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); 738 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 EXPECT_EQ(timestamp, rtp_header.timestamp); 816 EXPECT_EQ(timestamp, rtp_header.timestamp);
816 // Verify transmission time offset. This packet is sent without delay. 817 // Verify transmission time offset. This packet is sent without delay.
817 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 818 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
818 uint64_t expected_send_time = 819 uint64_t expected_send_time =
819 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 820 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
820 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 821 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
821 } 822 }
822 823
823 TEST_F(RtpSenderTest, SendRedundantPayloads) { 824 TEST_F(RtpSenderTest, SendRedundantPayloads) {
824 MockTransport transport; 825 MockTransport transport;
825 rtp_sender_.reset(new RTPSender(0, false, &fake_clock_, &transport, NULL, 826 rtp_sender_.reset(new RTPSender(0, false, &fake_clock_, &transport, nullptr,
826 &mock_paced_sender_, NULL, NULL, NULL)); 827 &mock_paced_sender_, nullptr, nullptr,
828 nullptr, nullptr, nullptr));
827 rtp_sender_->SetSequenceNumber(kSeqNum); 829 rtp_sender_->SetSequenceNumber(kSeqNum);
828 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); 830 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
829 // Make all packets go through the pacer. 831 // Make all packets go through the pacer.
830 EXPECT_CALL(mock_paced_sender_, 832 EXPECT_CALL(mock_paced_sender_,
831 SendPacket(PacedSender::kNormalPriority, _, _, _, _, _)). 833 SendPacket(PacedSender::kNormalPriority, _, _, _, _, _)).
832 WillRepeatedly(testing::Return(false)); 834 WillRepeatedly(testing::Return(false));
833 835
834 uint16_t seq_num = kSeqNum; 836 uint16_t seq_num = kSeqNum;
835 rtp_sender_->SetStorePacketsStatus(true, 10); 837 rtp_sender_->SetStorePacketsStatus(true, 10);
836 int32_t rtp_header_len = kRtpHeaderSize; 838 int32_t rtp_header_len = kRtpHeaderSize;
837 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 839 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
838 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 840 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId));
839 rtp_header_len += 4; // 4 bytes extension. 841 rtp_header_len += 4; // 4 bytes extension.
840 rtp_header_len += 4; // 4 extra bytes common to all extension headers. 842 rtp_header_len += 4; // 4 extra bytes common to all extension headers.
841 843
842 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 844 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
843 rtp_sender_->SetRtxSsrc(1234); 845 rtp_sender_->SetRtxSsrc(1234);
844 846
845 // Create and set up parser. 847 // Create and set up parser.
846 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( 848 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser(
847 webrtc::RtpHeaderParser::Create()); 849 webrtc::RtpHeaderParser::Create());
848 ASSERT_TRUE(rtp_parser.get() != NULL); 850 ASSERT_TRUE(rtp_parser.get() != nullptr);
849 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, 851 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
850 kTransmissionTimeOffsetExtensionId); 852 kTransmissionTimeOffsetExtensionId);
851 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 853 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
852 kAbsoluteSendTimeExtensionId); 854 kAbsoluteSendTimeExtensionId);
853 rtp_sender_->SetTargetBitrate(300000); 855 rtp_sender_->SetTargetBitrate(300000);
854 const size_t kNumPayloadSizes = 10; 856 const size_t kNumPayloadSizes = 10;
855 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, 750, 857 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, 750,
856 800, 850, 900, 950}; 858 800, 850, 900, 950};
857 // Send 10 packets of increasing size. 859 // Send 10 packets of increasing size.
858 for (size_t i = 0; i < kNumPayloadSizes; ++i) { 860 for (size_t i = 0; i < kNumPayloadSizes; ++i) {
(...skipping 25 matching lines...) Expand all
884 } 886 }
885 887
886 TEST_F(RtpSenderTest, SendGenericVideo) { 888 TEST_F(RtpSenderTest, SendGenericVideo) {
887 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 889 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
888 const uint8_t payload_type = 127; 890 const uint8_t payload_type = 127;
889 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 891 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
890 0, 1500)); 892 0, 1500));
891 uint8_t payload[] = {47, 11, 32, 93, 89}; 893 uint8_t payload[] = {47, 11, 32, 93, 89};
892 894
893 // Send keyframe 895 // Send keyframe
894 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 896 ASSERT_EQ(
895 4321, payload, sizeof(payload), 897 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321,
896 NULL)); 898 payload, sizeof(payload), nullptr));
897 899
898 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 900 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
899 transport_.last_sent_packet_len_); 901 transport_.last_sent_packet_len_);
900 webrtc::RTPHeader rtp_header; 902 webrtc::RTPHeader rtp_header;
901 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); 903 ASSERT_TRUE(rtp_parser.Parse(rtp_header));
902 904
903 const uint8_t* payload_data = GetPayloadData(rtp_header, 905 const uint8_t* payload_data = GetPayloadData(rtp_header,
904 transport_.last_sent_packet_); 906 transport_.last_sent_packet_);
905 uint8_t generic_header = *payload_data++; 907 uint8_t generic_header = *payload_data++;
906 908
907 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), 909 ASSERT_EQ(sizeof(payload) + sizeof(generic_header),
908 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 910 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
909 911
910 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 912 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
911 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 913 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
912 914
913 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 915 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
914 916
915 // Send delta frame 917 // Send delta frame
916 payload[0] = 13; 918 payload[0] = 13;
917 payload[1] = 42; 919 payload[1] = 42;
918 payload[4] = 13; 920 payload[4] = 13;
919 921
920 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, 922 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type,
921 1234, 4321, payload, 923 1234, 4321, payload,
922 sizeof(payload), NULL)); 924 sizeof(payload), nullptr));
923 925
924 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, 926 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_,
925 transport_.last_sent_packet_len_); 927 transport_.last_sent_packet_len_);
926 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); 928 ASSERT_TRUE(rtp_parser.Parse(rtp_header));
927 929
928 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); 930 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_);
929 generic_header = *payload_data++; 931 generic_header = *payload_data++;
930 932
931 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 933 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
932 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 934 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
(...skipping 15 matching lines...) Expand all
948 ++num_calls_; 950 ++num_calls_;
949 ssrc_ = ssrc; 951 ssrc_ = ssrc;
950 frame_counts_ = frame_counts; 952 frame_counts_ = frame_counts;
951 } 953 }
952 954
953 uint32_t num_calls_; 955 uint32_t num_calls_;
954 uint32_t ssrc_; 956 uint32_t ssrc_;
955 FrameCounts frame_counts_; 957 FrameCounts frame_counts_;
956 } callback; 958 } callback;
957 959
958 rtp_sender_.reset(new RTPSender(0, false, &fake_clock_, &transport_, NULL, 960 rtp_sender_.reset(new RTPSender(0, false, &fake_clock_, &transport_, nullptr,
959 &mock_paced_sender_, NULL, &callback, NULL)); 961 &mock_paced_sender_, nullptr, nullptr,
962 nullptr, &callback, nullptr));
960 963
961 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 964 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
962 const uint8_t payload_type = 127; 965 const uint8_t payload_type = 127;
963 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 966 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
964 0, 1500)); 967 0, 1500));
965 uint8_t payload[] = {47, 11, 32, 93, 89}; 968 uint8_t payload[] = {47, 11, 32, 93, 89};
966 rtp_sender_->SetStorePacketsStatus(true, 1); 969 rtp_sender_->SetStorePacketsStatus(true, 1);
967 uint32_t ssrc = rtp_sender_->SSRC(); 970 uint32_t ssrc = rtp_sender_->SSRC();
968 971
969 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 972 ASSERT_EQ(
970 4321, payload, sizeof(payload), 973 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321,
971 NULL)); 974 payload, sizeof(payload), nullptr));
972 975
973 EXPECT_EQ(1U, callback.num_calls_); 976 EXPECT_EQ(1U, callback.num_calls_);
974 EXPECT_EQ(ssrc, callback.ssrc_); 977 EXPECT_EQ(ssrc, callback.ssrc_);
975 EXPECT_EQ(1, callback.frame_counts_.key_frames); 978 EXPECT_EQ(1, callback.frame_counts_.key_frames);
976 EXPECT_EQ(0, callback.frame_counts_.delta_frames); 979 EXPECT_EQ(0, callback.frame_counts_.delta_frames);
977 980
978 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, 981 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type,
979 payload_type, 1234, 4321, payload, 982 1234, 4321, payload,
980 sizeof(payload), NULL)); 983 sizeof(payload), nullptr));
981 984
982 EXPECT_EQ(2U, callback.num_calls_); 985 EXPECT_EQ(2U, callback.num_calls_);
983 EXPECT_EQ(ssrc, callback.ssrc_); 986 EXPECT_EQ(ssrc, callback.ssrc_);
984 EXPECT_EQ(1, callback.frame_counts_.key_frames); 987 EXPECT_EQ(1, callback.frame_counts_.key_frames);
985 EXPECT_EQ(1, callback.frame_counts_.delta_frames); 988 EXPECT_EQ(1, callback.frame_counts_.delta_frames);
986 989
987 rtp_sender_.reset(); 990 rtp_sender_.reset();
988 } 991 }
989 992
990 TEST_F(RtpSenderTest, BitrateCallbacks) { 993 TEST_F(RtpSenderTest, BitrateCallbacks) {
991 class TestCallback : public BitrateStatisticsObserver { 994 class TestCallback : public BitrateStatisticsObserver {
992 public: 995 public:
993 TestCallback() : BitrateStatisticsObserver(), num_calls_(0), ssrc_(0) {} 996 TestCallback() : BitrateStatisticsObserver(), num_calls_(0), ssrc_(0) {}
994 virtual ~TestCallback() {} 997 virtual ~TestCallback() {}
995 998
996 void Notify(const BitrateStatistics& total_stats, 999 void Notify(const BitrateStatistics& total_stats,
997 const BitrateStatistics& retransmit_stats, 1000 const BitrateStatistics& retransmit_stats,
998 uint32_t ssrc) override { 1001 uint32_t ssrc) override {
999 ++num_calls_; 1002 ++num_calls_;
1000 ssrc_ = ssrc; 1003 ssrc_ = ssrc;
1001 total_stats_ = total_stats; 1004 total_stats_ = total_stats;
1002 retransmit_stats_ = retransmit_stats; 1005 retransmit_stats_ = retransmit_stats;
1003 } 1006 }
1004 1007
1005 uint32_t num_calls_; 1008 uint32_t num_calls_;
1006 uint32_t ssrc_; 1009 uint32_t ssrc_;
1007 BitrateStatistics total_stats_; 1010 BitrateStatistics total_stats_;
1008 BitrateStatistics retransmit_stats_; 1011 BitrateStatistics retransmit_stats_;
1009 } callback; 1012 } callback;
1010 rtp_sender_.reset(new RTPSender(0, false, &fake_clock_, &transport_, NULL, 1013 rtp_sender_.reset(new RTPSender(0, false, &fake_clock_, &transport_, nullptr,
1011 &mock_paced_sender_, &callback, NULL, NULL)); 1014 &mock_paced_sender_, nullptr, nullptr,
1015 &callback, nullptr, nullptr));
1012 1016
1013 // Simulate kNumPackets sent with kPacketInterval ms intervals. 1017 // Simulate kNumPackets sent with kPacketInterval ms intervals.
1014 const uint32_t kNumPackets = 15; 1018 const uint32_t kNumPackets = 15;
1015 const uint32_t kPacketInterval = 20; 1019 const uint32_t kPacketInterval = 20;
1016 // Overhead = 12 bytes RTP header + 1 byte generic header. 1020 // Overhead = 12 bytes RTP header + 1 byte generic header.
1017 const uint32_t kPacketOverhead = 13; 1021 const uint32_t kPacketOverhead = 13;
1018 1022
1019 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 1023 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
1020 const uint8_t payload_type = 127; 1024 const uint8_t payload_type = 127;
1021 ASSERT_EQ( 1025 ASSERT_EQ(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 1062
1059 rtp_sender_.reset(); 1063 rtp_sender_.reset();
1060 } 1064 }
1061 1065
1062 class RtpSenderAudioTest : public RtpSenderTest { 1066 class RtpSenderAudioTest : public RtpSenderTest {
1063 protected: 1067 protected:
1064 RtpSenderAudioTest() {} 1068 RtpSenderAudioTest() {}
1065 1069
1066 void SetUp() override { 1070 void SetUp() override {
1067 payload_ = kAudioPayload; 1071 payload_ = kAudioPayload;
1068 rtp_sender_.reset(new RTPSender(0, true, &fake_clock_, &transport_, NULL, 1072 rtp_sender_.reset(new RTPSender(0, true, &fake_clock_, &transport_, nullptr,
1069 &mock_paced_sender_, NULL, NULL, NULL)); 1073 &mock_paced_sender_, nullptr, nullptr,
1074 nullptr, nullptr, nullptr));
1070 rtp_sender_->SetSequenceNumber(kSeqNum); 1075 rtp_sender_->SetSequenceNumber(kSeqNum);
1071 } 1076 }
1072 }; 1077 };
1073 1078
1074 TEST_F(RtpSenderTest, StreamDataCountersCallbacks) { 1079 TEST_F(RtpSenderTest, StreamDataCountersCallbacks) {
1075 class TestCallback : public StreamDataCountersCallback { 1080 class TestCallback : public StreamDataCountersCallback {
1076 public: 1081 public:
1077 TestCallback() 1082 TestCallback()
1078 : StreamDataCountersCallback(), ssrc_(0), counters_() {} 1083 : StreamDataCountersCallback(), ssrc_(0), counters_() {}
1079 virtual ~TestCallback() {} 1084 virtual ~TestCallback() {}
(...skipping 30 matching lines...) Expand all
1110 const uint8_t payload_type = 127; 1115 const uint8_t payload_type = 127;
1111 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1116 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1112 0, 1500)); 1117 0, 1500));
1113 uint8_t payload[] = {47, 11, 32, 93, 89}; 1118 uint8_t payload[] = {47, 11, 32, 93, 89};
1114 rtp_sender_->SetStorePacketsStatus(true, 1); 1119 rtp_sender_->SetStorePacketsStatus(true, 1);
1115 uint32_t ssrc = rtp_sender_->SSRC(); 1120 uint32_t ssrc = rtp_sender_->SSRC();
1116 1121
1117 rtp_sender_->RegisterRtpStatisticsCallback(&callback); 1122 rtp_sender_->RegisterRtpStatisticsCallback(&callback);
1118 1123
1119 // Send a frame. 1124 // Send a frame.
1120 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 1125 ASSERT_EQ(
1121 4321, payload, sizeof(payload), 1126 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321,
1122 NULL)); 1127 payload, sizeof(payload), nullptr));
1123 StreamDataCounters expected; 1128 StreamDataCounters expected;
1124 expected.transmitted.payload_bytes = 6; 1129 expected.transmitted.payload_bytes = 6;
1125 expected.transmitted.header_bytes = 12; 1130 expected.transmitted.header_bytes = 12;
1126 expected.transmitted.padding_bytes = 0; 1131 expected.transmitted.padding_bytes = 0;
1127 expected.transmitted.packets = 1; 1132 expected.transmitted.packets = 1;
1128 expected.retransmitted.payload_bytes = 0; 1133 expected.retransmitted.payload_bytes = 0;
1129 expected.retransmitted.header_bytes = 0; 1134 expected.retransmitted.header_bytes = 0;
1130 expected.retransmitted.padding_bytes = 0; 1135 expected.retransmitted.padding_bytes = 0;
1131 expected.retransmitted.packets = 0; 1136 expected.retransmitted.packets = 0;
1132 expected.fec.packets = 0; 1137 expected.fec.packets = 0;
(...skipping 22 matching lines...) Expand all
1155 // Send FEC. 1160 // Send FEC.
1156 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); 1161 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType);
1157 FecProtectionParams fec_params; 1162 FecProtectionParams fec_params;
1158 fec_params.fec_mask_type = kFecMaskRandom; 1163 fec_params.fec_mask_type = kFecMaskRandom;
1159 fec_params.fec_rate = 1; 1164 fec_params.fec_rate = 1;
1160 fec_params.max_fec_frames = 1; 1165 fec_params.max_fec_frames = 1;
1161 fec_params.use_uep_protection = false; 1166 fec_params.use_uep_protection = false;
1162 rtp_sender_->SetFecParameters(&fec_params, &fec_params); 1167 rtp_sender_->SetFecParameters(&fec_params, &fec_params);
1163 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, 1168 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type,
1164 1234, 4321, payload, 1169 1234, 4321, payload,
1165 sizeof(payload), NULL)); 1170 sizeof(payload), nullptr));
1166 expected.transmitted.payload_bytes = 40; 1171 expected.transmitted.payload_bytes = 40;
1167 expected.transmitted.header_bytes = 60; 1172 expected.transmitted.header_bytes = 60;
1168 expected.transmitted.packets = 5; 1173 expected.transmitted.packets = 5;
1169 expected.fec.packets = 1; 1174 expected.fec.packets = 1;
1170 callback.Matches(ssrc, expected); 1175 callback.Matches(ssrc, expected);
1171 1176
1172 rtp_sender_->RegisterRtpStatisticsCallback(NULL); 1177 rtp_sender_->RegisterRtpStatisticsCallback(nullptr);
1173 } 1178 }
1174 1179
1175 TEST_F(RtpSenderAudioTest, SendAudio) { 1180 TEST_F(RtpSenderAudioTest, SendAudio) {
1176 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1181 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1177 const uint8_t payload_type = 127; 1182 const uint8_t payload_type = 127;
1178 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1183 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1179 0, 1500)); 1184 0, 1500));
1180 uint8_t payload[] = {47, 11, 32, 93, 89}; 1185 uint8_t payload[] = {47, 11, 32, 93, 89};
1181 1186
1182 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 1187 ASSERT_EQ(
1183 4321, payload, sizeof(payload), 1188 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321,
1184 NULL)); 1189 payload, sizeof(payload), nullptr));
1185 1190
1186 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1191 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
1187 transport_.last_sent_packet_len_); 1192 transport_.last_sent_packet_len_);
1188 webrtc::RTPHeader rtp_header; 1193 webrtc::RTPHeader rtp_header;
1189 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); 1194 ASSERT_TRUE(rtp_parser.Parse(rtp_header));
1190 1195
1191 const uint8_t* payload_data = GetPayloadData(rtp_header, 1196 const uint8_t* payload_data = GetPayloadData(rtp_header,
1192 transport_.last_sent_packet_); 1197 transport_.last_sent_packet_);
1193 1198
1194 ASSERT_EQ(sizeof(payload), 1199 ASSERT_EQ(sizeof(payload),
1195 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 1200 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
1196 1201
1197 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 1202 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
1198 } 1203 }
1199 1204
1200 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { 1205 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
1201 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); 1206 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel));
1202 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1207 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1203 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); 1208 kRtpExtensionAudioLevel, kAudioLevelExtensionId));
1204 1209
1205 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1210 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1206 const uint8_t payload_type = 127; 1211 const uint8_t payload_type = 127;
1207 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1212 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1208 0, 1500)); 1213 0, 1500));
1209 uint8_t payload[] = {47, 11, 32, 93, 89}; 1214 uint8_t payload[] = {47, 11, 32, 93, 89};
1210 1215
1211 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 1216 ASSERT_EQ(
1212 4321, payload, sizeof(payload), 1217 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321,
1213 NULL)); 1218 payload, sizeof(payload), nullptr));
1214 1219
1215 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1220 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
1216 transport_.last_sent_packet_len_); 1221 transport_.last_sent_packet_len_);
1217 webrtc::RTPHeader rtp_header; 1222 webrtc::RTPHeader rtp_header;
1218 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); 1223 ASSERT_TRUE(rtp_parser.Parse(rtp_header));
1219 1224
1220 const uint8_t* payload_data = GetPayloadData(rtp_header, 1225 const uint8_t* payload_data = GetPayloadData(rtp_header,
1221 transport_.last_sent_packet_); 1226 transport_.last_sent_packet_);
1222 1227
1223 ASSERT_EQ(sizeof(payload), 1228 ASSERT_EQ(sizeof(payload),
(...skipping 28 matching lines...) Expand all
1252 strcpy(payload_name, "payload_name"); 1257 strcpy(payload_name, "payload_name");
1253 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 8000, 1258 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 8000,
1254 1, 0)); 1259 1, 0));
1255 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 1260 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
1256 // DTMF event key=9, duration=500 and attenuationdB=10 1261 // DTMF event key=9, duration=500 and attenuationdB=10
1257 rtp_sender_->SendTelephoneEvent(9, 500, 10); 1262 rtp_sender_->SendTelephoneEvent(9, 500, 10);
1258 // During start, it takes the starting timestamp as last sent timestamp. 1263 // During start, it takes the starting timestamp as last sent timestamp.
1259 // The duration is calculated as the difference of current and last sent 1264 // The duration is calculated as the difference of current and last sent
1260 // timestamp. So for first call it will skip since the duration is zero. 1265 // timestamp. So for first call it will skip since the duration is zero.
1261 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kFrameEmpty, payload_type, 1266 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kFrameEmpty, payload_type,
1262 capture_time_ms, 1267 capture_time_ms, 0, nullptr, 0,
1263 0, NULL, 0, 1268 nullptr));
1264 NULL));
1265 // DTMF Sample Length is (Frequency/1000) * Duration. 1269 // DTMF Sample Length is (Frequency/1000) * Duration.
1266 // So in this case, it is (8000/1000) * 500 = 4000. 1270 // So in this case, it is (8000/1000) * 500 = 4000.
1267 // Sending it as two packets. 1271 // Sending it as two packets.
1268 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kFrameEmpty, payload_type, 1272 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kFrameEmpty, payload_type,
1269 capture_time_ms+2000, 1273 capture_time_ms + 2000, 0, nullptr,
1270 0, NULL, 0, 1274 0, nullptr));
1271 NULL));
1272 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( 1275 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser(
1273 webrtc::RtpHeaderParser::Create()); 1276 webrtc::RtpHeaderParser::Create());
1274 ASSERT_TRUE(rtp_parser.get() != NULL); 1277 ASSERT_TRUE(rtp_parser.get() != nullptr);
1275 webrtc::RTPHeader rtp_header; 1278 webrtc::RTPHeader rtp_header;
1276 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, 1279 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_,
1277 transport_.last_sent_packet_len_, 1280 transport_.last_sent_packet_len_,
1278 &rtp_header)); 1281 &rtp_header));
1279 // Marker Bit should be set to 1 for first packet. 1282 // Marker Bit should be set to 1 for first packet.
1280 EXPECT_TRUE(rtp_header.markerBit); 1283 EXPECT_TRUE(rtp_header.markerBit);
1281 1284
1282 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kFrameEmpty, payload_type, 1285 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kFrameEmpty, payload_type,
1283 capture_time_ms+4000, 1286 capture_time_ms + 4000, 0, nullptr,
1284 0, NULL, 0, 1287 0, nullptr));
1285 NULL));
1286 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, 1288 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_,
1287 transport_.last_sent_packet_len_, 1289 transport_.last_sent_packet_len_,
1288 &rtp_header)); 1290 &rtp_header));
1289 // Marker Bit should be set to 0 for rest of the packets. 1291 // Marker Bit should be set to 0 for rest of the packets.
1290 EXPECT_FALSE(rtp_header.markerBit); 1292 EXPECT_FALSE(rtp_header.markerBit);
1291 } 1293 }
1292 1294
1293 TEST_F(RtpSenderTest, BytesReportedCorrectly) { 1295 TEST_F(RtpSenderTest, BytesReportedCorrectly) {
1294 const char* kPayloadName = "GENERIC"; 1296 const char* kPayloadName = "GENERIC";
1295 const uint8_t kPayloadType = 127; 1297 const uint8_t kPayloadType = 127;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 1352
1351 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1353 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1352 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1354 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1353 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); 1355 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
1354 1356
1355 EXPECT_EQ( 1357 EXPECT_EQ(
1356 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), 1358 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength),
1357 rtp_sender_->RtpHeaderExtensionTotalLength()); 1359 rtp_sender_->RtpHeaderExtensionTotalLength());
1358 1360
1359 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1361 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1360 kTimestamp, 0, packet_, sizeof(packet_), NULL, 1362 kTimestamp, 0, packet_, sizeof(packet_), nullptr,
1361 &hdr); 1363 &hdr);
1362 1364
1363 RtpHeaderExtensionMap map; 1365 RtpHeaderExtensionMap map;
1364 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); 1366 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
1365 1367
1366 // Verify that this packet does have CVO byte. 1368 // Verify that this packet does have CVO byte.
1367 VerifyCVOPacket( 1369 VerifyCVOPacket(
1368 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), 1370 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()),
1369 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); 1371 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation);
1370 1372
1371 // Verify that this packet does have CVO byte. 1373 // Verify that this packet does have CVO byte.
1372 VerifyCVOPacket( 1374 VerifyCVOPacket(
1373 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), 1375 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()),
1374 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, 1376 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1,
1375 hdr.rotation); 1377 hdr.rotation);
1376 } 1378 }
1377 } // namespace webrtc 1379 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | webrtc/test/frame_generator_capturer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698