| 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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 EXPECT_EQ(payload_, rtp_header.payloadType); | 178 EXPECT_EQ(payload_, rtp_header.payloadType); |
| 179 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); | 179 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); |
| 180 EXPECT_EQ(kTimestamp, rtp_header.timestamp); | 180 EXPECT_EQ(kTimestamp, rtp_header.timestamp); |
| 181 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); | 181 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); |
| 182 EXPECT_EQ(number_of_csrcs, rtp_header.numCSRCs); | 182 EXPECT_EQ(number_of_csrcs, rtp_header.numCSRCs); |
| 183 EXPECT_EQ(0U, rtp_header.paddingLength); | 183 EXPECT_EQ(0U, rtp_header.paddingLength); |
| 184 } | 184 } |
| 185 | 185 |
| 186 void SendPacket(int64_t capture_time_ms, int payload_length) { | 186 void SendPacket(int64_t capture_time_ms, int payload_length) { |
| 187 uint32_t timestamp = capture_time_ms * 90; | 187 uint32_t timestamp = capture_time_ms * 90; |
| 188 int32_t rtp_length = rtp_sender_->BuildRTPheader( | 188 int32_t rtp_length = rtp_sender_->BuildRtpHeader( |
| 189 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 189 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
| 190 ASSERT_GE(rtp_length, 0); | 190 ASSERT_GE(rtp_length, 0); |
| 191 | 191 |
| 192 // Packet should be stored in a send bucket. | 192 // Packet should be stored in a send bucket. |
| 193 EXPECT_EQ(0, rtp_sender_->SendToNetwork( | 193 EXPECT_EQ(0, rtp_sender_->SendToNetwork( |
| 194 packet_, payload_length, rtp_length, capture_time_ms, | 194 packet_, payload_length, rtp_length, capture_time_ms, |
| 195 kAllowRetransmission, RtpPacketSender::kNormalPriority)); | 195 kAllowRetransmission, RtpPacketSender::kNormalPriority)); |
| 196 } | 196 } |
| 197 | 197 |
| 198 void SendGenericPayload() { | 198 void SendGenericPayload() { |
| 199 const uint8_t kPayload[] = {47, 11, 32, 93, 89}; | 199 const uint8_t kPayload[] = {47, 11, 32, 93, 89}; |
| 200 const uint32_t kTimestamp = 1234; | 200 const uint32_t kTimestamp = 1234; |
| 201 const uint8_t kPayloadType = 127; | 201 const uint8_t kPayloadType = 127; |
| 202 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); | 202 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); |
| 203 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 203 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
| 204 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, | 204 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, |
| 205 0, 1500)); | 205 0, 1500)); |
| 206 | 206 |
| 207 EXPECT_EQ(0, rtp_sender_->SendOutgoingData( | 207 EXPECT_EQ(0, rtp_sender_->SendOutgoingData( |
| 208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, | 208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, |
| 209 kPayload, sizeof(kPayload), nullptr)); | 209 kPayload, sizeof(kPayload), nullptr, nullptr)); |
| 210 } | 210 } |
| 211 }; | 211 }; |
| 212 | 212 |
| 213 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our | 213 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our |
| 214 // default code path. | 214 // default code path. |
| 215 class RtpSenderTestWithoutPacer : public RtpSenderTest { | 215 class RtpSenderTestWithoutPacer : public RtpSenderTest { |
| 216 public: | 216 public: |
| 217 void SetUp() override { SetUpRtpSender(false); } | 217 void SetUp() override { SetUpRtpSender(false); } |
| 218 }; | 218 }; |
| 219 | 219 |
| 220 class RtpSenderVideoTest : public RtpSenderTest { | 220 class RtpSenderVideoTest : public RtpSenderTest { |
| 221 protected: | 221 protected: |
| 222 void SetUp() override { | 222 void SetUp() override { |
| 223 // TODO(pbos): Set up to use pacer. | 223 // TODO(pbos): Set up to use pacer. |
| 224 SetUpRtpSender(false); | 224 SetUpRtpSender(false); |
| 225 rtp_sender_video_.reset( | 225 rtp_sender_video_.reset( |
| 226 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); | 226 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); |
| 227 } | 227 } |
| 228 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; | 228 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; |
| 229 | 229 |
| 230 void VerifyCVOPacket(uint8_t* data, | 230 void VerifyCVOPacket(uint8_t* data, |
| 231 size_t len, | 231 size_t len, |
| 232 bool expect_cvo, | 232 bool expect_cvo, |
| 233 RtpHeaderExtensionMap* map, | 233 RtpHeaderExtensionMap* map, |
| 234 uint16_t seq_num, | 234 uint16_t seq_num, |
| 235 VideoRotation rotation) { | 235 VideoRotation rotation) { |
| 236 webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len); | 236 webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len); |
| 237 | 237 |
| 238 webrtc::RTPHeader rtp_header; | 238 webrtc::RTPHeader rtp_header; |
| 239 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 239 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
| 240 packet_, kPayload, expect_cvo /* marker_bit */, kTimestamp, 0)); | 240 packet_, kPayload, expect_cvo /* marker_bit */, kTimestamp, 0)); |
| 241 if (expect_cvo) { | 241 if (expect_cvo) { |
| 242 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), | 242 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), |
| 243 length); | 243 length); |
| 244 } else { | 244 } else { |
| 245 ASSERT_EQ(kRtpHeaderSize, length); | 245 ASSERT_EQ(kRtpHeaderSize, length); |
| 246 } | 246 } |
| 247 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map)); | 247 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map)); |
| 248 ASSERT_FALSE(rtp_parser.RTCP()); | 248 ASSERT_FALSE(rtp_parser.RTCP()); |
| 249 EXPECT_EQ(payload_, rtp_header.payloadType); | 249 EXPECT_EQ(payload_, rtp_header.payloadType); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); | 356 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); |
| 357 EXPECT_EQ( | 357 EXPECT_EQ( |
| 358 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), | 358 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), |
| 359 rtp_sender_->RtpHeaderExtensionLength()); | 359 rtp_sender_->RtpHeaderExtensionLength()); |
| 360 EXPECT_EQ( | 360 EXPECT_EQ( |
| 361 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); | 361 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); |
| 362 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); | 362 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); |
| 363 } | 363 } |
| 364 | 364 |
| 365 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) { | 365 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) { |
| 366 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 366 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
| 367 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 367 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
| 368 ASSERT_EQ(kRtpHeaderSize, length); | 368 ASSERT_EQ(kRtpHeaderSize, length); |
| 369 | 369 |
| 370 // Verify | 370 // Verify |
| 371 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 371 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 372 webrtc::RTPHeader rtp_header; | 372 webrtc::RTPHeader rtp_header; |
| 373 | 373 |
| 374 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr); | 374 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr); |
| 375 | 375 |
| 376 ASSERT_TRUE(valid_rtp_header); | 376 ASSERT_TRUE(valid_rtp_header); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 387 EXPECT_EQ(0u, rtp_header.extension.videoRotation); | 387 EXPECT_EQ(0u, rtp_header.extension.videoRotation); |
| 388 } | 388 } |
| 389 | 389 |
| 390 TEST_F(RtpSenderTestWithoutPacer, | 390 TEST_F(RtpSenderTestWithoutPacer, |
| 391 BuildRTPPacketWithTransmissionOffsetExtension) { | 391 BuildRTPPacketWithTransmissionOffsetExtension) { |
| 392 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); | 392 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); |
| 393 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 393 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 394 kRtpExtensionTransmissionTimeOffset, | 394 kRtpExtensionTransmissionTimeOffset, |
| 395 kTransmissionTimeOffsetExtensionId)); | 395 kTransmissionTimeOffsetExtensionId)); |
| 396 | 396 |
| 397 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 397 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
| 398 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 398 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
| 399 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 399 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
| 400 | 400 |
| 401 // Verify | 401 // Verify |
| 402 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 402 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 403 webrtc::RTPHeader rtp_header; | 403 webrtc::RTPHeader rtp_header; |
| 404 | 404 |
| 405 RtpHeaderExtensionMap map; | 405 RtpHeaderExtensionMap map; |
| 406 map.Register(kRtpExtensionTransmissionTimeOffset, | 406 map.Register(kRtpExtensionTransmissionTimeOffset, |
| 407 kTransmissionTimeOffsetExtensionId); | 407 kTransmissionTimeOffsetExtensionId); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 426 } | 426 } |
| 427 | 427 |
| 428 TEST_F(RtpSenderTestWithoutPacer, | 428 TEST_F(RtpSenderTestWithoutPacer, |
| 429 BuildRTPPacketWithNegativeTransmissionOffsetExtension) { | 429 BuildRTPPacketWithNegativeTransmissionOffsetExtension) { |
| 430 const int kNegTimeOffset = -500; | 430 const int kNegTimeOffset = -500; |
| 431 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset)); | 431 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset)); |
| 432 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 432 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 433 kRtpExtensionTransmissionTimeOffset, | 433 kRtpExtensionTransmissionTimeOffset, |
| 434 kTransmissionTimeOffsetExtensionId)); | 434 kTransmissionTimeOffsetExtensionId)); |
| 435 | 435 |
| 436 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 436 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
| 437 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 437 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
| 438 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 438 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
| 439 | 439 |
| 440 // Verify | 440 // Verify |
| 441 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 441 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 442 webrtc::RTPHeader rtp_header; | 442 webrtc::RTPHeader rtp_header; |
| 443 | 443 |
| 444 RtpHeaderExtensionMap map; | 444 RtpHeaderExtensionMap map; |
| 445 map.Register(kRtpExtensionTransmissionTimeOffset, | 445 map.Register(kRtpExtensionTransmissionTimeOffset, |
| 446 kTransmissionTimeOffsetExtensionId); | 446 kTransmissionTimeOffsetExtensionId); |
| 447 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); | 447 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); |
| 448 | 448 |
| 449 ASSERT_TRUE(valid_rtp_header); | 449 ASSERT_TRUE(valid_rtp_header); |
| 450 ASSERT_FALSE(rtp_parser.RTCP()); | 450 ASSERT_FALSE(rtp_parser.RTCP()); |
| 451 VerifyRTPHeaderCommon(rtp_header); | 451 VerifyRTPHeaderCommon(rtp_header); |
| 452 EXPECT_EQ(length, rtp_header.headerLength); | 452 EXPECT_EQ(length, rtp_header.headerLength); |
| 453 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); | 453 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); |
| 454 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset); | 454 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset); |
| 455 } | 455 } |
| 456 | 456 |
| 457 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) { | 457 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) { |
| 458 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); | 458 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); |
| 459 EXPECT_EQ( | 459 EXPECT_EQ( |
| 460 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 460 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 461 kAbsoluteSendTimeExtensionId)); | 461 kAbsoluteSendTimeExtensionId)); |
| 462 | 462 |
| 463 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 463 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
| 464 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 464 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
| 465 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 465 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
| 466 | 466 |
| 467 // Verify | 467 // Verify |
| 468 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 468 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 469 webrtc::RTPHeader rtp_header; | 469 webrtc::RTPHeader rtp_header; |
| 470 | 470 |
| 471 RtpHeaderExtensionMap map; | 471 RtpHeaderExtensionMap map; |
| 472 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); | 472 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); |
| 473 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); | 473 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) { | 538 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) { |
| 539 rtp_sender_->SetVideoRotation(kRotation); | 539 rtp_sender_->SetVideoRotation(kRotation); |
| 540 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 540 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 541 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 541 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
| 542 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); | 542 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); |
| 543 | 543 |
| 544 RtpHeaderExtensionMap map; | 544 RtpHeaderExtensionMap map; |
| 545 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); | 545 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); |
| 546 | 546 |
| 547 size_t length = static_cast<size_t>( | 547 size_t length = static_cast<size_t>( |
| 548 rtp_sender_->BuildRTPheader(packet_, kPayload, true, kTimestamp, 0)); | 548 rtp_sender_->BuildRtpHeader(packet_, kPayload, true, kTimestamp, 0)); |
| 549 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 549 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
| 550 | 550 |
| 551 // Verify | 551 // Verify |
| 552 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 552 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 553 webrtc::RTPHeader rtp_header; | 553 webrtc::RTPHeader rtp_header; |
| 554 | 554 |
| 555 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); | 555 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); |
| 556 ASSERT_FALSE(rtp_parser.RTCP()); | 556 ASSERT_FALSE(rtp_parser.RTCP()); |
| 557 VerifyRTPHeaderCommon(rtp_header); | 557 VerifyRTPHeaderCommon(rtp_header); |
| 558 EXPECT_EQ(length, rtp_header.headerLength); | 558 EXPECT_EQ(length, rtp_header.headerLength); |
| 559 EXPECT_TRUE(rtp_header.extension.hasVideoRotation); | 559 EXPECT_TRUE(rtp_header.extension.hasVideoRotation); |
| 560 EXPECT_EQ(ConvertVideoRotationToCVOByte(kRotation), | 560 EXPECT_EQ(ConvertVideoRotationToCVOByte(kRotation), |
| 561 rtp_header.extension.videoRotation); | 561 rtp_header.extension.videoRotation); |
| 562 } | 562 } |
| 563 | 563 |
| 564 // Test CVO header extension is not set when marker bit is false. | 564 // Test CVO header extension is not set when marker bit is false. |
| 565 TEST_F(RtpSenderTestWithoutPacer, | 565 TEST_F(RtpSenderTestWithoutPacer, |
| 566 DISABLED_BuildRTPPacketWithVideoRotation_NoMarkerBit) { | 566 DISABLED_BuildRTPPacketWithVideoRotation_NoMarkerBit) { |
| 567 rtp_sender_->SetVideoRotation(kRotation); | 567 rtp_sender_->SetVideoRotation(kRotation); |
| 568 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 568 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 569 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 569 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
| 570 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); | 570 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); |
| 571 | 571 |
| 572 RtpHeaderExtensionMap map; | 572 RtpHeaderExtensionMap map; |
| 573 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); | 573 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); |
| 574 | 574 |
| 575 size_t length = static_cast<size_t>( | 575 size_t length = static_cast<size_t>( |
| 576 rtp_sender_->BuildRTPheader(packet_, kPayload, false, kTimestamp, 0)); | 576 rtp_sender_->BuildRtpHeader(packet_, kPayload, false, kTimestamp, 0)); |
| 577 ASSERT_EQ(kRtpHeaderSize, length); | 577 ASSERT_EQ(kRtpHeaderSize, length); |
| 578 | 578 |
| 579 // Verify | 579 // Verify |
| 580 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 580 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 581 webrtc::RTPHeader rtp_header; | 581 webrtc::RTPHeader rtp_header; |
| 582 | 582 |
| 583 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); | 583 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); |
| 584 ASSERT_FALSE(rtp_parser.RTCP()); | 584 ASSERT_FALSE(rtp_parser.RTCP()); |
| 585 VerifyRTPHeaderCommon(rtp_header, false); | 585 VerifyRTPHeaderCommon(rtp_header, false); |
| 586 EXPECT_EQ(length, rtp_header.headerLength); | 586 EXPECT_EQ(length, rtp_header.headerLength); |
| 587 EXPECT_FALSE(rtp_header.extension.hasVideoRotation); | 587 EXPECT_FALSE(rtp_header.extension.hasVideoRotation); |
| 588 } | 588 } |
| 589 | 589 |
| 590 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) { | 590 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) { |
| 591 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 591 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
| 592 kAudioLevelExtensionId)); | 592 kAudioLevelExtensionId)); |
| 593 | 593 |
| 594 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 594 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
| 595 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 595 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
| 596 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 596 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
| 597 | 597 |
| 598 // Verify | 598 // Verify |
| 599 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 599 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 600 webrtc::RTPHeader rtp_header; | 600 webrtc::RTPHeader rtp_header; |
| 601 | 601 |
| 602 // Updating audio level is done in RTPSenderAudio, so simulate it here. | 602 // Updating audio level is done in RTPSenderAudio, so simulate it here. |
| 603 rtp_parser.Parse(&rtp_header); | 603 rtp_parser.Parse(&rtp_header); |
| 604 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel); | 604 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 627 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); | 627 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); |
| 628 } | 628 } |
| 629 | 629 |
| 630 TEST_F(RtpSenderTestWithoutPacer, | 630 TEST_F(RtpSenderTestWithoutPacer, |
| 631 BuildRTPPacketWithCSRCAndAudioLevelExtension) { | 631 BuildRTPPacketWithCSRCAndAudioLevelExtension) { |
| 632 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 632 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
| 633 kAudioLevelExtensionId)); | 633 kAudioLevelExtensionId)); |
| 634 std::vector<uint32_t> csrcs; | 634 std::vector<uint32_t> csrcs; |
| 635 csrcs.push_back(0x23456789); | 635 csrcs.push_back(0x23456789); |
| 636 rtp_sender_->SetCsrcs(csrcs); | 636 rtp_sender_->SetCsrcs(csrcs); |
| 637 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 637 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
| 638 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 638 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
| 639 | 639 |
| 640 // Verify | 640 // Verify |
| 641 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 641 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 642 webrtc::RTPHeader rtp_header; | 642 webrtc::RTPHeader rtp_header; |
| 643 | 643 |
| 644 // Updating audio level is done in RTPSenderAudio, so simulate it here. | 644 // Updating audio level is done in RTPSenderAudio, so simulate it here. |
| 645 rtp_parser.Parse(&rtp_header); | 645 rtp_parser.Parse(&rtp_header); |
| 646 EXPECT_TRUE(rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, | 646 EXPECT_TRUE(rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, |
| 647 kAudioLevel)); | 647 kAudioLevel)); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 671 kTransmissionTimeOffsetExtensionId)); | 671 kTransmissionTimeOffsetExtensionId)); |
| 672 EXPECT_EQ( | 672 EXPECT_EQ( |
| 673 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 673 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 674 kAbsoluteSendTimeExtensionId)); | 674 kAbsoluteSendTimeExtensionId)); |
| 675 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 675 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
| 676 kAudioLevelExtensionId)); | 676 kAudioLevelExtensionId)); |
| 677 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 677 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 678 kRtpExtensionTransportSequenceNumber, | 678 kRtpExtensionTransportSequenceNumber, |
| 679 kTransportSequenceNumberExtensionId)); | 679 kTransportSequenceNumberExtensionId)); |
| 680 | 680 |
| 681 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 681 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
| 682 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 682 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
| 683 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 683 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
| 684 | 684 |
| 685 // Verify | 685 // Verify |
| 686 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 686 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
| 687 webrtc::RTPHeader rtp_header; | 687 webrtc::RTPHeader rtp_header; |
| 688 | 688 |
| 689 // Updating audio level is done in RTPSenderAudio, so simulate it here. | 689 // Updating audio level is done in RTPSenderAudio, so simulate it here. |
| 690 rtp_parser.Parse(&rtp_header); | 690 rtp_parser.Parse(&rtp_header); |
| 691 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel); | 691 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 740 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
| 741 | 741 |
| 742 rtp_sender_->SetStorePacketsStatus(true, 10); | 742 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 743 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 743 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 744 kRtpExtensionTransmissionTimeOffset, | 744 kRtpExtensionTransmissionTimeOffset, |
| 745 kTransmissionTimeOffsetExtensionId)); | 745 kTransmissionTimeOffsetExtensionId)); |
| 746 EXPECT_EQ( | 746 EXPECT_EQ( |
| 747 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 747 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 748 kAbsoluteSendTimeExtensionId)); | 748 kAbsoluteSendTimeExtensionId)); |
| 749 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 749 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
| 750 int rtp_length_int = rtp_sender_->BuildRTPheader( | 750 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
| 751 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 751 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
| 752 ASSERT_NE(-1, rtp_length_int); | 752 ASSERT_NE(-1, rtp_length_int); |
| 753 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 753 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
| 754 | 754 |
| 755 // Packet should be stored in a send bucket. | 755 // Packet should be stored in a send bucket. |
| 756 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 756 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
| 757 capture_time_ms, kAllowRetransmission, | 757 capture_time_ms, kAllowRetransmission, |
| 758 RtpPacketSender::kNormalPriority)); | 758 RtpPacketSender::kNormalPriority)); |
| 759 | 759 |
| 760 EXPECT_EQ(0, transport_.packets_sent_); | 760 EXPECT_EQ(0, transport_.packets_sent_); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 793 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 793 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
| 794 | 794 |
| 795 rtp_sender_->SetStorePacketsStatus(true, 10); | 795 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 796 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 796 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 797 kRtpExtensionTransmissionTimeOffset, | 797 kRtpExtensionTransmissionTimeOffset, |
| 798 kTransmissionTimeOffsetExtensionId)); | 798 kTransmissionTimeOffsetExtensionId)); |
| 799 EXPECT_EQ( | 799 EXPECT_EQ( |
| 800 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 800 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 801 kAbsoluteSendTimeExtensionId)); | 801 kAbsoluteSendTimeExtensionId)); |
| 802 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 802 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
| 803 int rtp_length_int = rtp_sender_->BuildRTPheader( | 803 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
| 804 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 804 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
| 805 ASSERT_NE(-1, rtp_length_int); | 805 ASSERT_NE(-1, rtp_length_int); |
| 806 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 806 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
| 807 | 807 |
| 808 // Packet should be stored in a send bucket. | 808 // Packet should be stored in a send bucket. |
| 809 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 809 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
| 810 capture_time_ms, kAllowRetransmission, | 810 capture_time_ms, kAllowRetransmission, |
| 811 RtpPacketSender::kNormalPriority)); | 811 RtpPacketSender::kNormalPriority)); |
| 812 | 812 |
| 813 EXPECT_EQ(0, transport_.packets_sent_); | 813 EXPECT_EQ(0, transport_.packets_sent_); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( | 874 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
| 875 webrtc::RtpHeaderParser::Create()); | 875 webrtc::RtpHeaderParser::Create()); |
| 876 ASSERT_TRUE(rtp_parser.get() != nullptr); | 876 ASSERT_TRUE(rtp_parser.get() != nullptr); |
| 877 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, | 877 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
| 878 kTransmissionTimeOffsetExtensionId); | 878 kTransmissionTimeOffsetExtensionId); |
| 879 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 879 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 880 kAbsoluteSendTimeExtensionId); | 880 kAbsoluteSendTimeExtensionId); |
| 881 webrtc::RTPHeader rtp_header; | 881 webrtc::RTPHeader rtp_header; |
| 882 | 882 |
| 883 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 883 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
| 884 int rtp_length_int = rtp_sender_->BuildRTPheader( | 884 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
| 885 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 885 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
| 886 const uint32_t media_packet_timestamp = timestamp; | 886 const uint32_t media_packet_timestamp = timestamp; |
| 887 ASSERT_NE(-1, rtp_length_int); | 887 ASSERT_NE(-1, rtp_length_int); |
| 888 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 888 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
| 889 | 889 |
| 890 // Packet should be stored in a send bucket. | 890 // Packet should be stored in a send bucket. |
| 891 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 891 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
| 892 capture_time_ms, kAllowRetransmission, | 892 capture_time_ms, kAllowRetransmission, |
| 893 RtpPacketSender::kNormalPriority)); | 893 RtpPacketSender::kNormalPriority)); |
| 894 | 894 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 932 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); | 932 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); |
| 933 uint64_t expected_send_time = | 933 uint64_t expected_send_time = |
| 934 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 934 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
| 935 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 935 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
| 936 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); | 936 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); |
| 937 timestamp += 90 * kPaddingPeriodMs; | 937 timestamp += 90 * kPaddingPeriodMs; |
| 938 } | 938 } |
| 939 | 939 |
| 940 // Send a regular video packet again. | 940 // Send a regular video packet again. |
| 941 capture_time_ms = fake_clock_.TimeInMilliseconds(); | 941 capture_time_ms = fake_clock_.TimeInMilliseconds(); |
| 942 rtp_length_int = rtp_sender_->BuildRTPheader(packet_, kPayload, kMarkerBit, | 942 rtp_length_int = rtp_sender_->BuildRtpHeader(packet_, kPayload, kMarkerBit, |
| 943 timestamp, capture_time_ms); | 943 timestamp, capture_time_ms); |
| 944 ASSERT_NE(-1, rtp_length_int); | 944 ASSERT_NE(-1, rtp_length_int); |
| 945 rtp_length = static_cast<size_t>(rtp_length_int); | 945 rtp_length = static_cast<size_t>(rtp_length_int); |
| 946 | 946 |
| 947 EXPECT_CALL(mock_paced_sender_, | 947 EXPECT_CALL(mock_paced_sender_, |
| 948 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); | 948 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); |
| 949 | 949 |
| 950 // Packet should be stored in a send bucket. | 950 // Packet should be stored in a send bucket. |
| 951 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 951 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
| 952 capture_time_ms, kAllowRetransmission, | 952 capture_time_ms, kAllowRetransmission, |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1107 } | 1107 } |
| 1108 | 1108 |
| 1109 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { | 1109 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { |
| 1110 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1110 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
| 1111 const uint8_t payload_type = 127; | 1111 const uint8_t payload_type = 127; |
| 1112 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1112 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
| 1113 0, 1500)); | 1113 0, 1500)); |
| 1114 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1114 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1115 | 1115 |
| 1116 // Send keyframe | 1116 // Send keyframe |
| 1117 ASSERT_EQ( | 1117 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
| 1118 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1118 4321, payload, sizeof(payload), |
| 1119 payload, sizeof(payload), nullptr)); | 1119 nullptr, nullptr)); |
| 1120 | 1120 |
| 1121 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1121 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
| 1122 transport_.last_sent_packet_len_); | 1122 transport_.last_sent_packet_len_); |
| 1123 webrtc::RTPHeader rtp_header; | 1123 webrtc::RTPHeader rtp_header; |
| 1124 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1124 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
| 1125 | 1125 |
| 1126 const uint8_t* payload_data = | 1126 const uint8_t* payload_data = |
| 1127 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1127 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
| 1128 uint8_t generic_header = *payload_data++; | 1128 uint8_t generic_header = *payload_data++; |
| 1129 | 1129 |
| 1130 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), | 1130 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), |
| 1131 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1131 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
| 1132 | 1132 |
| 1133 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 1133 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
| 1134 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 1134 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
| 1135 | 1135 |
| 1136 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1136 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
| 1137 | 1137 |
| 1138 // Send delta frame | 1138 // Send delta frame |
| 1139 payload[0] = 13; | 1139 payload[0] = 13; |
| 1140 payload[1] = 42; | 1140 payload[1] = 42; |
| 1141 payload[4] = 13; | 1141 payload[4] = 13; |
| 1142 | 1142 |
| 1143 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1143 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
| 1144 1234, 4321, payload, | 1144 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
| 1145 sizeof(payload), nullptr)); | 1145 sizeof(payload), nullptr, nullptr)); |
| 1146 | 1146 |
| 1147 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, | 1147 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, |
| 1148 transport_.last_sent_packet_len_); | 1148 transport_.last_sent_packet_len_); |
| 1149 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1149 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
| 1150 | 1150 |
| 1151 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1151 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); |
| 1152 generic_header = *payload_data++; | 1152 generic_header = *payload_data++; |
| 1153 | 1153 |
| 1154 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 1154 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
| 1155 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 1155 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1186 const uint8_t payload_type = 127; | 1186 const uint8_t payload_type = 127; |
| 1187 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1187 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
| 1188 0, 1500)); | 1188 0, 1500)); |
| 1189 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1189 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1190 rtp_sender_->SetStorePacketsStatus(true, 1); | 1190 rtp_sender_->SetStorePacketsStatus(true, 1); |
| 1191 uint32_t ssrc = rtp_sender_->SSRC(); | 1191 uint32_t ssrc = rtp_sender_->SSRC(); |
| 1192 | 1192 |
| 1193 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1193 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| 1194 .Times(::testing::AtLeast(2)); | 1194 .Times(::testing::AtLeast(2)); |
| 1195 | 1195 |
| 1196 ASSERT_EQ( | 1196 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
| 1197 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1197 4321, payload, sizeof(payload), |
| 1198 payload, sizeof(payload), nullptr)); | 1198 nullptr, nullptr)); |
| 1199 | 1199 |
| 1200 EXPECT_EQ(1U, callback.num_calls_); | 1200 EXPECT_EQ(1U, callback.num_calls_); |
| 1201 EXPECT_EQ(ssrc, callback.ssrc_); | 1201 EXPECT_EQ(ssrc, callback.ssrc_); |
| 1202 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1202 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
| 1203 EXPECT_EQ(0, callback.frame_counts_.delta_frames); | 1203 EXPECT_EQ(0, callback.frame_counts_.delta_frames); |
| 1204 | 1204 |
| 1205 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1205 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
| 1206 1234, 4321, payload, | 1206 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
| 1207 sizeof(payload), nullptr)); | 1207 sizeof(payload), nullptr, nullptr)); |
| 1208 | 1208 |
| 1209 EXPECT_EQ(2U, callback.num_calls_); | 1209 EXPECT_EQ(2U, callback.num_calls_); |
| 1210 EXPECT_EQ(ssrc, callback.ssrc_); | 1210 EXPECT_EQ(ssrc, callback.ssrc_); |
| 1211 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1211 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
| 1212 EXPECT_EQ(1, callback.frame_counts_.delta_frames); | 1212 EXPECT_EQ(1, callback.frame_counts_.delta_frames); |
| 1213 | 1213 |
| 1214 rtp_sender_.reset(); | 1214 rtp_sender_.reset(); |
| 1215 } | 1215 } |
| 1216 | 1216 |
| 1217 TEST_F(RtpSenderTest, BitrateCallbacks) { | 1217 TEST_F(RtpSenderTest, BitrateCallbacks) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1259 0, 1500)); | 1259 0, 1500)); |
| 1260 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1260 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1261 rtp_sender_->SetStorePacketsStatus(true, 1); | 1261 rtp_sender_->SetStorePacketsStatus(true, 1); |
| 1262 uint32_t ssrc = rtp_sender_->SSRC(); | 1262 uint32_t ssrc = rtp_sender_->SSRC(); |
| 1263 | 1263 |
| 1264 // Initial process call so we get a new time window. | 1264 // Initial process call so we get a new time window. |
| 1265 rtp_sender_->ProcessBitrate(); | 1265 rtp_sender_->ProcessBitrate(); |
| 1266 | 1266 |
| 1267 // Send a few frames. | 1267 // Send a few frames. |
| 1268 for (uint32_t i = 0; i < kNumPackets; ++i) { | 1268 for (uint32_t i = 0; i < kNumPackets; ++i) { |
| 1269 ASSERT_EQ(0, | 1269 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
| 1270 rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, | 1270 kVideoFrameKey, payload_type, 1234, 4321, payload, |
| 1271 4321, payload, sizeof(payload), 0)); | 1271 sizeof(payload), nullptr, nullptr)); |
| 1272 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); | 1272 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); |
| 1273 } | 1273 } |
| 1274 | 1274 |
| 1275 rtp_sender_->ProcessBitrate(); | 1275 rtp_sender_->ProcessBitrate(); |
| 1276 | 1276 |
| 1277 // We get one call for every stats updated, thus two calls since both the | 1277 // We get one call for every stats updated, thus two calls since both the |
| 1278 // stream stats and the retransmit stats are updated once. | 1278 // stream stats and the retransmit stats are updated once. |
| 1279 EXPECT_EQ(2u, callback.num_calls_); | 1279 EXPECT_EQ(2u, callback.num_calls_); |
| 1280 EXPECT_EQ(ssrc, callback.ssrc_); | 1280 EXPECT_EQ(ssrc, callback.ssrc_); |
| 1281 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); | 1281 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1340 const uint8_t payload_type = 127; | 1340 const uint8_t payload_type = 127; |
| 1341 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1341 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
| 1342 0, 1500)); | 1342 0, 1500)); |
| 1343 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1343 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1344 rtp_sender_->SetStorePacketsStatus(true, 1); | 1344 rtp_sender_->SetStorePacketsStatus(true, 1); |
| 1345 uint32_t ssrc = rtp_sender_->SSRC(); | 1345 uint32_t ssrc = rtp_sender_->SSRC(); |
| 1346 | 1346 |
| 1347 rtp_sender_->RegisterRtpStatisticsCallback(&callback); | 1347 rtp_sender_->RegisterRtpStatisticsCallback(&callback); |
| 1348 | 1348 |
| 1349 // Send a frame. | 1349 // Send a frame. |
| 1350 ASSERT_EQ( | 1350 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
| 1351 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1351 4321, payload, sizeof(payload), |
| 1352 payload, sizeof(payload), nullptr)); | 1352 nullptr, nullptr)); |
| 1353 StreamDataCounters expected; | 1353 StreamDataCounters expected; |
| 1354 expected.transmitted.payload_bytes = 6; | 1354 expected.transmitted.payload_bytes = 6; |
| 1355 expected.transmitted.header_bytes = 12; | 1355 expected.transmitted.header_bytes = 12; |
| 1356 expected.transmitted.padding_bytes = 0; | 1356 expected.transmitted.padding_bytes = 0; |
| 1357 expected.transmitted.packets = 1; | 1357 expected.transmitted.packets = 1; |
| 1358 expected.retransmitted.payload_bytes = 0; | 1358 expected.retransmitted.payload_bytes = 0; |
| 1359 expected.retransmitted.header_bytes = 0; | 1359 expected.retransmitted.header_bytes = 0; |
| 1360 expected.retransmitted.padding_bytes = 0; | 1360 expected.retransmitted.padding_bytes = 0; |
| 1361 expected.retransmitted.packets = 0; | 1361 expected.retransmitted.packets = 0; |
| 1362 expected.fec.packets = 0; | 1362 expected.fec.packets = 0; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1382 expected.transmitted.packets = 3; | 1382 expected.transmitted.packets = 3; |
| 1383 callback.Matches(ssrc, expected); | 1383 callback.Matches(ssrc, expected); |
| 1384 | 1384 |
| 1385 // Send FEC. | 1385 // Send FEC. |
| 1386 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); | 1386 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); |
| 1387 FecProtectionParams fec_params; | 1387 FecProtectionParams fec_params; |
| 1388 fec_params.fec_mask_type = kFecMaskRandom; | 1388 fec_params.fec_mask_type = kFecMaskRandom; |
| 1389 fec_params.fec_rate = 1; | 1389 fec_params.fec_rate = 1; |
| 1390 fec_params.max_fec_frames = 1; | 1390 fec_params.max_fec_frames = 1; |
| 1391 rtp_sender_->SetFecParameters(&fec_params, &fec_params); | 1391 rtp_sender_->SetFecParameters(&fec_params, &fec_params); |
| 1392 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1392 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
| 1393 1234, 4321, payload, | 1393 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
| 1394 sizeof(payload), nullptr)); | 1394 sizeof(payload), nullptr, nullptr)); |
| 1395 expected.transmitted.payload_bytes = 40; | 1395 expected.transmitted.payload_bytes = 40; |
| 1396 expected.transmitted.header_bytes = 60; | 1396 expected.transmitted.header_bytes = 60; |
| 1397 expected.transmitted.packets = 5; | 1397 expected.transmitted.packets = 5; |
| 1398 expected.fec.packets = 1; | 1398 expected.fec.packets = 1; |
| 1399 callback.Matches(ssrc, expected); | 1399 callback.Matches(ssrc, expected); |
| 1400 | 1400 |
| 1401 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); | 1401 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); |
| 1402 } | 1402 } |
| 1403 | 1403 |
| 1404 TEST_F(RtpSenderAudioTest, SendAudio) { | 1404 TEST_F(RtpSenderAudioTest, SendAudio) { |
| 1405 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1405 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
| 1406 const uint8_t payload_type = 127; | 1406 const uint8_t payload_type = 127; |
| 1407 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1407 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
| 1408 0, 1500)); | 1408 0, 1500)); |
| 1409 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1409 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1410 | 1410 |
| 1411 ASSERT_EQ( | 1411 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, |
| 1412 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, | 1412 4321, payload, sizeof(payload), |
| 1413 payload, sizeof(payload), nullptr)); | 1413 nullptr, nullptr)); |
| 1414 | 1414 |
| 1415 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1415 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
| 1416 transport_.last_sent_packet_len_); | 1416 transport_.last_sent_packet_len_); |
| 1417 webrtc::RTPHeader rtp_header; | 1417 webrtc::RTPHeader rtp_header; |
| 1418 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1418 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
| 1419 | 1419 |
| 1420 const uint8_t* payload_data = | 1420 const uint8_t* payload_data = |
| 1421 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1421 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
| 1422 | 1422 |
| 1423 ASSERT_EQ(sizeof(payload), | 1423 ASSERT_EQ(sizeof(payload), |
| 1424 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1424 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
| 1425 | 1425 |
| 1426 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1426 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
| 1427 } | 1427 } |
| 1428 | 1428 |
| 1429 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { | 1429 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { |
| 1430 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); | 1430 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); |
| 1431 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 1431 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
| 1432 kAudioLevelExtensionId)); | 1432 kAudioLevelExtensionId)); |
| 1433 | 1433 |
| 1434 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1434 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
| 1435 const uint8_t payload_type = 127; | 1435 const uint8_t payload_type = 127; |
| 1436 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1436 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
| 1437 0, 1500)); | 1437 0, 1500)); |
| 1438 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1438 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1439 | 1439 |
| 1440 ASSERT_EQ( | 1440 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, |
| 1441 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, | 1441 4321, payload, sizeof(payload), |
| 1442 payload, sizeof(payload), nullptr)); | 1442 nullptr, nullptr)); |
| 1443 | 1443 |
| 1444 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1444 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
| 1445 transport_.last_sent_packet_len_); | 1445 transport_.last_sent_packet_len_); |
| 1446 webrtc::RTPHeader rtp_header; | 1446 webrtc::RTPHeader rtp_header; |
| 1447 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1447 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
| 1448 | 1448 |
| 1449 const uint8_t* payload_data = | 1449 const uint8_t* payload_data = |
| 1450 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1450 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
| 1451 | 1451 |
| 1452 ASSERT_EQ(sizeof(payload), | 1452 ASSERT_EQ(sizeof(payload), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1483 ASSERT_EQ( | 1483 ASSERT_EQ( |
| 1484 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); | 1484 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); |
| 1485 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 1485 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
| 1486 // DTMF event key=9, duration=500 and attenuationdB=10 | 1486 // DTMF event key=9, duration=500 and attenuationdB=10 |
| 1487 rtp_sender_->SendTelephoneEvent(9, 500, 10); | 1487 rtp_sender_->SendTelephoneEvent(9, 500, 10); |
| 1488 // During start, it takes the starting timestamp as last sent timestamp. | 1488 // During start, it takes the starting timestamp as last sent timestamp. |
| 1489 // The duration is calculated as the difference of current and last sent | 1489 // The duration is calculated as the difference of current and last sent |
| 1490 // timestamp. So for first call it will skip since the duration is zero. | 1490 // timestamp. So for first call it will skip since the duration is zero. |
| 1491 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1491 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
| 1492 capture_time_ms, 0, nullptr, 0, | 1492 capture_time_ms, 0, nullptr, 0, |
| 1493 nullptr)); | 1493 nullptr, nullptr)); |
| 1494 // DTMF Sample Length is (Frequency/1000) * Duration. | 1494 // DTMF Sample Length is (Frequency/1000) * Duration. |
| 1495 // So in this case, it is (8000/1000) * 500 = 4000. | 1495 // So in this case, it is (8000/1000) * 500 = 4000. |
| 1496 // Sending it as two packets. | 1496 // Sending it as two packets. |
| 1497 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1497 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
| 1498 capture_time_ms + 2000, 0, nullptr, | 1498 capture_time_ms + 2000, 0, nullptr, |
| 1499 0, nullptr)); | 1499 0, nullptr, nullptr)); |
| 1500 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( | 1500 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
| 1501 webrtc::RtpHeaderParser::Create()); | 1501 webrtc::RtpHeaderParser::Create()); |
| 1502 ASSERT_TRUE(rtp_parser.get() != nullptr); | 1502 ASSERT_TRUE(rtp_parser.get() != nullptr); |
| 1503 webrtc::RTPHeader rtp_header; | 1503 webrtc::RTPHeader rtp_header; |
| 1504 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1504 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
| 1505 transport_.last_sent_packet_len_, &rtp_header)); | 1505 transport_.last_sent_packet_len_, &rtp_header)); |
| 1506 // Marker Bit should be set to 1 for first packet. | 1506 // Marker Bit should be set to 1 for first packet. |
| 1507 EXPECT_TRUE(rtp_header.markerBit); | 1507 EXPECT_TRUE(rtp_header.markerBit); |
| 1508 | 1508 |
| 1509 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1509 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
| 1510 capture_time_ms + 4000, 0, nullptr, | 1510 capture_time_ms + 4000, 0, nullptr, |
| 1511 0, nullptr)); | 1511 0, nullptr, nullptr)); |
| 1512 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1512 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
| 1513 transport_.last_sent_packet_len_, &rtp_header)); | 1513 transport_.last_sent_packet_len_, &rtp_header)); |
| 1514 // Marker Bit should be set to 0 for rest of the packets. | 1514 // Marker Bit should be set to 0 for rest of the packets. |
| 1515 EXPECT_FALSE(rtp_header.markerBit); | 1515 EXPECT_FALSE(rtp_header.markerBit); |
| 1516 } | 1516 } |
| 1517 | 1517 |
| 1518 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { | 1518 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { |
| 1519 const char* kPayloadName = "GENERIC"; | 1519 const char* kPayloadName = "GENERIC"; |
| 1520 const uint8_t kPayloadType = 127; | 1520 const uint8_t kPayloadType = 127; |
| 1521 rtp_sender_->SetSSRC(1234); | 1521 rtp_sender_->SetSSRC(1234); |
| 1522 rtp_sender_->SetRtxSsrc(4321); | 1522 rtp_sender_->SetRtxSsrc(4321); |
| 1523 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); | 1523 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); |
| 1524 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 1524 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
| 1525 | 1525 |
| 1526 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, | 1526 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, |
| 1527 0, 1500)); | 1527 0, 1500)); |
| 1528 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1528 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1529 | 1529 |
| 1530 ASSERT_EQ( | 1530 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, |
| 1531 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, 4321, | 1531 4321, payload, sizeof(payload), |
| 1532 payload, sizeof(payload), 0)); | 1532 nullptr, nullptr)); |
| 1533 | 1533 |
| 1534 // Will send 2 full-size padding packets. | 1534 // Will send 2 full-size padding packets. |
| 1535 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1535 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); |
| 1536 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1536 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); |
| 1537 | 1537 |
| 1538 StreamDataCounters rtp_stats; | 1538 StreamDataCounters rtp_stats; |
| 1539 StreamDataCounters rtx_stats; | 1539 StreamDataCounters rtx_stats; |
| 1540 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); | 1540 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); |
| 1541 | 1541 |
| 1542 // Payload + 1-byte generic header. | 1542 // Payload + 1-byte generic header. |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1619 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1619 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
| 1620 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1620 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
| 1621 | 1621 |
| 1622 // Verify that this packet does have CVO byte. | 1622 // Verify that this packet does have CVO byte. |
| 1623 VerifyCVOPacket( | 1623 VerifyCVOPacket( |
| 1624 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1624 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
| 1625 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1625 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
| 1626 hdr.rotation); | 1626 hdr.rotation); |
| 1627 } | 1627 } |
| 1628 } // namespace webrtc | 1628 } // namespace webrtc |
| OLD | NEW |