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

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

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

Powered by Google App Engine
This is Rietveld 408576698