OLD | NEW |
---|---|
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 18 matching lines...) Expand all Loading... | |
29 using ::testing::Args; | 29 using ::testing::Args; |
30 using ::testing::ElementsAreArray; | 30 using ::testing::ElementsAreArray; |
31 using ::testing::Return; | 31 using ::testing::Return; |
32 | 32 |
33 using test::fec::AugmentedPacket; | 33 using test::fec::AugmentedPacket; |
34 using Packet = ForwardErrorCorrection::Packet; | 34 using Packet = ForwardErrorCorrection::Packet; |
35 using test::fec::UlpfecPacketGenerator; | 35 using test::fec::UlpfecPacketGenerator; |
36 | 36 |
37 constexpr int kFecPayloadType = 96; | 37 constexpr int kFecPayloadType = 96; |
38 constexpr uint32_t kMediaSsrc = 835424; | 38 constexpr uint32_t kMediaSsrc = 835424; |
39 | |
40 class MockRecoveredPacketReceiver : public RecoveredPacketReceiver { | |
brandtr
2017/05/22 12:54:36
You can reuse this class: https://cs.chromium.org/
nisse-webrtc
2017/05/22 13:08:05
Done.
| |
41 public: | |
42 MOCK_METHOD2(OnRecoveredPacket, | |
43 void(const uint8_t* packet, size_t packet_length)); | |
44 }; | |
45 | |
46 class NullRecoveredPacketReceiver : public RecoveredPacketReceiver { | |
47 public: | |
48 void OnRecoveredPacket(const uint8_t* packet, size_t length) override {} | |
49 }; | |
50 | |
39 } // namespace | 51 } // namespace |
40 | 52 |
41 class UlpfecReceiverTest : public ::testing::Test { | 53 class UlpfecReceiverTest : public ::testing::Test { |
42 protected: | 54 protected: |
43 UlpfecReceiverTest() | 55 UlpfecReceiverTest() |
44 : fec_(ForwardErrorCorrection::CreateUlpfec()), | 56 : fec_(ForwardErrorCorrection::CreateUlpfec()), |
45 receiver_fec_(UlpfecReceiver::Create(&rtp_data_callback_)), | 57 receiver_fec_(UlpfecReceiver::Create(&recovered_packet_receiver_)), |
46 packet_generator_(kMediaSsrc) {} | 58 packet_generator_(kMediaSsrc) {} |
47 | 59 |
48 // Generates |num_fec_packets| FEC packets, given |media_packets|. | 60 // Generates |num_fec_packets| FEC packets, given |media_packets|. |
49 void EncodeFec(const ForwardErrorCorrection::PacketList& media_packets, | 61 void EncodeFec(const ForwardErrorCorrection::PacketList& media_packets, |
50 size_t num_fec_packets, | 62 size_t num_fec_packets, |
51 std::list<ForwardErrorCorrection::Packet*>* fec_packets); | 63 std::list<ForwardErrorCorrection::Packet*>* fec_packets); |
52 | 64 |
53 // Generates |num_media_packets| corresponding to a single frame. | 65 // Generates |num_media_packets| corresponding to a single frame. |
54 void PacketizeFrame(size_t num_media_packets, | 66 void PacketizeFrame(size_t num_media_packets, |
55 size_t frame_offset, | 67 size_t frame_offset, |
56 std::list<AugmentedPacket*>* augmented_packets, | 68 std::list<AugmentedPacket*>* augmented_packets, |
57 ForwardErrorCorrection::PacketList* packets); | 69 ForwardErrorCorrection::PacketList* packets); |
58 | 70 |
59 // Build a media packet using |packet_generator_| and add it | 71 // Build a media packet using |packet_generator_| and add it |
60 // to the receiver. | 72 // to the receiver. |
61 void BuildAndAddRedMediaPacket(AugmentedPacket* packet); | 73 void BuildAndAddRedMediaPacket(AugmentedPacket* packet); |
62 | 74 |
63 // Build a FEC packet using |packet_generator_| and add it | 75 // Build a FEC packet using |packet_generator_| and add it |
64 // to the receiver. | 76 // to the receiver. |
65 void BuildAndAddRedFecPacket(Packet* packet); | 77 void BuildAndAddRedFecPacket(Packet* packet); |
66 | 78 |
67 // Ensure that |rtp_data_callback_| will be called correctly | 79 // Ensure that |recovered_packet_receiver_| will be called correctly |
68 // and that the recovered packet will be identical to the lost packet. | 80 // and that the recovered packet will be identical to the lost packet. |
69 void VerifyReconstructedMediaPacket(const AugmentedPacket& packet, | 81 void VerifyReconstructedMediaPacket(const AugmentedPacket& packet, |
70 size_t times); | 82 size_t times); |
71 | 83 |
72 void InjectGarbagePacketLength(size_t fec_garbage_offset); | 84 void InjectGarbagePacketLength(size_t fec_garbage_offset); |
73 | 85 |
74 static void SurvivesMaliciousPacket(const uint8_t* data, | 86 static void SurvivesMaliciousPacket(const uint8_t* data, |
75 size_t length, | 87 size_t length, |
76 uint8_t ulpfec_payload_type); | 88 uint8_t ulpfec_payload_type); |
77 | 89 |
78 MockRtpData rtp_data_callback_; | 90 MockRecoveredPacketReceiver recovered_packet_receiver_; |
79 std::unique_ptr<ForwardErrorCorrection> fec_; | 91 std::unique_ptr<ForwardErrorCorrection> fec_; |
80 std::unique_ptr<UlpfecReceiver> receiver_fec_; | 92 std::unique_ptr<UlpfecReceiver> receiver_fec_; |
81 UlpfecPacketGenerator packet_generator_; | 93 UlpfecPacketGenerator packet_generator_; |
82 }; | 94 }; |
83 | 95 |
84 void UlpfecReceiverTest::EncodeFec( | 96 void UlpfecReceiverTest::EncodeFec( |
85 const ForwardErrorCorrection::PacketList& media_packets, | 97 const ForwardErrorCorrection::PacketList& media_packets, |
86 size_t num_fec_packets, | 98 size_t num_fec_packets, |
87 std::list<ForwardErrorCorrection::Packet*>* fec_packets) { | 99 std::list<ForwardErrorCorrection::Packet*>* fec_packets) { |
88 const uint8_t protection_factor = | 100 const uint8_t protection_factor = |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
127 red_packet->header.header, red_packet->data, | 139 red_packet->header.header, red_packet->data, |
128 red_packet->length, kFecPayloadType)); | 140 red_packet->length, kFecPayloadType)); |
129 } | 141 } |
130 | 142 |
131 void UlpfecReceiverTest::VerifyReconstructedMediaPacket( | 143 void UlpfecReceiverTest::VerifyReconstructedMediaPacket( |
132 const AugmentedPacket& packet, | 144 const AugmentedPacket& packet, |
133 size_t times) { | 145 size_t times) { |
134 // Verify that the content of the reconstructed packet is equal to the | 146 // Verify that the content of the reconstructed packet is equal to the |
135 // content of |packet|, and that the same content is received |times| number | 147 // content of |packet|, and that the same content is received |times| number |
136 // of times in a row. | 148 // of times in a row. |
137 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, packet.length)) | 149 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, packet.length)) |
138 .With(Args<0, 1>(ElementsAreArray(packet.data, packet.length))) | 150 .With(Args<0, 1>(ElementsAreArray(packet.data, packet.length))) |
139 .Times(times) | 151 .Times(times); |
140 .WillRepeatedly(Return(true)); | |
141 } | 152 } |
142 | 153 |
143 void UlpfecReceiverTest::InjectGarbagePacketLength(size_t fec_garbage_offset) { | 154 void UlpfecReceiverTest::InjectGarbagePacketLength(size_t fec_garbage_offset) { |
144 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) | 155 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)); |
145 .WillRepeatedly(Return(true)); | |
146 | 156 |
147 const size_t kNumFecPackets = 1; | 157 const size_t kNumFecPackets = 1; |
148 std::list<AugmentedPacket*> augmented_media_packets; | 158 std::list<AugmentedPacket*> augmented_media_packets; |
149 ForwardErrorCorrection::PacketList media_packets; | 159 ForwardErrorCorrection::PacketList media_packets; |
150 PacketizeFrame(2, 0, &augmented_media_packets, &media_packets); | 160 PacketizeFrame(2, 0, &augmented_media_packets, &media_packets); |
151 std::list<ForwardErrorCorrection::Packet*> fec_packets; | 161 std::list<ForwardErrorCorrection::Packet*> fec_packets; |
152 EncodeFec(media_packets, kNumFecPackets, &fec_packets); | 162 EncodeFec(media_packets, kNumFecPackets, &fec_packets); |
153 ByteWriter<uint16_t>::WriteBigEndian( | 163 ByteWriter<uint16_t>::WriteBigEndian( |
154 &fec_packets.front()->data[fec_garbage_offset], 0x4711); | 164 &fec_packets.front()->data[fec_garbage_offset], 0x4711); |
155 | 165 |
156 // Inject first media packet, then first FEC packet, skipping the second media | 166 // Inject first media packet, then first FEC packet, skipping the second media |
157 // packet to cause a recovery from the FEC packet. | 167 // packet to cause a recovery from the FEC packet. |
158 BuildAndAddRedMediaPacket(augmented_media_packets.front()); | 168 BuildAndAddRedMediaPacket(augmented_media_packets.front()); |
159 BuildAndAddRedFecPacket(fec_packets.front()); | 169 BuildAndAddRedFecPacket(fec_packets.front()); |
160 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 170 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
161 | 171 |
162 FecPacketCounter counter = receiver_fec_->GetPacketCounter(); | 172 FecPacketCounter counter = receiver_fec_->GetPacketCounter(); |
163 EXPECT_EQ(2U, counter.num_packets); | 173 EXPECT_EQ(2U, counter.num_packets); |
164 EXPECT_EQ(1U, counter.num_fec_packets); | 174 EXPECT_EQ(1U, counter.num_fec_packets); |
165 EXPECT_EQ(0U, counter.num_recovered_packets); | 175 EXPECT_EQ(0U, counter.num_recovered_packets); |
166 } | 176 } |
167 | 177 |
168 void UlpfecReceiverTest::SurvivesMaliciousPacket(const uint8_t* data, | 178 void UlpfecReceiverTest::SurvivesMaliciousPacket(const uint8_t* data, |
169 size_t length, | 179 size_t length, |
170 uint8_t ulpfec_payload_type) { | 180 uint8_t ulpfec_payload_type) { |
171 RTPHeader header; | 181 RTPHeader header; |
172 std::unique_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create()); | 182 std::unique_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create()); |
173 ASSERT_TRUE(parser->Parse(data, length, &header)); | 183 ASSERT_TRUE(parser->Parse(data, length, &header)); |
174 | 184 |
175 NullRtpData null_callback; | 185 NullRecoveredPacketReceiver null_callback; |
176 std::unique_ptr<UlpfecReceiver> receiver_fec( | 186 std::unique_ptr<UlpfecReceiver> receiver_fec( |
177 UlpfecReceiver::Create(&null_callback)); | 187 UlpfecReceiver::Create(&null_callback)); |
178 | 188 |
179 receiver_fec->AddReceivedRedPacket(header, data, length, ulpfec_payload_type); | 189 receiver_fec->AddReceivedRedPacket(header, data, length, ulpfec_payload_type); |
180 } | 190 } |
181 | 191 |
182 TEST_F(UlpfecReceiverTest, TwoMediaOneFec) { | 192 TEST_F(UlpfecReceiverTest, TwoMediaOneFec) { |
183 constexpr size_t kNumFecPackets = 1u; | 193 constexpr size_t kNumFecPackets = 1u; |
184 std::list<AugmentedPacket*> augmented_media_packets; | 194 std::list<AugmentedPacket*> augmented_media_packets; |
185 ForwardErrorCorrection::PacketList media_packets; | 195 ForwardErrorCorrection::PacketList media_packets; |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
338 const size_t kNumFecPacketsBatch1 = 1; | 348 const size_t kNumFecPacketsBatch1 = 1; |
339 const size_t kNumMediaPacketsBatch1 = 2; | 349 const size_t kNumMediaPacketsBatch1 = 2; |
340 std::list<AugmentedPacket*> augmented_media_packets_batch1; | 350 std::list<AugmentedPacket*> augmented_media_packets_batch1; |
341 ForwardErrorCorrection::PacketList media_packets_batch1; | 351 ForwardErrorCorrection::PacketList media_packets_batch1; |
342 PacketizeFrame(kNumMediaPacketsBatch1, 0, &augmented_media_packets_batch1, | 352 PacketizeFrame(kNumMediaPacketsBatch1, 0, &augmented_media_packets_batch1, |
343 &media_packets_batch1); | 353 &media_packets_batch1); |
344 std::list<ForwardErrorCorrection::Packet*> fec_packets; | 354 std::list<ForwardErrorCorrection::Packet*> fec_packets; |
345 EncodeFec(media_packets_batch1, kNumFecPacketsBatch1, &fec_packets); | 355 EncodeFec(media_packets_batch1, kNumFecPacketsBatch1, &fec_packets); |
346 | 356 |
347 BuildAndAddRedMediaPacket(augmented_media_packets_batch1.front()); | 357 BuildAndAddRedMediaPacket(augmented_media_packets_batch1.front()); |
348 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) | 358 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)) |
349 .Times(1) | 359 .Times(1); |
350 .WillRepeatedly(Return(true)); | |
351 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 360 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
352 delayed_fec = fec_packets.front(); | 361 delayed_fec = fec_packets.front(); |
353 | 362 |
354 // Fill the FEC decoder. No packets should be dropped. | 363 // Fill the FEC decoder. No packets should be dropped. |
355 const size_t kNumMediaPacketsBatch2 = 46; | 364 const size_t kNumMediaPacketsBatch2 = 46; |
356 std::list<AugmentedPacket*> augmented_media_packets_batch2; | 365 std::list<AugmentedPacket*> augmented_media_packets_batch2; |
357 ForwardErrorCorrection::PacketList media_packets_batch2; | 366 ForwardErrorCorrection::PacketList media_packets_batch2; |
358 for (size_t i = 0; i < kNumMediaPacketsBatch2; ++i) { | 367 for (size_t i = 0; i < kNumMediaPacketsBatch2; ++i) { |
359 PacketizeFrame(1, i, &augmented_media_packets_batch2, | 368 PacketizeFrame(1, i, &augmented_media_packets_batch2, |
360 &media_packets_batch2); | 369 &media_packets_batch2); |
361 } | 370 } |
362 for (auto it = augmented_media_packets_batch2.begin(); | 371 for (auto it = augmented_media_packets_batch2.begin(); |
363 it != augmented_media_packets_batch2.end(); ++it) { | 372 it != augmented_media_packets_batch2.end(); ++it) { |
364 BuildAndAddRedMediaPacket(*it); | 373 BuildAndAddRedMediaPacket(*it); |
365 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) | 374 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)) |
366 .Times(1) | 375 .Times(1); |
367 .WillRepeatedly(Return(true)); | |
368 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 376 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
369 } | 377 } |
370 | 378 |
371 // Add the delayed FEC packet. One packet should be reconstructed. | 379 // Add the delayed FEC packet. One packet should be reconstructed. |
372 BuildAndAddRedFecPacket(delayed_fec); | 380 BuildAndAddRedFecPacket(delayed_fec); |
373 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) | 381 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)) |
374 .Times(1) | 382 .Times(1); |
375 .WillRepeatedly(Return(true)); | |
376 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 383 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
377 } | 384 } |
378 | 385 |
379 TEST_F(UlpfecReceiverTest, PacketDroppedWhenTooOld) { | 386 TEST_F(UlpfecReceiverTest, PacketDroppedWhenTooOld) { |
380 // 1 frame with 2 media packets and one FEC packet. One media packet missing. | 387 // 1 frame with 2 media packets and one FEC packet. One media packet missing. |
381 // Delay the FEC packet. | 388 // Delay the FEC packet. |
382 Packet* delayed_fec = nullptr; | 389 Packet* delayed_fec = nullptr; |
383 const size_t kNumFecPacketsBatch1 = 1; | 390 const size_t kNumFecPacketsBatch1 = 1; |
384 const size_t kNumMediaPacketsBatch1 = 2; | 391 const size_t kNumMediaPacketsBatch1 = 2; |
385 std::list<AugmentedPacket*> augmented_media_packets_batch1; | 392 std::list<AugmentedPacket*> augmented_media_packets_batch1; |
386 ForwardErrorCorrection::PacketList media_packets_batch1; | 393 ForwardErrorCorrection::PacketList media_packets_batch1; |
387 PacketizeFrame(kNumMediaPacketsBatch1, 0, &augmented_media_packets_batch1, | 394 PacketizeFrame(kNumMediaPacketsBatch1, 0, &augmented_media_packets_batch1, |
388 &media_packets_batch1); | 395 &media_packets_batch1); |
389 std::list<ForwardErrorCorrection::Packet*> fec_packets; | 396 std::list<ForwardErrorCorrection::Packet*> fec_packets; |
390 EncodeFec(media_packets_batch1, kNumFecPacketsBatch1, &fec_packets); | 397 EncodeFec(media_packets_batch1, kNumFecPacketsBatch1, &fec_packets); |
391 | 398 |
392 BuildAndAddRedMediaPacket(augmented_media_packets_batch1.front()); | 399 BuildAndAddRedMediaPacket(augmented_media_packets_batch1.front()); |
393 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) | 400 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)) |
394 .Times(1) | 401 .Times(1); |
395 .WillRepeatedly(Return(true)); | |
396 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 402 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
397 delayed_fec = fec_packets.front(); | 403 delayed_fec = fec_packets.front(); |
398 | 404 |
399 // Fill the FEC decoder and force the last packet to be dropped. | 405 // Fill the FEC decoder and force the last packet to be dropped. |
400 const size_t kNumMediaPacketsBatch2 = 48; | 406 const size_t kNumMediaPacketsBatch2 = 48; |
401 std::list<AugmentedPacket*> augmented_media_packets_batch2; | 407 std::list<AugmentedPacket*> augmented_media_packets_batch2; |
402 ForwardErrorCorrection::PacketList media_packets_batch2; | 408 ForwardErrorCorrection::PacketList media_packets_batch2; |
403 for (size_t i = 0; i < kNumMediaPacketsBatch2; ++i) { | 409 for (size_t i = 0; i < kNumMediaPacketsBatch2; ++i) { |
404 PacketizeFrame(1, i, &augmented_media_packets_batch2, | 410 PacketizeFrame(1, i, &augmented_media_packets_batch2, |
405 &media_packets_batch2); | 411 &media_packets_batch2); |
406 } | 412 } |
407 for (auto it = augmented_media_packets_batch2.begin(); | 413 for (auto it = augmented_media_packets_batch2.begin(); |
408 it != augmented_media_packets_batch2.end(); ++it) { | 414 it != augmented_media_packets_batch2.end(); ++it) { |
409 BuildAndAddRedMediaPacket(*it); | 415 BuildAndAddRedMediaPacket(*it); |
410 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) | 416 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)) |
411 .Times(1) | 417 .Times(1); |
412 .WillRepeatedly(Return(true)); | |
413 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 418 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
414 } | 419 } |
415 | 420 |
416 // Add the delayed FEC packet. No packet should be reconstructed since the | 421 // Add the delayed FEC packet. No packet should be reconstructed since the |
417 // first media packet of that frame has been dropped due to being too old. | 422 // first media packet of that frame has been dropped due to being too old. |
418 BuildAndAddRedFecPacket(delayed_fec); | 423 BuildAndAddRedFecPacket(delayed_fec); |
419 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)).Times(0); | 424 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)).Times(0); |
420 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 425 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
421 } | 426 } |
422 | 427 |
423 TEST_F(UlpfecReceiverTest, OldFecPacketDropped) { | 428 TEST_F(UlpfecReceiverTest, OldFecPacketDropped) { |
424 // 49 frames with 2 media packets and one FEC packet. All media packets | 429 // 49 frames with 2 media packets and one FEC packet. All media packets |
425 // missing. | 430 // missing. |
426 const size_t kNumMediaPackets = 49 * 2; | 431 const size_t kNumMediaPackets = 49 * 2; |
427 std::list<AugmentedPacket*> augmented_media_packets; | 432 std::list<AugmentedPacket*> augmented_media_packets; |
428 ForwardErrorCorrection::PacketList media_packets; | 433 ForwardErrorCorrection::PacketList media_packets; |
429 for (size_t i = 0; i < kNumMediaPackets / 2; ++i) { | 434 for (size_t i = 0; i < kNumMediaPackets / 2; ++i) { |
430 std::list<AugmentedPacket*> frame_augmented_media_packets; | 435 std::list<AugmentedPacket*> frame_augmented_media_packets; |
431 ForwardErrorCorrection::PacketList frame_media_packets; | 436 ForwardErrorCorrection::PacketList frame_media_packets; |
432 std::list<ForwardErrorCorrection::Packet*> fec_packets; | 437 std::list<ForwardErrorCorrection::Packet*> fec_packets; |
433 PacketizeFrame(2, 0, &frame_augmented_media_packets, &frame_media_packets); | 438 PacketizeFrame(2, 0, &frame_augmented_media_packets, &frame_media_packets); |
434 EncodeFec(frame_media_packets, 1, &fec_packets); | 439 EncodeFec(frame_media_packets, 1, &fec_packets); |
435 for (auto it = fec_packets.begin(); it != fec_packets.end(); ++it) { | 440 for (auto it = fec_packets.begin(); it != fec_packets.end(); ++it) { |
436 // Only FEC packets inserted. No packets recoverable at this time. | 441 // Only FEC packets inserted. No packets recoverable at this time. |
437 BuildAndAddRedFecPacket(*it); | 442 BuildAndAddRedFecPacket(*it); |
438 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)).Times(0); | 443 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)).Times(0); |
439 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 444 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
440 } | 445 } |
441 // Move unique_ptr's to media_packets for lifetime management. | 446 // Move unique_ptr's to media_packets for lifetime management. |
442 media_packets.insert(media_packets.end(), | 447 media_packets.insert(media_packets.end(), |
443 std::make_move_iterator(frame_media_packets.begin()), | 448 std::make_move_iterator(frame_media_packets.begin()), |
444 std::make_move_iterator(frame_media_packets.end())); | 449 std::make_move_iterator(frame_media_packets.end())); |
445 augmented_media_packets.insert(augmented_media_packets.end(), | 450 augmented_media_packets.insert(augmented_media_packets.end(), |
446 frame_augmented_media_packets.begin(), | 451 frame_augmented_media_packets.begin(), |
447 frame_augmented_media_packets.end()); | 452 frame_augmented_media_packets.end()); |
448 } | 453 } |
449 // Insert the oldest media packet. The corresponding FEC packet is too old | 454 // Insert the oldest media packet. The corresponding FEC packet is too old |
450 // and should have been dropped. Only the media packet we inserted will be | 455 // and should have been dropped. Only the media packet we inserted will be |
451 // returned. | 456 // returned. |
452 BuildAndAddRedMediaPacket(augmented_media_packets.front()); | 457 BuildAndAddRedMediaPacket(augmented_media_packets.front()); |
453 EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)) | 458 EXPECT_CALL(recovered_packet_receiver_, OnRecoveredPacket(_, _)) |
454 .Times(1) | 459 .Times(1); |
455 .WillRepeatedly(Return(true)); | |
456 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); | 460 EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec()); |
457 } | 461 } |
458 | 462 |
459 TEST_F(UlpfecReceiverTest, TruncatedPacketWithFBitSet) { | 463 TEST_F(UlpfecReceiverTest, TruncatedPacketWithFBitSet) { |
460 const uint8_t kTruncatedPacket[] = {0x80, 0x2a, 0x68, 0x71, 0x29, 0xa1, 0x27, | 464 const uint8_t kTruncatedPacket[] = {0x80, 0x2a, 0x68, 0x71, 0x29, 0xa1, 0x27, |
461 0x3a, 0x29, 0x12, 0x2a, 0x98, 0xe0, 0x29}; | 465 0x3a, 0x29, 0x12, 0x2a, 0x98, 0xe0, 0x29}; |
462 | 466 |
463 SurvivesMaliciousPacket(kTruncatedPacket, sizeof(kTruncatedPacket), 100); | 467 SurvivesMaliciousPacket(kTruncatedPacket, sizeof(kTruncatedPacket), 100); |
464 } | 468 } |
465 | 469 |
(...skipping 10 matching lines...) Expand all Loading... | |
476 | 480 |
477 TEST_F(UlpfecReceiverTest, TruncatedPacketWithoutDataPastFirstBlock) { | 481 TEST_F(UlpfecReceiverTest, TruncatedPacketWithoutDataPastFirstBlock) { |
478 const uint8_t kPacket[] = { | 482 const uint8_t kPacket[] = { |
479 0x82, 0x38, 0x92, 0x38, 0x92, 0x38, 0xde, 0x2a, 0x11, 0xc8, 0xa3, 0xc4, | 483 0x82, 0x38, 0x92, 0x38, 0x92, 0x38, 0xde, 0x2a, 0x11, 0xc8, 0xa3, 0xc4, |
480 0x82, 0x38, 0x2a, 0x21, 0x2a, 0x28, 0x92, 0x38, 0x92, 0x00, 0x00, 0x0a, | 484 0x82, 0x38, 0x2a, 0x21, 0x2a, 0x28, 0x92, 0x38, 0x92, 0x00, 0x00, 0x0a, |
481 0x3a, 0xc8, 0xa3, 0x3a, 0x27, 0xc4, 0x2a, 0x21, 0x2a, 0x28}; | 485 0x3a, 0xc8, 0xa3, 0x3a, 0x27, 0xc4, 0x2a, 0x21, 0x2a, 0x28}; |
482 SurvivesMaliciousPacket(kPacket, sizeof(kPacket), 100); | 486 SurvivesMaliciousPacket(kPacket, sizeof(kPacket), 100); |
483 } | 487 } |
484 | 488 |
485 } // namespace webrtc | 489 } // namespace webrtc |
OLD | NEW |