Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1050)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc

Issue 2080553003: Style updates for ForwardErrorCorrection and related classes (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 20 matching lines...) Expand all
31 namespace webrtc { 31 namespace webrtc {
32 32
33 class ReceiverFecTest : public ::testing::Test { 33 class ReceiverFecTest : public ::testing::Test {
34 protected: 34 protected:
35 virtual void SetUp() { 35 virtual void SetUp() {
36 fec_.reset(new ForwardErrorCorrection()); 36 fec_.reset(new ForwardErrorCorrection());
37 receiver_fec_.reset(FecReceiver::Create(&rtp_data_callback_)); 37 receiver_fec_.reset(FecReceiver::Create(&rtp_data_callback_));
38 generator_.reset(new FrameGenerator()); 38 generator_.reset(new FrameGenerator());
39 } 39 }
40 40
41 void GenerateFEC(std::list<Packet*>* media_packets, 41 void GenerateFec(ForwardErrorCorrection::PacketList* media_packets,
42 std::list<Packet*>* fec_packets, 42 ForwardErrorCorrection::PacketList* fec_packets,
43 unsigned int num_fec_packets) { 43 unsigned int num_fec_packets) {
44 uint8_t protection_factor = num_fec_packets * 255 / media_packets->size(); 44 uint8_t protection_factor = num_fec_packets * 255 / media_packets->size();
45 EXPECT_EQ(0, fec_->GenerateFEC(*media_packets, protection_factor, 45 EXPECT_EQ(0, fec_->GenerateFec(*media_packets, protection_factor,
46 0, false, kFecMaskBursty, fec_packets)); 46 0, false, kFecMaskBursty, fec_packets));
47 ASSERT_EQ(num_fec_packets, fec_packets->size()); 47 ASSERT_EQ(num_fec_packets, fec_packets->size());
48 } 48 }
49 49
50 void GenerateFrame(int num_media_packets, 50 void GenerateFrame(int num_media_packets,
51 int frame_offset, 51 int frame_offset,
52 std::list<test::RawRtpPacket*>* media_rtp_packets, 52 std::list<test::RawRtpPacket*>* media_rtp_packets,
53 std::list<Packet*>* media_packets) { 53 ForwardErrorCorrection::PacketList* media_packets) {
54 generator_->NewFrame(num_media_packets); 54 generator_->NewFrame(num_media_packets);
55 for (int i = 0; i < num_media_packets; ++i) { 55 for (int i = 0; i < num_media_packets; ++i) {
56 media_rtp_packets->push_back( 56 media_rtp_packets->push_back(
57 generator_->NextPacket(frame_offset + i, kRtpHeaderSize + 10)); 57 generator_->NextPacket(frame_offset + i, kRtpHeaderSize + 10));
58 media_packets->push_back(media_rtp_packets->back()); 58 media_packets->push_back(media_rtp_packets->back());
59 } 59 }
60 } 60 }
61 61
62 void VerifyReconstructedMediaPacket(const test::RawRtpPacket* packet, 62 void VerifyReconstructedMediaPacket(const test::RawRtpPacket* packet,
63 int times) { 63 int times) {
(...skipping 26 matching lines...) Expand all
90 static void SurvivesMaliciousPacket(const uint8_t* data, 90 static void SurvivesMaliciousPacket(const uint8_t* data,
91 size_t length, 91 size_t length,
92 uint8_t ulpfec_payload_type); 92 uint8_t ulpfec_payload_type);
93 93
94 MockRtpData rtp_data_callback_; 94 MockRtpData rtp_data_callback_;
95 std::unique_ptr<ForwardErrorCorrection> fec_; 95 std::unique_ptr<ForwardErrorCorrection> fec_;
96 std::unique_ptr<FecReceiver> receiver_fec_; 96 std::unique_ptr<FecReceiver> receiver_fec_;
97 std::unique_ptr<FrameGenerator> generator_; 97 std::unique_ptr<FrameGenerator> generator_;
98 }; 98 };
99 99
100 void DeletePackets(std::list<Packet*>* packets) { 100 void DeletePackets(ForwardErrorCorrection::PacketList* packets) {
101 while (!packets->empty()) { 101 while (!packets->empty()) {
102 delete packets->front(); 102 delete packets->front();
103 packets->pop_front(); 103 packets->pop_front();
104 } 104 }
105 } 105 }
106 106
107 TEST_F(ReceiverFecTest, TwoMediaOneFec) { 107 TEST_F(ReceiverFecTest, TwoMediaOneFec) {
108 const unsigned int kNumFecPackets = 1u; 108 const unsigned int kNumFecPackets = 1u;
109 std::list<test::RawRtpPacket*> media_rtp_packets; 109 std::list<test::RawRtpPacket*> media_rtp_packets;
110 std::list<Packet*> media_packets; 110 ForwardErrorCorrection::PacketList media_packets;
111 GenerateFrame(2, 0, &media_rtp_packets, &media_packets); 111 GenerateFrame(2, 0, &media_rtp_packets, &media_packets);
112 std::list<Packet*> fec_packets; 112 ForwardErrorCorrection::PacketList fec_packets;
113 GenerateFEC(&media_packets, &fec_packets, kNumFecPackets); 113 GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
114 114
115 // Recovery 115 // Recovery
116 std::list<test::RawRtpPacket*>::iterator it = media_rtp_packets.begin(); 116 auto it = media_rtp_packets.begin();
117 BuildAndAddRedMediaPacket(*it); 117 BuildAndAddRedMediaPacket(*it);
118 VerifyReconstructedMediaPacket(*it, 1); 118 VerifyReconstructedMediaPacket(*it, 1);
119 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 119 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
120 // Drop one media packet. 120 // Drop one media packet.
121 std::list<Packet*>::iterator fec_it = fec_packets.begin(); 121 auto fec_it = fec_packets.begin();
122 BuildAndAddRedFecPacket(*fec_it); 122 BuildAndAddRedFecPacket(*fec_it);
123 ++it; 123 ++it;
124 VerifyReconstructedMediaPacket(*it, 1); 124 VerifyReconstructedMediaPacket(*it, 1);
125 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 125 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
126 126
127 FecPacketCounter counter = receiver_fec_->GetPacketCounter(); 127 FecPacketCounter counter = receiver_fec_->GetPacketCounter();
128 EXPECT_EQ(2U, counter.num_packets); 128 EXPECT_EQ(2U, counter.num_packets);
129 EXPECT_EQ(1U, counter.num_fec_packets); 129 EXPECT_EQ(1U, counter.num_fec_packets);
130 EXPECT_EQ(1U, counter.num_recovered_packets); 130 EXPECT_EQ(1U, counter.num_recovered_packets);
131 131
132 DeletePackets(&media_packets); 132 DeletePackets(&media_packets);
133 } 133 }
134 134
135 void ReceiverFecTest::InjectGarbagePacketLength(size_t fec_garbage_offset) { 135 void ReceiverFecTest::InjectGarbagePacketLength(size_t fec_garbage_offset) {
136 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) 136 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
137 .WillRepeatedly(Return(true)); 137 .WillRepeatedly(Return(true));
138 138
139 const unsigned int kNumFecPackets = 1u; 139 const unsigned int kNumFecPackets = 1u;
140 std::list<test::RawRtpPacket*> media_rtp_packets; 140 std::list<test::RawRtpPacket*> media_rtp_packets;
141 std::list<Packet*> media_packets; 141 ForwardErrorCorrection::PacketList media_packets;
142 GenerateFrame(2, 0, &media_rtp_packets, &media_packets); 142 GenerateFrame(2, 0, &media_rtp_packets, &media_packets);
143 std::list<Packet*> fec_packets; 143 ForwardErrorCorrection::PacketList fec_packets;
144 GenerateFEC(&media_packets, &fec_packets, kNumFecPackets); 144 GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
145 ByteWriter<uint16_t>::WriteBigEndian( 145 ByteWriter<uint16_t>::WriteBigEndian(
146 &fec_packets.front()->data[fec_garbage_offset], 0x4711); 146 &fec_packets.front()->data[fec_garbage_offset], 0x4711);
147 147
148 // Inject first media packet, then first FEC packet, skipping the second media 148 // Inject first media packet, then first FEC packet, skipping the second media
149 // packet to cause a recovery from the FEC packet. 149 // packet to cause a recovery from the FEC packet.
150 BuildAndAddRedMediaPacket(media_rtp_packets.front()); 150 BuildAndAddRedMediaPacket(media_rtp_packets.front());
151 BuildAndAddRedFecPacket(fec_packets.front()); 151 BuildAndAddRedFecPacket(fec_packets.front());
152 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 152 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
153 153
154 FecPacketCounter counter = receiver_fec_->GetPacketCounter(); 154 FecPacketCounter counter = receiver_fec_->GetPacketCounter();
(...skipping 11 matching lines...) Expand all
166 166
167 TEST_F(ReceiverFecTest, InjectGarbageFecLevelHeaderProtectionLength) { 167 TEST_F(ReceiverFecTest, InjectGarbageFecLevelHeaderProtectionLength) {
168 // Byte offset 10 is the 'protection length' field in the first FEC level 168 // Byte offset 10 is the 'protection length' field in the first FEC level
169 // header. 169 // header.
170 InjectGarbagePacketLength(10); 170 InjectGarbagePacketLength(10);
171 } 171 }
172 172
173 TEST_F(ReceiverFecTest, TwoMediaTwoFec) { 173 TEST_F(ReceiverFecTest, TwoMediaTwoFec) {
174 const unsigned int kNumFecPackets = 2u; 174 const unsigned int kNumFecPackets = 2u;
175 std::list<test::RawRtpPacket*> media_rtp_packets; 175 std::list<test::RawRtpPacket*> media_rtp_packets;
176 std::list<Packet*> media_packets; 176 ForwardErrorCorrection::PacketList media_packets;
177 GenerateFrame(2, 0, &media_rtp_packets, &media_packets); 177 GenerateFrame(2, 0, &media_rtp_packets, &media_packets);
178 std::list<Packet*> fec_packets; 178 ForwardErrorCorrection::PacketList fec_packets;
179 GenerateFEC(&media_packets, &fec_packets, kNumFecPackets); 179 GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
180 180
181 // Recovery 181 // Recovery
182 // Drop both media packets. 182 // Drop both media packets.
183 std::list<test::RawRtpPacket*>::iterator it = media_rtp_packets.begin(); 183 auto it = media_rtp_packets.begin();
184 std::list<Packet*>::iterator fec_it = fec_packets.begin(); 184 auto fec_it = fec_packets.begin();
185 BuildAndAddRedFecPacket(*fec_it); 185 BuildAndAddRedFecPacket(*fec_it);
186 VerifyReconstructedMediaPacket(*it, 1); 186 VerifyReconstructedMediaPacket(*it, 1);
187 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 187 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
188 ++fec_it; 188 ++fec_it;
189 BuildAndAddRedFecPacket(*fec_it); 189 BuildAndAddRedFecPacket(*fec_it);
190 ++it; 190 ++it;
191 VerifyReconstructedMediaPacket(*it, 1); 191 VerifyReconstructedMediaPacket(*it, 1);
192 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 192 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
193 193
194 DeletePackets(&media_packets); 194 DeletePackets(&media_packets);
195 } 195 }
196 196
197 TEST_F(ReceiverFecTest, TwoFramesOneFec) { 197 TEST_F(ReceiverFecTest, TwoFramesOneFec) {
198 const unsigned int kNumFecPackets = 1u; 198 const unsigned int kNumFecPackets = 1u;
199 std::list<test::RawRtpPacket*> media_rtp_packets; 199 std::list<test::RawRtpPacket*> media_rtp_packets;
200 std::list<Packet*> media_packets; 200 ForwardErrorCorrection::PacketList media_packets;
201 GenerateFrame(1, 0, &media_rtp_packets, &media_packets); 201 GenerateFrame(1, 0, &media_rtp_packets, &media_packets);
202 GenerateFrame(1, 1, &media_rtp_packets, &media_packets); 202 GenerateFrame(1, 1, &media_rtp_packets, &media_packets);
203 std::list<Packet*> fec_packets; 203 ForwardErrorCorrection::PacketList fec_packets;
204 GenerateFEC(&media_packets, &fec_packets, kNumFecPackets); 204 GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
205 205
206 // Recovery 206 // Recovery
207 std::list<test::RawRtpPacket*>::iterator it = media_rtp_packets.begin(); 207 auto it = media_rtp_packets.begin();
208 BuildAndAddRedMediaPacket(media_rtp_packets.front()); 208 BuildAndAddRedMediaPacket(media_rtp_packets.front());
209 VerifyReconstructedMediaPacket(*it, 1); 209 VerifyReconstructedMediaPacket(*it, 1);
210 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 210 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
211 // Drop one media packet. 211 // Drop one media packet.
212 BuildAndAddRedFecPacket(fec_packets.front()); 212 BuildAndAddRedFecPacket(fec_packets.front());
213 ++it; 213 ++it;
214 VerifyReconstructedMediaPacket(*it, 1); 214 VerifyReconstructedMediaPacket(*it, 1);
215 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 215 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
216 216
217 DeletePackets(&media_packets); 217 DeletePackets(&media_packets);
218 } 218 }
219 219
220 TEST_F(ReceiverFecTest, OneCompleteOneUnrecoverableFrame) { 220 TEST_F(ReceiverFecTest, OneCompleteOneUnrecoverableFrame) {
221 const unsigned int kNumFecPackets = 1u; 221 const unsigned int kNumFecPackets = 1u;
222 std::list<test::RawRtpPacket*> media_rtp_packets; 222 std::list<test::RawRtpPacket*> media_rtp_packets;
223 std::list<Packet*> media_packets; 223 ForwardErrorCorrection::PacketList media_packets;
224 GenerateFrame(1, 0, &media_rtp_packets, &media_packets); 224 GenerateFrame(1, 0, &media_rtp_packets, &media_packets);
225 GenerateFrame(2, 1, &media_rtp_packets, &media_packets); 225 GenerateFrame(2, 1, &media_rtp_packets, &media_packets);
226 226
227 std::list<Packet*> fec_packets; 227 ForwardErrorCorrection::PacketList fec_packets;
228 GenerateFEC(&media_packets, &fec_packets, kNumFecPackets); 228 GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
229 229
230 // Recovery 230 // Recovery
231 std::list<test::RawRtpPacket*>::iterator it = media_rtp_packets.begin(); 231 auto it = media_rtp_packets.begin();
232 BuildAndAddRedMediaPacket(*it); // First frame: one packet. 232 BuildAndAddRedMediaPacket(*it); // First frame: one packet.
233 VerifyReconstructedMediaPacket(*it, 1); 233 VerifyReconstructedMediaPacket(*it, 1);
234 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 234 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
235 ++it; 235 ++it;
236 BuildAndAddRedMediaPacket(*it); // First packet of second frame. 236 BuildAndAddRedMediaPacket(*it); // First packet of second frame.
237 VerifyReconstructedMediaPacket(*it, 1); 237 VerifyReconstructedMediaPacket(*it, 1);
238 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 238 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
239 239
240 DeletePackets(&media_packets); 240 DeletePackets(&media_packets);
241 } 241 }
242 242
243 TEST_F(ReceiverFecTest, MaxFramesOneFec) { 243 TEST_F(ReceiverFecTest, MaxFramesOneFec) {
244 const unsigned int kNumFecPackets = 1u; 244 const unsigned int kNumFecPackets = 1u;
245 const unsigned int kNumMediaPackets = 48u; 245 const unsigned int kNumMediaPackets = 48u;
246 std::list<test::RawRtpPacket*> media_rtp_packets; 246 std::list<test::RawRtpPacket*> media_rtp_packets;
247 std::list<Packet*> media_packets; 247 ForwardErrorCorrection::PacketList media_packets;
248 for (unsigned int i = 0; i < kNumMediaPackets; ++i) { 248 for (unsigned int i = 0; i < kNumMediaPackets; ++i) {
249 GenerateFrame(1, i, &media_rtp_packets, &media_packets); 249 GenerateFrame(1, i, &media_rtp_packets, &media_packets);
250 } 250 }
251 std::list<Packet*> fec_packets; 251 ForwardErrorCorrection::PacketList fec_packets;
252 GenerateFEC(&media_packets, &fec_packets, kNumFecPackets); 252 GenerateFec(&media_packets, &fec_packets, kNumFecPackets);
253 253
254 // Recovery 254 // Recovery
255 std::list<test::RawRtpPacket*>::iterator it = media_rtp_packets.begin(); 255 auto it = media_rtp_packets.begin();
256 ++it; // Drop first packet. 256 ++it; // Drop first packet.
257 for (; it != media_rtp_packets.end(); ++it) { 257 for (; it != media_rtp_packets.end(); ++it) {
258 BuildAndAddRedMediaPacket(*it); 258 BuildAndAddRedMediaPacket(*it);
259 VerifyReconstructedMediaPacket(*it, 1); 259 VerifyReconstructedMediaPacket(*it, 1);
260 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 260 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
261 } 261 }
262 BuildAndAddRedFecPacket(fec_packets.front()); 262 BuildAndAddRedFecPacket(fec_packets.front());
263 it = media_rtp_packets.begin(); 263 it = media_rtp_packets.begin();
264 VerifyReconstructedMediaPacket(*it, 1); 264 VerifyReconstructedMediaPacket(*it, 1);
265 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 265 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
266 266
267 DeletePackets(&media_packets); 267 DeletePackets(&media_packets);
268 } 268 }
269 269
270 TEST_F(ReceiverFecTest, TooManyFrames) { 270 TEST_F(ReceiverFecTest, TooManyFrames) {
271 const unsigned int kNumFecPackets = 1u; 271 const unsigned int kNumFecPackets = 1u;
272 const unsigned int kNumMediaPackets = 49u; 272 const unsigned int kNumMediaPackets = 49u;
273 std::list<test::RawRtpPacket*> media_rtp_packets; 273 std::list<test::RawRtpPacket*> media_rtp_packets;
274 std::list<Packet*> media_packets; 274 ForwardErrorCorrection::PacketList media_packets;
275 for (unsigned int i = 0; i < kNumMediaPackets; ++i) { 275 for (unsigned int i = 0; i < kNumMediaPackets; ++i) {
276 GenerateFrame(1, i, &media_rtp_packets, &media_packets); 276 GenerateFrame(1, i, &media_rtp_packets, &media_packets);
277 } 277 }
278 std::list<Packet*> fec_packets; 278 ForwardErrorCorrection::PacketList fec_packets;
279 EXPECT_EQ(-1, fec_->GenerateFEC(media_packets, 279 EXPECT_EQ(-1, fec_->GenerateFec(media_packets,
280 kNumFecPackets * 255 / kNumMediaPackets, 0, 280 kNumFecPackets * 255 / kNumMediaPackets, 0,
281 false, kFecMaskBursty, &fec_packets)); 281 false, kFecMaskBursty, &fec_packets));
282 282
283 DeletePackets(&media_packets); 283 DeletePackets(&media_packets);
284 } 284 }
285 285
286 TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) { 286 TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) {
287 // 1 frame with 2 media packets and one FEC packet. One media packet missing. 287 // 1 frame with 2 media packets and one FEC packet. One media packet missing.
288 // Delay the FEC packet. 288 // Delay the FEC packet.
289 Packet* delayed_fec = NULL; 289 Packet* delayed_fec = NULL;
290 const unsigned int kNumFecPacketsBatch1 = 1u; 290 const unsigned int kNumFecPacketsBatch1 = 1u;
291 const unsigned int kNumMediaPacketsBatch1 = 2u; 291 const unsigned int kNumMediaPacketsBatch1 = 2u;
292 std::list<test::RawRtpPacket*> media_rtp_packets_batch1; 292 std::list<test::RawRtpPacket*> media_rtp_packets_batch1;
293 std::list<Packet*> media_packets_batch1; 293 ForwardErrorCorrection::PacketList media_packets_batch1;
294 GenerateFrame(kNumMediaPacketsBatch1, 0, &media_rtp_packets_batch1, 294 GenerateFrame(kNumMediaPacketsBatch1, 0, &media_rtp_packets_batch1,
295 &media_packets_batch1); 295 &media_packets_batch1);
296 std::list<Packet*> fec_packets; 296 ForwardErrorCorrection::PacketList fec_packets;
297 GenerateFEC(&media_packets_batch1, &fec_packets, kNumFecPacketsBatch1); 297 GenerateFec(&media_packets_batch1, &fec_packets, kNumFecPacketsBatch1);
298 298
299 BuildAndAddRedMediaPacket(media_rtp_packets_batch1.front()); 299 BuildAndAddRedMediaPacket(media_rtp_packets_batch1.front());
300 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) 300 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
301 .Times(1).WillRepeatedly(Return(true)); 301 .Times(1).WillRepeatedly(Return(true));
302 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 302 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
303 delayed_fec = fec_packets.front(); 303 delayed_fec = fec_packets.front();
304 304
305 // Fill the FEC decoder. No packets should be dropped. 305 // Fill the FEC decoder. No packets should be dropped.
306 const unsigned int kNumMediaPacketsBatch2 = 46u; 306 const unsigned int kNumMediaPacketsBatch2 = 46u;
307 std::list<test::RawRtpPacket*> media_rtp_packets_batch2; 307 std::list<test::RawRtpPacket*> media_rtp_packets_batch2;
308 std::list<Packet*> media_packets_batch2; 308 ForwardErrorCorrection::PacketList media_packets_batch2;
309 for (unsigned int i = 0; i < kNumMediaPacketsBatch2; ++i) { 309 for (unsigned int i = 0; i < kNumMediaPacketsBatch2; ++i) {
310 GenerateFrame(1, i, &media_rtp_packets_batch2, &media_packets_batch2); 310 GenerateFrame(1, i, &media_rtp_packets_batch2, &media_packets_batch2);
311 } 311 }
312 for (std::list<test::RawRtpPacket*>::iterator it = 312 for (auto it = media_rtp_packets_batch2.begin();
313 media_rtp_packets_batch2.begin();
314 it != media_rtp_packets_batch2.end(); ++it) { 313 it != media_rtp_packets_batch2.end(); ++it) {
315 BuildAndAddRedMediaPacket(*it); 314 BuildAndAddRedMediaPacket(*it);
316 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) 315 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
317 .Times(1).WillRepeatedly(Return(true)); 316 .Times(1).WillRepeatedly(Return(true));
318 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 317 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
319 } 318 }
320 319
321 // Add the delayed FEC packet. One packet should be reconstructed. 320 // Add the delayed FEC packet. One packet should be reconstructed.
322 BuildAndAddRedFecPacket(delayed_fec); 321 BuildAndAddRedFecPacket(delayed_fec);
323 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) 322 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
324 .Times(1).WillRepeatedly(Return(true)); 323 .Times(1).WillRepeatedly(Return(true));
325 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 324 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
326 325
327 DeletePackets(&media_packets_batch1); 326 DeletePackets(&media_packets_batch1);
328 DeletePackets(&media_packets_batch2); 327 DeletePackets(&media_packets_batch2);
329 } 328 }
330 329
331 TEST_F(ReceiverFecTest, PacketDroppedWhenTooOld) { 330 TEST_F(ReceiverFecTest, PacketDroppedWhenTooOld) {
332 // 1 frame with 2 media packets and one FEC packet. One media packet missing. 331 // 1 frame with 2 media packets and one FEC packet. One media packet missing.
333 // Delay the FEC packet. 332 // Delay the FEC packet.
334 Packet* delayed_fec = NULL; 333 Packet* delayed_fec = NULL;
335 const unsigned int kNumFecPacketsBatch1 = 1u; 334 const unsigned int kNumFecPacketsBatch1 = 1u;
336 const unsigned int kNumMediaPacketsBatch1 = 2u; 335 const unsigned int kNumMediaPacketsBatch1 = 2u;
337 std::list<test::RawRtpPacket*> media_rtp_packets_batch1; 336 std::list<test::RawRtpPacket*> media_rtp_packets_batch1;
338 std::list<Packet*> media_packets_batch1; 337 ForwardErrorCorrection::PacketList media_packets_batch1;
339 GenerateFrame(kNumMediaPacketsBatch1, 0, &media_rtp_packets_batch1, 338 GenerateFrame(kNumMediaPacketsBatch1, 0, &media_rtp_packets_batch1,
340 &media_packets_batch1); 339 &media_packets_batch1);
341 std::list<Packet*> fec_packets; 340 ForwardErrorCorrection::PacketList fec_packets;
342 GenerateFEC(&media_packets_batch1, &fec_packets, kNumFecPacketsBatch1); 341 GenerateFec(&media_packets_batch1, &fec_packets, kNumFecPacketsBatch1);
343 342
344 BuildAndAddRedMediaPacket(media_rtp_packets_batch1.front()); 343 BuildAndAddRedMediaPacket(media_rtp_packets_batch1.front());
345 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) 344 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
346 .Times(1).WillRepeatedly(Return(true)); 345 .Times(1).WillRepeatedly(Return(true));
347 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 346 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
348 delayed_fec = fec_packets.front(); 347 delayed_fec = fec_packets.front();
349 348
350 // Fill the FEC decoder and force the last packet to be dropped. 349 // Fill the FEC decoder and force the last packet to be dropped.
351 const unsigned int kNumMediaPacketsBatch2 = 48u; 350 const unsigned int kNumMediaPacketsBatch2 = 48u;
352 std::list<test::RawRtpPacket*> media_rtp_packets_batch2; 351 std::list<test::RawRtpPacket*> media_rtp_packets_batch2;
353 std::list<Packet*> media_packets_batch2; 352 ForwardErrorCorrection::PacketList media_packets_batch2;
354 for (unsigned int i = 0; i < kNumMediaPacketsBatch2; ++i) { 353 for (unsigned int i = 0; i < kNumMediaPacketsBatch2; ++i) {
355 GenerateFrame(1, i, &media_rtp_packets_batch2, &media_packets_batch2); 354 GenerateFrame(1, i, &media_rtp_packets_batch2, &media_packets_batch2);
356 } 355 }
357 for (std::list<test::RawRtpPacket*>::iterator it = 356 for (auto it = media_rtp_packets_batch2.begin();
358 media_rtp_packets_batch2.begin();
359 it != media_rtp_packets_batch2.end(); ++it) { 357 it != media_rtp_packets_batch2.end(); ++it) {
360 BuildAndAddRedMediaPacket(*it); 358 BuildAndAddRedMediaPacket(*it);
361 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) 359 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
362 .Times(1).WillRepeatedly(Return(true)); 360 .Times(1).WillRepeatedly(Return(true));
363 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 361 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
364 } 362 }
365 363
366 // Add the delayed FEC packet. No packet should be reconstructed since the 364 // Add the delayed FEC packet. No packet should be reconstructed since the
367 // first media packet of that frame has been dropped due to being too old. 365 // first media packet of that frame has been dropped due to being too old.
368 BuildAndAddRedFecPacket(delayed_fec); 366 BuildAndAddRedFecPacket(delayed_fec);
369 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) 367 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
370 .Times(0); 368 .Times(0);
371 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 369 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
372 370
373 DeletePackets(&media_packets_batch1); 371 DeletePackets(&media_packets_batch1);
374 DeletePackets(&media_packets_batch2); 372 DeletePackets(&media_packets_batch2);
375 } 373 }
376 374
377 TEST_F(ReceiverFecTest, OldFecPacketDropped) { 375 TEST_F(ReceiverFecTest, OldFecPacketDropped) {
378 // 49 frames with 2 media packets and one FEC packet. All media packets 376 // 49 frames with 2 media packets and one FEC packet. All media packets
379 // missing. 377 // missing.
380 const unsigned int kNumMediaPackets = 49 * 2; 378 const unsigned int kNumMediaPackets = 49 * 2;
381 std::list<test::RawRtpPacket*> media_rtp_packets; 379 std::list<test::RawRtpPacket*> media_rtp_packets;
382 std::list<Packet*> media_packets; 380 ForwardErrorCorrection::PacketList media_packets;
383 for (unsigned int i = 0; i < kNumMediaPackets / 2; ++i) { 381 for (unsigned int i = 0; i < kNumMediaPackets / 2; ++i) {
384 std::list<test::RawRtpPacket*> frame_media_rtp_packets; 382 std::list<test::RawRtpPacket*> frame_media_rtp_packets;
385 std::list<Packet*> frame_media_packets; 383 ForwardErrorCorrection::PacketList frame_media_packets;
386 std::list<Packet*> fec_packets; 384 ForwardErrorCorrection::PacketList fec_packets;
387 GenerateFrame(2, 0, &frame_media_rtp_packets, &frame_media_packets); 385 GenerateFrame(2, 0, &frame_media_rtp_packets, &frame_media_packets);
388 GenerateFEC(&frame_media_packets, &fec_packets, 1); 386 GenerateFec(&frame_media_packets, &fec_packets, 1);
389 for (std::list<Packet*>::iterator it = fec_packets.begin(); 387 for (auto it = fec_packets.begin(); it != fec_packets.end(); ++it) {
390 it != fec_packets.end(); ++it) {
391 // Only FEC packets inserted. No packets recoverable at this time. 388 // Only FEC packets inserted. No packets recoverable at this time.
392 BuildAndAddRedFecPacket(*it); 389 BuildAndAddRedFecPacket(*it);
393 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) 390 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
394 .Times(0); 391 .Times(0);
395 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); 392 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
396 } 393 }
397 media_packets.insert(media_packets.end(), frame_media_packets.begin(), 394 media_packets.insert(media_packets.end(), frame_media_packets.begin(),
398 frame_media_packets.end()); 395 frame_media_packets.end());
399 media_rtp_packets.insert(media_rtp_packets.end(), 396 media_rtp_packets.insert(media_rtp_packets.end(),
400 frame_media_rtp_packets.begin(), 397 frame_media_rtp_packets.begin(),
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 0x27, 530 0x27,
534 0xc4, 531 0xc4,
535 0x2a, 532 0x2a,
536 0x21, 533 0x21,
537 0x2a, 534 0x2a,
538 0x28}; 535 0x28};
539 SurvivesMaliciousPacket(kPacket, sizeof(kPacket), 100); 536 SurvivesMaliciousPacket(kPacket, sizeof(kPacket), 100);
540 } 537 }
541 538
542 } // namespace webrtc 539 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/fec_receiver_impl.cc ('k') | webrtc/modules/rtp_rtcp/source/forward_error_correction.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698