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 |