| Index: webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc b/webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc
|
| index 0c66dc1f528ea68cd787616ddf279948a8cd3dcd..39b5ed86b16daac2d2c27b4bb9ba02bc09e419ce 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc
|
| @@ -39,7 +39,7 @@ class ReceiverFecTest : public ::testing::Test {
|
| }
|
|
|
| void GenerateFec(ForwardErrorCorrection::PacketList* media_packets,
|
| - ForwardErrorCorrection::PacketList* fec_packets,
|
| + std::list<Packet*>* fec_packets,
|
| unsigned int num_fec_packets) {
|
| uint8_t protection_factor = num_fec_packets * 255 / media_packets->size();
|
| EXPECT_EQ(0, fec_->GenerateFec(*media_packets, protection_factor,
|
| @@ -55,7 +55,9 @@ class ReceiverFecTest : public ::testing::Test {
|
| for (int i = 0; i < num_media_packets; ++i) {
|
| media_rtp_packets->push_back(
|
| generator_->NextPacket(frame_offset + i, kRtpHeaderSize + 10));
|
| - media_packets->push_back(media_rtp_packets->back());
|
| + media_packets->push_back(
|
| + std::unique_ptr<ForwardErrorCorrection::Packet>(
|
| + media_rtp_packets->back()));
|
| }
|
| }
|
|
|
| @@ -97,19 +99,12 @@ class ReceiverFecTest : public ::testing::Test {
|
| std::unique_ptr<FrameGenerator> generator_;
|
| };
|
|
|
| -void DeletePackets(ForwardErrorCorrection::PacketList* packets) {
|
| - while (!packets->empty()) {
|
| - delete packets->front();
|
| - packets->pop_front();
|
| - }
|
| -}
|
| -
|
| TEST_F(ReceiverFecTest, TwoMediaOneFec) {
|
| const unsigned int kNumFecPackets = 1u;
|
| std::list<test::RawRtpPacket*> media_rtp_packets;
|
| ForwardErrorCorrection::PacketList media_packets;
|
| GenerateFrame(2, 0, &media_rtp_packets, &media_packets);
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
|
|
|
| // Recovery
|
| @@ -128,8 +123,6 @@ TEST_F(ReceiverFecTest, TwoMediaOneFec) {
|
| EXPECT_EQ(2U, counter.num_packets);
|
| EXPECT_EQ(1U, counter.num_fec_packets);
|
| EXPECT_EQ(1U, counter.num_recovered_packets);
|
| -
|
| - DeletePackets(&media_packets);
|
| }
|
|
|
| void ReceiverFecTest::InjectGarbagePacketLength(size_t fec_garbage_offset) {
|
| @@ -140,7 +133,7 @@ void ReceiverFecTest::InjectGarbagePacketLength(size_t fec_garbage_offset) {
|
| std::list<test::RawRtpPacket*> media_rtp_packets;
|
| ForwardErrorCorrection::PacketList media_packets;
|
| GenerateFrame(2, 0, &media_rtp_packets, &media_packets);
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
|
| ByteWriter<uint16_t>::WriteBigEndian(
|
| &fec_packets.front()->data[fec_garbage_offset], 0x4711);
|
| @@ -155,8 +148,6 @@ void ReceiverFecTest::InjectGarbagePacketLength(size_t fec_garbage_offset) {
|
| EXPECT_EQ(2u, counter.num_packets);
|
| EXPECT_EQ(1u, counter.num_fec_packets);
|
| EXPECT_EQ(0u, counter.num_recovered_packets);
|
| -
|
| - DeletePackets(&media_packets);
|
| }
|
|
|
| TEST_F(ReceiverFecTest, InjectGarbageFecHeaderLengthRecovery) {
|
| @@ -175,7 +166,7 @@ TEST_F(ReceiverFecTest, TwoMediaTwoFec) {
|
| std::list<test::RawRtpPacket*> media_rtp_packets;
|
| ForwardErrorCorrection::PacketList media_packets;
|
| GenerateFrame(2, 0, &media_rtp_packets, &media_packets);
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
|
|
|
| // Recovery
|
| @@ -190,8 +181,6 @@ TEST_F(ReceiverFecTest, TwoMediaTwoFec) {
|
| ++it;
|
| VerifyReconstructedMediaPacket(*it, 1);
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| -
|
| - DeletePackets(&media_packets);
|
| }
|
|
|
| TEST_F(ReceiverFecTest, TwoFramesOneFec) {
|
| @@ -200,7 +189,7 @@ TEST_F(ReceiverFecTest, TwoFramesOneFec) {
|
| ForwardErrorCorrection::PacketList media_packets;
|
| GenerateFrame(1, 0, &media_rtp_packets, &media_packets);
|
| GenerateFrame(1, 1, &media_rtp_packets, &media_packets);
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
|
|
|
| // Recovery
|
| @@ -213,8 +202,6 @@ TEST_F(ReceiverFecTest, TwoFramesOneFec) {
|
| ++it;
|
| VerifyReconstructedMediaPacket(*it, 1);
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| -
|
| - DeletePackets(&media_packets);
|
| }
|
|
|
| TEST_F(ReceiverFecTest, OneCompleteOneUnrecoverableFrame) {
|
| @@ -224,7 +211,7 @@ TEST_F(ReceiverFecTest, OneCompleteOneUnrecoverableFrame) {
|
| GenerateFrame(1, 0, &media_rtp_packets, &media_packets);
|
| GenerateFrame(2, 1, &media_rtp_packets, &media_packets);
|
|
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
|
|
|
| // Recovery
|
| @@ -236,8 +223,6 @@ TEST_F(ReceiverFecTest, OneCompleteOneUnrecoverableFrame) {
|
| BuildAndAddRedMediaPacket(*it); // First packet of second frame.
|
| VerifyReconstructedMediaPacket(*it, 1);
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| -
|
| - DeletePackets(&media_packets);
|
| }
|
|
|
| TEST_F(ReceiverFecTest, MaxFramesOneFec) {
|
| @@ -248,7 +233,7 @@ TEST_F(ReceiverFecTest, MaxFramesOneFec) {
|
| for (unsigned int i = 0; i < kNumMediaPackets; ++i) {
|
| GenerateFrame(1, i, &media_rtp_packets, &media_packets);
|
| }
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
|
|
|
| // Recovery
|
| @@ -263,8 +248,6 @@ TEST_F(ReceiverFecTest, MaxFramesOneFec) {
|
| it = media_rtp_packets.begin();
|
| VerifyReconstructedMediaPacket(*it, 1);
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| -
|
| - DeletePackets(&media_packets);
|
| }
|
|
|
| TEST_F(ReceiverFecTest, TooManyFrames) {
|
| @@ -275,12 +258,10 @@ TEST_F(ReceiverFecTest, TooManyFrames) {
|
| for (unsigned int i = 0; i < kNumMediaPackets; ++i) {
|
| GenerateFrame(1, i, &media_rtp_packets, &media_packets);
|
| }
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| EXPECT_EQ(-1, fec_->GenerateFec(media_packets,
|
| kNumFecPackets * 255 / kNumMediaPackets, 0,
|
| false, kFecMaskBursty, &fec_packets));
|
| -
|
| - DeletePackets(&media_packets);
|
| }
|
|
|
| TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) {
|
| @@ -293,7 +274,7 @@ TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) {
|
| ForwardErrorCorrection::PacketList media_packets_batch1;
|
| GenerateFrame(kNumMediaPacketsBatch1, 0, &media_rtp_packets_batch1,
|
| &media_packets_batch1);
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| GenerateFec(&media_packets_batch1, &fec_packets, kNumFecPacketsBatch1);
|
|
|
| BuildAndAddRedMediaPacket(media_rtp_packets_batch1.front());
|
| @@ -322,9 +303,6 @@ TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) {
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| .Times(1).WillRepeatedly(Return(true));
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| -
|
| - DeletePackets(&media_packets_batch1);
|
| - DeletePackets(&media_packets_batch2);
|
| }
|
|
|
| TEST_F(ReceiverFecTest, PacketDroppedWhenTooOld) {
|
| @@ -337,7 +315,7 @@ TEST_F(ReceiverFecTest, PacketDroppedWhenTooOld) {
|
| ForwardErrorCorrection::PacketList media_packets_batch1;
|
| GenerateFrame(kNumMediaPacketsBatch1, 0, &media_rtp_packets_batch1,
|
| &media_packets_batch1);
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<ForwardErrorCorrection::Packet*> fec_packets;
|
| GenerateFec(&media_packets_batch1, &fec_packets, kNumFecPacketsBatch1);
|
|
|
| BuildAndAddRedMediaPacket(media_rtp_packets_batch1.front());
|
| @@ -367,9 +345,6 @@ TEST_F(ReceiverFecTest, PacketDroppedWhenTooOld) {
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| .Times(0);
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| -
|
| - DeletePackets(&media_packets_batch1);
|
| - DeletePackets(&media_packets_batch2);
|
| }
|
|
|
| TEST_F(ReceiverFecTest, OldFecPacketDropped) {
|
| @@ -381,7 +356,7 @@ TEST_F(ReceiverFecTest, OldFecPacketDropped) {
|
| for (unsigned int i = 0; i < kNumMediaPackets / 2; ++i) {
|
| std::list<test::RawRtpPacket*> frame_media_rtp_packets;
|
| ForwardErrorCorrection::PacketList frame_media_packets;
|
| - ForwardErrorCorrection::PacketList fec_packets;
|
| + std::list<Packet*> fec_packets;
|
| GenerateFrame(2, 0, &frame_media_rtp_packets, &frame_media_packets);
|
| GenerateFec(&frame_media_packets, &fec_packets, 1);
|
| for (auto it = fec_packets.begin(); it != fec_packets.end(); ++it) {
|
| @@ -391,8 +366,10 @@ TEST_F(ReceiverFecTest, OldFecPacketDropped) {
|
| .Times(0);
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
| - media_packets.insert(media_packets.end(), frame_media_packets.begin(),
|
| - frame_media_packets.end());
|
| + // Move unique_ptr's to media_packets for lifetime management.
|
| + media_packets.insert(media_packets.end(),
|
| + std::make_move_iterator(frame_media_packets.begin()),
|
| + std::make_move_iterator(frame_media_packets.end()));
|
| media_rtp_packets.insert(media_rtp_packets.end(),
|
| frame_media_rtp_packets.begin(),
|
| frame_media_rtp_packets.end());
|
| @@ -404,8 +381,6 @@ TEST_F(ReceiverFecTest, OldFecPacketDropped) {
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| .Times(1).WillRepeatedly(Return(true));
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| -
|
| - DeletePackets(&media_packets);
|
| }
|
|
|
| void ReceiverFecTest::SurvivesMaliciousPacket(const uint8_t* data,
|
|
|