| Index: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| index 22ad119c6f2717c26d5cd5bfd78a57d77b82d655..62fd743d2fb432c62a7f91e4562472e6d4af55e8 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| @@ -41,9 +41,7 @@ const int kPayload = 100;
|
| const int kRtxPayload = 98;
|
| const uint32_t kTimestamp = 10;
|
| const uint16_t kSeqNum = 33;
|
| -const int kTimeOffset = 22222;
|
| const int kMaxPacketLength = 1500;
|
| -const uint32_t kAbsoluteSendTime = 0x00aabbcc;
|
| const uint8_t kAudioLevel = 0x5a;
|
| const uint16_t kTransportSequenceNumber = 0xaabbu;
|
| const uint8_t kAudioLevelExtensionId = 9;
|
| @@ -51,7 +49,6 @@ const int kAudioPayload = 103;
|
| const uint64_t kStartTime = 123456789;
|
| const size_t kMaxPaddingSize = 224u;
|
| const int kVideoRotationExtensionId = 5;
|
| -const VideoRotation kRotation = kVideoRotation_270;
|
| const size_t kGenericHeaderLength = 1;
|
| const uint8_t kPayloadData[] = {47, 11, 32, 93, 89};
|
|
|
| @@ -176,7 +173,6 @@ class RtpSenderTest : public ::testing::Test {
|
| int payload_;
|
| LoopbackTransportTest transport_;
|
| const bool kMarkerBit;
|
| - uint8_t packet_[kMaxPacketLength];
|
|
|
| void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) {
|
| VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0);
|
| @@ -198,16 +194,29 @@ class RtpSenderTest : public ::testing::Test {
|
| EXPECT_EQ(0U, rtp_header.paddingLength);
|
| }
|
|
|
| + std::unique_ptr<RtpPacketToSend> BuildRtpPacket(int payload_type,
|
| + bool marker_bit,
|
| + uint32_t timestamp,
|
| + int64_t capture_time_ms) {
|
| + auto packet = rtp_sender_->AllocatePacket();
|
| + packet->SetPayloadType(payload_type);
|
| + packet->SetMarker(marker_bit);
|
| + packet->SetTimestamp(timestamp);
|
| + packet->set_capture_time_ms(capture_time_ms);
|
| + EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
|
| + return packet;
|
| + }
|
| +
|
| void SendPacket(int64_t capture_time_ms, int payload_length) {
|
| uint32_t timestamp = capture_time_ms * 90;
|
| - int32_t rtp_length = rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
|
| - ASSERT_GE(rtp_length, 0);
|
| + auto packet =
|
| + BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
|
| + packet->AllocatePayload(payload_length);
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_TRUE(rtp_sender_->SendToNetwork(
|
| - packet_, payload_length, rtp_length, capture_time_ms,
|
| - kAllowRetransmission, RtpPacketSender::kNormalPriority));
|
| + EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
|
| + kAllowRetransmission,
|
| + RtpPacketSender::kNormalPriority));
|
| }
|
|
|
| void SendGenericPayload() {
|
| @@ -250,14 +259,6 @@ class RtpSenderVideoTest : public RtpSenderTest {
|
| webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len);
|
|
|
| webrtc::RTPHeader rtp_header;
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, expect_cvo /* marker_bit */, kTimestamp, 0));
|
| - if (expect_cvo) {
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
|
| - length);
|
| - } else {
|
| - ASSERT_EQ(kRtpHeaderSize, length);
|
| - }
|
| ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map));
|
| ASSERT_FALSE(rtp_parser.RTCP());
|
| EXPECT_EQ(payload_, rtp_header.payloadType);
|
| @@ -470,134 +471,6 @@ TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberSetPaddingTimestamps) {
|
| EXPECT_EQ(kTimestamp, padding_packet.Timestamp());
|
| }
|
|
|
| -TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) {
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize, length);
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header);
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_FALSE(rtp_header.extension.hasTransmissionTimeOffset);
|
| - EXPECT_FALSE(rtp_header.extension.hasAbsoluteSendTime);
|
| - EXPECT_FALSE(rtp_header.extension.hasAudioLevel);
|
| - EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
|
| - EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime);
|
| - EXPECT_FALSE(rtp_header.extension.voiceActivity);
|
| - EXPECT_EQ(0u, rtp_header.extension.audioLevel);
|
| - EXPECT_EQ(0u, rtp_header.extension.videoRotation);
|
| -}
|
| -
|
| -TEST_F(RtpSenderTestWithoutPacer,
|
| - BuildRTPPacketWithTransmissionOffsetExtension) {
|
| - EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| - kRtpExtensionTransmissionTimeOffset,
|
| - kTransmissionTimeOffsetExtensionId));
|
| -
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionTransmissionTimeOffset,
|
| - kTransmissionTimeOffsetExtensionId);
|
| - const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header);
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
|
| - EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
|
| -
|
| - // Parse without map extension
|
| - webrtc::RTPHeader rtp_header2;
|
| - const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header2);
|
| - VerifyRTPHeaderCommon(rtp_header2);
|
| - EXPECT_EQ(length, rtp_header2.headerLength);
|
| - EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
|
| - EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
|
| -}
|
| -
|
| -TEST_F(RtpSenderTestWithoutPacer,
|
| - BuildRTPPacketWithNegativeTransmissionOffsetExtension) {
|
| - const int kNegTimeOffset = -500;
|
| - EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset));
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| - kRtpExtensionTransmissionTimeOffset,
|
| - kTransmissionTimeOffsetExtensionId));
|
| -
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionTransmissionTimeOffset,
|
| - kTransmissionTimeOffsetExtensionId);
|
| - const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header);
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
|
| - EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset);
|
| -}
|
| -
|
| -TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) {
|
| - EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime));
|
| - EXPECT_EQ(
|
| - 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
|
| - kAbsoluteSendTimeExtensionId));
|
| -
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
|
| - const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header);
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
|
| - EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
|
| -
|
| - // Parse without map extension
|
| - webrtc::RTPHeader rtp_header2;
|
| - const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header2);
|
| - VerifyRTPHeaderCommon(rtp_header2);
|
| - EXPECT_EQ(length, rtp_header2.headerLength);
|
| - EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
|
| - EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
|
| -}
|
| -
|
| TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) {
|
| rtp_sender_.reset(new RTPSender(
|
| false, &fake_clock_, &transport_, nullptr,
|
| @@ -652,204 +525,6 @@ TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) {
|
| SendGenericPayload();
|
| }
|
|
|
| -// Test CVO header extension is only set when marker bit is true.
|
| -TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) {
|
| - rtp_sender_->SetVideoRotation(kRotation);
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| - kRtpExtensionVideoRotation, kVideoRotationExtensionId));
|
| - EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
|
| -
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
|
| -
|
| - size_t length = static_cast<size_t>(
|
| - rtp_sender_->BuildRtpHeader(packet_, kPayload, true, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map));
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_TRUE(rtp_header.extension.hasVideoRotation);
|
| - EXPECT_EQ(kRotation, rtp_header.extension.videoRotation);
|
| -}
|
| -
|
| -// Test CVO header extension is not set when marker bit is false.
|
| -TEST_F(RtpSenderTestWithoutPacer,
|
| - DISABLED_BuildRTPPacketWithVideoRotation_NoMarkerBit) {
|
| - rtp_sender_->SetVideoRotation(kRotation);
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| - kRtpExtensionVideoRotation, kVideoRotationExtensionId));
|
| - EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
|
| -
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
|
| -
|
| - size_t length = static_cast<size_t>(
|
| - rtp_sender_->BuildRtpHeader(packet_, kPayload, false, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize, length);
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map));
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header, false);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_FALSE(rtp_header.extension.hasVideoRotation);
|
| -}
|
| -
|
| -TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) {
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
|
| - kAudioLevelExtensionId));
|
| -
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - // Updating audio level is done in RTPSenderAudio, so simulate it here.
|
| - rtp_parser.Parse(&rtp_header);
|
| - rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel);
|
| -
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
|
| - const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header);
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
|
| - EXPECT_TRUE(rtp_header.extension.voiceActivity);
|
| - EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
|
| -
|
| - // Parse without map extension
|
| - webrtc::RTPHeader rtp_header2;
|
| - const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header2);
|
| - VerifyRTPHeaderCommon(rtp_header2);
|
| - EXPECT_EQ(length, rtp_header2.headerLength);
|
| - EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
|
| - EXPECT_FALSE(rtp_header2.extension.voiceActivity);
|
| - EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
|
| -}
|
| -
|
| -TEST_F(RtpSenderTestWithoutPacer,
|
| - BuildRTPPacketWithCSRCAndAudioLevelExtension) {
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
|
| - kAudioLevelExtensionId));
|
| - std::vector<uint32_t> csrcs;
|
| - csrcs.push_back(0x23456789);
|
| - rtp_sender_->SetCsrcs(csrcs);
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - // Updating audio level is done in RTPSenderAudio, so simulate it here.
|
| - rtp_parser.Parse(&rtp_header);
|
| - EXPECT_TRUE(rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true,
|
| - kAudioLevel));
|
| -
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
|
| - const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header);
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header, kMarkerBit, csrcs.size());
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
|
| - EXPECT_TRUE(rtp_header.extension.voiceActivity);
|
| - EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
|
| - EXPECT_EQ(1u, rtp_header.numCSRCs);
|
| - EXPECT_EQ(csrcs[0], rtp_header.arrOfCSRCs[0]);
|
| -}
|
| -
|
| -TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) {
|
| - EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
|
| - EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime));
|
| - EXPECT_EQ(0,
|
| - rtp_sender_->SetTransportSequenceNumber(kTransportSequenceNumber));
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| - kRtpExtensionTransmissionTimeOffset,
|
| - kTransmissionTimeOffsetExtensionId));
|
| - EXPECT_EQ(
|
| - 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
|
| - kAbsoluteSendTimeExtensionId));
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
|
| - kAudioLevelExtensionId));
|
| - EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| - kRtpExtensionTransportSequenceNumber,
|
| - kTransportSequenceNumberExtensionId));
|
| -
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
|
| -
|
| - // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| - webrtc::RTPHeader rtp_header;
|
| -
|
| - // Updating audio level is done in RTPSenderAudio, so simulate it here.
|
| - rtp_parser.Parse(&rtp_header);
|
| - rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel);
|
| -
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionTransmissionTimeOffset,
|
| - kTransmissionTimeOffsetExtensionId);
|
| - map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
|
| - map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
|
| - map.Register(kRtpExtensionTransportSequenceNumber,
|
| - kTransportSequenceNumberExtensionId);
|
| - const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header);
|
| - ASSERT_FALSE(rtp_parser.RTCP());
|
| - VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| - EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
|
| - EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
|
| - EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
|
| - EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber);
|
| - EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
|
| - EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
|
| - EXPECT_TRUE(rtp_header.extension.voiceActivity);
|
| - EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
|
| - EXPECT_EQ(kTransportSequenceNumber,
|
| - rtp_header.extension.transportSequenceNumber);
|
| -
|
| - // Parse without map extension
|
| - webrtc::RTPHeader rtp_header2;
|
| - const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
|
| -
|
| - ASSERT_TRUE(valid_rtp_header2);
|
| - VerifyRTPHeaderCommon(rtp_header2);
|
| - EXPECT_EQ(length, rtp_header2.headerLength);
|
| - EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
|
| - EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
|
| - EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
|
| - EXPECT_FALSE(rtp_header2.extension.hasTransportSequenceNumber);
|
| -
|
| - EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
|
| - EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
|
| - EXPECT_FALSE(rtp_header2.extension.voiceActivity);
|
| - EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
|
| - EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber);
|
| -}
|
| -
|
| TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
|
| rtp_sender_.reset(new RTPSender(
|
| false, &fake_clock_, &transport_, &mock_paced_sender_,
|
| @@ -908,14 +583,13 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
| 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
|
| kAbsoluteSendTimeExtensionId));
|
| int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
|
| - int rtp_length_int = rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms);
|
| - ASSERT_NE(-1, rtp_length_int);
|
| - size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
| + auto packet =
|
| + BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
|
| + size_t packet_size = packet->size();
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
| - capture_time_ms, kAllowRetransmission,
|
| + EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
|
| + kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| EXPECT_EQ(0, transport_.packets_sent_);
|
| @@ -928,10 +602,10 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
|
|
| // Process send bucket. Packet should now be sent.
|
| EXPECT_EQ(1, transport_.packets_sent_);
|
| - EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_);
|
| + EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
|
| // Parse sent packet.
|
| webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
|
| - rtp_length);
|
| + packet_size);
|
| webrtc::RTPHeader rtp_header;
|
| RtpHeaderExtensionMap map;
|
| map.Register(kRtpExtensionTransmissionTimeOffset,
|
| @@ -961,14 +635,13 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
| 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
|
| kAbsoluteSendTimeExtensionId));
|
| int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
|
| - int rtp_length_int = rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms);
|
| - ASSERT_NE(-1, rtp_length_int);
|
| - size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
| + auto packet =
|
| + BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
|
| + size_t packet_size = packet->size();
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
| - capture_time_ms, kAllowRetransmission,
|
| + EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
|
| + kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| EXPECT_EQ(0, transport_.packets_sent_);
|
| @@ -979,7 +652,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
| const int kStoredTimeInMs = 100;
|
| fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
|
|
|
| - EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum));
|
| + EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum));
|
| EXPECT_EQ(0, transport_.packets_sent_);
|
|
|
| rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
|
| @@ -987,11 +660,11 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
|
|
| // Process send bucket. Packet should now be sent.
|
| EXPECT_EQ(1, transport_.packets_sent_);
|
| - EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_);
|
| + EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
|
|
|
| // Parse sent packet.
|
| webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
|
| - rtp_length);
|
| + packet_size);
|
| webrtc::RTPHeader rtp_header;
|
| RtpHeaderExtensionMap map;
|
| map.Register(kRtpExtensionTransmissionTimeOffset,
|
| @@ -1042,15 +715,14 @@ TEST_F(RtpSenderTest, SendPadding) {
|
| webrtc::RTPHeader rtp_header;
|
|
|
| int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
|
| - int rtp_length_int = rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
|
| + auto packet =
|
| + BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
|
| const uint32_t media_packet_timestamp = timestamp;
|
| - ASSERT_NE(-1, rtp_length_int);
|
| - size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
| + size_t packet_size = packet->size();
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
| - capture_time_ms, kAllowRetransmission,
|
| + EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
|
| + kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| int total_packets_sent = 0;
|
| @@ -1100,27 +772,25 @@ TEST_F(RtpSenderTest, SendPadding) {
|
|
|
| // Send a regular video packet again.
|
| capture_time_ms = fake_clock_.TimeInMilliseconds();
|
| - rtp_length_int = rtp_sender_->BuildRtpHeader(packet_, kPayload, kMarkerBit,
|
| - timestamp, capture_time_ms);
|
| - ASSERT_NE(-1, rtp_length_int);
|
| - rtp_length = static_cast<size_t>(rtp_length_int);
|
| + packet = BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
|
| + packet_size = packet->size();
|
|
|
| EXPECT_CALL(mock_paced_sender_,
|
| InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _));
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
| - capture_time_ms, kAllowRetransmission,
|
| + EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
|
| + kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false,
|
| PacketInfo::kNotAProbe);
|
| // Process send bucket.
|
| EXPECT_EQ(++total_packets_sent, transport_.packets_sent_);
|
| - EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_);
|
| + EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
|
| // Parse sent packet.
|
| - ASSERT_TRUE(
|
| - rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header));
|
| + ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, packet_size,
|
| + &rtp_header));
|
|
|
| // Verify sequence number and timestamp.
|
| EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
|
| @@ -1759,6 +1429,7 @@ TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) {
|
|
|
| // Verify that all packets of a frame have CVO byte set.
|
| TEST_F(RtpSenderVideoTest, SendVideoWithCVO) {
|
| + uint8_t kFrame[kMaxPacketLength];
|
| RTPVideoHeader hdr = {0};
|
| hdr.rotation = kVideoRotation_90;
|
|
|
| @@ -1771,7 +1442,7 @@ TEST_F(RtpSenderVideoTest, SendVideoWithCVO) {
|
| rtp_sender_->RtpHeaderExtensionLength());
|
|
|
| rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
|
| - kTimestamp, 0, packet_, sizeof(packet_), nullptr,
|
| + kTimestamp, 0, kFrame, sizeof(kFrame), nullptr,
|
| &hdr);
|
|
|
| RtpHeaderExtensionMap map;
|
|
|