| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 | 47 |
| 48 class FlexfecReceiverForTest : public FlexfecReceiver { | 48 class FlexfecReceiverForTest : public FlexfecReceiver { |
| 49 public: | 49 public: |
| 50 FlexfecReceiverForTest(uint32_t ssrc, | 50 FlexfecReceiverForTest(uint32_t ssrc, |
| 51 uint32_t protected_media_ssrc, | 51 uint32_t protected_media_ssrc, |
| 52 RecoveredPacketReceiver* recovered_packet_receiver) | 52 RecoveredPacketReceiver* recovered_packet_receiver) |
| 53 : FlexfecReceiver(ssrc, protected_media_ssrc, recovered_packet_receiver) { | 53 : FlexfecReceiver(ssrc, protected_media_ssrc, recovered_packet_receiver) { |
| 54 } | 54 } |
| 55 // Expose methods for tests. | 55 // Expose methods for tests. |
| 56 using FlexfecReceiver::AddReceivedPacket; | 56 using FlexfecReceiver::AddReceivedPacket; |
| 57 using FlexfecReceiver::ProcessReceivedPackets; | 57 using FlexfecReceiver::ProcessReceivedPacket; |
| 58 }; | 58 }; |
| 59 | 59 |
| 60 class FlexfecReceiverTest : public ::testing::Test { | 60 class FlexfecReceiverTest : public ::testing::Test { |
| 61 protected: | 61 protected: |
| 62 FlexfecReceiverTest() | 62 FlexfecReceiverTest() |
| 63 : receiver_(kFlexfecSsrc, kMediaSsrc, &recovered_packet_receiver_), | 63 : receiver_(kFlexfecSsrc, kMediaSsrc, &recovered_packet_receiver_), |
| 64 erasure_code_( | 64 erasure_code_( |
| 65 ForwardErrorCorrection::CreateFlexfec(kFlexfecSsrc, kMediaSsrc)), | 65 ForwardErrorCorrection::CreateFlexfec(kFlexfecSsrc, kMediaSsrc)), |
| 66 packet_generator_(kMediaSsrc, kFlexfecSsrc) {} | 66 packet_generator_(kMediaSsrc, kFlexfecSsrc) {} |
| 67 | 67 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 kUseUnequalProtection, kFecMaskType, &fec_packets)); | 106 kUseUnequalProtection, kFecMaskType, &fec_packets)); |
| 107 EXPECT_EQ(num_fec_packets, fec_packets.size()); | 107 EXPECT_EQ(num_fec_packets, fec_packets.size()); |
| 108 return fec_packets; | 108 return fec_packets; |
| 109 } | 109 } |
| 110 | 110 |
| 111 TEST_F(FlexfecReceiverTest, ReceivesMediaPacket) { | 111 TEST_F(FlexfecReceiverTest, ReceivesMediaPacket) { |
| 112 packet_generator_.NewFrame(1); | 112 packet_generator_.NewFrame(1); |
| 113 std::unique_ptr<Packet> media_packet( | 113 std::unique_ptr<Packet> media_packet( |
| 114 packet_generator_.NextPacket(0, kPayloadLength)); | 114 packet_generator_.NextPacket(0, kPayloadLength)); |
| 115 | 115 |
| 116 EXPECT_TRUE(receiver_.AddReceivedPacket(ParsePacket(*media_packet))); | 116 std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet = |
| 117 EXPECT_TRUE(receiver_.ProcessReceivedPackets()); | 117 receiver_.AddReceivedPacket(ParsePacket(*media_packet)); |
| 118 ASSERT_TRUE(received_packet); |
| 119 receiver_.ProcessReceivedPacket(*received_packet); |
| 118 } | 120 } |
| 119 | 121 |
| 120 TEST_F(FlexfecReceiverTest, ReceivesMediaAndFecPackets) { | 122 TEST_F(FlexfecReceiverTest, ReceivesMediaAndFecPackets) { |
| 121 const size_t kNumMediaPackets = 1; | 123 const size_t kNumMediaPackets = 1; |
| 122 const size_t kNumFecPackets = 1; | 124 const size_t kNumFecPackets = 1; |
| 123 | 125 |
| 124 PacketList media_packets; | 126 PacketList media_packets; |
| 125 PacketizeFrame(kNumMediaPackets, 0, &media_packets); | 127 PacketizeFrame(kNumMediaPackets, 0, &media_packets); |
| 126 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); | 128 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); |
| 127 const auto& media_packet = media_packets.front(); | 129 const auto& media_packet = media_packets.front(); |
| 128 auto fec_packet = packet_generator_.BuildFlexfecPacket(*fec_packets.front()); | 130 auto fec_packet = packet_generator_.BuildFlexfecPacket(*fec_packets.front()); |
| 129 | 131 |
| 130 EXPECT_TRUE(receiver_.AddReceivedPacket(ParsePacket(*media_packet))); | 132 std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet = |
| 131 EXPECT_TRUE(receiver_.ProcessReceivedPackets()); | 133 receiver_.AddReceivedPacket(ParsePacket(*media_packet)); |
| 132 EXPECT_TRUE(receiver_.AddReceivedPacket(ParsePacket(*fec_packet))); | 134 ASSERT_TRUE(received_packet); |
| 133 EXPECT_TRUE(receiver_.ProcessReceivedPackets()); | 135 receiver_.ProcessReceivedPacket(*received_packet); |
| 136 received_packet = receiver_.AddReceivedPacket(ParsePacket(*fec_packet)); |
| 137 ASSERT_TRUE(received_packet); |
| 138 receiver_.ProcessReceivedPacket(*received_packet); |
| 134 } | 139 } |
| 135 | 140 |
| 136 TEST_F(FlexfecReceiverTest, FailsOnTruncatedFecPacket) { | 141 TEST_F(FlexfecReceiverTest, FailsOnTruncatedFecPacket) { |
| 137 const size_t kNumMediaPackets = 1; | 142 const size_t kNumMediaPackets = 1; |
| 138 const size_t kNumFecPackets = 1; | 143 const size_t kNumFecPackets = 1; |
| 139 | 144 |
| 140 PacketList media_packets; | 145 PacketList media_packets; |
| 141 PacketizeFrame(kNumMediaPackets, 0, &media_packets); | 146 PacketizeFrame(kNumMediaPackets, 0, &media_packets); |
| 142 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); | 147 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); |
| 143 const auto& media_packet = media_packets.front(); | 148 const auto& media_packet = media_packets.front(); |
| 144 // Simulate truncated FlexFEC payload. | 149 // Simulate truncated FlexFEC payload. |
| 145 fec_packets.front()->length = 1; | 150 fec_packets.front()->length = 1; |
| 146 auto fec_packet = packet_generator_.BuildFlexfecPacket(*fec_packets.front()); | 151 auto fec_packet = packet_generator_.BuildFlexfecPacket(*fec_packets.front()); |
| 147 | 152 |
| 148 EXPECT_TRUE(receiver_.AddReceivedPacket(ParsePacket(*media_packet))); | 153 std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet = |
| 149 EXPECT_TRUE(receiver_.ProcessReceivedPackets()); | 154 receiver_.AddReceivedPacket(ParsePacket(*media_packet)); |
| 155 ASSERT_TRUE(received_packet); |
| 156 receiver_.ProcessReceivedPacket(*received_packet); |
| 150 EXPECT_FALSE(receiver_.AddReceivedPacket(ParsePacket(*fec_packet))); | 157 EXPECT_FALSE(receiver_.AddReceivedPacket(ParsePacket(*fec_packet))); |
| 151 } | 158 } |
| 152 | 159 |
| 153 TEST_F(FlexfecReceiverTest, FailsOnUnknownMediaSsrc) { | 160 TEST_F(FlexfecReceiverTest, FailsOnUnknownMediaSsrc) { |
| 154 const size_t kNumMediaPackets = 1; | 161 const size_t kNumMediaPackets = 1; |
| 155 | 162 |
| 156 PacketList media_packets; | 163 PacketList media_packets; |
| 157 PacketizeFrame(kNumMediaPackets, 0, &media_packets); | 164 PacketizeFrame(kNumMediaPackets, 0, &media_packets); |
| 158 auto& media_packet = media_packets.front(); | 165 auto& media_packet = media_packets.front(); |
| 159 // Corrupt the SSRC. | 166 // Corrupt the SSRC. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 173 PacketizeFrame(kNumMediaPackets, 0, &media_packets); | 180 PacketizeFrame(kNumMediaPackets, 0, &media_packets); |
| 174 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); | 181 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); |
| 175 const auto& media_packet = media_packets.front(); | 182 const auto& media_packet = media_packets.front(); |
| 176 auto fec_packet = packet_generator_.BuildFlexfecPacket(*fec_packets.front()); | 183 auto fec_packet = packet_generator_.BuildFlexfecPacket(*fec_packets.front()); |
| 177 // Corrupt the SSRC. | 184 // Corrupt the SSRC. |
| 178 fec_packet->data[8] = 4; | 185 fec_packet->data[8] = 4; |
| 179 fec_packet->data[9] = 5; | 186 fec_packet->data[9] = 5; |
| 180 fec_packet->data[10] = 6; | 187 fec_packet->data[10] = 6; |
| 181 fec_packet->data[11] = 7; | 188 fec_packet->data[11] = 7; |
| 182 | 189 |
| 183 EXPECT_TRUE(receiver_.AddReceivedPacket(ParsePacket(*media_packet))); | 190 std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet = |
| 184 EXPECT_TRUE(receiver_.ProcessReceivedPackets()); | 191 receiver_.AddReceivedPacket(ParsePacket(*media_packet)); |
| 192 ASSERT_TRUE(received_packet); |
| 193 receiver_.ProcessReceivedPacket(*received_packet); |
| 185 EXPECT_FALSE(receiver_.AddReceivedPacket(ParsePacket(*fec_packet))); | 194 EXPECT_FALSE(receiver_.AddReceivedPacket(ParsePacket(*fec_packet))); |
| 186 } | 195 } |
| 187 | 196 |
| 188 TEST_F(FlexfecReceiverTest, ReceivesMultiplePackets) { | 197 TEST_F(FlexfecReceiverTest, ReceivesMultiplePackets) { |
| 189 const size_t kNumMediaPackets = 2; | 198 const size_t kNumMediaPackets = 2; |
| 190 const size_t kNumFecPackets = 1; | 199 const size_t kNumFecPackets = 1; |
| 191 | 200 |
| 192 PacketList media_packets; | 201 PacketList media_packets; |
| 193 PacketizeFrame(kNumMediaPackets, 0, &media_packets); | 202 PacketizeFrame(kNumMediaPackets, 0, &media_packets); |
| 194 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); | 203 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); |
| 195 | 204 |
| 196 // Receive all media packets. | 205 // Receive all media packets. |
| 197 for (const auto& media_packet : media_packets) { | 206 for (const auto& media_packet : media_packets) { |
| 198 EXPECT_TRUE(receiver_.AddReceivedPacket(ParsePacket(*media_packet))); | 207 std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet = |
| 199 EXPECT_TRUE(receiver_.ProcessReceivedPackets()); | 208 receiver_.AddReceivedPacket(ParsePacket(*media_packet)); |
| 209 ASSERT_TRUE(received_packet); |
| 210 receiver_.ProcessReceivedPacket(*received_packet); |
| 200 } | 211 } |
| 201 | 212 |
| 202 // Receive FEC packet. | 213 // Receive FEC packet. |
| 203 auto fec_packet = fec_packets.front(); | 214 auto fec_packet = fec_packets.front(); |
| 204 std::unique_ptr<Packet> packet_with_rtp_header = | 215 std::unique_ptr<Packet> packet_with_rtp_header = |
| 205 packet_generator_.BuildFlexfecPacket(*fec_packet); | 216 packet_generator_.BuildFlexfecPacket(*fec_packet); |
| 206 EXPECT_TRUE( | 217 std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet = |
| 207 receiver_.AddReceivedPacket(ParsePacket(*packet_with_rtp_header))); | 218 receiver_.AddReceivedPacket(ParsePacket(*packet_with_rtp_header)); |
| 208 EXPECT_TRUE(receiver_.ProcessReceivedPackets()); | 219 ASSERT_TRUE(received_packet); |
| 220 receiver_.ProcessReceivedPacket(*received_packet); |
| 209 } | 221 } |
| 210 | 222 |
| 211 TEST_F(FlexfecReceiverTest, RecoversFromSingleMediaLoss) { | 223 TEST_F(FlexfecReceiverTest, RecoversFromSingleMediaLoss) { |
| 212 const size_t kNumMediaPackets = 2; | 224 const size_t kNumMediaPackets = 2; |
| 213 const size_t kNumFecPackets = 1; | 225 const size_t kNumFecPackets = 1; |
| 214 | 226 |
| 215 PacketList media_packets; | 227 PacketList media_packets; |
| 216 PacketizeFrame(kNumMediaPackets, 0, &media_packets); | 228 PacketizeFrame(kNumMediaPackets, 0, &media_packets); |
| 217 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); | 229 std::list<Packet*> fec_packets = EncodeFec(media_packets, kNumFecPackets); |
| 218 | 230 |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header)); | 574 receiver_.OnRtpPacket(ParsePacket(*packet_with_rtp_header)); |
| 563 | 575 |
| 564 // Check stats calculations. | 576 // Check stats calculations. |
| 565 FecPacketCounter packet_counter = receiver_.GetPacketCounter(); | 577 FecPacketCounter packet_counter = receiver_.GetPacketCounter(); |
| 566 EXPECT_EQ(2U, packet_counter.num_packets); | 578 EXPECT_EQ(2U, packet_counter.num_packets); |
| 567 EXPECT_EQ(1U, packet_counter.num_fec_packets); | 579 EXPECT_EQ(1U, packet_counter.num_fec_packets); |
| 568 EXPECT_EQ(1U, packet_counter.num_recovered_packets); | 580 EXPECT_EQ(1U, packet_counter.num_recovered_packets); |
| 569 } | 581 } |
| 570 | 582 |
| 571 } // namespace webrtc | 583 } // namespace webrtc |
| OLD | NEW |