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

Side by Side Diff: modules/rtp_rtcp/source/flexfec_receiver_unittest.cc

Issue 3012243002: Change ForwardErrorCorrection class to accept one received packet at a time. (Closed)
Patch Set: Rebased. Created 3 years, 3 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) 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
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
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
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
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
OLDNEW
« no previous file with comments | « modules/rtp_rtcp/source/flexfec_receiver.cc ('k') | modules/rtp_rtcp/source/forward_error_correction.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698