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

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

Issue 2399463009: Delete RTPSender::BuildRtpHeader function (Closed)
Patch Set: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 23 matching lines...) Expand all
34 namespace webrtc { 34 namespace webrtc {
35 35
36 namespace { 36 namespace {
37 const int kTransmissionTimeOffsetExtensionId = 1; 37 const int kTransmissionTimeOffsetExtensionId = 1;
38 const int kAbsoluteSendTimeExtensionId = 14; 38 const int kAbsoluteSendTimeExtensionId = 14;
39 const int kTransportSequenceNumberExtensionId = 13; 39 const int kTransportSequenceNumberExtensionId = 13;
40 const int kPayload = 100; 40 const int kPayload = 100;
41 const int kRtxPayload = 98; 41 const int kRtxPayload = 98;
42 const uint32_t kTimestamp = 10; 42 const uint32_t kTimestamp = 10;
43 const uint16_t kSeqNum = 33; 43 const uint16_t kSeqNum = 33;
44 const int kTimeOffset = 22222;
45 const int kMaxPacketLength = 1500; 44 const int kMaxPacketLength = 1500;
46 const uint32_t kAbsoluteSendTime = 0x00aabbcc;
47 const uint8_t kAudioLevel = 0x5a; 45 const uint8_t kAudioLevel = 0x5a;
48 const uint16_t kTransportSequenceNumber = 0xaabbu; 46 const uint16_t kTransportSequenceNumber = 0xaabbu;
49 const uint8_t kAudioLevelExtensionId = 9; 47 const uint8_t kAudioLevelExtensionId = 9;
50 const int kAudioPayload = 103; 48 const int kAudioPayload = 103;
51 const uint64_t kStartTime = 123456789; 49 const uint64_t kStartTime = 123456789;
52 const size_t kMaxPaddingSize = 224u; 50 const size_t kMaxPaddingSize = 224u;
53 const int kVideoRotationExtensionId = 5; 51 const int kVideoRotationExtensionId = 5;
54 const VideoRotation kRotation = kVideoRotation_270;
55 const size_t kGenericHeaderLength = 1; 52 const size_t kGenericHeaderLength = 1;
56 const uint8_t kPayloadData[] = {47, 11, 32, 93, 89}; 53 const uint8_t kPayloadData[] = {47, 11, 32, 93, 89};
57 54
58 using ::testing::_; 55 using ::testing::_;
59 using ::testing::ElementsAreArray; 56 using ::testing::ElementsAreArray;
60 57
61 const uint8_t* GetPayloadData(const RTPHeader& rtp_header, 58 const uint8_t* GetPayloadData(const RTPHeader& rtp_header,
62 const uint8_t* packet) { 59 const uint8_t* packet) {
63 return packet + rtp_header.headerLength; 60 return packet + rtp_header.headerLength;
64 } 61 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; 166 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_;
170 MockRtpPacketSender mock_paced_sender_; 167 MockRtpPacketSender mock_paced_sender_;
171 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; 168 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_;
172 testing::StrictMock<MockSendPacketObserver> send_packet_observer_; 169 testing::StrictMock<MockSendPacketObserver> send_packet_observer_;
173 testing::StrictMock<MockTransportFeedbackObserver> feedback_observer_; 170 testing::StrictMock<MockTransportFeedbackObserver> feedback_observer_;
174 RateLimiter retransmission_rate_limiter_; 171 RateLimiter retransmission_rate_limiter_;
175 std::unique_ptr<RTPSender> rtp_sender_; 172 std::unique_ptr<RTPSender> rtp_sender_;
176 int payload_; 173 int payload_;
177 LoopbackTransportTest transport_; 174 LoopbackTransportTest transport_;
178 const bool kMarkerBit; 175 const bool kMarkerBit;
179 uint8_t packet_[kMaxPacketLength];
180 176
181 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { 177 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) {
182 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); 178 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0);
183 } 179 }
184 180
185 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) { 181 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) {
186 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0); 182 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0);
187 } 183 }
188 184
189 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, 185 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header,
190 bool marker_bit, 186 bool marker_bit,
191 uint8_t number_of_csrcs) { 187 uint8_t number_of_csrcs) {
192 EXPECT_EQ(marker_bit, rtp_header.markerBit); 188 EXPECT_EQ(marker_bit, rtp_header.markerBit);
193 EXPECT_EQ(payload_, rtp_header.payloadType); 189 EXPECT_EQ(payload_, rtp_header.payloadType);
194 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); 190 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber);
195 EXPECT_EQ(kTimestamp, rtp_header.timestamp); 191 EXPECT_EQ(kTimestamp, rtp_header.timestamp);
196 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); 192 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc);
197 EXPECT_EQ(number_of_csrcs, rtp_header.numCSRCs); 193 EXPECT_EQ(number_of_csrcs, rtp_header.numCSRCs);
198 EXPECT_EQ(0U, rtp_header.paddingLength); 194 EXPECT_EQ(0U, rtp_header.paddingLength);
199 } 195 }
200 196
197 std::unique_ptr<RtpPacketToSend> BuildRtpPacket(int payload_type,
198 bool marker_bit,
199 uint32_t timestamp,
200 int64_t capture_time_ms) {
201 auto packet = rtp_sender_->AllocatePacket();
202 packet->SetPayloadType(payload_type);
203 packet->SetMarker(marker_bit);
204 packet->SetTimestamp(timestamp);
205 packet->set_capture_time_ms(capture_time_ms);
206 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
207 return packet;
208 }
209
201 void SendPacket(int64_t capture_time_ms, int payload_length) { 210 void SendPacket(int64_t capture_time_ms, int payload_length) {
202 uint32_t timestamp = capture_time_ms * 90; 211 uint32_t timestamp = capture_time_ms * 90;
203 int32_t rtp_length = rtp_sender_->BuildRtpHeader( 212 auto packet =
204 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); 213 BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
205 ASSERT_GE(rtp_length, 0); 214 packet->AllocatePayload(payload_length);
206 215
207 // Packet should be stored in a send bucket. 216 // Packet should be stored in a send bucket.
208 EXPECT_TRUE(rtp_sender_->SendToNetwork( 217 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
209 packet_, payload_length, rtp_length, capture_time_ms, 218 kAllowRetransmission,
210 kAllowRetransmission, RtpPacketSender::kNormalPriority)); 219 RtpPacketSender::kNormalPriority));
211 } 220 }
212 221
213 void SendGenericPayload() { 222 void SendGenericPayload() {
214 const uint32_t kTimestamp = 1234; 223 const uint32_t kTimestamp = 1234;
215 const uint8_t kPayloadType = 127; 224 const uint8_t kPayloadType = 127;
216 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); 225 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds();
217 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 226 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
218 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, 227 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000,
219 0, 1500)); 228 0, 1500));
220 229
(...skipping 22 matching lines...) Expand all
243 252
244 void VerifyCVOPacket(uint8_t* data, 253 void VerifyCVOPacket(uint8_t* data,
245 size_t len, 254 size_t len,
246 bool expect_cvo, 255 bool expect_cvo,
247 RtpHeaderExtensionMap* map, 256 RtpHeaderExtensionMap* map,
248 uint16_t seq_num, 257 uint16_t seq_num,
249 VideoRotation rotation) { 258 VideoRotation rotation) {
250 webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len); 259 webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len);
251 260
252 webrtc::RTPHeader rtp_header; 261 webrtc::RTPHeader rtp_header;
253 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
254 packet_, kPayload, expect_cvo /* marker_bit */, kTimestamp, 0));
255 if (expect_cvo) {
256 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
257 length);
258 } else {
259 ASSERT_EQ(kRtpHeaderSize, length);
260 }
261 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map)); 262 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map));
262 ASSERT_FALSE(rtp_parser.RTCP()); 263 ASSERT_FALSE(rtp_parser.RTCP());
263 EXPECT_EQ(payload_, rtp_header.payloadType); 264 EXPECT_EQ(payload_, rtp_header.payloadType);
264 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 265 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
265 EXPECT_EQ(kTimestamp, rtp_header.timestamp); 266 EXPECT_EQ(kTimestamp, rtp_header.timestamp);
266 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); 267 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc);
267 EXPECT_EQ(0, rtp_header.numCSRCs); 268 EXPECT_EQ(0, rtp_header.numCSRCs);
268 EXPECT_EQ(0U, rtp_header.paddingLength); 269 EXPECT_EQ(0U, rtp_header.paddingLength);
269 EXPECT_EQ(rotation, rtp_header.extension.videoRotation); 270 EXPECT_EQ(rotation, rtp_header.extension.videoRotation);
270 } 271 }
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, -1)); 464 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, -1));
464 465
465 ASSERT_EQ(1u, transport_.sent_packets_.size()); 466 ASSERT_EQ(1u, transport_.sent_packets_.size());
466 // Parse the padding packet and verify its timestamp. 467 // Parse the padding packet and verify its timestamp.
467 RtpPacketToSend padding_packet(nullptr); 468 RtpPacketToSend padding_packet(nullptr);
468 ASSERT_TRUE(padding_packet.Parse(transport_.sent_packets_[0]->data(), 469 ASSERT_TRUE(padding_packet.Parse(transport_.sent_packets_[0]->data(),
469 transport_.sent_packets_[0]->size())); 470 transport_.sent_packets_[0]->size()));
470 EXPECT_EQ(kTimestamp, padding_packet.Timestamp()); 471 EXPECT_EQ(kTimestamp, padding_packet.Timestamp());
471 } 472 }
472 473
473 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) {
474 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
475 packet_, kPayload, kMarkerBit, kTimestamp, 0));
476 ASSERT_EQ(kRtpHeaderSize, length);
477
478 // Verify
479 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
480 webrtc::RTPHeader rtp_header;
481
482 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr);
483
484 ASSERT_TRUE(valid_rtp_header);
485 ASSERT_FALSE(rtp_parser.RTCP());
486 VerifyRTPHeaderCommon(rtp_header);
487 EXPECT_EQ(length, rtp_header.headerLength);
488 EXPECT_FALSE(rtp_header.extension.hasTransmissionTimeOffset);
489 EXPECT_FALSE(rtp_header.extension.hasAbsoluteSendTime);
490 EXPECT_FALSE(rtp_header.extension.hasAudioLevel);
491 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
492 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime);
493 EXPECT_FALSE(rtp_header.extension.voiceActivity);
494 EXPECT_EQ(0u, rtp_header.extension.audioLevel);
495 EXPECT_EQ(0u, rtp_header.extension.videoRotation);
496 }
497
498 TEST_F(RtpSenderTestWithoutPacer,
499 BuildRTPPacketWithTransmissionOffsetExtension) {
500 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
501 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
502 kRtpExtensionTransmissionTimeOffset,
503 kTransmissionTimeOffsetExtensionId));
504
505 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
506 packet_, kPayload, kMarkerBit, kTimestamp, 0));
507 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
508
509 // Verify
510 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
511 webrtc::RTPHeader rtp_header;
512
513 RtpHeaderExtensionMap map;
514 map.Register(kRtpExtensionTransmissionTimeOffset,
515 kTransmissionTimeOffsetExtensionId);
516 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
517
518 ASSERT_TRUE(valid_rtp_header);
519 ASSERT_FALSE(rtp_parser.RTCP());
520 VerifyRTPHeaderCommon(rtp_header);
521 EXPECT_EQ(length, rtp_header.headerLength);
522 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
523 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
524
525 // Parse without map extension
526 webrtc::RTPHeader rtp_header2;
527 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
528
529 ASSERT_TRUE(valid_rtp_header2);
530 VerifyRTPHeaderCommon(rtp_header2);
531 EXPECT_EQ(length, rtp_header2.headerLength);
532 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
533 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
534 }
535
536 TEST_F(RtpSenderTestWithoutPacer,
537 BuildRTPPacketWithNegativeTransmissionOffsetExtension) {
538 const int kNegTimeOffset = -500;
539 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset));
540 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
541 kRtpExtensionTransmissionTimeOffset,
542 kTransmissionTimeOffsetExtensionId));
543
544 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
545 packet_, kPayload, kMarkerBit, kTimestamp, 0));
546 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
547
548 // Verify
549 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
550 webrtc::RTPHeader rtp_header;
551
552 RtpHeaderExtensionMap map;
553 map.Register(kRtpExtensionTransmissionTimeOffset,
554 kTransmissionTimeOffsetExtensionId);
555 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
556
557 ASSERT_TRUE(valid_rtp_header);
558 ASSERT_FALSE(rtp_parser.RTCP());
559 VerifyRTPHeaderCommon(rtp_header);
560 EXPECT_EQ(length, rtp_header.headerLength);
561 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
562 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset);
563 }
564
565 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) {
566 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime));
567 EXPECT_EQ(
568 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
569 kAbsoluteSendTimeExtensionId));
570
571 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
572 packet_, kPayload, kMarkerBit, kTimestamp, 0));
573 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
574
575 // Verify
576 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
577 webrtc::RTPHeader rtp_header;
578
579 RtpHeaderExtensionMap map;
580 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
581 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
582
583 ASSERT_TRUE(valid_rtp_header);
584 ASSERT_FALSE(rtp_parser.RTCP());
585 VerifyRTPHeaderCommon(rtp_header);
586 EXPECT_EQ(length, rtp_header.headerLength);
587 EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
588 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
589
590 // Parse without map extension
591 webrtc::RTPHeader rtp_header2;
592 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
593
594 ASSERT_TRUE(valid_rtp_header2);
595 VerifyRTPHeaderCommon(rtp_header2);
596 EXPECT_EQ(length, rtp_header2.headerLength);
597 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
598 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
599 }
600
601 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { 474 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) {
602 rtp_sender_.reset(new RTPSender( 475 rtp_sender_.reset(new RTPSender(
603 false, &fake_clock_, &transport_, nullptr, 476 false, &fake_clock_, &transport_, nullptr,
604 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, 477 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr,
605 &mock_rtc_event_log_, &send_packet_observer_, 478 &mock_rtc_event_log_, &send_packet_observer_,
606 &retransmission_rate_limiter_)); 479 &retransmission_rate_limiter_));
607 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 480 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
608 kRtpExtensionTransportSequenceNumber, 481 kRtpExtensionTransportSequenceNumber,
609 kTransportSequenceNumberExtensionId)); 482 kTransportSequenceNumberExtensionId));
610 483
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 kTransportSequenceNumberExtensionId)); 518 kTransportSequenceNumberExtensionId));
646 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 519 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
647 .WillOnce(testing::Return(kTransportSequenceNumber)); 520 .WillOnce(testing::Return(kTransportSequenceNumber));
648 EXPECT_CALL(send_packet_observer_, 521 EXPECT_CALL(send_packet_observer_,
649 OnSendPacket(kTransportSequenceNumber, _, _)) 522 OnSendPacket(kTransportSequenceNumber, _, _))
650 .Times(1); 523 .Times(1);
651 524
652 SendGenericPayload(); 525 SendGenericPayload();
653 } 526 }
654 527
655 // Test CVO header extension is only set when marker bit is true.
656 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) {
657 rtp_sender_->SetVideoRotation(kRotation);
658 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
659 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
660 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
661
662 RtpHeaderExtensionMap map;
663 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
664
665 size_t length = static_cast<size_t>(
666 rtp_sender_->BuildRtpHeader(packet_, kPayload, true, kTimestamp, 0));
667 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
668
669 // Verify
670 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
671 webrtc::RTPHeader rtp_header;
672
673 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map));
674 ASSERT_FALSE(rtp_parser.RTCP());
675 VerifyRTPHeaderCommon(rtp_header);
676 EXPECT_EQ(length, rtp_header.headerLength);
677 EXPECT_TRUE(rtp_header.extension.hasVideoRotation);
678 EXPECT_EQ(kRotation, rtp_header.extension.videoRotation);
679 }
680
681 // Test CVO header extension is not set when marker bit is false.
682 TEST_F(RtpSenderTestWithoutPacer,
683 DISABLED_BuildRTPPacketWithVideoRotation_NoMarkerBit) {
684 rtp_sender_->SetVideoRotation(kRotation);
685 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
686 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
687 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
688
689 RtpHeaderExtensionMap map;
690 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
691
692 size_t length = static_cast<size_t>(
693 rtp_sender_->BuildRtpHeader(packet_, kPayload, false, kTimestamp, 0));
694 ASSERT_EQ(kRtpHeaderSize, length);
695
696 // Verify
697 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
698 webrtc::RTPHeader rtp_header;
699
700 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map));
701 ASSERT_FALSE(rtp_parser.RTCP());
702 VerifyRTPHeaderCommon(rtp_header, false);
703 EXPECT_EQ(length, rtp_header.headerLength);
704 EXPECT_FALSE(rtp_header.extension.hasVideoRotation);
705 }
706
707 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) {
708 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
709 kAudioLevelExtensionId));
710
711 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
712 packet_, kPayload, kMarkerBit, kTimestamp, 0));
713 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
714
715 // Verify
716 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
717 webrtc::RTPHeader rtp_header;
718
719 // Updating audio level is done in RTPSenderAudio, so simulate it here.
720 rtp_parser.Parse(&rtp_header);
721 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel);
722
723 RtpHeaderExtensionMap map;
724 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
725 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
726
727 ASSERT_TRUE(valid_rtp_header);
728 ASSERT_FALSE(rtp_parser.RTCP());
729 VerifyRTPHeaderCommon(rtp_header);
730 EXPECT_EQ(length, rtp_header.headerLength);
731 EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
732 EXPECT_TRUE(rtp_header.extension.voiceActivity);
733 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
734
735 // Parse without map extension
736 webrtc::RTPHeader rtp_header2;
737 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
738
739 ASSERT_TRUE(valid_rtp_header2);
740 VerifyRTPHeaderCommon(rtp_header2);
741 EXPECT_EQ(length, rtp_header2.headerLength);
742 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
743 EXPECT_FALSE(rtp_header2.extension.voiceActivity);
744 EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
745 }
746
747 TEST_F(RtpSenderTestWithoutPacer,
748 BuildRTPPacketWithCSRCAndAudioLevelExtension) {
749 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
750 kAudioLevelExtensionId));
751 std::vector<uint32_t> csrcs;
752 csrcs.push_back(0x23456789);
753 rtp_sender_->SetCsrcs(csrcs);
754 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
755 packet_, kPayload, kMarkerBit, kTimestamp, 0));
756
757 // Verify
758 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
759 webrtc::RTPHeader rtp_header;
760
761 // Updating audio level is done in RTPSenderAudio, so simulate it here.
762 rtp_parser.Parse(&rtp_header);
763 EXPECT_TRUE(rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true,
764 kAudioLevel));
765
766 RtpHeaderExtensionMap map;
767 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
768 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
769
770 ASSERT_TRUE(valid_rtp_header);
771 ASSERT_FALSE(rtp_parser.RTCP());
772 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, csrcs.size());
773 EXPECT_EQ(length, rtp_header.headerLength);
774 EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
775 EXPECT_TRUE(rtp_header.extension.voiceActivity);
776 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
777 EXPECT_EQ(1u, rtp_header.numCSRCs);
778 EXPECT_EQ(csrcs[0], rtp_header.arrOfCSRCs[0]);
779 }
780
781 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) {
782 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
783 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime));
784 EXPECT_EQ(0,
785 rtp_sender_->SetTransportSequenceNumber(kTransportSequenceNumber));
786 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
787 kRtpExtensionTransmissionTimeOffset,
788 kTransmissionTimeOffsetExtensionId));
789 EXPECT_EQ(
790 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
791 kAbsoluteSendTimeExtensionId));
792 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
793 kAudioLevelExtensionId));
794 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
795 kRtpExtensionTransportSequenceNumber,
796 kTransportSequenceNumberExtensionId));
797
798 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
799 packet_, kPayload, kMarkerBit, kTimestamp, 0));
800 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
801
802 // Verify
803 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
804 webrtc::RTPHeader rtp_header;
805
806 // Updating audio level is done in RTPSenderAudio, so simulate it here.
807 rtp_parser.Parse(&rtp_header);
808 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel);
809
810 RtpHeaderExtensionMap map;
811 map.Register(kRtpExtensionTransmissionTimeOffset,
812 kTransmissionTimeOffsetExtensionId);
813 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
814 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
815 map.Register(kRtpExtensionTransportSequenceNumber,
816 kTransportSequenceNumberExtensionId);
817 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
818
819 ASSERT_TRUE(valid_rtp_header);
820 ASSERT_FALSE(rtp_parser.RTCP());
821 VerifyRTPHeaderCommon(rtp_header);
822 EXPECT_EQ(length, rtp_header.headerLength);
823 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
824 EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
825 EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
826 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber);
827 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
828 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
829 EXPECT_TRUE(rtp_header.extension.voiceActivity);
830 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
831 EXPECT_EQ(kTransportSequenceNumber,
832 rtp_header.extension.transportSequenceNumber);
833
834 // Parse without map extension
835 webrtc::RTPHeader rtp_header2;
836 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
837
838 ASSERT_TRUE(valid_rtp_header2);
839 VerifyRTPHeaderCommon(rtp_header2);
840 EXPECT_EQ(length, rtp_header2.headerLength);
841 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
842 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
843 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
844 EXPECT_FALSE(rtp_header2.extension.hasTransportSequenceNumber);
845
846 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
847 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
848 EXPECT_FALSE(rtp_header2.extension.voiceActivity);
849 EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
850 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber);
851 }
852
853 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { 528 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
854 rtp_sender_.reset(new RTPSender( 529 rtp_sender_.reset(new RTPSender(
855 false, &fake_clock_, &transport_, &mock_paced_sender_, 530 false, &fake_clock_, &transport_, &mock_paced_sender_,
856 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, 531 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr,
857 &mock_rtc_event_log_, &send_packet_observer_, 532 &mock_rtc_event_log_, &send_packet_observer_,
858 &retransmission_rate_limiter_)); 533 &retransmission_rate_limiter_));
859 rtp_sender_->SetStorePacketsStatus(true, 10); 534 rtp_sender_->SetStorePacketsStatus(true, 10);
860 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 535 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
861 kRtpExtensionTransportSequenceNumber, 536 kRtpExtensionTransportSequenceNumber,
862 kTransportSequenceNumberExtensionId)); 537 kTransportSequenceNumberExtensionId));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 576 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
902 577
903 rtp_sender_->SetStorePacketsStatus(true, 10); 578 rtp_sender_->SetStorePacketsStatus(true, 10);
904 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 579 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
905 kRtpExtensionTransmissionTimeOffset, 580 kRtpExtensionTransmissionTimeOffset,
906 kTransmissionTimeOffsetExtensionId)); 581 kTransmissionTimeOffsetExtensionId));
907 EXPECT_EQ( 582 EXPECT_EQ(
908 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 583 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
909 kAbsoluteSendTimeExtensionId)); 584 kAbsoluteSendTimeExtensionId));
910 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 585 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
911 int rtp_length_int = rtp_sender_->BuildRtpHeader( 586 auto packet =
912 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); 587 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
913 ASSERT_NE(-1, rtp_length_int); 588 size_t packet_size = packet->size();
914 size_t rtp_length = static_cast<size_t>(rtp_length_int);
915 589
916 // Packet should be stored in a send bucket. 590 // Packet should be stored in a send bucket.
917 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 591 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
918 capture_time_ms, kAllowRetransmission, 592 kAllowRetransmission,
919 RtpPacketSender::kNormalPriority)); 593 RtpPacketSender::kNormalPriority));
920 594
921 EXPECT_EQ(0, transport_.packets_sent_); 595 EXPECT_EQ(0, transport_.packets_sent_);
922 596
923 const int kStoredTimeInMs = 100; 597 const int kStoredTimeInMs = 100;
924 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 598 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
925 599
926 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 600 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
927 PacketInfo::kNotAProbe); 601 PacketInfo::kNotAProbe);
928 602
929 // Process send bucket. Packet should now be sent. 603 // Process send bucket. Packet should now be sent.
930 EXPECT_EQ(1, transport_.packets_sent_); 604 EXPECT_EQ(1, transport_.packets_sent_);
931 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 605 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
932 // Parse sent packet. 606 // Parse sent packet.
933 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 607 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
934 rtp_length); 608 packet_size);
935 webrtc::RTPHeader rtp_header; 609 webrtc::RTPHeader rtp_header;
936 RtpHeaderExtensionMap map; 610 RtpHeaderExtensionMap map;
937 map.Register(kRtpExtensionTransmissionTimeOffset, 611 map.Register(kRtpExtensionTransmissionTimeOffset,
938 kTransmissionTimeOffsetExtensionId); 612 kTransmissionTimeOffsetExtensionId);
939 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); 613 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
940 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 614 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
941 ASSERT_TRUE(valid_rtp_header); 615 ASSERT_TRUE(valid_rtp_header);
942 616
943 // Verify transmission time offset. 617 // Verify transmission time offset.
944 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 618 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
945 uint64_t expected_send_time = 619 uint64_t expected_send_time =
946 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 620 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
947 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 621 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
948 } 622 }
949 623
950 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { 624 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
951 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 625 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
952 _, kSeqNum, _, _, _)); 626 _, kSeqNum, _, _, _));
953 EXPECT_CALL(mock_rtc_event_log_, 627 EXPECT_CALL(mock_rtc_event_log_,
954 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 628 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
955 629
956 rtp_sender_->SetStorePacketsStatus(true, 10); 630 rtp_sender_->SetStorePacketsStatus(true, 10);
957 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 631 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
958 kRtpExtensionTransmissionTimeOffset, 632 kRtpExtensionTransmissionTimeOffset,
959 kTransmissionTimeOffsetExtensionId)); 633 kTransmissionTimeOffsetExtensionId));
960 EXPECT_EQ( 634 EXPECT_EQ(
961 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 635 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
962 kAbsoluteSendTimeExtensionId)); 636 kAbsoluteSendTimeExtensionId));
963 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 637 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
964 int rtp_length_int = rtp_sender_->BuildRtpHeader( 638 auto packet =
965 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); 639 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
966 ASSERT_NE(-1, rtp_length_int); 640 size_t packet_size = packet->size();
967 size_t rtp_length = static_cast<size_t>(rtp_length_int);
968 641
969 // Packet should be stored in a send bucket. 642 // Packet should be stored in a send bucket.
970 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 643 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
971 capture_time_ms, kAllowRetransmission, 644 kAllowRetransmission,
972 RtpPacketSender::kNormalPriority)); 645 RtpPacketSender::kNormalPriority));
973 646
974 EXPECT_EQ(0, transport_.packets_sent_); 647 EXPECT_EQ(0, transport_.packets_sent_);
975 648
976 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 649 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
977 _, kSeqNum, _, _, _)); 650 _, kSeqNum, _, _, _));
978 651
979 const int kStoredTimeInMs = 100; 652 const int kStoredTimeInMs = 100;
980 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 653 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
981 654
982 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum)); 655 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum));
983 EXPECT_EQ(0, transport_.packets_sent_); 656 EXPECT_EQ(0, transport_.packets_sent_);
984 657
985 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 658 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
986 PacketInfo::kNotAProbe); 659 PacketInfo::kNotAProbe);
987 660
988 // Process send bucket. Packet should now be sent. 661 // Process send bucket. Packet should now be sent.
989 EXPECT_EQ(1, transport_.packets_sent_); 662 EXPECT_EQ(1, transport_.packets_sent_);
990 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 663 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
991 664
992 // Parse sent packet. 665 // Parse sent packet.
993 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 666 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
994 rtp_length); 667 packet_size);
995 webrtc::RTPHeader rtp_header; 668 webrtc::RTPHeader rtp_header;
996 RtpHeaderExtensionMap map; 669 RtpHeaderExtensionMap map;
997 map.Register(kRtpExtensionTransmissionTimeOffset, 670 map.Register(kRtpExtensionTransmissionTimeOffset,
998 kTransmissionTimeOffsetExtensionId); 671 kTransmissionTimeOffsetExtensionId);
999 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); 672 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
1000 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 673 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
1001 ASSERT_TRUE(valid_rtp_header); 674 ASSERT_TRUE(valid_rtp_header);
1002 675
1003 // Verify transmission time offset. 676 // Verify transmission time offset.
1004 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 677 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
(...skipping 30 matching lines...) Expand all
1035 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( 708 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser(
1036 webrtc::RtpHeaderParser::Create()); 709 webrtc::RtpHeaderParser::Create());
1037 ASSERT_TRUE(rtp_parser.get() != nullptr); 710 ASSERT_TRUE(rtp_parser.get() != nullptr);
1038 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, 711 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
1039 kTransmissionTimeOffsetExtensionId); 712 kTransmissionTimeOffsetExtensionId);
1040 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 713 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
1041 kAbsoluteSendTimeExtensionId); 714 kAbsoluteSendTimeExtensionId);
1042 webrtc::RTPHeader rtp_header; 715 webrtc::RTPHeader rtp_header;
1043 716
1044 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 717 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
1045 int rtp_length_int = rtp_sender_->BuildRtpHeader( 718 auto packet =
1046 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); 719 BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
1047 const uint32_t media_packet_timestamp = timestamp; 720 const uint32_t media_packet_timestamp = timestamp;
1048 ASSERT_NE(-1, rtp_length_int); 721 size_t packet_size = packet->size();
1049 size_t rtp_length = static_cast<size_t>(rtp_length_int);
1050 722
1051 // Packet should be stored in a send bucket. 723 // Packet should be stored in a send bucket.
1052 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 724 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
1053 capture_time_ms, kAllowRetransmission, 725 kAllowRetransmission,
1054 RtpPacketSender::kNormalPriority)); 726 RtpPacketSender::kNormalPriority));
1055 727
1056 int total_packets_sent = 0; 728 int total_packets_sent = 0;
1057 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); 729 EXPECT_EQ(total_packets_sent, transport_.packets_sent_);
1058 730
1059 const int kStoredTimeInMs = 100; 731 const int kStoredTimeInMs = 100;
1060 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 732 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
1061 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, 733 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false,
1062 PacketInfo::kNotAProbe); 734 PacketInfo::kNotAProbe);
1063 // Packet should now be sent. This test doesn't verify the regular video 735 // Packet should now be sent. This test doesn't verify the regular video
(...skipping 29 matching lines...) Expand all
1093 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); 765 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset);
1094 uint64_t expected_send_time = 766 uint64_t expected_send_time =
1095 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 767 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
1096 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 768 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
1097 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); 769 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs);
1098 timestamp += 90 * kPaddingPeriodMs; 770 timestamp += 90 * kPaddingPeriodMs;
1099 } 771 }
1100 772
1101 // Send a regular video packet again. 773 // Send a regular video packet again.
1102 capture_time_ms = fake_clock_.TimeInMilliseconds(); 774 capture_time_ms = fake_clock_.TimeInMilliseconds();
1103 rtp_length_int = rtp_sender_->BuildRtpHeader(packet_, kPayload, kMarkerBit, 775 packet = BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
1104 timestamp, capture_time_ms); 776 packet_size = packet->size();
1105 ASSERT_NE(-1, rtp_length_int);
1106 rtp_length = static_cast<size_t>(rtp_length_int);
1107 777
1108 EXPECT_CALL(mock_paced_sender_, 778 EXPECT_CALL(mock_paced_sender_,
1109 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); 779 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _));
1110 780
1111 // Packet should be stored in a send bucket. 781 // Packet should be stored in a send bucket.
1112 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 782 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
1113 capture_time_ms, kAllowRetransmission, 783 kAllowRetransmission,
1114 RtpPacketSender::kNormalPriority)); 784 RtpPacketSender::kNormalPriority));
1115 785
1116 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, 786 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false,
1117 PacketInfo::kNotAProbe); 787 PacketInfo::kNotAProbe);
1118 // Process send bucket. 788 // Process send bucket.
1119 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 789 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_);
1120 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 790 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
1121 // Parse sent packet. 791 // Parse sent packet.
1122 ASSERT_TRUE( 792 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, packet_size,
1123 rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header)); 793 &rtp_header));
1124 794
1125 // Verify sequence number and timestamp. 795 // Verify sequence number and timestamp.
1126 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 796 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
1127 EXPECT_EQ(timestamp, rtp_header.timestamp); 797 EXPECT_EQ(timestamp, rtp_header.timestamp);
1128 // Verify transmission time offset. This packet is sent without delay. 798 // Verify transmission time offset. This packet is sent without delay.
1129 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 799 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
1130 uint64_t expected_send_time = 800 uint64_t expected_send_time =
1131 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 801 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
1132 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 802 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
1133 } 803 }
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after
1752 // Must be at least 5ms in between retransmission attempts. 1422 // Must be at least 5ms in between retransmission attempts.
1753 fake_clock_.AdvanceTimeMilliseconds(5); 1423 fake_clock_.AdvanceTimeMilliseconds(5);
1754 1424
1755 // Resending should not work, bandwidth exceeded. 1425 // Resending should not work, bandwidth exceeded.
1756 rtp_sender_->OnReceivedNack(sequence_numbers, 0); 1426 rtp_sender_->OnReceivedNack(sequence_numbers, 0);
1757 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_); 1427 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_);
1758 } 1428 }
1759 1429
1760 // Verify that all packets of a frame have CVO byte set. 1430 // Verify that all packets of a frame have CVO byte set.
1761 TEST_F(RtpSenderVideoTest, SendVideoWithCVO) { 1431 TEST_F(RtpSenderVideoTest, SendVideoWithCVO) {
1432 uint8_t kFrame[kMaxPacketLength];
1762 RTPVideoHeader hdr = {0}; 1433 RTPVideoHeader hdr = {0};
1763 hdr.rotation = kVideoRotation_90; 1434 hdr.rotation = kVideoRotation_90;
1764 1435
1765 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1436 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1766 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1437 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1767 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); 1438 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
1768 1439
1769 EXPECT_EQ( 1440 EXPECT_EQ(
1770 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), 1441 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength),
1771 rtp_sender_->RtpHeaderExtensionLength()); 1442 rtp_sender_->RtpHeaderExtensionLength());
1772 1443
1773 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1444 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1774 kTimestamp, 0, packet_, sizeof(packet_), nullptr, 1445 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr,
1775 &hdr); 1446 &hdr);
1776 1447
1777 RtpHeaderExtensionMap map; 1448 RtpHeaderExtensionMap map;
1778 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); 1449 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
1779 1450
1780 // Verify that this packet does have CVO byte. 1451 // Verify that this packet does have CVO byte.
1781 VerifyCVOPacket( 1452 VerifyCVOPacket(
1782 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), 1453 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()),
1783 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); 1454 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation);
1784 1455
(...skipping 19 matching lines...) Expand all
1804 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); 1475 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0));
1805 EXPECT_EQ(kVideoRotation_90, 1476 EXPECT_EQ(kVideoRotation_90,
1806 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); 1477 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1));
1807 EXPECT_EQ(kVideoRotation_180, 1478 EXPECT_EQ(kVideoRotation_180,
1808 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); 1479 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2));
1809 EXPECT_EQ(kVideoRotation_270, 1480 EXPECT_EQ(kVideoRotation_270,
1810 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); 1481 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3));
1811 } 1482 }
1812 1483
1813 } // namespace webrtc 1484 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698