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

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

Issue 2067673004: Style cleanups in RtpSender. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: . Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_video.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698