| Index: webrtc/modules/audio_coding/neteq/red_payload_splitter_unittest.cc
|
| diff --git a/webrtc/modules/audio_coding/neteq/red_payload_splitter_unittest.cc b/webrtc/modules/audio_coding/neteq/red_payload_splitter_unittest.cc
|
| index ababe1c57680df4d4fb79231a94298c85c411499..cd85f0329f50a4cdd46537f252b7226395672447 100644
|
| --- a/webrtc/modules/audio_coding/neteq/red_payload_splitter_unittest.cc
|
| +++ b/webrtc/modules/audio_coding/neteq/red_payload_splitter_unittest.cc
|
| @@ -75,18 +75,18 @@ void CreateOpusFecPayload(uint8_t* payload,
|
| // by the values in array |payload_types| (which must be of length
|
| // |num_payloads|). Each redundant payload is |timestamp_offset| samples
|
| // "behind" the the previous payload.
|
| -Packet* CreateRedPayload(size_t num_payloads,
|
| - uint8_t* payload_types,
|
| - int timestamp_offset,
|
| - bool embed_opus_fec = false) {
|
| - Packet* packet = new Packet;
|
| - packet->payload_type = kRedPayloadType;
|
| - packet->timestamp = kBaseTimestamp;
|
| - packet->sequence_number = kSequenceNumber;
|
| - packet->payload.SetSize((kPayloadLength + 1) +
|
| - (num_payloads - 1) *
|
| - (kPayloadLength + kRedHeaderLength));
|
| - uint8_t* payload_ptr = packet->payload.data();
|
| +Packet CreateRedPayload(size_t num_payloads,
|
| + uint8_t* payload_types,
|
| + int timestamp_offset,
|
| + bool embed_opus_fec = false) {
|
| + Packet packet;
|
| + packet.payload_type = kRedPayloadType;
|
| + packet.timestamp = kBaseTimestamp;
|
| + packet.sequence_number = kSequenceNumber;
|
| + packet.payload.SetSize((kPayloadLength + 1) +
|
| + (num_payloads - 1) *
|
| + (kPayloadLength + kRedHeaderLength));
|
| + uint8_t* payload_ptr = packet.payload.data();
|
| for (size_t i = 0; i < num_payloads; ++i) {
|
| // Write the RED headers.
|
| if (i == num_payloads - 1) {
|
| @@ -122,44 +122,44 @@ Packet* CreateRedPayload(size_t num_payloads,
|
| }
|
|
|
| // Create a packet with all payload bytes set to |payload_value|.
|
| -Packet* CreatePacket(uint8_t payload_type,
|
| - size_t payload_length,
|
| - uint8_t payload_value,
|
| - bool opus_fec = false) {
|
| - Packet* packet = new Packet;
|
| - packet->payload_type = payload_type;
|
| - packet->timestamp = kBaseTimestamp;
|
| - packet->sequence_number = kSequenceNumber;
|
| - packet->payload.SetSize(payload_length);
|
| +Packet CreatePacket(uint8_t payload_type,
|
| + size_t payload_length,
|
| + uint8_t payload_value,
|
| + bool opus_fec = false) {
|
| + Packet packet;
|
| + packet.payload_type = payload_type;
|
| + packet.timestamp = kBaseTimestamp;
|
| + packet.sequence_number = kSequenceNumber;
|
| + packet.payload.SetSize(payload_length);
|
| if (opus_fec) {
|
| - CreateOpusFecPayload(packet->payload.data(), packet->payload.size(),
|
| + CreateOpusFecPayload(packet.payload.data(), packet.payload.size(),
|
| payload_value);
|
| } else {
|
| - memset(packet->payload.data(), payload_value, packet->payload.size());
|
| + memset(packet.payload.data(), payload_value, packet.payload.size());
|
| }
|
| return packet;
|
| }
|
|
|
| // Checks that |packet| has the attributes given in the remaining parameters.
|
| -void VerifyPacket(const Packet* packet,
|
| +void VerifyPacket(const Packet& packet,
|
| size_t payload_length,
|
| uint8_t payload_type,
|
| uint16_t sequence_number,
|
| uint32_t timestamp,
|
| uint8_t payload_value,
|
| Packet::Priority priority) {
|
| - EXPECT_EQ(payload_length, packet->payload.size());
|
| - EXPECT_EQ(payload_type, packet->payload_type);
|
| - EXPECT_EQ(sequence_number, packet->sequence_number);
|
| - EXPECT_EQ(timestamp, packet->timestamp);
|
| - EXPECT_EQ(priority, packet->priority);
|
| - ASSERT_FALSE(packet->payload.empty());
|
| - for (size_t i = 0; i < packet->payload.size(); ++i) {
|
| - ASSERT_EQ(payload_value, packet->payload.data()[i]);
|
| + EXPECT_EQ(payload_length, packet.payload.size());
|
| + EXPECT_EQ(payload_type, packet.payload_type);
|
| + EXPECT_EQ(sequence_number, packet.sequence_number);
|
| + EXPECT_EQ(timestamp, packet.timestamp);
|
| + EXPECT_EQ(priority, packet.priority);
|
| + ASSERT_FALSE(packet.payload.empty());
|
| + for (size_t i = 0; i < packet.payload.size(); ++i) {
|
| + ASSERT_EQ(payload_value, packet.payload.data()[i]);
|
| }
|
| }
|
|
|
| -void VerifyPacket(const Packet* packet,
|
| +void VerifyPacket(const Packet& packet,
|
| size_t payload_length,
|
| uint8_t payload_type,
|
| uint16_t sequence_number,
|
| @@ -182,23 +182,18 @@ TEST(RedPayloadSplitter, CreateAndDestroy) {
|
| TEST(RedPayloadSplitter, OnePacketTwoPayloads) {
|
| uint8_t payload_types[] = {0, 0};
|
| const int kTimestampOffset = 160;
|
| - Packet* packet = CreateRedPayload(2, payload_types, kTimestampOffset);
|
| PacketList packet_list;
|
| - packet_list.push_back(packet);
|
| + packet_list.push_back(CreateRedPayload(2, payload_types, kTimestampOffset));
|
| RedPayloadSplitter splitter;
|
| EXPECT_TRUE(splitter.SplitRed(&packet_list));
|
| ASSERT_EQ(2u, packet_list.size());
|
| // Check first packet. The first in list should always be the primary payload.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[1], kSequenceNumber,
|
| - kBaseTimestamp, 1, true);
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[1],
|
| + kSequenceNumber, kBaseTimestamp, 1, true);
|
| packet_list.pop_front();
|
| // Check second packet.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[0], kSequenceNumber,
|
| - kBaseTimestamp - kTimestampOffset, 0, false);
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[0],
|
| + kSequenceNumber, kBaseTimestamp - kTimestampOffset, 0, false);
|
| }
|
|
|
| // Packets A and B are not split at all. Only the RED header in each packet is
|
| @@ -207,29 +202,26 @@ TEST(RedPayloadSplitter, TwoPacketsOnePayload) {
|
| uint8_t payload_types[] = {0};
|
| const int kTimestampOffset = 160;
|
| // Create first packet, with a single RED payload.
|
| - Packet* packet = CreateRedPayload(1, payload_types, kTimestampOffset);
|
| PacketList packet_list;
|
| - packet_list.push_back(packet);
|
| + packet_list.push_back(CreateRedPayload(1, payload_types, kTimestampOffset));
|
| // Create second packet, with a single RED payload.
|
| - packet = CreateRedPayload(1, payload_types, kTimestampOffset);
|
| - // Manually change timestamp and sequence number of second packet.
|
| - packet->timestamp += kTimestampOffset;
|
| - packet->sequence_number++;
|
| - packet_list.push_back(packet);
|
| + {
|
| + Packet packet = CreateRedPayload(1, payload_types, kTimestampOffset);
|
| + // Manually change timestamp and sequence number of second packet.
|
| + packet.timestamp += kTimestampOffset;
|
| + packet.sequence_number++;
|
| + packet_list.push_back(std::move(packet));
|
| + }
|
| RedPayloadSplitter splitter;
|
| EXPECT_TRUE(splitter.SplitRed(&packet_list));
|
| ASSERT_EQ(2u, packet_list.size());
|
| // Check first packet.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[0], kSequenceNumber,
|
| - kBaseTimestamp, 0, true);
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[0],
|
| + kSequenceNumber, kBaseTimestamp, 0, true);
|
| packet_list.pop_front();
|
| // Check second packet.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[0], kSequenceNumber + 1,
|
| - kBaseTimestamp + kTimestampOffset, 0, true);
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[0],
|
| + kSequenceNumber + 1, kBaseTimestamp + kTimestampOffset, 0, true);
|
| }
|
|
|
| // Packets A and B are split into packets A1, A2, A3, B1, B2, B3, with
|
| @@ -245,53 +237,45 @@ TEST(RedPayloadSplitter, TwoPacketsThreePayloads) {
|
| uint8_t payload_types[] = {2, 1, 0}; // Primary is the last one.
|
| const int kTimestampOffset = 160;
|
| // Create first packet, with 3 RED payloads.
|
| - Packet* packet = CreateRedPayload(3, payload_types, kTimestampOffset);
|
| PacketList packet_list;
|
| - packet_list.push_back(packet);
|
| + packet_list.push_back(CreateRedPayload(3, payload_types, kTimestampOffset));
|
| // Create first packet, with 3 RED payloads.
|
| - packet = CreateRedPayload(3, payload_types, kTimestampOffset);
|
| - // Manually change timestamp and sequence number of second packet.
|
| - packet->timestamp += kTimestampOffset;
|
| - packet->sequence_number++;
|
| - packet_list.push_back(packet);
|
| + {
|
| + Packet packet = CreateRedPayload(3, payload_types, kTimestampOffset);
|
| + // Manually change timestamp and sequence number of second packet.
|
| + packet.timestamp += kTimestampOffset;
|
| + packet.sequence_number++;
|
| + packet_list.push_back(std::move(packet));
|
| + }
|
| RedPayloadSplitter splitter;
|
| EXPECT_TRUE(splitter.SplitRed(&packet_list));
|
| ASSERT_EQ(6u, packet_list.size());
|
| // Check first packet, A1.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[2], kSequenceNumber,
|
| - kBaseTimestamp, 2, {0, 0});
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[2],
|
| + kSequenceNumber, kBaseTimestamp, 2, {0, 0});
|
| packet_list.pop_front();
|
| // Check second packet, A2.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[1], kSequenceNumber,
|
| - kBaseTimestamp - kTimestampOffset, 1, {0, 1});
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[1],
|
| + kSequenceNumber, kBaseTimestamp - kTimestampOffset, 1, {0, 1});
|
| packet_list.pop_front();
|
| // Check third packet, A3.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[0], kSequenceNumber,
|
| - kBaseTimestamp - 2 * kTimestampOffset, 0, {0, 2});
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[0],
|
| + kSequenceNumber, kBaseTimestamp - 2 * kTimestampOffset, 0,
|
| + {0, 2});
|
| packet_list.pop_front();
|
| // Check fourth packet, B1.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[2], kSequenceNumber + 1,
|
| - kBaseTimestamp + kTimestampOffset, 2, {0, 0});
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[2],
|
| + kSequenceNumber + 1, kBaseTimestamp + kTimestampOffset, 2,
|
| + {0, 0});
|
| packet_list.pop_front();
|
| // Check fifth packet, B2.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[1], kSequenceNumber + 1,
|
| - kBaseTimestamp, 1, {0, 1});
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[1],
|
| + kSequenceNumber + 1, kBaseTimestamp, 1, {0, 1});
|
| packet_list.pop_front();
|
| // Check sixth packet, B3.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[0], kSequenceNumber + 1,
|
| - kBaseTimestamp - kTimestampOffset, 0, {0, 2});
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[0],
|
| + kSequenceNumber + 1, kBaseTimestamp - kTimestampOffset, 0,
|
| + {0, 2});
|
| }
|
|
|
| // Creates a list with 4 packets with these payload types:
|
| @@ -306,8 +290,7 @@ TEST(RedPayloadSplitter, CheckRedPayloads) {
|
| PacketList packet_list;
|
| for (uint8_t i = 0; i <= 3; ++i) {
|
| // Create packet with payload type |i|, payload length 10 bytes, all 0.
|
| - Packet* packet = CreatePacket(i, 10, 0);
|
| - packet_list.push_back(packet);
|
| + packet_list.push_back(CreatePacket(i, 10, 0));
|
| }
|
|
|
| // Use a real DecoderDatabase object here instead of a mock, since it is
|
| @@ -327,9 +310,8 @@ TEST(RedPayloadSplitter, CheckRedPayloads) {
|
| // Verify packets. The loop verifies that payload types 0, 1, and 2 are in the
|
| // list.
|
| for (int i = 0; i <= 2; ++i) {
|
| - Packet* packet = packet_list.front();
|
| - VerifyPacket(packet, 10, i, kSequenceNumber, kBaseTimestamp, 0, true);
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), 10, i, kSequenceNumber, kBaseTimestamp, 0,
|
| + true);
|
| packet_list.pop_front();
|
| }
|
| EXPECT_TRUE(packet_list.empty());
|
| @@ -340,21 +322,22 @@ TEST(RedPayloadSplitter, CheckRedPayloads) {
|
| TEST(RedPayloadSplitter, WrongPayloadLength) {
|
| uint8_t payload_types[] = {0, 0, 0};
|
| const int kTimestampOffset = 160;
|
| - Packet* packet = CreateRedPayload(3, payload_types, kTimestampOffset);
|
| - // Manually tamper with the payload length of the packet.
|
| - // This is one byte too short for the second payload (out of three).
|
| - // We expect only the first payload to be returned.
|
| - packet->payload.SetSize(packet->payload.size() - (kPayloadLength + 1));
|
| PacketList packet_list;
|
| - packet_list.push_back(packet);
|
| + {
|
| + Packet packet = CreateRedPayload(3, payload_types, kTimestampOffset);
|
| + // Manually tamper with the payload length of the packet.
|
| + // This is one byte too short for the second payload (out of three).
|
| + // We expect only the first payload to be returned.
|
| + packet.payload.SetSize(packet.payload.size() - (kPayloadLength + 1));
|
| + packet_list.push_back(std::move(packet));
|
| + }
|
| RedPayloadSplitter splitter;
|
| EXPECT_FALSE(splitter.SplitRed(&packet_list));
|
| ASSERT_EQ(1u, packet_list.size());
|
| // Check first packet.
|
| - packet = packet_list.front();
|
| - VerifyPacket(packet, kPayloadLength, payload_types[0], kSequenceNumber,
|
| - kBaseTimestamp - 2 * kTimestampOffset, 0, {0, 2});
|
| - delete packet;
|
| + VerifyPacket(packet_list.front(), kPayloadLength, payload_types[0],
|
| + kSequenceNumber, kBaseTimestamp - 2 * kTimestampOffset, 0,
|
| + {0, 2});
|
| packet_list.pop_front();
|
| }
|
|
|
|
|