| 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 cabd411abf1f521217cad6d6a2fc02262bd1bf1f..67716457be34b494e34fc3781e648fbd6b1380ad 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| @@ -22,6 +22,9 @@
|
| #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
| #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h"
|
| #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
|
| +#include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
|
| +#include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
|
| +#include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h"
|
| #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
|
| #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h"
|
| #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
|
| @@ -40,8 +43,9 @@ 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 int64_t kAbsoluteSendTimeMs = 1234567890ll;
|
| +const uint32_t kAbsoluteSendTime =
|
| + AbsoluteSendTime::MsTo24Bits(kAbsoluteSendTimeMs);
|
| const uint8_t kAudioLevel = 0x5a;
|
| const uint16_t kTransportSequenceNumber = 0xaabbu;
|
| const uint8_t kAudioLevelExtensionId = 9;
|
| @@ -162,7 +166,7 @@ class RtpSenderTest : public ::testing::Test {
|
| int payload_;
|
| LoopbackTransportTest transport_;
|
| const bool kMarkerBit;
|
| - uint8_t packet_[kMaxPacketLength];
|
| + std::unique_ptr<RtpPacketToSend> packet_;
|
|
|
| void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) {
|
| VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0);
|
| @@ -184,16 +188,34 @@ class RtpSenderTest : public ::testing::Test {
|
| EXPECT_EQ(0U, rtp_header.paddingLength);
|
| }
|
|
|
| + void BuildRtpPacket(uint8_t payload,
|
| + bool marker_bit,
|
| + uint32_t timestamp,
|
| + int64_t capture_time_ms) {
|
| + packet_ = rtp_sender_->AllocatePacket(false);
|
| + ASSERT_TRUE(packet_);
|
| + packet_->SetPayloadType(payload);
|
| + packet_->SetMarker(marker_bit);
|
| + packet_->SetTimestamp(timestamp);
|
| + packet_->set_capture_time_ms(capture_time_ms);
|
| + ASSERT_TRUE(rtp_sender_->PrepareToSend(packet_.get()));
|
| + }
|
| +
|
| 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);
|
| + packet_ = rtp_sender_->AllocatePacket(false);
|
| + ASSERT_TRUE(packet_);
|
| + packet_->SetPayloadType(kPayload);
|
| + packet_->SetMarker(kMarkerBit);
|
| + packet_->SetTimestamp(timestamp);
|
| + packet_->set_capture_time_ms(capture_time_ms);
|
| + packet_->AllocatePayload(payload_length);
|
| + ASSERT_TRUE(rtp_sender_->PrepareToSend(packet_.get()));
|
|
|
| // 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() {
|
| @@ -234,27 +256,19 @@ class RtpSenderVideoTest : public RtpSenderTest {
|
| RtpHeaderExtensionMap* map,
|
| uint16_t seq_num,
|
| VideoRotation rotation) {
|
| - 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);
|
| - EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
|
| - EXPECT_EQ(kTimestamp, rtp_header.timestamp);
|
| - EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc);
|
| - EXPECT_EQ(0, rtp_header.numCSRCs);
|
| - EXPECT_EQ(0U, rtp_header.paddingLength);
|
| - EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation),
|
| - rtp_header.extension.videoRotation);
|
| + RtpPacketReceived rtp_parsed_packet(map);
|
| + ASSERT_TRUE(rtp_parsed_packet.Parse(data, len));
|
| +
|
| + EXPECT_EQ(payload_, rtp_parsed_packet.PayloadType());
|
| + EXPECT_EQ(seq_num, rtp_parsed_packet.SequenceNumber());
|
| + EXPECT_EQ(kTimestamp, rtp_parsed_packet.Timestamp());
|
| + EXPECT_EQ(rtp_sender_->SSRC(), rtp_parsed_packet.Ssrc());
|
| + EXPECT_TRUE(rtp_parsed_packet.Csrcs().empty());
|
| + EXPECT_EQ(0U, rtp_parsed_packet.padding_size());
|
| + uint8_t cvo = 0;
|
| + EXPECT_EQ(expect_cvo,
|
| + rtp_parsed_packet.GetExtension<VideoOrientation>(&cvo));
|
| + EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation), cvo);
|
| }
|
| };
|
|
|
| @@ -319,7 +333,6 @@ TEST_F(RtpSenderTestWithoutPacer, RegisterRtpHeaderExtensions) {
|
| rtp_sender_->RtpHeaderExtensionLength());
|
| EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| kRtpExtensionVideoRotation, kVideoRotationExtensionId));
|
| - EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
|
| EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
|
| kTransmissionTimeOffsetLength +
|
| kAbsoluteSendTimeLength +
|
| @@ -352,9 +365,6 @@ TEST_F(RtpSenderTestWithoutPacer, RegisterRtpVideoRotationHeaderExtension) {
|
| EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength());
|
| EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| kRtpExtensionVideoRotation, kVideoRotationExtensionId));
|
| - EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength());
|
| -
|
| - EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
|
| EXPECT_EQ(
|
| RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength),
|
| rtp_sender_->RtpHeaderExtensionLength());
|
| @@ -364,12 +374,16 @@ TEST_F(RtpSenderTestWithoutPacer, RegisterRtpVideoRotationHeaderExtension) {
|
| }
|
|
|
| TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) {
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize, length);
|
| + packet_ = rtp_sender_->AllocatePacket(false);
|
| + packet_->SetMarker(kMarkerBit);
|
| + packet_->SetPayloadType(kPayload);
|
| + packet_->SetTimestamp(kTimestamp);
|
| + rtp_sender_->PrepareToSend(packet_.get());
|
| + ASSERT_EQ(kRtpHeaderSize, packet_->size());
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| webrtc::RTPHeader rtp_header;
|
|
|
| const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr);
|
| @@ -377,7 +391,7 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) {
|
| ASSERT_TRUE(valid_rtp_header);
|
| ASSERT_FALSE(rtp_parser.RTCP());
|
| VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header.headerLength);
|
| EXPECT_FALSE(rtp_header.extension.hasTransmissionTimeOffset);
|
| EXPECT_FALSE(rtp_header.extension.hasAbsoluteSendTime);
|
| EXPECT_FALSE(rtp_header.extension.hasAudioLevel);
|
| @@ -390,17 +404,22 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) {
|
|
|
| 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);
|
| + packet_ = rtp_sender_->AllocatePacket(false);
|
| + packet_->SetPayloadType(kPayload);
|
| + packet_->SetMarker(kMarkerBit);
|
| + packet_->SetTimestamp(kTimestamp);
|
| + rtp_sender_->PrepareToSend(packet_.get());
|
| + ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
|
| + packet_->size());
|
| + EXPECT_TRUE(packet_->SetExtension<TransmissionOffset>(kTimeOffset));
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| webrtc::RTPHeader rtp_header;
|
|
|
| RtpHeaderExtensionMap map;
|
| @@ -411,7 +430,7 @@ TEST_F(RtpSenderTestWithoutPacer,
|
| ASSERT_TRUE(valid_rtp_header);
|
| ASSERT_FALSE(rtp_parser.RTCP());
|
| VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header.headerLength);
|
| EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
|
| EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
|
|
|
| @@ -421,7 +440,7 @@ TEST_F(RtpSenderTestWithoutPacer,
|
|
|
| ASSERT_TRUE(valid_rtp_header2);
|
| VerifyRTPHeaderCommon(rtp_header2);
|
| - EXPECT_EQ(length, rtp_header2.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header2.headerLength);
|
| EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
|
| EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
|
| }
|
| @@ -429,17 +448,18 @@ TEST_F(RtpSenderTestWithoutPacer,
|
| 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);
|
| + BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
|
| + ASSERT_TRUE(packet_->SetExtension<TransmissionOffset>(kNegTimeOffset));
|
| + ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
|
| + packet_->size());
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| webrtc::RTPHeader rtp_header;
|
|
|
| RtpHeaderExtensionMap map;
|
| @@ -450,23 +470,24 @@ TEST_F(RtpSenderTestWithoutPacer,
|
| ASSERT_TRUE(valid_rtp_header);
|
| ASSERT_FALSE(rtp_parser.RTCP());
|
| VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| + EXPECT_EQ(packet_->size(), 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);
|
| + BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
|
| + ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
|
| + packet_->size());
|
| + ASSERT_TRUE(packet_->SetExtension<AbsoluteSendTime>(kAbsoluteSendTimeMs));
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| webrtc::RTPHeader rtp_header;
|
|
|
| RtpHeaderExtensionMap map;
|
| @@ -476,7 +497,7 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) {
|
| ASSERT_TRUE(valid_rtp_header);
|
| ASSERT_FALSE(rtp_parser.RTCP());
|
| VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header.headerLength);
|
| EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
|
| EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
|
|
|
| @@ -486,7 +507,7 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) {
|
|
|
| ASSERT_TRUE(valid_rtp_header2);
|
| VerifyRTPHeaderCommon(rtp_header2);
|
| - EXPECT_EQ(length, rtp_header2.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header2.headerLength);
|
| EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
|
| EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
|
| }
|
| @@ -537,26 +558,26 @@ TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) {
|
|
|
| // 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);
|
| + BuildRtpPacket(kPayload, true, kTimestamp, 0);
|
| + ASSERT_TRUE(packet_->SetExtension<VideoOrientation>(kRotation));
|
| + ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
|
| + packet_->size());
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| 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_EQ(packet_->size(), rtp_header.headerLength);
|
| EXPECT_TRUE(rtp_header.extension.hasVideoRotation);
|
| EXPECT_EQ(ConvertVideoRotationToCVOByte(kRotation),
|
| rtp_header.extension.videoRotation);
|
| @@ -565,26 +586,25 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) {
|
| // 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);
|
| + BuildRtpPacket(kPayload, false, kTimestamp, 0);
|
| + ASSERT_EQ(kRtpHeaderSize, packet_->size());
|
| + ASSERT_TRUE(packet_->SetExtension<VideoOrientation>(kRotation));
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| 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_EQ(packet_->size(), rtp_header.headerLength);
|
| EXPECT_FALSE(rtp_header.extension.hasVideoRotation);
|
| }
|
|
|
| @@ -592,17 +612,18 @@ 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);
|
| + BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
|
| + packet_->SetExtension<AudioLevel>(true, kAudioLevel);
|
| + ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
|
| + packet_->size());
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| 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);
|
| @@ -611,7 +632,7 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) {
|
| ASSERT_TRUE(valid_rtp_header);
|
| ASSERT_FALSE(rtp_parser.RTCP());
|
| VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header.headerLength);
|
| EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
|
| EXPECT_TRUE(rtp_header.extension.voiceActivity);
|
| EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
|
| @@ -622,7 +643,7 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) {
|
|
|
| ASSERT_TRUE(valid_rtp_header2);
|
| VerifyRTPHeaderCommon(rtp_header2);
|
| - EXPECT_EQ(length, rtp_header2.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header2.headerLength);
|
| EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
|
| EXPECT_FALSE(rtp_header2.extension.voiceActivity);
|
| EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
|
| @@ -635,17 +656,16 @@ TEST_F(RtpSenderTestWithoutPacer,
|
| 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));
|
| + BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
|
| + EXPECT_TRUE(packet_->SetExtension<AudioLevel>(true, kAudioLevel));
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| 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);
|
| @@ -654,7 +674,7 @@ TEST_F(RtpSenderTestWithoutPacer,
|
| ASSERT_TRUE(valid_rtp_header);
|
| ASSERT_FALSE(rtp_parser.RTCP());
|
| VerifyRTPHeaderCommon(rtp_header, kMarkerBit, csrcs.size());
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header.headerLength);
|
| EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
|
| EXPECT_TRUE(rtp_header.extension.voiceActivity);
|
| EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
|
| @@ -663,10 +683,6 @@ TEST_F(RtpSenderTestWithoutPacer,
|
| }
|
|
|
| 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));
|
| @@ -679,17 +695,21 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) {
|
| kRtpExtensionTransportSequenceNumber,
|
| kTransportSequenceNumberExtensionId));
|
|
|
| - size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader(
|
| - packet_, kPayload, kMarkerBit, kTimestamp, 0));
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length);
|
| + BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
|
| + packet_->SetExtension<AudioLevel>(true, kAudioLevel);
|
| + packet_->SetExtension<TransmissionOffset>(kTimeOffset);
|
| + packet_->SetExtension<AbsoluteSendTime>(kAbsoluteSendTimeMs);
|
| + packet_->SetExtension<TransportSequenceNumber>(kTransportSequenceNumber);
|
| + ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
|
| + packet_->size());
|
|
|
| // Verify
|
| - webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
|
| + webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
|
| + packet_->size());
|
| 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,
|
| @@ -703,7 +723,7 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) {
|
| ASSERT_TRUE(valid_rtp_header);
|
| ASSERT_FALSE(rtp_parser.RTCP());
|
| VerifyRTPHeaderCommon(rtp_header);
|
| - EXPECT_EQ(length, rtp_header.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header.headerLength);
|
| EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
|
| EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
|
| EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
|
| @@ -721,7 +741,7 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) {
|
|
|
| ASSERT_TRUE(valid_rtp_header2);
|
| VerifyRTPHeaderCommon(rtp_header2);
|
| - EXPECT_EQ(length, rtp_header2.headerLength);
|
| + EXPECT_EQ(packet_->size(), rtp_header2.headerLength);
|
| EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
|
| EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
|
| EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
|
| @@ -748,14 +768,12 @@ 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);
|
| + 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_);
|
| @@ -768,10 +786,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,
|
| @@ -801,14 +819,12 @@ 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);
|
| + 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_);
|
| @@ -819,7 +835,8 @@ 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<int32_t>(packet_size),
|
| + rtp_sender_->ReSendPacket(kSeqNum));
|
| EXPECT_EQ(0, transport_.packets_sent_);
|
|
|
| rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
|
| @@ -827,11 +844,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,
|
| @@ -882,15 +899,12 @@ 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);
|
| + 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);
|
|
|
| // 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;
|
| @@ -940,27 +954,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);
|
| + BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
|
| + size_t 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);
|
| @@ -1604,15 +1616,11 @@ TEST_F(RtpSenderVideoTest, SendVideoWithCVO) {
|
|
|
| EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| kRtpExtensionVideoRotation, kVideoRotationExtensionId));
|
| - EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
|
| -
|
| - EXPECT_EQ(
|
| - RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength),
|
| - rtp_sender_->RtpHeaderExtensionLength());
|
|
|
| + const uint8_t kPayloadData[1500] = {0};
|
| rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
|
| - kTimestamp, 0, packet_, sizeof(packet_), nullptr,
|
| - &hdr);
|
| + kTimestamp, 0, kPayloadData,
|
| + sizeof(kPayloadData), nullptr, &hdr);
|
|
|
| RtpHeaderExtensionMap map;
|
| map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
|
|
|