| 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 b7238d26a223f5f800737ed9e7f4ba0966e3d1fd..d043cdb0c068692f41228f8201854cf73d2d9ce5 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| @@ -25,6 +25,7 @@
|
| #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_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"
|
| @@ -178,15 +179,24 @@ class RtpSenderTest : public ::testing::Test {
|
| EXPECT_EQ(0U, rtp_header.paddingLength);
|
| }
|
|
|
| - 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);
|
| + std::unique_ptr<RtpPacketToSend> CreatePacket(uint32_t timestamp,
|
| + int64_t capture_time_ms) {
|
| + std::unique_ptr<RtpPacketToSend> packet = rtp_sender_->CreatePacket();
|
| + rtp_sender_->BuildRtpHeader(packet.get(), timestamp, true);
|
| + packet->SetPayloadType(kPayload);
|
| + packet->SetMarker(kMarkerBit);
|
| + packet->set_capture_time_ms(capture_time_ms);
|
| + return packet;
|
| + }
|
| +
|
| + void SendPacket(int64_t capture_time_ms, size_t payload_size) {
|
| + std::unique_ptr<RtpPacketToSend> packet =
|
| + CreatePacket(kTimestamp, capture_time_ms);
|
| + packet->AllocatePayload(payload_size);
|
|
|
| // Packet should be stored in a send bucket.
|
| EXPECT_EQ(0, rtp_sender_->SendToNetwork(
|
| - packet_, payload_length, rtp_length, capture_time_ms,
|
| + std::move(packet), payload_size, capture_time_ms,
|
| kAllowRetransmission, RtpPacketSender::kNormalPriority));
|
| }
|
| };
|
| @@ -211,30 +221,23 @@ class RtpSenderVideoTest : public RtpSenderTest {
|
| void VerifyCVOPacket(uint8_t* data,
|
| size_t len,
|
| bool expect_cvo,
|
| - RtpHeaderExtensionMap* map,
|
| + RtpHeaderExtensionsManager* 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));
|
| + RtpPacketToSend packet(map);
|
| + ASSERT_TRUE(packet.Parse(data, len));
|
| + EXPECT_EQ(payload_, packet.PayloadType());
|
| + EXPECT_EQ(seq_num, packet.SequenceNumber());
|
| + EXPECT_EQ(kTimestamp, packet.Timestamp());
|
| + EXPECT_EQ(rtp_sender_->SSRC(), packet.Ssrc());
|
| + EXPECT_EQ(0U, packet.Csrcs().size());
|
| + EXPECT_EQ(0U, packet.padding_size());
|
| + VideoRotation packet_rotation;
|
| + EXPECT_EQ(expect_cvo,
|
| + packet.GetExtension<VideoOrientation>(&packet_rotation));
|
| if (expect_cvo) {
|
| - ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(),
|
| - length);
|
| - } else {
|
| - ASSERT_EQ(kRtpHeaderSize, length);
|
| + EXPECT_EQ(rotation, packet_rotation);
|
| }
|
| - 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);
|
| }
|
| };
|
|
|
| @@ -344,12 +347,15 @@ 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);
|
| + RtpPacketToSend packet(nullptr);
|
| + rtp_sender_->BuildRtpHeader(&packet, kTimestamp, false);
|
| + packet.SetPayloadType(kPayload);
|
| + packet.SetMarker(kMarkerBit);
|
| + ASSERT_EQ(kRtpHeaderSize, packet.headers_size());
|
| + 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);
|
| @@ -357,7 +363,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.headers_size(), rtp_header.headerLength);
|
| EXPECT_FALSE(rtp_header.extension.hasTransmissionTimeOffset);
|
| EXPECT_FALSE(rtp_header.extension.hasAbsoluteSendTime);
|
| EXPECT_FALSE(rtp_header.extension.hasAudioLevel);
|
| @@ -721,7 +727,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
| EXPECT_CALL(mock_rtc_event_log_,
|
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
|
|
|
| - rtp_sender_->SetStorePacketsStatus(true, 10);
|
| + rtp_sender_->SetStorePacketsSize(10);
|
| EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| kRtpExtensionTransmissionTimeOffset,
|
| kTransmissionTimeOffsetExtensionId));
|
| @@ -730,14 +736,13 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
| kAbsoluteSendTimeExtensionId));
|
| rtp_sender_->SetTargetBitrate(300000);
|
| 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);
|
| + std::unique_ptr<RtpPacketToSend> packet =
|
| + CreatePacket(kTimestamp, capture_time_ms);
|
| + size_t rtp_length = packet->size();
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
| - capture_time_ms, kAllowRetransmission,
|
| + EXPECT_EQ(0, rtp_sender_->SendToNetwork(std::move(packet), 0, capture_time_ms,
|
| + kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| EXPECT_EQ(0, transport_.packets_sent_);
|
| @@ -774,7 +779,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
| EXPECT_CALL(mock_rtc_event_log_,
|
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
|
|
|
| - rtp_sender_->SetStorePacketsStatus(true, 10);
|
| + rtp_sender_->SetStorePacketsSize(10);
|
| EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| kRtpExtensionTransmissionTimeOffset,
|
| kTransmissionTimeOffsetExtensionId));
|
| @@ -783,14 +788,13 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
| kAbsoluteSendTimeExtensionId));
|
| rtp_sender_->SetTargetBitrate(300000);
|
| 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);
|
| + std::unique_ptr<RtpPacketToSend> packet =
|
| + CreatePacket(kTimestamp, capture_time_ms);
|
| + size_t rtp_length = packet->size();
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
| - capture_time_ms, kAllowRetransmission,
|
| + EXPECT_EQ(0, rtp_sender_->SendToNetwork(std::move(packet), 0, capture_time_ms,
|
| + kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| EXPECT_EQ(0, transport_.packets_sent_);
|
| @@ -801,7 +805,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>(rtp_length), rtp_sender_->ReSendPacket(kSeqNum));
|
| EXPECT_EQ(0, transport_.packets_sent_);
|
|
|
| rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false);
|
| @@ -840,7 +844,7 @@ TEST_F(RtpSenderTest, SendPadding) {
|
|
|
| uint16_t seq_num = kSeqNum;
|
| uint32_t timestamp = kTimestamp;
|
| - rtp_sender_->SetStorePacketsStatus(true, 10);
|
| + rtp_sender_->SetStorePacketsSize(10);
|
| size_t rtp_header_len = kRtpHeaderSize;
|
| EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| kRtpExtensionTransmissionTimeOffset,
|
| @@ -863,16 +867,16 @@ TEST_F(RtpSenderTest, SendPadding) {
|
| webrtc::RTPHeader rtp_header;
|
|
|
| rtp_sender_->SetTargetBitrate(300000);
|
| + rtp_sender_->SetSendPayloadType(kPayload);
|
| int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
|
| - int rtp_length_int = rtp_sender_->BuildRTPheader(
|
| - packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
|
| + std::unique_ptr<RtpPacketToSend> packet =
|
| + CreatePacket(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 rtp_length = packet->size();
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
| - capture_time_ms, kAllowRetransmission,
|
| + EXPECT_EQ(0, rtp_sender_->SendToNetwork(std::move(packet), 0, capture_time_ms,
|
| + kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| int total_packets_sent = 0;
|
| @@ -920,17 +924,19 @@ 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 = rtp_sender_->CreatePacket();
|
| + rtp_sender_->BuildRtpHeader(packet.get(), timestamp, true);
|
| + packet->SetPayloadType(kPayload);
|
| + packet->SetMarker(kMarkerBit);
|
| + packet->set_capture_time_ms(capture_time_ms);
|
| + rtp_length = packet->size();
|
|
|
| EXPECT_CALL(mock_paced_sender_,
|
| InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _));
|
|
|
| // Packet should be stored in a send bucket.
|
| - EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
| - capture_time_ms, kAllowRetransmission,
|
| + EXPECT_EQ(0, rtp_sender_->SendToNetwork(std::move(packet), 0, capture_time_ms,
|
| + kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false);
|
| @@ -960,7 +966,7 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) {
|
| rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
|
|
|
| uint16_t seq_num = kSeqNum;
|
| - rtp_sender_->SetStorePacketsStatus(true, 10);
|
| + rtp_sender_->SetStorePacketsSize(10);
|
| int32_t rtp_header_len = kRtpHeaderSize;
|
| EXPECT_EQ(
|
| 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
|
| @@ -1105,7 +1111,7 @@ TEST_F(RtpSenderTest, FrameCountCallbacks) {
|
| ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
|
| 0, 1500));
|
| uint8_t payload[] = {47, 11, 32, 93, 89};
|
| - rtp_sender_->SetStorePacketsStatus(true, 1);
|
| + rtp_sender_->SetStorePacketsSize(1);
|
| uint32_t ssrc = rtp_sender_->SSRC();
|
|
|
| EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
|
| @@ -1167,7 +1173,7 @@ TEST_F(RtpSenderTest, BitrateCallbacks) {
|
| ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
|
| 0, 1500));
|
| uint8_t payload[] = {47, 11, 32, 93, 89};
|
| - rtp_sender_->SetStorePacketsStatus(true, 1);
|
| + rtp_sender_->SetStorePacketsSize(1);
|
| uint32_t ssrc = rtp_sender_->SSRC();
|
|
|
| // Initial process call so we get a new time window.
|
| @@ -1250,7 +1256,7 @@ TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) {
|
| ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
|
| 0, 1500));
|
| uint8_t payload[] = {47, 11, 32, 93, 89};
|
| - rtp_sender_->SetStorePacketsStatus(true, 1);
|
| + rtp_sender_->SetStorePacketsSize(1);
|
| uint32_t ssrc = rtp_sender_->SSRC();
|
|
|
| rtp_sender_->RegisterRtpStatisticsCallback(&callback);
|
| @@ -1476,7 +1482,7 @@ TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) {
|
| const int32_t kPacketSize = 1400;
|
| const int32_t kNumPackets = 30;
|
|
|
| - rtp_sender_->SetStorePacketsStatus(true, kNumPackets);
|
| + rtp_sender_->SetStorePacketsSize(kNumPackets);
|
| // Set bitrate (in kbps) to fit kNumPackets รก kPacketSize bytes in one second.
|
| rtp_sender_->SetTargetBitrate(kNumPackets * kPacketSize * 8);
|
| const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber();
|
| @@ -1518,8 +1524,8 @@ TEST_F(RtpSenderVideoTest, SendVideoWithCVO) {
|
| kTimestamp, 0, packet_, sizeof(packet_), nullptr,
|
| &hdr);
|
|
|
| - RtpHeaderExtensionMap map;
|
| - map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
|
| + RtpHeaderExtensionsManager map;
|
| + map.Register<VideoOrientation>(kVideoRotationExtensionId);
|
|
|
| // Verify that this packet does have CVO byte.
|
| VerifyCVOPacket(
|
|
|