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

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

Issue 2447103002: Move parsing from tests to TestTransport in RTPSenderTests (Closed)
Patch Set: Created 4 years, 1 month 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 | « no previous file | 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
11 #include <memory> 11 #include <memory>
12 #include <vector> 12 #include <vector>
13 13
14 #include "webrtc/base/buffer.h" 14 #include "webrtc/base/buffer.h"
15 #include "webrtc/base/rate_limiter.h" 15 #include "webrtc/base/rate_limiter.h"
16 #include "webrtc/call/mock/mock_rtc_event_log.h" 16 #include "webrtc/call/mock/mock_rtc_event_log.h"
17 #include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h" 17 #include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h"
18 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 18 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" 19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" 20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
21 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h" 21 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h"
22 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" 22 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
23 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" 23 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h" 25 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" 26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" 27 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h"
27 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 28 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
28 #include "webrtc/system_wrappers/include/stl_util.h" 29 #include "webrtc/system_wrappers/include/stl_util.h"
29 #include "webrtc/test/gmock.h" 30 #include "webrtc/test/gmock.h"
30 #include "webrtc/test/gtest.h" 31 #include "webrtc/test/gtest.h"
31 #include "webrtc/test/mock_transport.h" 32 #include "webrtc/test/mock_transport.h"
32 #include "webrtc/typedefs.h" 33 #include "webrtc/typedefs.h"
33 34
(...skipping 14 matching lines...) Expand all
48 const int kAudioPayload = 103; 49 const int kAudioPayload = 103;
49 const uint64_t kStartTime = 123456789; 50 const uint64_t kStartTime = 123456789;
50 const size_t kMaxPaddingSize = 224u; 51 const size_t kMaxPaddingSize = 224u;
51 const int kVideoRotationExtensionId = 5; 52 const int kVideoRotationExtensionId = 5;
52 const size_t kGenericHeaderLength = 1; 53 const size_t kGenericHeaderLength = 1;
53 const uint8_t kPayloadData[] = {47, 11, 32, 93, 89}; 54 const uint8_t kPayloadData[] = {47, 11, 32, 93, 89};
54 55
55 using ::testing::_; 56 using ::testing::_;
56 using ::testing::ElementsAreArray; 57 using ::testing::ElementsAreArray;
57 58
58 const uint8_t* GetPayloadData(const RTPHeader& rtp_header,
59 const uint8_t* packet) {
60 return packet + rtp_header.headerLength;
61 }
62
63 size_t GetPayloadDataLength(const RTPHeader& rtp_header,
64 const size_t packet_length) {
65 return packet_length - rtp_header.headerLength - rtp_header.paddingLength;
66 }
67
68 uint64_t ConvertMsToAbsSendTime(int64_t time_ms) { 59 uint64_t ConvertMsToAbsSendTime(int64_t time_ms) {
69 return (((time_ms << 18) + 500) / 1000) & 0x00ffffff; 60 return (((time_ms << 18) + 500) / 1000) & 0x00ffffff;
70 } 61 }
71 62
72 class LoopbackTransportTest : public webrtc::Transport { 63 class LoopbackTransportTest : public webrtc::Transport {
73 public: 64 public:
74 LoopbackTransportTest() 65 LoopbackTransportTest() : total_bytes_sent_(0), last_packet_id_(-1) {
75 : packets_sent_(0), 66 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset,
76 last_sent_packet_len_(0), 67 kTransmissionTimeOffsetExtensionId);
77 total_bytes_sent_(0), 68 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime,
78 last_sent_packet_(nullptr), 69 kAbsoluteSendTimeExtensionId);
79 last_packet_id_(-1) {} 70 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber,
71 kTransportSequenceNumberExtensionId);
72 receivers_extensions_.Register(kRtpExtensionVideoRotation,
73 kVideoRotationExtensionId);
74 receivers_extensions_.Register(kRtpExtensionAudioLevel,
75 kAudioLevelExtensionId);
76 }
80 77
81 ~LoopbackTransportTest() {
82 STLDeleteContainerPointers(sent_packets_.begin(), sent_packets_.end());
83 }
84 bool SendRtp(const uint8_t* data, 78 bool SendRtp(const uint8_t* data,
85 size_t len, 79 size_t len,
86 const PacketOptions& options) override { 80 const PacketOptions& options) override {
87 packets_sent_++;
88 rtc::Buffer* buffer =
89 new rtc::Buffer(reinterpret_cast<const uint8_t*>(data), len);
90 last_sent_packet_ = buffer->data();
91 last_sent_packet_len_ = len;
92 last_packet_id_ = options.packet_id; 81 last_packet_id_ = options.packet_id;
93 total_bytes_sent_ += len; 82 total_bytes_sent_ += len;
94 sent_packets_.push_back(buffer); 83 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_));
84 EXPECT_TRUE(sent_packets_.back().Parse(data, len));
95 return true; 85 return true;
96 } 86 }
97 bool SendRtcp(const uint8_t* data, size_t len) override { return false; } 87 bool SendRtcp(const uint8_t* data, size_t len) override { return false; }
98 int packets_sent_; 88 const RtpPacketReceived& last_sent_packet() { return sent_packets_.back(); }
99 size_t last_sent_packet_len_; 89 int packets_sent() { return sent_packets_.size(); }
90
100 size_t total_bytes_sent_; 91 size_t total_bytes_sent_;
101 uint8_t* last_sent_packet_;
102 int last_packet_id_; 92 int last_packet_id_;
103 std::vector<rtc::Buffer*> sent_packets_; 93 std::vector<RtpPacketReceived> sent_packets_;
94
95 private:
96 RtpHeaderExtensionMap receivers_extensions_;
104 }; 97 };
105 98
106 } // namespace 99 } // namespace
107 100
108 class MockRtpPacketSender : public RtpPacketSender { 101 class MockRtpPacketSender : public RtpPacketSender {
109 public: 102 public:
110 MockRtpPacketSender() {} 103 MockRtpPacketSender() {}
111 virtual ~MockRtpPacketSender() {} 104 virtual ~MockRtpPacketSender() {}
112 105
113 MOCK_METHOD6(InsertPacket, 106 MOCK_METHOD6(InsertPacket,
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 class RtpSenderVideoTest : public RtpSenderTest { 236 class RtpSenderVideoTest : public RtpSenderTest {
244 protected: 237 protected:
245 void SetUp() override { 238 void SetUp() override {
246 // TODO(pbos): Set up to use pacer. 239 // TODO(pbos): Set up to use pacer.
247 SetUpRtpSender(false); 240 SetUpRtpSender(false);
248 rtp_sender_video_.reset( 241 rtp_sender_video_.reset(
249 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); 242 new RTPSenderVideo(&fake_clock_, rtp_sender_.get()));
250 } 243 }
251 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; 244 std::unique_ptr<RTPSenderVideo> rtp_sender_video_;
252 245
253 void VerifyCVOPacket(uint8_t* data, 246 void VerifyCVOPacket(const RtpPacketReceived& rtp_packet,
254 size_t len,
255 bool expect_cvo, 247 bool expect_cvo,
256 RtpHeaderExtensionMap* map,
257 uint16_t seq_num, 248 uint16_t seq_num,
258 VideoRotation rotation) { 249 VideoRotation expected_rotation) {
259 webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len); 250 EXPECT_EQ(payload_, rtp_packet.PayloadType());
260 251 EXPECT_EQ(seq_num, rtp_packet.SequenceNumber());
261 webrtc::RTPHeader rtp_header; 252 EXPECT_EQ(kTimestamp, rtp_packet.Timestamp());
262 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map)); 253 EXPECT_EQ(rtp_sender_->SSRC(), rtp_packet.Ssrc());
263 ASSERT_FALSE(rtp_parser.RTCP()); 254 EXPECT_EQ(0U, rtp_packet.Csrcs().size());
264 EXPECT_EQ(payload_, rtp_header.payloadType); 255 EXPECT_EQ(0U, rtp_packet.padding_size());
265 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 256 VideoRotation actual_rotation;
266 EXPECT_EQ(kTimestamp, rtp_header.timestamp); 257 EXPECT_TRUE(rtp_packet.GetExtension<VideoOrientation>(&actual_rotation));
267 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); 258 EXPECT_EQ(expected_rotation, actual_rotation);
268 EXPECT_EQ(0, rtp_header.numCSRCs);
269 EXPECT_EQ(0U, rtp_header.paddingLength);
270 EXPECT_EQ(rotation, rtp_header.extension.videoRotation);
271 } 259 }
272 }; 260 };
273 261
274 TEST_F(RtpSenderTestWithoutPacer, 262 TEST_F(RtpSenderTestWithoutPacer,
275 RegisterRtpTransmissionTimeOffsetHeaderExtension) { 263 RegisterRtpTransmissionTimeOffsetHeaderExtension) {
276 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); 264 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength());
277 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 265 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
278 kRtpExtensionTransmissionTimeOffset, 266 kRtpExtensionTransmissionTimeOffset,
279 kTransmissionTimeOffsetExtensionId)); 267 kTransmissionTimeOffsetExtensionId));
280 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength, 268 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength,
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 constexpr size_t kPaddingSize = 100; 442 constexpr size_t kPaddingSize = 100;
455 auto packet = rtp_sender_->AllocatePacket(); 443 auto packet = rtp_sender_->AllocatePacket();
456 ASSERT_TRUE(packet); 444 ASSERT_TRUE(packet);
457 packet->SetMarker(true); 445 packet->SetMarker(true);
458 packet->SetTimestamp(kTimestamp); 446 packet->SetTimestamp(kTimestamp);
459 447
460 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); 448 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
461 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, -1)); 449 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, -1));
462 450
463 ASSERT_EQ(1u, transport_.sent_packets_.size()); 451 ASSERT_EQ(1u, transport_.sent_packets_.size());
464 // Parse the padding packet and verify its timestamp. 452 // Verify padding packet timestamp.
465 RtpPacketToSend padding_packet(nullptr); 453 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp());
466 ASSERT_TRUE(padding_packet.Parse(transport_.sent_packets_[0]->data(),
467 transport_.sent_packets_[0]->size()));
468 EXPECT_EQ(kTimestamp, padding_packet.Timestamp());
469 } 454 }
470 455
471 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { 456 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) {
472 rtp_sender_.reset(new RTPSender( 457 rtp_sender_.reset(new RTPSender(
473 false, &fake_clock_, &transport_, nullptr, 458 false, &fake_clock_, &transport_, nullptr,
474 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, 459 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr,
475 &mock_rtc_event_log_, &send_packet_observer_, 460 &mock_rtc_event_log_, &send_packet_observer_,
476 &retransmission_rate_limiter_)); 461 &retransmission_rate_limiter_));
477 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 462 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
478 kRtpExtensionTransportSequenceNumber, 463 kRtpExtensionTransportSequenceNumber,
479 kTransportSequenceNumberExtensionId)); 464 kTransportSequenceNumberExtensionId));
480 465
481 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 466 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
482 .WillOnce(testing::Return(kTransportSequenceNumber)); 467 .WillOnce(testing::Return(kTransportSequenceNumber));
483 EXPECT_CALL(send_packet_observer_, 468 EXPECT_CALL(send_packet_observer_,
484 OnSendPacket(kTransportSequenceNumber, _, _)) 469 OnSendPacket(kTransportSequenceNumber, _, _))
485 .Times(1); 470 .Times(1);
486 EXPECT_CALL(feedback_observer_, 471 EXPECT_CALL(feedback_observer_,
487 AddPacket(kTransportSequenceNumber, 472 AddPacket(kTransportSequenceNumber,
488 sizeof(kPayloadData) + kGenericHeaderLength, 473 sizeof(kPayloadData) + kGenericHeaderLength,
489 PacketInfo::kNotAProbe)) 474 PacketInfo::kNotAProbe))
490 .Times(1); 475 .Times(1);
491 476
492 SendGenericPayload(); 477 SendGenericPayload();
493 478
494 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 479 const auto& packet = transport_.last_sent_packet();
495 transport_.last_sent_packet_len_); 480 uint16_t transport_seq_no;
496 webrtc::RTPHeader rtp_header; 481 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no));
497 RtpHeaderExtensionMap map; 482 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no);
498 map.Register(kRtpExtensionTransportSequenceNumber, 483 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no);
499 kTransportSequenceNumberExtensionId);
500 EXPECT_TRUE(rtp_parser.Parse(&rtp_header, &map));
501 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber);
502 EXPECT_EQ(kTransportSequenceNumber,
503 rtp_header.extension.transportSequenceNumber);
504 EXPECT_EQ(transport_.last_packet_id_,
505 rtp_header.extension.transportSequenceNumber);
506 } 484 }
507 485
508 TEST_F(RtpSenderTestWithoutPacer, NoAllocationIfNotRegistered) { 486 TEST_F(RtpSenderTestWithoutPacer, NoAllocationIfNotRegistered) {
509 SendGenericPayload(); 487 SendGenericPayload();
510 } 488 }
511 489
512 TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) { 490 TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) {
513 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 491 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
514 kRtpExtensionTransportSequenceNumber, 492 kRtpExtensionTransportSequenceNumber,
515 kTransportSequenceNumberExtensionId)); 493 kTransportSequenceNumberExtensionId));
(...skipping 29 matching lines...) Expand all
545 EXPECT_CALL( 523 EXPECT_CALL(
546 feedback_observer_, 524 feedback_observer_,
547 AddPacket(kTransportSequenceNumber, 525 AddPacket(kTransportSequenceNumber,
548 sizeof(kPayloadData) + kGenericHeaderLength, kProbeClusterId)) 526 sizeof(kPayloadData) + kGenericHeaderLength, kProbeClusterId))
549 .Times(1); 527 .Times(1);
550 528
551 SendGenericPayload(); 529 SendGenericPayload();
552 rtp_sender_->TimeToSendPacket(seq_num, fake_clock_.TimeInMilliseconds(), 530 rtp_sender_->TimeToSendPacket(seq_num, fake_clock_.TimeInMilliseconds(),
553 false, kProbeClusterId); 531 false, kProbeClusterId);
554 532
555 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 533 const auto& packet = transport_.last_sent_packet();
556 transport_.last_sent_packet_len_); 534 uint16_t transport_seq_no;
557 webrtc::RTPHeader rtp_header; 535 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no));
558 RtpHeaderExtensionMap map; 536 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no);
559 map.Register(kRtpExtensionTransportSequenceNumber, 537 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no);
560 kTransportSequenceNumberExtensionId);
561 EXPECT_TRUE(rtp_parser.Parse(&rtp_header, &map));
562 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber);
563 EXPECT_EQ(kTransportSequenceNumber,
564 rtp_header.extension.transportSequenceNumber);
565 EXPECT_EQ(transport_.last_packet_id_,
566 rtp_header.extension.transportSequenceNumber);
567 } 538 }
568 539
569 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { 540 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
570 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 541 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
571 _, kSeqNum, _, _, _)); 542 _, kSeqNum, _, _, _));
572 EXPECT_CALL(mock_rtc_event_log_, 543 EXPECT_CALL(mock_rtc_event_log_,
573 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 544 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
574 545
575 rtp_sender_->SetStorePacketsStatus(true, 10); 546 rtp_sender_->SetStorePacketsStatus(true, 10);
576 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 547 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
577 kRtpExtensionTransmissionTimeOffset, 548 kRtpExtensionTransmissionTimeOffset,
578 kTransmissionTimeOffsetExtensionId)); 549 kTransmissionTimeOffsetExtensionId));
579 EXPECT_EQ( 550 EXPECT_EQ(
580 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 551 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
581 kAbsoluteSendTimeExtensionId)); 552 kAbsoluteSendTimeExtensionId));
582 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 553 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
583 auto packet = 554 auto packet =
584 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms); 555 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
585 size_t packet_size = packet->size(); 556 size_t packet_size = packet->size();
586 557
587 // Packet should be stored in a send bucket. 558 // Packet should be stored in a send bucket.
588 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 559 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
589 kAllowRetransmission, 560 kAllowRetransmission,
590 RtpPacketSender::kNormalPriority)); 561 RtpPacketSender::kNormalPriority));
591 562
592 EXPECT_EQ(0, transport_.packets_sent_); 563 EXPECT_EQ(0, transport_.packets_sent());
593 564
594 const int kStoredTimeInMs = 100; 565 const int kStoredTimeInMs = 100;
595 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 566 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
596 567
597 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 568 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
598 PacketInfo::kNotAProbe); 569 PacketInfo::kNotAProbe);
599 570
600 // Process send bucket. Packet should now be sent. 571 // Process send bucket. Packet should now be sent.
601 EXPECT_EQ(1, transport_.packets_sent_); 572 EXPECT_EQ(1, transport_.packets_sent());
602 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_); 573 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
603 // Parse sent packet. 574
604 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
605 packet_size);
606 webrtc::RTPHeader rtp_header; 575 webrtc::RTPHeader rtp_header;
607 RtpHeaderExtensionMap map; 576 transport_.last_sent_packet().GetHeader(&rtp_header);
608 map.Register(kRtpExtensionTransmissionTimeOffset,
609 kTransmissionTimeOffsetExtensionId);
610 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
611 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
612 ASSERT_TRUE(valid_rtp_header);
613 577
614 // Verify transmission time offset. 578 // Verify transmission time offset.
615 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 579 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
616 uint64_t expected_send_time = 580 uint64_t expected_send_time =
617 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 581 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
618 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 582 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
619 } 583 }
620 584
621 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { 585 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
622 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 586 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
(...skipping 11 matching lines...) Expand all
634 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 598 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
635 auto packet = 599 auto packet =
636 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms); 600 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
637 size_t packet_size = packet->size(); 601 size_t packet_size = packet->size();
638 602
639 // Packet should be stored in a send bucket. 603 // Packet should be stored in a send bucket.
640 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 604 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
641 kAllowRetransmission, 605 kAllowRetransmission,
642 RtpPacketSender::kNormalPriority)); 606 RtpPacketSender::kNormalPriority));
643 607
644 EXPECT_EQ(0, transport_.packets_sent_); 608 EXPECT_EQ(0, transport_.packets_sent());
645 609
646 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 610 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
647 _, kSeqNum, _, _, _)); 611 _, kSeqNum, _, _, _));
648 612
649 const int kStoredTimeInMs = 100; 613 const int kStoredTimeInMs = 100;
650 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 614 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
651 615
652 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum)); 616 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum));
653 EXPECT_EQ(0, transport_.packets_sent_); 617 EXPECT_EQ(0, transport_.packets_sent());
654 618
655 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 619 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
656 PacketInfo::kNotAProbe); 620 PacketInfo::kNotAProbe);
657 621
658 // Process send bucket. Packet should now be sent. 622 // Process send bucket. Packet should now be sent.
659 EXPECT_EQ(1, transport_.packets_sent_); 623 EXPECT_EQ(1, transport_.packets_sent());
660 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_); 624 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
661 625
662 // Parse sent packet.
663 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
664 packet_size);
665 webrtc::RTPHeader rtp_header; 626 webrtc::RTPHeader rtp_header;
666 RtpHeaderExtensionMap map; 627 transport_.last_sent_packet().GetHeader(&rtp_header);
667 map.Register(kRtpExtensionTransmissionTimeOffset,
668 kTransmissionTimeOffsetExtensionId);
669 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
670 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
671 ASSERT_TRUE(valid_rtp_header);
672 628
673 // Verify transmission time offset. 629 // Verify transmission time offset.
674 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 630 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
675 uint64_t expected_send_time = 631 uint64_t expected_send_time =
676 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 632 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
677 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 633 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
678 } 634 }
679 635
680 // This test sends 1 regular video packet, then 4 padding packets, and then 636 // This test sends 1 regular video packet, then 4 padding packets, and then
681 // 1 more regular packet. 637 // 1 more regular packet.
(...skipping 12 matching lines...) Expand all
694 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 650 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
695 kRtpExtensionTransmissionTimeOffset, 651 kRtpExtensionTransmissionTimeOffset,
696 kTransmissionTimeOffsetExtensionId)); 652 kTransmissionTimeOffsetExtensionId));
697 rtp_header_len += 4; // 4 bytes extension. 653 rtp_header_len += 4; // 4 bytes extension.
698 EXPECT_EQ( 654 EXPECT_EQ(
699 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 655 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
700 kAbsoluteSendTimeExtensionId)); 656 kAbsoluteSendTimeExtensionId));
701 rtp_header_len += 4; // 4 bytes extension. 657 rtp_header_len += 4; // 4 bytes extension.
702 rtp_header_len += 4; // 4 extra bytes common to all extension headers. 658 rtp_header_len += 4; // 4 extra bytes common to all extension headers.
703 659
704 // Create and set up parser.
705 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser(
706 webrtc::RtpHeaderParser::Create());
707 ASSERT_TRUE(rtp_parser.get() != nullptr);
708 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
709 kTransmissionTimeOffsetExtensionId);
710 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
711 kAbsoluteSendTimeExtensionId);
712 webrtc::RTPHeader rtp_header; 660 webrtc::RTPHeader rtp_header;
713 661
714 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 662 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
715 auto packet = 663 auto packet =
716 BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms); 664 BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
717 const uint32_t media_packet_timestamp = timestamp; 665 const uint32_t media_packet_timestamp = timestamp;
718 size_t packet_size = packet->size(); 666 size_t packet_size = packet->size();
719 667
720 // Packet should be stored in a send bucket. 668 // Packet should be stored in a send bucket.
721 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 669 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
722 kAllowRetransmission, 670 kAllowRetransmission,
723 RtpPacketSender::kNormalPriority)); 671 RtpPacketSender::kNormalPriority));
724 672
725 int total_packets_sent = 0; 673 int total_packets_sent = 0;
726 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); 674 EXPECT_EQ(total_packets_sent, transport_.packets_sent());
727 675
728 const int kStoredTimeInMs = 100; 676 const int kStoredTimeInMs = 100;
729 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 677 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
730 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, 678 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false,
731 PacketInfo::kNotAProbe); 679 PacketInfo::kNotAProbe);
732 // Packet should now be sent. This test doesn't verify the regular video 680 // Packet should now be sent. This test doesn't verify the regular video
733 // packet, since it is tested in another test. 681 // packet, since it is tested in another test.
734 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 682 EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
735 timestamp += 90 * kStoredTimeInMs; 683 timestamp += 90 * kStoredTimeInMs;
736 684
737 // Send padding 4 times, waiting 50 ms between each. 685 // Send padding 4 times, waiting 50 ms between each.
738 for (int i = 0; i < 4; ++i) { 686 for (int i = 0; i < 4; ++i) {
739 const int kPaddingPeriodMs = 50; 687 const int kPaddingPeriodMs = 50;
740 const size_t kPaddingBytes = 100; 688 const size_t kPaddingBytes = 100;
741 const size_t kMaxPaddingLength = 224; // Value taken from rtp_sender.cc. 689 const size_t kMaxPaddingLength = 224; // Value taken from rtp_sender.cc.
742 // Padding will be forced to full packets. 690 // Padding will be forced to full packets.
743 EXPECT_EQ(kMaxPaddingLength, rtp_sender_->TimeToSendPadding( 691 EXPECT_EQ(kMaxPaddingLength, rtp_sender_->TimeToSendPadding(
744 kPaddingBytes, PacketInfo::kNotAProbe)); 692 kPaddingBytes, PacketInfo::kNotAProbe));
745 693
746 // Process send bucket. Padding should now be sent. 694 // Process send bucket. Padding should now be sent.
747 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 695 EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
748 EXPECT_EQ(kMaxPaddingLength + rtp_header_len, 696 EXPECT_EQ(kMaxPaddingLength + rtp_header_len,
749 transport_.last_sent_packet_len_); 697 transport_.last_sent_packet().size());
750 // Parse sent packet. 698
751 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, 699 transport_.last_sent_packet().GetHeader(&rtp_header);
752 transport_.last_sent_packet_len_,
753 &rtp_header));
754 EXPECT_EQ(kMaxPaddingLength, rtp_header.paddingLength); 700 EXPECT_EQ(kMaxPaddingLength, rtp_header.paddingLength);
755 701
756 // Verify sequence number and timestamp. The timestamp should be the same 702 // Verify sequence number and timestamp. The timestamp should be the same
757 // as the last media packet. 703 // as the last media packet.
758 EXPECT_EQ(seq_num++, rtp_header.sequenceNumber); 704 EXPECT_EQ(seq_num++, rtp_header.sequenceNumber);
759 EXPECT_EQ(media_packet_timestamp, rtp_header.timestamp); 705 EXPECT_EQ(media_packet_timestamp, rtp_header.timestamp);
760 // Verify transmission time offset. 706 // Verify transmission time offset.
761 int offset = timestamp - media_packet_timestamp; 707 int offset = timestamp - media_packet_timestamp;
762 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); 708 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset);
763 uint64_t expected_send_time = 709 uint64_t expected_send_time =
(...skipping 12 matching lines...) Expand all
776 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); 722 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _));
777 723
778 // Packet should be stored in a send bucket. 724 // Packet should be stored in a send bucket.
779 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 725 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
780 kAllowRetransmission, 726 kAllowRetransmission,
781 RtpPacketSender::kNormalPriority)); 727 RtpPacketSender::kNormalPriority));
782 728
783 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, 729 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false,
784 PacketInfo::kNotAProbe); 730 PacketInfo::kNotAProbe);
785 // Process send bucket. 731 // Process send bucket.
786 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 732 EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
787 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_); 733 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
788 // Parse sent packet. 734 transport_.last_sent_packet().GetHeader(&rtp_header);
789 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, packet_size,
790 &rtp_header));
791 735
792 // Verify sequence number and timestamp. 736 // Verify sequence number and timestamp.
793 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 737 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
794 EXPECT_EQ(timestamp, rtp_header.timestamp); 738 EXPECT_EQ(timestamp, rtp_header.timestamp);
795 // Verify transmission time offset. This packet is sent without delay. 739 // Verify transmission time offset. This packet is sent without delay.
796 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 740 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
797 uint64_t expected_send_time = 741 uint64_t expected_send_time =
798 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 742 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
799 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 743 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
800 } 744 }
801 745
802 TEST_F(RtpSenderTest, OnSendPacketUpdated) { 746 TEST_F(RtpSenderTest, OnSendPacketUpdated) {
803 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 747 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
804 kRtpExtensionTransportSequenceNumber, 748 kRtpExtensionTransportSequenceNumber,
805 kTransportSequenceNumberExtensionId)); 749 kTransportSequenceNumberExtensionId));
806 rtp_sender_->SetStorePacketsStatus(true, 10); 750 rtp_sender_->SetStorePacketsStatus(true, 10);
807 751
808 EXPECT_CALL(send_packet_observer_, 752 EXPECT_CALL(send_packet_observer_,
809 OnSendPacket(kTransportSequenceNumber, _, _)) 753 OnSendPacket(kTransportSequenceNumber, _, _))
810 .Times(1); 754 .Times(1);
811 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 755 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
812 .WillOnce(testing::Return(kTransportSequenceNumber)); 756 .WillOnce(testing::Return(kTransportSequenceNumber));
813 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); 757 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
814 758
815 SendGenericPayload(); // Packet passed to pacer. 759 SendGenericPayload(); // Packet passed to pacer.
816 const bool kIsRetransmit = false; 760 const bool kIsRetransmit = false;
817 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), 761 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
818 kIsRetransmit, PacketInfo::kNotAProbe); 762 kIsRetransmit, PacketInfo::kNotAProbe);
819 EXPECT_EQ(1, transport_.packets_sent_); 763 EXPECT_EQ(1, transport_.packets_sent());
820 } 764 }
821 765
822 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { 766 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) {
823 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 767 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
824 kRtpExtensionTransportSequenceNumber, 768 kRtpExtensionTransportSequenceNumber,
825 kTransportSequenceNumberExtensionId)); 769 kTransportSequenceNumberExtensionId));
826 rtp_sender_->SetStorePacketsStatus(true, 10); 770 rtp_sender_->SetStorePacketsStatus(true, 10);
827 771
828 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); 772 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
829 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 773 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
830 .WillOnce(testing::Return(kTransportSequenceNumber)); 774 .WillOnce(testing::Return(kTransportSequenceNumber));
831 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); 775 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
832 776
833 SendGenericPayload(); // Packet passed to pacer. 777 SendGenericPayload(); // Packet passed to pacer.
834 const bool kIsRetransmit = true; 778 const bool kIsRetransmit = true;
835 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), 779 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
836 kIsRetransmit, PacketInfo::kNotAProbe); 780 kIsRetransmit, PacketInfo::kNotAProbe);
837 EXPECT_EQ(1, transport_.packets_sent_); 781 EXPECT_EQ(1, transport_.packets_sent());
838 } 782 }
839 783
840 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { 784 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) {
841 rtp_sender_.reset(new RTPSender( 785 rtp_sender_.reset(new RTPSender(
842 false, &fake_clock_, &transport_, &mock_paced_sender_, 786 false, &fake_clock_, &transport_, &mock_paced_sender_,
843 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, 787 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr,
844 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_)); 788 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_));
845 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 789 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
846 kRtpExtensionTransportSequenceNumber, 790 kRtpExtensionTransportSequenceNumber,
847 kTransportSequenceNumberExtensionId)); 791 kTransportSequenceNumberExtensionId));
848 rtp_sender_->SetSequenceNumber(kSeqNum); 792 rtp_sender_->SetSequenceNumber(kSeqNum);
849 rtp_sender_->SetStorePacketsStatus(true, 10); 793 rtp_sender_->SetStorePacketsStatus(true, 10);
850 794
851 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); 795 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
852 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); 796 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
853 797
854 SendGenericPayload(); // Packet passed to pacer. 798 SendGenericPayload(); // Packet passed to pacer.
855 const bool kIsRetransmit = false; 799 const bool kIsRetransmit = false;
856 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), 800 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
857 kIsRetransmit, PacketInfo::kNotAProbe); 801 kIsRetransmit, PacketInfo::kNotAProbe);
858 EXPECT_EQ(1, transport_.packets_sent_); 802 EXPECT_EQ(1, transport_.packets_sent());
859 } 803 }
860 804
861 TEST_F(RtpSenderTest, SendRedundantPayloads) { 805 TEST_F(RtpSenderTest, SendRedundantPayloads) {
862 MockTransport transport; 806 MockTransport transport;
863 rtp_sender_.reset(new RTPSender( 807 rtp_sender_.reset(new RTPSender(
864 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, 808 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr,
865 nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, 809 nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr,
866 &retransmission_rate_limiter_)); 810 &retransmission_rate_limiter_));
867 811
868 rtp_sender_->SetSequenceNumber(kSeqNum); 812 rtp_sender_->SetSequenceNumber(kSeqNum);
869 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); 813 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
870 814
871 uint16_t seq_num = kSeqNum; 815 uint16_t seq_num = kSeqNum;
872 rtp_sender_->SetStorePacketsStatus(true, 10); 816 rtp_sender_->SetStorePacketsStatus(true, 10);
873 int32_t rtp_header_len = kRtpHeaderSize; 817 int32_t rtp_header_len = kRtpHeaderSize;
874 EXPECT_EQ( 818 EXPECT_EQ(
875 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 819 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
876 kAbsoluteSendTimeExtensionId)); 820 kAbsoluteSendTimeExtensionId));
877 rtp_header_len += 4; // 4 bytes extension. 821 rtp_header_len += 4; // 4 bytes extension.
878 rtp_header_len += 4; // 4 extra bytes common to all extension headers. 822 rtp_header_len += 4; // 4 extra bytes common to all extension headers.
879 823
880 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 824 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
881 rtp_sender_->SetRtxSsrc(1234); 825 rtp_sender_->SetRtxSsrc(1234);
882 826
883 // Create and set up parser.
884 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser(
885 webrtc::RtpHeaderParser::Create());
886 ASSERT_TRUE(rtp_parser.get() != nullptr);
887 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
888 kTransmissionTimeOffsetExtensionId);
889 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
890 kAbsoluteSendTimeExtensionId);
891 const size_t kNumPayloadSizes = 10; 827 const size_t kNumPayloadSizes = 10;
892 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, 828 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700,
893 750, 800, 850, 900, 950}; 829 750, 800, 850, 900, 950};
894 // Expect all packets go through the pacer. 830 // Expect all packets go through the pacer.
895 EXPECT_CALL(mock_paced_sender_, 831 EXPECT_CALL(mock_paced_sender_,
896 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) 832 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
897 .Times(kNumPayloadSizes); 833 .Times(kNumPayloadSizes);
898 EXPECT_CALL(mock_rtc_event_log_, 834 EXPECT_CALL(mock_rtc_event_log_,
899 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 835 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
900 .Times(kNumPayloadSizes); 836 .Times(kNumPayloadSizes);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 const uint8_t payload_type = 127; 876 const uint8_t payload_type = 127;
941 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 877 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
942 0, 1500)); 878 0, 1500));
943 uint8_t payload[] = {47, 11, 32, 93, 89}; 879 uint8_t payload[] = {47, 11, 32, 93, 89};
944 880
945 // Send keyframe 881 // Send keyframe
946 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 882 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234,
947 4321, payload, sizeof(payload), 883 4321, payload, sizeof(payload),
948 nullptr, nullptr, nullptr)); 884 nullptr, nullptr, nullptr));
949 885
950 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 886 const uint8_t* payload_data = transport_.last_sent_packet().payload();
951 transport_.last_sent_packet_len_);
952 webrtc::RTPHeader rtp_header;
953 ASSERT_TRUE(rtp_parser.Parse(&rtp_header));
954
955 const uint8_t* payload_data =
956 GetPayloadData(rtp_header, transport_.last_sent_packet_);
957 uint8_t generic_header = *payload_data++; 887 uint8_t generic_header = *payload_data++;
958 888
959 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), 889 ASSERT_EQ(sizeof(payload) + sizeof(generic_header),
960 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 890 transport_.last_sent_packet().payload_size());
961 891
962 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 892 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
963 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 893 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
964 894
965 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 895 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
966 896
967 // Send delta frame 897 // Send delta frame
968 payload[0] = 13; 898 payload[0] = 13;
969 payload[1] = 42; 899 payload[1] = 42;
970 payload[4] = 13; 900 payload[4] = 13;
971 901
972 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 902 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
973 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), 903 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload),
974 nullptr, nullptr, nullptr)); 904 nullptr, nullptr, nullptr));
975 905
976 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, 906 payload_data = transport_.last_sent_packet().payload();
977 transport_.last_sent_packet_len_);
978 ASSERT_TRUE(rtp_parser.Parse(&rtp_header));
979
980 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_);
981 generic_header = *payload_data++; 907 generic_header = *payload_data++;
982 908
983 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 909 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
984 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 910 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
985 911
986 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), 912 ASSERT_EQ(sizeof(payload) + sizeof(generic_header),
987 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 913 transport_.last_sent_packet().payload_size());
988 914
989 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 915 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
990 } 916 }
991 917
992 TEST_F(RtpSenderTest, FrameCountCallbacks) { 918 TEST_F(RtpSenderTest, FrameCountCallbacks) {
993 class TestCallback : public FrameCountObserver { 919 class TestCallback : public FrameCountObserver {
994 public: 920 public:
995 TestCallback() : FrameCountObserver(), num_calls_(0), ssrc_(0) {} 921 TestCallback() : FrameCountObserver(), num_calls_(0), ssrc_(0) {}
996 virtual ~TestCallback() {} 922 virtual ~TestCallback() {}
997 923
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
1235 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1161 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1236 const uint8_t payload_type = 127; 1162 const uint8_t payload_type = 127;
1237 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1163 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1238 0, 1500)); 1164 0, 1500));
1239 uint8_t payload[] = {47, 11, 32, 93, 89}; 1165 uint8_t payload[] = {47, 11, 32, 93, 89};
1240 1166
1241 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1167 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1242 kAudioFrameCN, payload_type, 1234, 4321, payload, 1168 kAudioFrameCN, payload_type, 1234, 4321, payload,
1243 sizeof(payload), nullptr, nullptr, nullptr)); 1169 sizeof(payload), nullptr, nullptr, nullptr));
1244 1170
1245 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1171 const uint8_t* payload_data = transport_.last_sent_packet().payload();
1246 transport_.last_sent_packet_len_);
1247 webrtc::RTPHeader rtp_header;
1248 ASSERT_TRUE(rtp_parser.Parse(&rtp_header));
1249 1172
1250 const uint8_t* payload_data = 1173 ASSERT_EQ(sizeof(payload), transport_.last_sent_packet().payload_size());
1251 GetPayloadData(rtp_header, transport_.last_sent_packet_);
1252
1253 ASSERT_EQ(sizeof(payload),
1254 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
1255
1256 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 1174 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
1257 } 1175 }
1258 1176
1259 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { 1177 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
1260 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); 1178 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel));
1261 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 1179 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
1262 kAudioLevelExtensionId)); 1180 kAudioLevelExtensionId));
1263 1181
1264 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1182 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1265 const uint8_t payload_type = 127; 1183 const uint8_t payload_type = 127;
1266 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1184 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1267 0, 1500)); 1185 0, 1500));
1268 uint8_t payload[] = {47, 11, 32, 93, 89}; 1186 uint8_t payload[] = {47, 11, 32, 93, 89};
1269 1187
1270 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1188 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1271 kAudioFrameCN, payload_type, 1234, 4321, payload, 1189 kAudioFrameCN, payload_type, 1234, 4321, payload,
1272 sizeof(payload), nullptr, nullptr, nullptr)); 1190 sizeof(payload), nullptr, nullptr, nullptr));
1273 1191
1274 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1192 const uint8_t* payload_data = transport_.last_sent_packet().payload();
1275 transport_.last_sent_packet_len_);
1276 webrtc::RTPHeader rtp_header;
1277 ASSERT_TRUE(rtp_parser.Parse(&rtp_header));
1278 1193
1279 const uint8_t* payload_data = 1194 ASSERT_EQ(sizeof(payload), transport_.last_sent_packet().payload_size());
1280 GetPayloadData(rtp_header, transport_.last_sent_packet_);
1281
1282 ASSERT_EQ(sizeof(payload),
1283 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
1284
1285 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 1195 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
1286 1196 // Verify AudioLevel extension.
1287 uint8_t extension[] = { 1197 bool voice_activity;
1288 0xbe, 0xde, 0x00, 0x01, 1198 uint8_t audio_level;
1289 (kAudioLevelExtensionId << 4) + 0, // ID + length. 1199 EXPECT_TRUE(transport_.last_sent_packet().GetExtension<AudioLevel>(
1290 kAudioLevel, // Data. 1200 &voice_activity, &audio_level));
1291 0x00, 0x00 // Padding. 1201 EXPECT_EQ(kAudioLevel, audio_level);
1292 }; 1202 EXPECT_FALSE(voice_activity);
1293
1294 EXPECT_EQ(0, memcmp(extension, payload_data - sizeof(extension),
1295 sizeof(extension)));
1296 } 1203 }
1297 1204
1298 // As RFC4733, named telephone events are carried as part of the audio stream 1205 // As RFC4733, named telephone events are carried as part of the audio stream
1299 // and must use the same sequence number and timestamp base as the regular 1206 // and must use the same sequence number and timestamp base as the regular
1300 // audio channel. 1207 // audio channel.
1301 // This test checks the marker bit for the first packet and the consequent 1208 // This test checks the marker bit for the first packet and the consequent
1302 // packets of the same telephone event. Since it is specifically for DTMF 1209 // packets of the same telephone event. Since it is specifically for DTMF
1303 // events, ignoring audio packets and sending kEmptyFrame instead of those. 1210 // events, ignoring audio packets and sending kEmptyFrame instead of those.
1304 TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) { 1211 TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) {
1305 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "telephone-event"; 1212 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "telephone-event";
(...skipping 14 matching lines...) Expand all
1320 // timestamp. So for first call it will skip since the duration is zero. 1227 // timestamp. So for first call it will skip since the duration is zero.
1321 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, 1228 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type,
1322 capture_time_ms, 0, nullptr, 0, 1229 capture_time_ms, 0, nullptr, 0,
1323 nullptr, nullptr, nullptr)); 1230 nullptr, nullptr, nullptr));
1324 // DTMF Sample Length is (Frequency/1000) * Duration. 1231 // DTMF Sample Length is (Frequency/1000) * Duration.
1325 // So in this case, it is (8000/1000) * 500 = 4000. 1232 // So in this case, it is (8000/1000) * 500 = 4000.
1326 // Sending it as two packets. 1233 // Sending it as two packets.
1327 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1234 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1328 kEmptyFrame, payload_type, capture_time_ms + 2000, 0, 1235 kEmptyFrame, payload_type, capture_time_ms + 2000, 0,
1329 nullptr, 0, nullptr, nullptr, nullptr)); 1236 nullptr, 0, nullptr, nullptr, nullptr));
1330 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( 1237
1331 webrtc::RtpHeaderParser::Create());
1332 ASSERT_TRUE(rtp_parser.get() != nullptr);
1333 webrtc::RTPHeader rtp_header;
1334 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_,
1335 transport_.last_sent_packet_len_, &rtp_header));
1336 // Marker Bit should be set to 1 for first packet. 1238 // Marker Bit should be set to 1 for first packet.
1337 EXPECT_TRUE(rtp_header.markerBit); 1239 EXPECT_TRUE(transport_.last_sent_packet().Marker());
1338 1240
1339 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1241 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1340 kEmptyFrame, payload_type, capture_time_ms + 4000, 0, 1242 kEmptyFrame, payload_type, capture_time_ms + 4000, 0,
1341 nullptr, 0, nullptr, nullptr, nullptr)); 1243 nullptr, 0, nullptr, nullptr, nullptr));
1342 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_,
1343 transport_.last_sent_packet_len_, &rtp_header));
1344 // Marker Bit should be set to 0 for rest of the packets. 1244 // Marker Bit should be set to 0 for rest of the packets.
1345 EXPECT_FALSE(rtp_header.markerBit); 1245 EXPECT_FALSE(transport_.last_sent_packet().Marker());
1346 } 1246 }
1347 1247
1348 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { 1248 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) {
1349 const char* kPayloadName = "GENERIC"; 1249 const char* kPayloadName = "GENERIC";
1350 const uint8_t kPayloadType = 127; 1250 const uint8_t kPayloadType = 127;
1351 rtp_sender_->SetSSRC(1234); 1251 rtp_sender_->SetSSRC(1234);
1352 rtp_sender_->SetRtxSsrc(4321); 1252 rtp_sender_->SetRtxSsrc(4321);
1353 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); 1253 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType);
1354 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 1254 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
1355 1255
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1399 retransmission_rate_limiter_.SetMaxRate(kPacketSize * kNumPackets * 8); 1299 retransmission_rate_limiter_.SetMaxRate(kPacketSize * kNumPackets * 8);
1400 1300
1401 rtp_sender_->SetStorePacketsStatus(true, kNumPackets); 1301 rtp_sender_->SetStorePacketsStatus(true, kNumPackets);
1402 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber(); 1302 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber();
1403 std::vector<uint16_t> sequence_numbers; 1303 std::vector<uint16_t> sequence_numbers;
1404 for (int32_t i = 0; i < kNumPackets; ++i) { 1304 for (int32_t i = 0; i < kNumPackets; ++i) {
1405 sequence_numbers.push_back(kStartSequenceNumber + i); 1305 sequence_numbers.push_back(kStartSequenceNumber + i);
1406 fake_clock_.AdvanceTimeMilliseconds(1); 1306 fake_clock_.AdvanceTimeMilliseconds(1);
1407 SendPacket(fake_clock_.TimeInMilliseconds(), kPacketSize); 1307 SendPacket(fake_clock_.TimeInMilliseconds(), kPacketSize);
1408 } 1308 }
1409 EXPECT_EQ(kNumPackets, transport_.packets_sent_); 1309 EXPECT_EQ(kNumPackets, transport_.packets_sent());
1410 1310
1411 fake_clock_.AdvanceTimeMilliseconds(1000 - kNumPackets); 1311 fake_clock_.AdvanceTimeMilliseconds(1000 - kNumPackets);
1412 1312
1413 // Resending should work - brings the bandwidth up to the limit. 1313 // Resending should work - brings the bandwidth up to the limit.
1414 // NACK bitrate is capped to the same bitrate as the encoder, since the max 1314 // NACK bitrate is capped to the same bitrate as the encoder, since the max
1415 // protection overhead is 50% (see MediaOptimization::SetTargetRates). 1315 // protection overhead is 50% (see MediaOptimization::SetTargetRates).
1416 rtp_sender_->OnReceivedNack(sequence_numbers, 0); 1316 rtp_sender_->OnReceivedNack(sequence_numbers, 0);
1417 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_); 1317 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent());
1418 1318
1419 // Must be at least 5ms in between retransmission attempts. 1319 // Must be at least 5ms in between retransmission attempts.
1420 fake_clock_.AdvanceTimeMilliseconds(5); 1320 fake_clock_.AdvanceTimeMilliseconds(5);
1421 1321
1422 // Resending should not work, bandwidth exceeded. 1322 // Resending should not work, bandwidth exceeded.
1423 rtp_sender_->OnReceivedNack(sequence_numbers, 0); 1323 rtp_sender_->OnReceivedNack(sequence_numbers, 0);
1424 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_); 1324 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent());
1425 } 1325 }
1426 1326
1427 // Verify that all packets of a frame have CVO byte set. 1327 // Verify that all packets of a frame have CVO byte set.
1428 TEST_F(RtpSenderVideoTest, SendVideoWithCVO) { 1328 TEST_F(RtpSenderVideoTest, SendVideoWithCVO) {
1429 uint8_t kFrame[kMaxPacketLength]; 1329 uint8_t kFrame[kMaxPacketLength];
1430 RTPVideoHeader hdr = {0}; 1330 RTPVideoHeader hdr = {0};
1431 hdr.rotation = kVideoRotation_90; 1331 hdr.rotation = kVideoRotation_90;
1432 1332
1433 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1333 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1434 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1334 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1435 EXPECT_EQ( 1335 EXPECT_EQ(
1436 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), 1336 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength),
1437 rtp_sender_->RtpHeaderExtensionLength()); 1337 rtp_sender_->RtpHeaderExtensionLength());
1438 1338
1439 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1339 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1440 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, 1340 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr,
1441 &hdr); 1341 &hdr);
1442 1342
1443 RtpHeaderExtensionMap map; 1343 // Verify that this packet does have CVO byte.
1444 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); 1344 VerifyCVOPacket(transport_.sent_packets_[0], true, kSeqNum, hdr.rotation);
1445 1345
1446 // Verify that this packet does have CVO byte. 1346 // Verify that this packet does have CVO byte.
1447 VerifyCVOPacket( 1347 VerifyCVOPacket(transport_.sent_packets_[1], true, kSeqNum + 1, hdr.rotation);
1448 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()),
1449 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation);
1450
1451 // Verify that this packet does have CVO byte.
1452 VerifyCVOPacket(
1453 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()),
1454 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1,
1455 hdr.rotation);
1456 } 1348 }
1457 1349
1458 // Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits 1350 // Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits
1459 // are set in the CVO byte. 1351 // are set in the CVO byte.
1460 TEST_F(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) { 1352 TEST_F(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) {
1461 // Test extracting rotation when Camera (C) and Flip (F) bits are zero. 1353 // Test extracting rotation when Camera (C) and Flip (F) bits are zero.
1462 EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0)); 1354 EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0));
1463 EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1)); 1355 EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1));
1464 EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2)); 1356 EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2));
1465 EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3)); 1357 EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3));
1466 // Test extracting rotation when Camera (C) and Flip (F) bits are set. 1358 // Test extracting rotation when Camera (C) and Flip (F) bits are set.
1467 const int flip_bit = 1 << 2; 1359 const int flip_bit = 1 << 2;
1468 const int camera_bit = 1 << 3; 1360 const int camera_bit = 1 << 3;
1469 EXPECT_EQ(kVideoRotation_0, 1361 EXPECT_EQ(kVideoRotation_0,
1470 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); 1362 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0));
1471 EXPECT_EQ(kVideoRotation_90, 1363 EXPECT_EQ(kVideoRotation_90,
1472 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); 1364 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1));
1473 EXPECT_EQ(kVideoRotation_180, 1365 EXPECT_EQ(kVideoRotation_180,
1474 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); 1366 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2));
1475 EXPECT_EQ(kVideoRotation_270, 1367 EXPECT_EQ(kVideoRotation_270,
1476 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); 1368 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3));
1477 } 1369 }
1478 1370
1479 } // namespace webrtc 1371 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698