| 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, 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, 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 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 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, 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 |