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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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)); |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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)); |
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 Loading... |
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 Loading... |
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 &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, &callback, |
| 1015 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 Loading... |
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)); |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |