In fec test helpers remove AugmentedPacket type
Use RtpPacket derived classes instead as most callers already expect one
of those
Bug: webrtc:42225366
Change-Id: I719a0133608d86ba5ff2f2a93be8efa46ee159d3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/402382
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45249}
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index 1471b01..e891203 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -498,7 +498,6 @@
deps = [
":rtp_rtcp",
":rtp_rtcp_format",
- "../../api:rtp_headers",
"../../rtc_base:checks",
"../../rtc_base:copy_on_write_buffer",
"../../rtc_base:random",
@@ -706,7 +705,7 @@
"../../api:scoped_refptr",
"../../api:time_controller",
"../../api:transport_api",
- "../../api/environment:environment",
+ "../../api/environment",
"../../api/environment:environment_factory",
"../../api/rtc_event_log",
"../../api/task_queue",
@@ -759,7 +758,7 @@
"../../test:rtp_test_utils",
"../../test:run_loop",
"../../test:test_support",
- "../../test/time_controller:time_controller",
+ "../../test/time_controller",
"../audio_coding:audio_coding_module_typedefs",
"../video_coding:codec_globals_headers",
"//testing/gtest",
diff --git a/modules/rtp_rtcp/source/fec_test_helper.cc b/modules/rtp_rtcp/source/fec_test_helper.cc
index aa07e6b..ee7da65 100644
--- a/modules/rtp_rtcp/source/fec_test_helper.cc
+++ b/modules/rtp_rtcp/source/fec_test_helper.cc
@@ -16,7 +16,6 @@
#include <memory>
#include <utility>
-#include "api/rtp_headers.h"
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "modules/rtp_rtcp/source/byte_io.h"
#include "modules/rtp_rtcp/source/forward_error_correction.h"
@@ -31,8 +30,6 @@
namespace {
-constexpr uint8_t kRtpMarkerBitMask = 0x80;
-
constexpr uint8_t kFecPayloadType = 96;
constexpr uint8_t kRedPayloadType = 97;
constexpr uint8_t kVp8PayloadType = 120;
@@ -125,37 +122,23 @@
return ++seq_num_;
}
-std::unique_ptr<AugmentedPacket> AugmentedPacketGenerator::NextPacket(
- size_t offset,
- size_t length) {
- std::unique_ptr<AugmentedPacket> packet(new AugmentedPacket());
+void AugmentedPacketGenerator::NextPacket(size_t offset,
+ size_t length,
+ RtpPacket& packet) {
+ // Write Rtp Header
+ packet.SetMarker(num_packets_ == 1);
+ packet.SetPayloadType(kVp8PayloadType);
+ packet.SetSequenceNumber(seq_num_);
+ packet.SetTimestamp(timestamp_);
+ packet.SetSsrc(ssrc_);
- packet->data.SetSize(length + kRtpHeaderSize);
- uint8_t* data = packet->data.MutableData();
+ // Generate RTP payload.
+ uint8_t* data = packet.AllocatePayload(length);
for (size_t i = 0; i < length; ++i)
- data[i + kRtpHeaderSize] = offset + i;
- packet->data.SetSize(length + kRtpHeaderSize);
- packet->header.headerLength = kRtpHeaderSize;
- packet->header.markerBit = (num_packets_ == 1);
- packet->header.payloadType = kVp8PayloadType;
- packet->header.sequenceNumber = seq_num_;
- packet->header.timestamp = timestamp_;
- packet->header.ssrc = ssrc_;
- WriteRtpHeader(packet->header, data);
+ data[i] = offset + i;
+
++seq_num_;
--num_packets_;
-
- return packet;
-}
-
-void AugmentedPacketGenerator::WriteRtpHeader(const RTPHeader& header,
- uint8_t* data) {
- data[0] = 0x80; // Version 2.
- data[1] = header.payloadType;
- data[1] |= (header.markerBit ? kRtpMarkerBitMask : 0);
- ByteWriter<uint16_t>::WriteBigEndian(data + 2, header.sequenceNumber);
- ByteWriter<uint32_t>::WriteBigEndian(data + 4, header.timestamp);
- ByteWriter<uint32_t>::WriteBigEndian(data + 8, header.ssrc);
}
FlexfecPacketGenerator::FlexfecPacketGenerator(uint32_t media_ssrc,
@@ -165,48 +148,37 @@
flexfec_seq_num_(0),
flexfec_timestamp_(0) {}
-std::unique_ptr<AugmentedPacket> FlexfecPacketGenerator::BuildFlexfecPacket(
+RtpPacketReceived FlexfecPacketGenerator::BuildFlexfecPacket(
const ForwardErrorCorrection::Packet& packet) {
- RTC_DCHECK_LE(packet.data.size(),
- static_cast<size_t>(IP_PACKET_SIZE - kRtpHeaderSize));
+ RtpPacketReceived flexfec_packet;
- RTPHeader header;
- header.sequenceNumber = flexfec_seq_num_;
+ flexfec_packet.SetSequenceNumber(flexfec_seq_num_);
++flexfec_seq_num_;
- header.timestamp = flexfec_timestamp_;
+ flexfec_packet.SetTimestamp(flexfec_timestamp_);
flexfec_timestamp_ += kPacketTimestampIncrement;
- header.ssrc = flexfec_ssrc_;
+ flexfec_packet.SetSsrc(flexfec_ssrc_);
+ flexfec_packet.SetPayload(packet.data);
- std::unique_ptr<AugmentedPacket> packet_with_rtp_header(
- new AugmentedPacket());
- packet_with_rtp_header->data.SetSize(kRtpHeaderSize + packet.data.size());
- WriteRtpHeader(header, packet_with_rtp_header->data.MutableData());
- memcpy(packet_with_rtp_header->data.MutableData() + kRtpHeaderSize,
- packet.data.cdata(), packet.data.size());
-
- return packet_with_rtp_header;
+ return flexfec_packet;
}
UlpfecPacketGenerator::UlpfecPacketGenerator(uint32_t ssrc)
: AugmentedPacketGenerator(ssrc) {}
RtpPacketReceived UlpfecPacketGenerator::BuildMediaRedPacket(
- const AugmentedPacket& packet,
+ const RtpPacket& packet,
bool is_recovered) {
- // Create a temporary buffer used to wrap the media packet in RED.
- CopyOnWriteBuffer red_buffer;
- const size_t kHeaderLength = packet.header.headerLength;
- // Append header.
- red_buffer.SetData(packet.data.data(), kHeaderLength);
- // Find payload type and add it as RED header.
- uint8_t media_payload_type = red_buffer[1] & 0x7F;
- red_buffer.AppendData({media_payload_type});
- // Append rest of payload/padding.
- red_buffer.AppendData(
- packet.data.Slice(kHeaderLength, packet.data.size() - kHeaderLength));
-
RtpPacketReceived red_packet;
- RTC_CHECK(red_packet.Parse(std::move(red_buffer)));
+ // Append header.
+ red_packet.CopyHeaderFrom(packet);
+ // Find payload type and add it as RED header.
+ uint8_t* rtp_payload = red_packet.SetPayloadSize(1 + packet.payload_size());
+ rtp_payload[0] = packet.PayloadType();
+ // Append rest of payload/padding.
+ std::memcpy(rtp_payload + 1, packet.payload().data(),
+ packet.payload().size());
+ red_packet.SetPadding(packet.padding_size());
+
red_packet.SetPayloadType(kRedPayloadType);
red_packet.set_recovered(is_recovered);
@@ -217,11 +189,9 @@
const ForwardErrorCorrection::Packet& packet) {
// Create a fake media packet to get a correct header. 1 byte RED header.
++num_packets_;
- std::unique_ptr<AugmentedPacket> fake_packet =
- NextPacket(0, packet.data.size() + 1);
+ RtpPacketReceived red_packet =
+ NextPacket<RtpPacketReceived>(0, packet.data.size() + 1);
- RtpPacketReceived red_packet;
- red_packet.Parse(fake_packet->data);
red_packet.SetMarker(false);
uint8_t* rtp_payload = red_packet.AllocatePayload(packet.data.size() + 1);
rtp_payload[0] = kFecPayloadType;
diff --git a/modules/rtp_rtcp/source/fec_test_helper.h b/modules/rtp_rtcp/source/fec_test_helper.h
index 8d848b6..8a36133 100644
--- a/modules/rtp_rtcp/source/fec_test_helper.h
+++ b/modules/rtp_rtcp/source/fec_test_helper.h
@@ -13,10 +13,9 @@
#include <cstddef>
#include <cstdint>
-#include <memory>
-#include "api/rtp_headers.h"
#include "modules/rtp_rtcp/source/forward_error_correction.h"
+#include "modules/rtp_rtcp/source/rtp_packet.h"
#include "modules/rtp_rtcp/source/rtp_packet_received.h"
#include "rtc_base/random.h"
@@ -24,10 +23,6 @@
namespace test {
namespace fec {
-struct AugmentedPacket : public ForwardErrorCorrection::Packet {
- RTPHeader header;
-};
-
// TODO(brandtr): Consider merging MediaPacketGenerator and
// AugmentedPacketGenerator into a single class, since their functionality is
// similar.
@@ -72,16 +67,20 @@
uint16_t NextPacketSeqNum();
// Return the next packet in the current frame.
- std::unique_ptr<AugmentedPacket> NextPacket(size_t offset, size_t length);
+ template <typename T = RtpPacket>
+ T NextPacket(size_t offset, size_t length) {
+ T rtp_packet(/*extensions=*/nullptr);
+ NextPacket(offset, length, rtp_packet);
+ return rtp_packet;
+ }
protected:
- // Given `header`, writes the appropriate RTP header fields in `data`.
- static void WriteRtpHeader(const RTPHeader& header, uint8_t* data);
-
// Number of packets left to generate, in the current frame.
size_t num_packets_;
private:
+ void NextPacket(size_t offset, size_t length, RtpPacket& packet);
+
uint32_t ssrc_;
uint16_t seq_num_;
uint32_t timestamp_;
@@ -94,7 +93,7 @@
// Creates a new AugmentedPacket (with RTP headers) from a
// FlexFEC packet (without RTP headers).
- std::unique_ptr<AugmentedPacket> BuildFlexfecPacket(
+ RtpPacketReceived BuildFlexfecPacket(
const ForwardErrorCorrection::Packet& packet);
private:
@@ -110,7 +109,7 @@
explicit UlpfecPacketGenerator(uint32_t ssrc);
// Creates a new RtpPacket with the RED header added to the packet.
- static RtpPacketReceived BuildMediaRedPacket(const AugmentedPacket& packet,
+ static RtpPacketReceived BuildMediaRedPacket(const RtpPacket& packet,
bool is_recovered);
// Creates a new RtpPacket with FEC payload and RED header. Does this by
diff --git a/modules/rtp_rtcp/source/flexfec_receiver_unittest.cc b/modules/rtp_rtcp/source/flexfec_receiver_unittest.cc
index da200ea..a34ad9e 100644
--- a/modules/rtp_rtcp/source/flexfec_receiver_unittest.cc
+++ b/modules/rtp_rtcp/source/flexfec_receiver_unittest.cc
@@ -95,8 +95,9 @@
PacketList* media_packets) {
packet_generator_.NewFrame(num_media_packets);
for (size_t i = 0; i < num_media_packets; ++i) {
- std::unique_ptr<Packet> next_packet(
- packet_generator_.NextPacket(frame_offset + i, kPayloadLength));
+ auto next_packet = std::make_unique<Packet>();
+ next_packet->data =
+ packet_generator_.NextPacket(frame_offset + i, kPayloadLength).Buffer();
media_packets->push_back(std::move(next_packet));
}
}
@@ -119,11 +120,11 @@
TEST_F(FlexfecReceiverTest, ReceivesMediaPacket) {
packet_generator_.NewFrame(1);
- std::unique_ptr<Packet> media_packet(
- packet_generator_.NextPacket(0, kPayloadLength));
+ RtpPacketReceived media_packet =
+ packet_generator_.NextPacket<RtpPacketReceived>(0, kPayloadLength);
std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet =
- receiver_.AddReceivedPacket(ParsePacket(*media_packet));
+ receiver_.AddReceivedPacket(media_packet);
ASSERT_TRUE(received_packet);
receiver_.ProcessReceivedPacket(*received_packet);
}
@@ -142,7 +143,7 @@
receiver_.AddReceivedPacket(ParsePacket(*media_packet));
ASSERT_TRUE(received_packet);
receiver_.ProcessReceivedPacket(*received_packet);
- received_packet = receiver_.AddReceivedPacket(ParsePacket(*fec_packet));
+ received_packet = receiver_.AddReceivedPacket(fec_packet);
ASSERT_TRUE(received_packet);
receiver_.ProcessReceivedPacket(*received_packet);
}
@@ -163,7 +164,7 @@
receiver_.AddReceivedPacket(ParsePacket(*media_packet));
ASSERT_TRUE(received_packet);
receiver_.ProcessReceivedPacket(*received_packet);
- EXPECT_FALSE(receiver_.AddReceivedPacket(ParsePacket(*fec_packet)));
+ EXPECT_FALSE(receiver_.AddReceivedPacket(fec_packet));
}
TEST_F(FlexfecReceiverTest, FailsOnUnknownMediaSsrc) {
@@ -191,16 +192,13 @@
const auto& media_packet = media_packets.front();
auto fec_packet = packet_generator_.BuildFlexfecPacket(*fec_packets.front());
// Corrupt the SSRC.
- fec_packet->data.MutableData()[8] = 4;
- fec_packet->data.MutableData()[9] = 5;
- fec_packet->data.MutableData()[10] = 6;
- fec_packet->data.MutableData()[11] = 7;
+ fec_packet.SetSsrc(0x04050607);
std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet =
receiver_.AddReceivedPacket(ParsePacket(*media_packet));
ASSERT_TRUE(received_packet);
receiver_.ProcessReceivedPacket(*received_packet);
- EXPECT_FALSE(receiver_.AddReceivedPacket(ParsePacket(*fec_packet)));
+ EXPECT_FALSE(receiver_.AddReceivedPacket(fec_packet));
}
TEST_F(FlexfecReceiverTest, ReceivesMultiplePackets) {
@@ -221,10 +219,10 @@
// Receive FEC packet.
auto* fec_packet = fec_packets.front();
- std::unique_ptr<Packet> packet_with_rtp_header =
+ RtpPacketReceived packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(*fec_packet);
std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet =
- receiver_.AddReceivedPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.AddReceivedPacket(packet_with_rtp_header);
ASSERT_TRUE(received_packet);
receiver_.ProcessReceivedPacket(*received_packet);
}
@@ -243,13 +241,13 @@
// Receive FEC packet and ensure recovery of lost media packet.
auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> packet_with_rtp_header =
+ RtpPacketReceived packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(**fec_it);
media_it++;
EXPECT_CALL(recovered_packet_receiver_,
OnRecoveredPacket(
Property(&RtpPacketReceived::Buffer, Eq((*media_it)->data))));
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_with_rtp_header);
}
TEST_F(FlexfecReceiverTest, RecoversFromDoubleMediaLoss) {
@@ -264,13 +262,13 @@
// Receive first FEC packet and recover first lost media packet.
auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> packet_with_rtp_header =
+ RtpPacketReceived packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(**fec_it);
auto media_it = media_packets.begin();
EXPECT_CALL(recovered_packet_receiver_,
OnRecoveredPacket(
Property(&RtpPacketReceived::Buffer, Eq((*media_it)->data))));
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_with_rtp_header);
// Receive second FEC packet and recover second lost media packet.
fec_it++;
@@ -280,7 +278,7 @@
OnRecoveredPacket(
Property(&RtpPacketReceived::Buffer, Eq((*media_it)->data))));
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_with_rtp_header);
}
TEST_F(FlexfecReceiverTest, DoesNotRecoverFromMediaAndFecLoss) {
@@ -312,16 +310,16 @@
// Receive FEC packet and ensure recovery of lost media packet.
auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> packet_with_rtp_header =
+ RtpPacketReceived packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(**fec_it);
media_it++;
EXPECT_CALL(recovered_packet_receiver_,
OnRecoveredPacket(
Property(&RtpPacketReceived::Buffer, Eq((*media_it)->data))));
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_with_rtp_header);
// Receive the FEC packet again, but do not call back.
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_with_rtp_header);
// Receive the first media packet again, but do not call back.
media_it = media_packets.begin();
@@ -361,7 +359,7 @@
// Receive all FEC packets.
media_it = media_packets.begin();
for (const auto* fec_packet : fec_packets) {
- std::unique_ptr<Packet> fec_packet_with_rtp_header =
+ RtpPacketReceived fec_packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(*fec_packet);
++media_it;
if (media_it == media_packets.end()) {
@@ -370,7 +368,7 @@
EXPECT_CALL(recovered_packet_receiver_,
OnRecoveredPacket(Property(&RtpPacketReceived::Buffer,
Eq((*media_it)->data))));
- receiver_.OnRtpPacket(ParsePacket(*fec_packet_with_rtp_header));
+ receiver_.OnRtpPacket(fec_packet_with_rtp_header);
++media_it;
}
}
@@ -404,13 +402,13 @@
// Receive FEC packet and recover first media packet.
auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> packet_with_rtp_header =
+ RtpPacketReceived packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(**fec_it);
media_it = media_packets.begin();
EXPECT_CALL(recovered_packet_receiver_,
OnRecoveredPacket(
Property(&RtpPacketReceived::Buffer, Eq((*media_it)->data))));
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_with_rtp_header);
}
TEST_F(FlexfecReceiverTest, TooDelayedFecPacketDoesNotHelp) {
@@ -443,9 +441,9 @@
// Receive FEC packet.
auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> packet_with_rtp_header =
+ RtpPacketReceived packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(**fec_it);
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_with_rtp_header);
// Do not expect a call back.
}
@@ -490,7 +488,7 @@
PacketizeFrame(1, 0, &protected_media_packet);
const std::list<Packet*> fec_packets = EncodeFec(protected_media_packet, 1);
EXPECT_EQ(1u, fec_packets.size());
- std::unique_ptr<Packet> fec_packet_with_rtp_header =
+ RtpPacketReceived fec_packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(*fec_packets.front());
// Lose some packets, thus introducing a sequence number gap.
@@ -507,7 +505,7 @@
}
// Receive delayed FEC packet.
- receiver.OnRtpPacket(ParsePacket(*fec_packet_with_rtp_header));
+ receiver.OnRtpPacket(fec_packet_with_rtp_header);
// Expect no crash.
}
@@ -541,12 +539,8 @@
OnRecoveredPacket(Property(&RtpPacketReceived::Buffer,
Eq((*media_packet4)->data))));
// Add FEC packets.
- auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> packet_with_rtp_header;
- while (fec_it != fec_packets.end()) {
- packet_with_rtp_header = packet_generator_.BuildFlexfecPacket(**fec_it);
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
- ++fec_it;
+ for (Packet* fec_packet : fec_packets) {
+ receiver_.OnRtpPacket(packet_generator_.BuildFlexfecPacket(*fec_packet));
}
}
@@ -606,9 +600,7 @@
// Receive FEC packet and verify that a packet was recovered.
auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> packet_with_rtp_header =
- packet_generator_.BuildFlexfecPacket(**fec_it);
- receiver.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver.OnRtpPacket(packet_generator_.BuildFlexfecPacket(**fec_it));
EXPECT_TRUE(loopback_recovered_packet_receiver.DidReceiveCallback());
EXPECT_FALSE(loopback_recovered_packet_receiver.DeepRecursion());
}
@@ -627,13 +619,13 @@
// Receive FEC packet and ensure recovery of lost media packet.
auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> packet_with_rtp_header =
+ RtpPacketReceived packet_with_rtp_header =
packet_generator_.BuildFlexfecPacket(**fec_it);
media_it++;
EXPECT_CALL(recovered_packet_receiver_,
OnRecoveredPacket(
Property(&RtpPacketReceived::Buffer, Eq((*media_it)->data))));
- receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_with_rtp_header);
// Check stats calculations.
FecPacketCounter packet_counter = receiver_.GetPacketCounter();
@@ -680,9 +672,7 @@
// expect no recovery callback since it is delayed from first frame
// by more than 192 packets.
auto fec_it = fec_packets.begin();
- std::unique_ptr<Packet> fec_packet_with_rtp_header =
- packet_generator_.BuildFlexfecPacket(**fec_it);
- receiver_.OnRtpPacket(ParsePacket(*fec_packet_with_rtp_header));
+ receiver_.OnRtpPacket(packet_generator_.BuildFlexfecPacket(**fec_it));
// Receive remaining media packets.
// NOTE: Because we sent enough to simulate wrap around, sequence 0 is
diff --git a/modules/rtp_rtcp/source/flexfec_sender_unittest.cc b/modules/rtp_rtcp/source/flexfec_sender_unittest.cc
index 56e509e..905fe0d 100644
--- a/modules/rtp_rtcp/source/flexfec_sender_unittest.cc
+++ b/modules/rtp_rtcp/source/flexfec_sender_unittest.cc
@@ -34,7 +34,6 @@
namespace {
-using test::fec::AugmentedPacket;
using test::fec::AugmentedPacketGenerator;
constexpr int kFlexfecPayloadType = 123;
@@ -74,10 +73,8 @@
AugmentedPacketGenerator packet_generator(kMediaSsrc);
packet_generator.NewFrame(kNumPackets);
for (size_t i = 0; i < kNumPackets; ++i) {
- std::unique_ptr<AugmentedPacket> packet =
- packet_generator.NextPacket(i, kPayloadLength);
- RtpPacketToSend rtp_packet(nullptr); // No header extensions.
- rtp_packet.Parse(packet->data);
+ RtpPacketToSend rtp_packet =
+ packet_generator.NextPacket<RtpPacketToSend>(i, kPayloadLength);
sender->AddPacketAndGenerateFec(rtp_packet);
}
std::vector<std::unique_ptr<RtpPacketToSend>> fec_packets =
@@ -146,10 +143,8 @@
for (size_t i = 0; i < kNumFrames; ++i) {
packet_generator.NewFrame(kNumPacketsPerFrame);
for (size_t j = 0; j < kNumPacketsPerFrame; ++j) {
- std::unique_ptr<AugmentedPacket> packet =
- packet_generator.NextPacket(i, kPayloadLength);
- RtpPacketToSend rtp_packet(nullptr);
- rtp_packet.Parse(packet->data);
+ RtpPacketToSend rtp_packet =
+ packet_generator.NextPacket<RtpPacketToSend>(i, kPayloadLength);
sender.AddPacketAndGenerateFec(rtp_packet);
}
}
@@ -186,10 +181,8 @@
for (size_t i = 0; i < kNumFrames; ++i) {
packet_generator.NewFrame(kNumPacketsPerFrame);
for (size_t j = 0; j < kNumPacketsPerFrame; ++j) {
- std::unique_ptr<AugmentedPacket> packet =
- packet_generator.NextPacket(i, kPayloadLength);
- RtpPacketToSend rtp_packet(nullptr);
- rtp_packet.Parse(packet->data);
+ RtpPacketToSend rtp_packet =
+ packet_generator.NextPacket<RtpPacketToSend>(i, kPayloadLength);
sender.AddPacketAndGenerateFec(rtp_packet);
}
std::vector<std::unique_ptr<RtpPacketToSend>> fec_packets =
diff --git a/modules/rtp_rtcp/source/ulpfec_generator_unittest.cc b/modules/rtp_rtcp/source/ulpfec_generator_unittest.cc
index 69ad59d..ddcba4f 100644
--- a/modules/rtp_rtcp/source/ulpfec_generator_unittest.cc
+++ b/modules/rtp_rtcp/source/ulpfec_generator_unittest.cc
@@ -29,7 +29,6 @@
namespace webrtc {
namespace {
-using test::fec::AugmentedPacket;
using test::fec::AugmentedPacketGenerator;
constexpr int kFecPayloadType = 96;
@@ -122,12 +121,10 @@
ulpfec_generator_.SetProtectionParameters(params, params);
uint32_t last_timestamp = 0;
for (size_t i = 0; i < kNumPackets; ++i) {
- std::unique_ptr<AugmentedPacket> packet =
- packet_generator_.NextPacket(i, 10);
- RtpPacketToSend rtp_packet(nullptr);
- EXPECT_TRUE(rtp_packet.Parse(packet->data.data(), packet->data.size()));
+ RtpPacketToSend rtp_packet =
+ packet_generator_.NextPacket<RtpPacketToSend>(i, 10);
ulpfec_generator_.AddPacketAndGenerateFec(rtp_packet);
- last_timestamp = packet->header.timestamp;
+ last_timestamp = rtp_packet.Timestamp();
}
std::vector<std::unique_ptr<RtpPacketToSend>> fec_packets =
ulpfec_generator_.GetFecPackets();
@@ -160,12 +157,11 @@
for (size_t i = 0; i < kNumFrames; ++i) {
packet_generator_.NewFrame(kNumPackets);
for (size_t j = 0; j < kNumPackets; ++j) {
- std::unique_ptr<AugmentedPacket> packet =
- packet_generator_.NextPacket(i * kNumPackets + j, 10);
- RtpPacketToSend rtp_packet(nullptr);
- EXPECT_TRUE(rtp_packet.Parse(packet->data.data(), packet->data.size()));
+ RtpPacketToSend rtp_packet =
+ packet_generator_.NextPacket<RtpPacketToSend>(i * kNumPackets + j,
+ 10);
ulpfec_generator_.AddPacketAndGenerateFec(rtp_packet);
- last_timestamp = packet->header.timestamp;
+ last_timestamp = rtp_packet.Timestamp();
}
}
std::vector<std::unique_ptr<RtpPacketToSend>> fec_packets =
@@ -188,10 +184,8 @@
// Fill up internal buffer with media packets with short RTP header length.
packet_generator_.NewFrame(kUlpfecMaxMediaPackets + 1);
for (size_t i = 0; i < kUlpfecMaxMediaPackets; ++i) {
- std::unique_ptr<AugmentedPacket> packet =
- packet_generator_.NextPacket(i, 10);
- RtpPacketToSend rtp_packet(nullptr);
- EXPECT_TRUE(rtp_packet.Parse(packet->data.data(), packet->data.size()));
+ RtpPacketToSend rtp_packet =
+ packet_generator_.NextPacket<RtpPacketToSend>(i, 10);
EXPECT_EQ(rtp_packet.headers_size(), kShortRtpHeaderLength);
ulpfec_generator_.AddPacketAndGenerateFec(rtp_packet);
EXPECT_TRUE(ulpfec_generator_.GetFecPackets().empty());
@@ -199,10 +193,8 @@
// Kick off FEC generation with media packet with long RTP header length.
// Since the internal buffer is full, this packet will not be protected.
- std::unique_ptr<AugmentedPacket> packet =
- packet_generator_.NextPacket(kUlpfecMaxMediaPackets, 10);
- RtpPacketToSend rtp_packet(nullptr);
- EXPECT_TRUE(rtp_packet.Parse(packet->data.data(), packet->data.size()));
+ RtpPacketToSend rtp_packet =
+ packet_generator_.NextPacket<RtpPacketToSend>(kUlpfecMaxMediaPackets, 10);
EXPECT_TRUE(rtp_packet.SetPayloadSize(0) != nullptr);
const uint32_t csrcs[]{1};
rtp_packet.SetCsrcs(csrcs);
@@ -238,10 +230,8 @@
// or delta-frame.
auto add_frame = [&](bool is_keyframe) {
packet_generator_.NewFrame(1);
- std::unique_ptr<AugmentedPacket> packet =
- packet_generator_.NextPacket(0, 10);
- RtpPacketToSend rtp_packet(nullptr);
- EXPECT_TRUE(rtp_packet.Parse(packet->data.data(), packet->data.size()));
+ RtpPacketToSend rtp_packet =
+ packet_generator_.NextPacket<RtpPacketToSend>(0, 10);
rtp_packet.set_is_key_frame(is_keyframe);
ulpfec_generator_.AddPacketAndGenerateFec(rtp_packet);
};
diff --git a/modules/rtp_rtcp/source/ulpfec_receiver_unittest.cc b/modules/rtp_rtcp/source/ulpfec_receiver_unittest.cc
index 03282af..e9e33c5 100644
--- a/modules/rtp_rtcp/source/ulpfec_receiver_unittest.cc
+++ b/modules/rtp_rtcp/source/ulpfec_receiver_unittest.cc
@@ -37,7 +37,6 @@
using ::testing::Eq;
using ::testing::Property;
-using test::fec::AugmentedPacket;
using Packet = ForwardErrorCorrection::Packet;
using test::fec::UlpfecPacketGenerator;
@@ -69,12 +68,12 @@
// Generates `num_media_packets` corresponding to a single frame.
void PacketizeFrame(size_t num_media_packets,
size_t frame_offset,
- std::list<AugmentedPacket*>* augmented_packets,
+ std::list<RtpPacketReceived>* augmented_packets,
ForwardErrorCorrection::PacketList* packets);
// Build a media packet using `packet_generator_` and add it
// to the receiver.
- void BuildAndAddRedMediaPacket(AugmentedPacket* packet,
+ void BuildAndAddRedMediaPacket(const RtpPacketReceived& packet,
bool is_recovered = false);
// Build a FEC packet using `packet_generator_` and add it
@@ -83,8 +82,7 @@
// Ensure that `recovered_packet_receiver_` will be called correctly
// and that the recovered packet will be identical to the lost packet.
- void VerifyReconstructedMediaPacket(const AugmentedPacket& packet,
- size_t times);
+ void VerifyReconstructedMediaPacket(const RtpPacket& packet, size_t times);
void InjectGarbagePacketLength(size_t fec_garbage_offset);
@@ -118,22 +116,25 @@
void UlpfecReceiverTest::PacketizeFrame(
size_t num_media_packets,
size_t frame_offset,
- std::list<AugmentedPacket*>* augmented_packets,
+ std::list<RtpPacketReceived>* augmented_packets,
ForwardErrorCorrection::PacketList* packets) {
packet_generator_.NewFrame(num_media_packets);
for (size_t i = 0; i < num_media_packets; ++i) {
- std::unique_ptr<AugmentedPacket> next_packet(
- packet_generator_.NextPacket(frame_offset + i, kRtpHeaderSize + 10));
- augmented_packets->push_back(next_packet.get());
- packets->push_back(std::move(next_packet));
+ RtpPacketReceived next_packet =
+ packet_generator_.NextPacket<RtpPacketReceived>(frame_offset + i,
+ kRtpHeaderSize + 10);
+ auto packet = std::make_unique<Packet>();
+ packet->data = next_packet.Buffer();
+ augmented_packets->push_back(std::move(next_packet));
+ packets->push_back(std::move(packet));
}
}
-void UlpfecReceiverTest::BuildAndAddRedMediaPacket(AugmentedPacket* packet,
- bool is_recovered) {
- RtpPacketReceived red_packet =
- packet_generator_.BuildMediaRedPacket(*packet, is_recovered);
- EXPECT_TRUE(receiver_fec_.AddReceivedRedPacket(red_packet));
+void UlpfecReceiverTest::BuildAndAddRedMediaPacket(
+ const RtpPacketReceived& packet,
+ bool is_recovered) {
+ EXPECT_TRUE(receiver_fec_.AddReceivedRedPacket(
+ packet_generator_.BuildMediaRedPacket(packet, is_recovered)));
}
void UlpfecReceiverTest::BuildAndAddRedFecPacket(Packet* packet) {
@@ -142,15 +143,14 @@
EXPECT_TRUE(receiver_fec_.AddReceivedRedPacket(red_packet));
}
-void UlpfecReceiverTest::VerifyReconstructedMediaPacket(
- const AugmentedPacket& packet,
- size_t times) {
+void UlpfecReceiverTest::VerifyReconstructedMediaPacket(const RtpPacket& packet,
+ size_t times) {
// Verify that the content of the reconstructed packet is equal to the
// content of `packet`, and that the same content is received `times` number
// of times in a row.
- EXPECT_CALL(
- recovered_packet_receiver_,
- OnRecoveredPacket(Property(&RtpPacketReceived::Buffer, Eq(packet.data))))
+ EXPECT_CALL(recovered_packet_receiver_,
+ OnRecoveredPacket(
+ Property(&RtpPacketReceived::Buffer, Eq(packet.Buffer()))))
.Times(times);
}
@@ -158,7 +158,7 @@
EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_));
const size_t kNumFecPackets = 1;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
PacketizeFrame(2, 0, &augmented_media_packets, &media_packets);
std::list<ForwardErrorCorrection::Packet*> fec_packets;
@@ -192,7 +192,7 @@
TEST_F(UlpfecReceiverTest, TwoMediaOneFec) {
constexpr size_t kNumFecPackets = 1u;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
PacketizeFrame(2, 0, &augmented_media_packets, &media_packets);
std::list<ForwardErrorCorrection::Packet*> fec_packets;
@@ -205,7 +205,8 @@
// Recovery
auto it = augmented_media_packets.begin();
BuildAndAddRedMediaPacket(*it);
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
+
receiver_fec_.ProcessReceivedFec();
counter = receiver_fec_.GetPacketCounter();
EXPECT_EQ(1u, counter.num_packets);
@@ -218,7 +219,7 @@
auto fec_it = fec_packets.begin();
BuildAndAddRedFecPacket(*fec_it);
++it;
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
counter = receiver_fec_.GetPacketCounter();
@@ -230,7 +231,7 @@
TEST_F(UlpfecReceiverTest, TwoMediaOneFecNotUsesRecoveredPackets) {
constexpr size_t kNumFecPackets = 1u;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
PacketizeFrame(2, 0, &augmented_media_packets, &media_packets);
std::list<ForwardErrorCorrection::Packet*> fec_packets;
@@ -243,7 +244,7 @@
// Recovery
auto it = augmented_media_packets.begin();
BuildAndAddRedMediaPacket(*it, /*is_recovered=*/true);
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
counter = receiver_fec_.GetPacketCounter();
EXPECT_EQ(1u, counter.num_packets);
@@ -278,7 +279,7 @@
TEST_F(UlpfecReceiverTest, TwoMediaTwoFec) {
const size_t kNumFecPackets = 2;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
PacketizeFrame(2, 0, &augmented_media_packets, &media_packets);
std::list<ForwardErrorCorrection::Packet*> fec_packets;
@@ -289,18 +290,18 @@
auto it = augmented_media_packets.begin();
auto fec_it = fec_packets.begin();
BuildAndAddRedFecPacket(*fec_it);
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
++fec_it;
BuildAndAddRedFecPacket(*fec_it);
++it;
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
}
TEST_F(UlpfecReceiverTest, TwoFramesOneFec) {
const size_t kNumFecPackets = 1;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
PacketizeFrame(1, 0, &augmented_media_packets, &media_packets);
PacketizeFrame(1, 1, &augmented_media_packets, &media_packets);
@@ -310,18 +311,18 @@
// Recovery
auto it = augmented_media_packets.begin();
BuildAndAddRedMediaPacket(augmented_media_packets.front());
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
// Drop one media packet.
BuildAndAddRedFecPacket(fec_packets.front());
++it;
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
}
TEST_F(UlpfecReceiverTest, OneCompleteOneUnrecoverableFrame) {
const size_t kNumFecPackets = 1;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
PacketizeFrame(1, 0, &augmented_media_packets, &media_packets);
PacketizeFrame(2, 1, &augmented_media_packets, &media_packets);
@@ -332,18 +333,18 @@
// Recovery
auto it = augmented_media_packets.begin();
BuildAndAddRedMediaPacket(*it); // First frame: one packet.
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
++it;
BuildAndAddRedMediaPacket(*it); // First packet of second frame.
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
}
TEST_F(UlpfecReceiverTest, MaxFramesOneFec) {
const size_t kNumFecPackets = 1;
const size_t kNumMediaPackets = 48;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
for (size_t i = 0; i < kNumMediaPackets; ++i) {
PacketizeFrame(1, i, &augmented_media_packets, &media_packets);
@@ -356,19 +357,19 @@
++it; // Drop first packet.
for (; it != augmented_media_packets.end(); ++it) {
BuildAndAddRedMediaPacket(*it);
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
}
BuildAndAddRedFecPacket(fec_packets.front());
it = augmented_media_packets.begin();
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
}
TEST_F(UlpfecReceiverTest, TooManyFrames) {
const size_t kNumFecPackets = 1;
const size_t kNumMediaPackets = 49;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
for (size_t i = 0; i < kNumMediaPackets; ++i) {
PacketizeFrame(1, i, &augmented_media_packets, &media_packets);
@@ -385,7 +386,7 @@
Packet* delayed_fec = nullptr;
const size_t kNumFecPacketsBatch1 = 1;
const size_t kNumMediaPacketsBatch1 = 2;
- std::list<AugmentedPacket*> augmented_media_packets_batch1;
+ std::list<RtpPacketReceived> augmented_media_packets_batch1;
ForwardErrorCorrection::PacketList media_packets_batch1;
PacketizeFrame(kNumMediaPacketsBatch1, 0, &augmented_media_packets_batch1,
&media_packets_batch1);
@@ -399,7 +400,7 @@
// Fill the FEC decoder. No packets should be dropped.
const size_t kNumMediaPacketsBatch2 = 191;
- std::list<AugmentedPacket*> augmented_media_packets_batch2;
+ std::list<RtpPacketReceived> augmented_media_packets_batch2;
ForwardErrorCorrection::PacketList media_packets_batch2;
for (size_t i = 0; i < kNumMediaPacketsBatch2; ++i) {
PacketizeFrame(1, i, &augmented_media_packets_batch2,
@@ -424,7 +425,7 @@
Packet* delayed_fec = nullptr;
const size_t kNumFecPacketsBatch1 = 1;
const size_t kNumMediaPacketsBatch1 = 2;
- std::list<AugmentedPacket*> augmented_media_packets_batch1;
+ std::list<RtpPacketReceived> augmented_media_packets_batch1;
ForwardErrorCorrection::PacketList media_packets_batch1;
PacketizeFrame(kNumMediaPacketsBatch1, 0, &augmented_media_packets_batch1,
&media_packets_batch1);
@@ -438,7 +439,7 @@
// Fill the FEC decoder and force the last packet to be dropped.
const size_t kNumMediaPacketsBatch2 = 192;
- std::list<AugmentedPacket*> augmented_media_packets_batch2;
+ std::list<RtpPacketReceived> augmented_media_packets_batch2;
ForwardErrorCorrection::PacketList media_packets_batch2;
for (size_t i = 0; i < kNumMediaPacketsBatch2; ++i) {
PacketizeFrame(1, i, &augmented_media_packets_batch2,
@@ -462,10 +463,10 @@
// 49 frames with 2 media packets and one FEC packet. All media packets
// missing.
const size_t kNumMediaPackets = 49 * 2;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
for (size_t i = 0; i < kNumMediaPackets / 2; ++i) {
- std::list<AugmentedPacket*> frame_augmented_media_packets;
+ std::list<RtpPacketReceived> frame_augmented_media_packets;
ForwardErrorCorrection::PacketList frame_media_packets;
std::list<ForwardErrorCorrection::Packet*> fec_packets;
PacketizeFrame(2, 0, &frame_augmented_media_packets, &frame_media_packets);
@@ -520,15 +521,12 @@
TEST_F(UlpfecReceiverTest, MediaWithPadding) {
const size_t kNumFecPackets = 1;
- std::list<AugmentedPacket*> augmented_media_packets;
+ std::list<RtpPacketReceived> augmented_media_packets;
ForwardErrorCorrection::PacketList media_packets;
PacketizeFrame(2, 0, &augmented_media_packets, &media_packets);
- // Append four bytes of padding to the first media packet.
- const uint8_t kPadding[] = {0, 0, 0, 4};
- augmented_media_packets.front()->data.AppendData(kPadding);
- augmented_media_packets.front()->data.MutableData()[0] |= 1 << 5; // P bit.
- augmented_media_packets.front()->header.paddingLength = 4;
+ augmented_media_packets.front().SetPadding(/*padding_bytes=*/4);
+ media_packets.front()->data = augmented_media_packets.front().Buffer();
std::list<ForwardErrorCorrection::Packet*> fec_packets;
EncodeFec(media_packets, kNumFecPackets, &fec_packets);
@@ -536,12 +534,12 @@
auto it = augmented_media_packets.begin();
BuildAndAddRedMediaPacket(augmented_media_packets.front());
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
BuildAndAddRedFecPacket(fec_packets.front());
++it;
- VerifyReconstructedMediaPacket(**it, 1);
+ VerifyReconstructedMediaPacket(*it, 1);
receiver_fec_.ProcessReceivedFec();
}