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

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

Issue 2912713002: Persist RTP state for FlexFEC. (Closed)
Patch Set: Fix fuzzer and win compile. 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) 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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 71
72 return std::move(fec_packets.front()); 72 return std::move(fec_packets.front());
73 } 73 }
74 74
75 } // namespace 75 } // namespace
76 76
77 TEST(FlexfecSenderTest, Ssrc) { 77 TEST(FlexfecSenderTest, Ssrc) {
78 SimulatedClock clock(kInitialSimulatedClockTime); 78 SimulatedClock clock(kInitialSimulatedClockTime);
79 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 79 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
80 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 80 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
81 &clock); 81 nullptr /* rtp_state */, &clock);
82 82
83 EXPECT_EQ(kFlexfecSsrc, sender.ssrc()); 83 EXPECT_EQ(kFlexfecSsrc, sender.ssrc());
84 } 84 }
85 85
86 TEST(FlexfecSenderTest, NoFecAvailableBeforeMediaAdded) { 86 TEST(FlexfecSenderTest, NoFecAvailableBeforeMediaAdded) {
87 SimulatedClock clock(kInitialSimulatedClockTime); 87 SimulatedClock clock(kInitialSimulatedClockTime);
88 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 88 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
89 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 89 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
90 &clock); 90 nullptr /* rtp_state */, &clock);
91 91
92 EXPECT_FALSE(sender.FecAvailable()); 92 EXPECT_FALSE(sender.FecAvailable());
93 auto fec_packets = sender.GetFecPackets(); 93 auto fec_packets = sender.GetFecPackets();
94 EXPECT_EQ(0U, fec_packets.size()); 94 EXPECT_EQ(0U, fec_packets.size());
95 } 95 }
96 96
97 TEST(FlexfecSenderTest, ProtectOneFrameWithOneFecPacket) { 97 TEST(FlexfecSenderTest, ProtectOneFrameWithOneFecPacket) {
98 SimulatedClock clock(kInitialSimulatedClockTime); 98 SimulatedClock clock(kInitialSimulatedClockTime);
99 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 99 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
100 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 100 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
101 &clock); 101 nullptr /* rtp_state */, &clock);
102 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 102 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
103 103
104 EXPECT_EQ(kRtpHeaderSize, fec_packet->headers_size()); 104 EXPECT_EQ(kRtpHeaderSize, fec_packet->headers_size());
105 EXPECT_FALSE(fec_packet->Marker()); 105 EXPECT_FALSE(fec_packet->Marker());
106 EXPECT_EQ(kFlexfecPayloadType, fec_packet->PayloadType()); 106 EXPECT_EQ(kFlexfecPayloadType, fec_packet->PayloadType());
107 EXPECT_EQ(kDeterministicSequenceNumber, fec_packet->SequenceNumber()); 107 EXPECT_EQ(kDeterministicSequenceNumber, fec_packet->SequenceNumber());
108 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp()); 108 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp());
109 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); 109 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc());
110 EXPECT_LE(kPayloadLength, fec_packet->payload_size()); 110 EXPECT_LE(kPayloadLength, fec_packet->payload_size());
111 } 111 }
112 112
113 TEST(FlexfecSenderTest, ProtectTwoFramesWithOneFecPacket) { 113 TEST(FlexfecSenderTest, ProtectTwoFramesWithOneFecPacket) {
114 // FEC parameters selected to generate a single FEC packet per frame. 114 // FEC parameters selected to generate a single FEC packet per frame.
115 FecProtectionParams params; 115 FecProtectionParams params;
116 params.fec_rate = 15; 116 params.fec_rate = 15;
117 params.max_fec_frames = 2; 117 params.max_fec_frames = 2;
118 params.fec_mask_type = kFecMaskRandom; 118 params.fec_mask_type = kFecMaskRandom;
119 constexpr size_t kNumFrames = 2; 119 constexpr size_t kNumFrames = 2;
120 constexpr size_t kNumPacketsPerFrame = 2; 120 constexpr size_t kNumPacketsPerFrame = 2;
121 SimulatedClock clock(kInitialSimulatedClockTime); 121 SimulatedClock clock(kInitialSimulatedClockTime);
122 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 122 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
123 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 123 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
124 &clock); 124 nullptr /* rtp_state */, &clock);
125 sender.SetFecParameters(params); 125 sender.SetFecParameters(params);
126 126
127 AugmentedPacketGenerator packet_generator(kMediaSsrc); 127 AugmentedPacketGenerator packet_generator(kMediaSsrc);
128 for (size_t i = 0; i < kNumFrames; ++i) { 128 for (size_t i = 0; i < kNumFrames; ++i) {
129 packet_generator.NewFrame(kNumPacketsPerFrame); 129 packet_generator.NewFrame(kNumPacketsPerFrame);
130 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) { 130 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) {
131 std::unique_ptr<AugmentedPacket> packet = 131 std::unique_ptr<AugmentedPacket> packet =
132 packet_generator.NextPacket(i, kPayloadLength); 132 packet_generator.NextPacket(i, kPayloadLength);
133 RtpPacketToSend rtp_packet(nullptr); 133 RtpPacketToSend rtp_packet(nullptr);
134 rtp_packet.Parse(packet->data, packet->length); 134 rtp_packet.Parse(packet->data, packet->length);
(...skipping 19 matching lines...) Expand all
154 // FEC parameters selected to generate a single FEC packet per frame. 154 // FEC parameters selected to generate a single FEC packet per frame.
155 FecProtectionParams params; 155 FecProtectionParams params;
156 params.fec_rate = 30; 156 params.fec_rate = 30;
157 params.max_fec_frames = 1; 157 params.max_fec_frames = 1;
158 params.fec_mask_type = kFecMaskRandom; 158 params.fec_mask_type = kFecMaskRandom;
159 constexpr size_t kNumFrames = 2; 159 constexpr size_t kNumFrames = 2;
160 constexpr size_t kNumPacketsPerFrame = 2; 160 constexpr size_t kNumPacketsPerFrame = 2;
161 SimulatedClock clock(kInitialSimulatedClockTime); 161 SimulatedClock clock(kInitialSimulatedClockTime);
162 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 162 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
163 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 163 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
164 &clock); 164 nullptr /* rtp_state */, &clock);
165 sender.SetFecParameters(params); 165 sender.SetFecParameters(params);
166 166
167 AugmentedPacketGenerator packet_generator(kMediaSsrc); 167 AugmentedPacketGenerator packet_generator(kMediaSsrc);
168 for (size_t i = 0; i < kNumFrames; ++i) { 168 for (size_t i = 0; i < kNumFrames; ++i) {
169 packet_generator.NewFrame(kNumPacketsPerFrame); 169 packet_generator.NewFrame(kNumPacketsPerFrame);
170 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) { 170 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) {
171 std::unique_ptr<AugmentedPacket> packet = 171 std::unique_ptr<AugmentedPacket> packet =
172 packet_generator.NextPacket(i, kPayloadLength); 172 packet_generator.NextPacket(i, kPayloadLength);
173 RtpPacketToSend rtp_packet(nullptr); 173 RtpPacketToSend rtp_packet(nullptr);
174 rtp_packet.Parse(packet->data, packet->length); 174 rtp_packet.Parse(packet->data, packet->length);
(...skipping 15 matching lines...) Expand all
190 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); 190 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc());
191 } 191 }
192 } 192 }
193 193
194 // In the tests, we only consider RTP header extensions that are useful for BWE. 194 // In the tests, we only consider RTP header extensions that are useful for BWE.
195 TEST(FlexfecSenderTest, NoRtpHeaderExtensionsForBweByDefault) { 195 TEST(FlexfecSenderTest, NoRtpHeaderExtensionsForBweByDefault) {
196 const std::vector<RtpExtension> kRtpHeaderExtensions{}; 196 const std::vector<RtpExtension> kRtpHeaderExtensions{};
197 SimulatedClock clock(kInitialSimulatedClockTime); 197 SimulatedClock clock(kInitialSimulatedClockTime);
198 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 198 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
199 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 199 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
200 &clock); 200 nullptr /* rtp_state */, &clock);
201 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 201 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
202 202
203 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); 203 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>());
204 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); 204 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>());
205 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); 205 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>());
206 } 206 }
207 207
208 TEST(FlexfecSenderTest, RegisterAbsoluteSendTimeRtpHeaderExtension) { 208 TEST(FlexfecSenderTest, RegisterAbsoluteSendTimeRtpHeaderExtension) {
209 const std::vector<RtpExtension> kRtpHeaderExtensions{ 209 const std::vector<RtpExtension> kRtpHeaderExtensions{
210 {RtpExtension::kAbsSendTimeUri, 1}}; 210 {RtpExtension::kAbsSendTimeUri, 1}};
211 SimulatedClock clock(kInitialSimulatedClockTime); 211 SimulatedClock clock(kInitialSimulatedClockTime);
212 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 212 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
213 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 213 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
214 &clock); 214 nullptr /* rtp_state */, &clock);
215 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 215 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
216 216
217 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); 217 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>());
218 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); 218 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>());
219 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); 219 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>());
220 } 220 }
221 221
222 TEST(FlexfecSenderTest, RegisterTransmissionOffsetRtpHeaderExtension) { 222 TEST(FlexfecSenderTest, RegisterTransmissionOffsetRtpHeaderExtension) {
223 const std::vector<RtpExtension> kRtpHeaderExtensions{ 223 const std::vector<RtpExtension> kRtpHeaderExtensions{
224 {RtpExtension::kTimestampOffsetUri, 1}}; 224 {RtpExtension::kTimestampOffsetUri, 1}};
225 SimulatedClock clock(kInitialSimulatedClockTime); 225 SimulatedClock clock(kInitialSimulatedClockTime);
226 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 226 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
227 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 227 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
228 &clock); 228 nullptr /* rtp_state */, &clock);
229 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 229 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
230 230
231 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); 231 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>());
232 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); 232 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>());
233 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); 233 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>());
234 } 234 }
235 235
236 TEST(FlexfecSenderTest, RegisterTransportSequenceNumberRtpHeaderExtension) { 236 TEST(FlexfecSenderTest, RegisterTransportSequenceNumberRtpHeaderExtension) {
237 const std::vector<RtpExtension> kRtpHeaderExtensions{ 237 const std::vector<RtpExtension> kRtpHeaderExtensions{
238 {RtpExtension::kTransportSequenceNumberUri, 1}}; 238 {RtpExtension::kTransportSequenceNumberUri, 1}};
239 SimulatedClock clock(kInitialSimulatedClockTime); 239 SimulatedClock clock(kInitialSimulatedClockTime);
240 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 240 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
241 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 241 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
242 &clock); 242 nullptr /* rtp_state */, &clock);
243 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 243 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
244 244
245 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); 245 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>());
246 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); 246 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>());
247 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); 247 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>());
248 } 248 }
249 249
250 TEST(FlexfecSenderTest, RegisterAllRtpHeaderExtensionsForBwe) { 250 TEST(FlexfecSenderTest, RegisterAllRtpHeaderExtensionsForBwe) {
251 const std::vector<RtpExtension> kRtpHeaderExtensions{ 251 const std::vector<RtpExtension> kRtpHeaderExtensions{
252 {RtpExtension::kAbsSendTimeUri, 1}, 252 {RtpExtension::kAbsSendTimeUri, 1},
253 {RtpExtension::kTimestampOffsetUri, 2}, 253 {RtpExtension::kTimestampOffsetUri, 2},
254 {RtpExtension::kTransportSequenceNumberUri, 3}}; 254 {RtpExtension::kTransportSequenceNumberUri, 3}};
255 SimulatedClock clock(kInitialSimulatedClockTime); 255 SimulatedClock clock(kInitialSimulatedClockTime);
256 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 256 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
257 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 257 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
258 &clock); 258 nullptr /* rtp_state */, &clock);
259 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 259 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
260 260
261 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); 261 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>());
262 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); 262 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>());
263 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); 263 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>());
264 } 264 }
265 265
266 TEST(FlexfecSenderTest, MaxPacketOverhead) { 266 TEST(FlexfecSenderTest, MaxPacketOverhead) {
267 SimulatedClock clock(kInitialSimulatedClockTime); 267 SimulatedClock clock(kInitialSimulatedClockTime);
268 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 268 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
269 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, 269 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
270 &clock); 270 nullptr /* rtp_state */, &clock);
271 271
272 EXPECT_EQ(kFlexfecMaxHeaderSize, sender.MaxPacketOverhead()); 272 EXPECT_EQ(kFlexfecMaxHeaderSize, sender.MaxPacketOverhead());
273 } 273 }
274 274
275 TEST(FlexfecSenderTest, MaxPacketOverheadWithExtensions) { 275 TEST(FlexfecSenderTest, MaxPacketOverheadWithExtensions) {
276 const std::vector<RtpExtension> kRtpHeaderExtensions{ 276 const std::vector<RtpExtension> kRtpHeaderExtensions{
277 {RtpExtension::kAbsSendTimeUri, 1}, 277 {RtpExtension::kAbsSendTimeUri, 1},
278 {RtpExtension::kTimestampOffsetUri, 2}, 278 {RtpExtension::kTimestampOffsetUri, 2},
279 {RtpExtension::kTransportSequenceNumberUri, 3}}; 279 {RtpExtension::kTransportSequenceNumberUri, 3}};
280 SimulatedClock clock(kInitialSimulatedClockTime); 280 SimulatedClock clock(kInitialSimulatedClockTime);
281 const size_t kExtensionHeaderLength = 1; 281 const size_t kExtensionHeaderLength = 1;
282 const size_t kRtpOneByteHeaderLength = 4; 282 const size_t kRtpOneByteHeaderLength = 4;
283 const size_t kExtensionsTotalSize = Word32Align( 283 const size_t kExtensionsTotalSize = Word32Align(
284 kRtpOneByteHeaderLength + 284 kRtpOneByteHeaderLength +
285 kExtensionHeaderLength + AbsoluteSendTime::kValueSizeBytes + 285 kExtensionHeaderLength + AbsoluteSendTime::kValueSizeBytes +
286 kExtensionHeaderLength + TransmissionOffset::kValueSizeBytes + 286 kExtensionHeaderLength + TransmissionOffset::kValueSizeBytes +
287 kExtensionHeaderLength + TransportSequenceNumber::kValueSizeBytes); 287 kExtensionHeaderLength + TransportSequenceNumber::kValueSizeBytes);
288 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 288 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
289 kRtpHeaderExtensions, RTPSender::FecExtensionSizes(), 289 kRtpHeaderExtensions, RTPSender::FecExtensionSizes(),
290 &clock); 290 nullptr /* rtp_state */, &clock);
291 291
292 EXPECT_EQ(kExtensionsTotalSize + kFlexfecMaxHeaderSize, 292 EXPECT_EQ(kExtensionsTotalSize + kFlexfecMaxHeaderSize,
293 sender.MaxPacketOverhead()); 293 sender.MaxPacketOverhead());
294 } 294 }
295 295
296 TEST(FlexfecSenderTest, SetsAndGetsRtpState) {
297 RtpState initial_rtp_state;
298 initial_rtp_state.sequence_number = 100;
299 initial_rtp_state.start_timestamp = 200;
300 SimulatedClock clock(kInitialSimulatedClockTime);
301 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
302 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
303 &initial_rtp_state, &clock);
304
305 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
306 EXPECT_EQ(initial_rtp_state.sequence_number, fec_packet->SequenceNumber());
307 EXPECT_EQ(initial_rtp_state.start_timestamp, fec_packet->Timestamp());
308
309 clock.AdvanceTimeMilliseconds(1000);
310 fec_packet = GenerateSingleFlexfecPacket(&sender);
311 EXPECT_EQ(initial_rtp_state.sequence_number + 1,
312 fec_packet->SequenceNumber());
313 EXPECT_EQ(initial_rtp_state.start_timestamp + 1 * 90000,
314 fec_packet->Timestamp());
315
316 RtpState updated_rtp_state = sender.GetRtpState();
317 EXPECT_EQ(initial_rtp_state.sequence_number + 2,
318 updated_rtp_state.sequence_number);
319 EXPECT_EQ(initial_rtp_state.start_timestamp,
320 updated_rtp_state.start_timestamp);
321 }
322
296 } // namespace webrtc 323 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698