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

Side by Side Diff: webrtc/modules/audio_coding/neteq/nack_tracker_unittest.cc

Issue 2045243002: NetEq: Rename Nack to NackTracker to avoid name collisions in GN (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 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) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 "webrtc/modules/audio_coding/neteq/nack.h" 11 #include "webrtc/modules/audio_coding/neteq/nack_tracker.h"
12 12
13 #include <stdint.h> 13 #include <stdint.h>
14 14
15 #include <algorithm> 15 #include <algorithm>
16 #include <memory> 16 #include <memory>
17 17
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "webrtc/typedefs.h" 19 #include "webrtc/typedefs.h"
20 #include "webrtc/modules/audio_coding/include/audio_coding_module_typedefs.h" 20 #include "webrtc/modules/audio_coding/include/audio_coding_module_typedefs.h"
21 21
(...skipping 25 matching lines...) Expand all
47 } 47 }
48 } 48 }
49 if (!seq_num_matched) 49 if (!seq_num_matched)
50 return false; 50 return false;
51 } 51 }
52 return true; 52 return true;
53 } 53 }
54 54
55 } // namespace 55 } // namespace
56 56
57 TEST(NackTest, EmptyListWhenNoPacketLoss) { 57 TEST(NackTrackerTest, EmptyListWhenNoPacketLoss) {
58 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 58 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
59 nack->UpdateSampleRate(kSampleRateHz); 59 nack->UpdateSampleRate(kSampleRateHz);
60 60
61 int seq_num = 1; 61 int seq_num = 1;
62 uint32_t timestamp = 0; 62 uint32_t timestamp = 0;
63 63
64 std::vector<uint16_t> nack_list; 64 std::vector<uint16_t> nack_list;
65 for (int n = 0; n < 100; n++) { 65 for (int n = 0; n < 100; n++) {
66 nack->UpdateLastReceivedPacket(seq_num, timestamp); 66 nack->UpdateLastReceivedPacket(seq_num, timestamp);
67 nack_list = nack->GetNackList(kShortRoundTripTimeMs); 67 nack_list = nack->GetNackList(kShortRoundTripTimeMs);
68 seq_num++; 68 seq_num++;
69 timestamp += kTimestampIncrement; 69 timestamp += kTimestampIncrement;
70 nack_list = nack->GetNackList(kShortRoundTripTimeMs); 70 nack_list = nack->GetNackList(kShortRoundTripTimeMs);
71 EXPECT_TRUE(nack_list.empty()); 71 EXPECT_TRUE(nack_list.empty());
72 } 72 }
73 } 73 }
74 74
75 TEST(NackTest, NoNackIfReorderWithinNackThreshold) { 75 TEST(NackTrackerTest, NoNackIfReorderWithinNackThreshold) {
76 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 76 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
77 nack->UpdateSampleRate(kSampleRateHz); 77 nack->UpdateSampleRate(kSampleRateHz);
78 78
79 int seq_num = 1; 79 int seq_num = 1;
80 uint32_t timestamp = 0; 80 uint32_t timestamp = 0;
81 std::vector<uint16_t> nack_list; 81 std::vector<uint16_t> nack_list;
82 82
83 nack->UpdateLastReceivedPacket(seq_num, timestamp); 83 nack->UpdateLastReceivedPacket(seq_num, timestamp);
84 nack_list = nack->GetNackList(kShortRoundTripTimeMs); 84 nack_list = nack->GetNackList(kShortRoundTripTimeMs);
85 EXPECT_TRUE(nack_list.empty()); 85 EXPECT_TRUE(nack_list.empty());
86 int num_late_packets = kNackThreshold + 1; 86 int num_late_packets = kNackThreshold + 1;
87 87
88 // Push in reverse order 88 // Push in reverse order
89 while (num_late_packets > 0) { 89 while (num_late_packets > 0) {
90 nack->UpdateLastReceivedPacket( 90 nack->UpdateLastReceivedPacket(
91 seq_num + num_late_packets, 91 seq_num + num_late_packets,
92 timestamp + num_late_packets * kTimestampIncrement); 92 timestamp + num_late_packets * kTimestampIncrement);
93 nack_list = nack->GetNackList(kShortRoundTripTimeMs); 93 nack_list = nack->GetNackList(kShortRoundTripTimeMs);
94 EXPECT_TRUE(nack_list.empty()); 94 EXPECT_TRUE(nack_list.empty());
95 num_late_packets--; 95 num_late_packets--;
96 } 96 }
97 } 97 }
98 98
99 TEST(NackTest, LatePacketsMovedToNackThenNackListDoesNotChange) { 99 TEST(NackTrackerTest, LatePacketsMovedToNackThenNackListDoesNotChange) {
100 const uint16_t kSequenceNumberLostPackets[] = {2, 3, 4, 5, 6, 7, 8, 9}; 100 const uint16_t kSequenceNumberLostPackets[] = {2, 3, 4, 5, 6, 7, 8, 9};
101 static const int kNumAllLostPackets = sizeof(kSequenceNumberLostPackets) / 101 static const int kNumAllLostPackets = sizeof(kSequenceNumberLostPackets) /
102 sizeof(kSequenceNumberLostPackets[0]); 102 sizeof(kSequenceNumberLostPackets[0]);
103 103
104 for (int k = 0; k < 2; k++) { // Two iteration with/without wrap around. 104 for (int k = 0; k < 2; k++) { // Two iteration with/without wrap around.
105 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 105 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
106 nack->UpdateSampleRate(kSampleRateHz); 106 nack->UpdateSampleRate(kSampleRateHz);
107 107
108 uint16_t sequence_num_lost_packets[kNumAllLostPackets]; 108 uint16_t sequence_num_lost_packets[kNumAllLostPackets];
109 for (int n = 0; n < kNumAllLostPackets; n++) { 109 for (int n = 0; n < kNumAllLostPackets; n++) {
110 sequence_num_lost_packets[n] = 110 sequence_num_lost_packets[n] =
111 kSequenceNumberLostPackets[n] + 111 kSequenceNumberLostPackets[n] +
112 k * 65531; // Have wrap around in sequence numbers for |k == 1|. 112 k * 65531; // Have wrap around in sequence numbers for |k == 1|.
113 } 113 }
114 uint16_t seq_num = sequence_num_lost_packets[0] - 1; 114 uint16_t seq_num = sequence_num_lost_packets[0] - 1;
115 115
(...skipping 22 matching lines...) Expand all
138 nack->UpdateLastReceivedPacket(seq_num, timestamp); 138 nack->UpdateLastReceivedPacket(seq_num, timestamp);
139 nack_list = nack->GetNackList(kShortRoundTripTimeMs); 139 nack_list = nack->GetNackList(kShortRoundTripTimeMs);
140 EXPECT_TRUE(IsNackListCorrect(nack_list, sequence_num_lost_packets, 140 EXPECT_TRUE(IsNackListCorrect(nack_list, sequence_num_lost_packets,
141 kNumAllLostPackets)); 141 kNumAllLostPackets));
142 seq_num++; 142 seq_num++;
143 timestamp += kTimestampIncrement; 143 timestamp += kTimestampIncrement;
144 } 144 }
145 } 145 }
146 } 146 }
147 147
148 TEST(NackTest, ArrivedPacketsAreRemovedFromNackList) { 148 TEST(NackTrackerTest, ArrivedPacketsAreRemovedFromNackList) {
149 const uint16_t kSequenceNumberLostPackets[] = {2, 3, 4, 5, 6, 7, 8, 9}; 149 const uint16_t kSequenceNumberLostPackets[] = {2, 3, 4, 5, 6, 7, 8, 9};
150 static const int kNumAllLostPackets = sizeof(kSequenceNumberLostPackets) / 150 static const int kNumAllLostPackets = sizeof(kSequenceNumberLostPackets) /
151 sizeof(kSequenceNumberLostPackets[0]); 151 sizeof(kSequenceNumberLostPackets[0]);
152 152
153 for (int k = 0; k < 2; ++k) { // Two iteration with/without wrap around. 153 for (int k = 0; k < 2; ++k) { // Two iteration with/without wrap around.
154 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 154 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
155 nack->UpdateSampleRate(kSampleRateHz); 155 nack->UpdateSampleRate(kSampleRateHz);
156 156
157 uint16_t sequence_num_lost_packets[kNumAllLostPackets]; 157 uint16_t sequence_num_lost_packets[kNumAllLostPackets];
158 for (int n = 0; n < kNumAllLostPackets; ++n) { 158 for (int n = 0; n < kNumAllLostPackets; ++n) {
159 sequence_num_lost_packets[n] = kSequenceNumberLostPackets[n] + 159 sequence_num_lost_packets[n] = kSequenceNumberLostPackets[n] +
160 k * 65531; // Wrap around for |k == 1|. 160 k * 65531; // Wrap around for |k == 1|.
161 } 161 }
162 162
163 uint16_t seq_num = sequence_num_lost_packets[0] - 1; 163 uint16_t seq_num = sequence_num_lost_packets[0] - 1;
164 uint32_t timestamp = 0; 164 uint32_t timestamp = 0;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 EXPECT_TRUE(IsNackListCorrect( 199 EXPECT_TRUE(IsNackListCorrect(
200 nack_list, &sequence_num_lost_packets[index_retransmitted_rtp], 200 nack_list, &sequence_num_lost_packets[index_retransmitted_rtp],
201 num_lost_packets - 1)); // One less lost packet in the list. 201 num_lost_packets - 1)); // One less lost packet in the list.
202 } 202 }
203 ASSERT_TRUE(nack_list.empty()); 203 ASSERT_TRUE(nack_list.empty());
204 } 204 }
205 } 205 }
206 206
207 // Assess if estimation of timestamps and time-to-play is correct. Introduce all 207 // Assess if estimation of timestamps and time-to-play is correct. Introduce all
208 // combinations that timestamps and sequence numbers might have wrap around. 208 // combinations that timestamps and sequence numbers might have wrap around.
209 TEST(NackTest, EstimateTimestampAndTimeToPlay) { 209 TEST(NackTrackerTest, EstimateTimestampAndTimeToPlay) {
210 const uint16_t kLostPackets[] = {2, 3, 4, 5, 6, 7, 8, 210 const uint16_t kLostPackets[] = {2, 3, 4, 5, 6, 7, 8,
211 9, 10, 11, 12, 13, 14, 15}; 211 9, 10, 11, 12, 13, 14, 15};
212 static const int kNumAllLostPackets = 212 static const int kNumAllLostPackets =
213 sizeof(kLostPackets) / sizeof(kLostPackets[0]); 213 sizeof(kLostPackets) / sizeof(kLostPackets[0]);
214 214
215 for (int k = 0; k < 4; ++k) { 215 for (int k = 0; k < 4; ++k) {
216 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 216 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
217 nack->UpdateSampleRate(kSampleRateHz); 217 nack->UpdateSampleRate(kSampleRateHz);
218 218
219 // Sequence number wrap around if |k| is 2 or 3; 219 // Sequence number wrap around if |k| is 2 or 3;
220 int seq_num_offset = (k < 2) ? 0 : 65531; 220 int seq_num_offset = (k < 2) ? 0 : 65531;
221 221
222 // Timestamp wrap around if |k| is 1 or 3. 222 // Timestamp wrap around if |k| is 1 or 3.
223 uint32_t timestamp_offset = 223 uint32_t timestamp_offset =
224 (k & 0x1) ? static_cast<uint32_t>(0xffffffff) - 6 : 0; 224 (k & 0x1) ? static_cast<uint32_t>(0xffffffff) - 6 : 0;
225 225
226 uint32_t timestamp_lost_packets[kNumAllLostPackets]; 226 uint32_t timestamp_lost_packets[kNumAllLostPackets];
(...skipping 16 matching lines...) Expand all
243 seq_num++; 243 seq_num++;
244 timestamp += kTimestampIncrement; 244 timestamp += kTimestampIncrement;
245 nack->UpdateLastReceivedPacket(seq_num, timestamp); 245 nack->UpdateLastReceivedPacket(seq_num, timestamp);
246 246
247 // A packet after the last one which is supposed to be lost. 247 // A packet after the last one which is supposed to be lost.
248 seq_num = seq_num_lost_packets[kNumAllLostPackets - 1] + 1; 248 seq_num = seq_num_lost_packets[kNumAllLostPackets - 1] + 1;
249 timestamp = 249 timestamp =
250 timestamp_lost_packets[kNumAllLostPackets - 1] + kTimestampIncrement; 250 timestamp_lost_packets[kNumAllLostPackets - 1] + kTimestampIncrement;
251 nack->UpdateLastReceivedPacket(seq_num, timestamp); 251 nack->UpdateLastReceivedPacket(seq_num, timestamp);
252 252
253 Nack::NackList nack_list = nack->GetNackList(); 253 NackTracker::NackList nack_list = nack->GetNackList();
254 EXPECT_EQ(static_cast<size_t>(kNumAllLostPackets), nack_list.size()); 254 EXPECT_EQ(static_cast<size_t>(kNumAllLostPackets), nack_list.size());
255 255
256 // Pretend the first packet is decoded. 256 // Pretend the first packet is decoded.
257 nack->UpdateLastDecodedPacket(first_seq_num, first_timestamp); 257 nack->UpdateLastDecodedPacket(first_seq_num, first_timestamp);
258 nack_list = nack->GetNackList(); 258 nack_list = nack->GetNackList();
259 259
260 Nack::NackList::iterator it = nack_list.begin(); 260 NackTracker::NackList::iterator it = nack_list.begin();
261 while (it != nack_list.end()) { 261 while (it != nack_list.end()) {
262 seq_num = it->first - seq_num_offset; 262 seq_num = it->first - seq_num_offset;
263 int index = seq_num - kLostPackets[0]; 263 int index = seq_num - kLostPackets[0];
264 EXPECT_EQ(timestamp_lost_packets[index], it->second.estimated_timestamp); 264 EXPECT_EQ(timestamp_lost_packets[index], it->second.estimated_timestamp);
265 EXPECT_EQ((index + 2) * kPacketSizeMs, it->second.time_to_play_ms); 265 EXPECT_EQ((index + 2) * kPacketSizeMs, it->second.time_to_play_ms);
266 ++it; 266 ++it;
267 } 267 }
268 268
269 // Pretend 10 ms is passed, and we had pulled audio from NetEq, it still 269 // Pretend 10 ms is passed, and we had pulled audio from NetEq, it still
270 // reports the same sequence number as decoded, time-to-play should be 270 // reports the same sequence number as decoded, time-to-play should be
271 // updated by 10 ms. 271 // updated by 10 ms.
272 nack->UpdateLastDecodedPacket(first_seq_num, first_timestamp); 272 nack->UpdateLastDecodedPacket(first_seq_num, first_timestamp);
273 nack_list = nack->GetNackList(); 273 nack_list = nack->GetNackList();
274 it = nack_list.begin(); 274 it = nack_list.begin();
275 while (it != nack_list.end()) { 275 while (it != nack_list.end()) {
276 seq_num = it->first - seq_num_offset; 276 seq_num = it->first - seq_num_offset;
277 int index = seq_num - kLostPackets[0]; 277 int index = seq_num - kLostPackets[0];
278 EXPECT_EQ((index + 2) * kPacketSizeMs - 10, it->second.time_to_play_ms); 278 EXPECT_EQ((index + 2) * kPacketSizeMs - 10, it->second.time_to_play_ms);
279 ++it; 279 ++it;
280 } 280 }
281 } 281 }
282 } 282 }
283 283
284 TEST(NackTest, MissingPacketsPriorToLastDecodedRtpShouldNotBeInNackList) { 284 TEST(NackTrackerTest,
285 MissingPacketsPriorToLastDecodedRtpShouldNotBeInNackList) {
285 for (int m = 0; m < 2; ++m) { 286 for (int m = 0; m < 2; ++m) {
286 uint16_t seq_num_offset = (m == 0) ? 0 : 65531; // Wrap around if |m| is 1. 287 uint16_t seq_num_offset = (m == 0) ? 0 : 65531; // Wrap around if |m| is 1.
287 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 288 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
288 nack->UpdateSampleRate(kSampleRateHz); 289 nack->UpdateSampleRate(kSampleRateHz);
289 290
290 // Two consecutive packets to have a correct estimate of timestamp increase. 291 // Two consecutive packets to have a correct estimate of timestamp increase.
291 uint16_t seq_num = 0; 292 uint16_t seq_num = 0;
292 nack->UpdateLastReceivedPacket(seq_num_offset + seq_num, 293 nack->UpdateLastReceivedPacket(seq_num_offset + seq_num,
293 seq_num * kTimestampIncrement); 294 seq_num * kTimestampIncrement);
294 seq_num++; 295 seq_num++;
295 nack->UpdateLastReceivedPacket(seq_num_offset + seq_num, 296 nack->UpdateLastReceivedPacket(seq_num_offset + seq_num,
296 seq_num * kTimestampIncrement); 297 seq_num * kTimestampIncrement);
297 298
(...skipping 29 matching lines...) Expand all
327 for (int n = 0; n < kNackThreshold + 10; ++n) { 328 for (int n = 0; n < kNackThreshold + 10; ++n) {
328 seq_num++; 329 seq_num++;
329 nack->UpdateLastReceivedPacket(seq_num_offset + seq_num, 330 nack->UpdateLastReceivedPacket(seq_num_offset + seq_num,
330 seq_num * kTimestampIncrement); 331 seq_num * kTimestampIncrement);
331 nack_list = nack->GetNackList(kShortRoundTripTimeMs); 332 nack_list = nack->GetNackList(kShortRoundTripTimeMs);
332 EXPECT_TRUE(nack_list.empty()); 333 EXPECT_TRUE(nack_list.empty());
333 } 334 }
334 } 335 }
335 } 336 }
336 337
337 TEST(NackTest, Reset) { 338 TEST(NackTrackerTest, Reset) {
338 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 339 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
339 nack->UpdateSampleRate(kSampleRateHz); 340 nack->UpdateSampleRate(kSampleRateHz);
340 341
341 // Two consecutive packets to have a correct estimate of timestamp increase. 342 // Two consecutive packets to have a correct estimate of timestamp increase.
342 uint16_t seq_num = 0; 343 uint16_t seq_num = 0;
343 nack->UpdateLastReceivedPacket(seq_num, seq_num * kTimestampIncrement); 344 nack->UpdateLastReceivedPacket(seq_num, seq_num * kTimestampIncrement);
344 seq_num++; 345 seq_num++;
345 nack->UpdateLastReceivedPacket(seq_num, seq_num * kTimestampIncrement); 346 nack->UpdateLastReceivedPacket(seq_num, seq_num * kTimestampIncrement);
346 347
347 // Skip 10 packets (larger than NACK threshold). 348 // Skip 10 packets (larger than NACK threshold).
348 const int kNumLostPackets = 10; 349 const int kNumLostPackets = 10;
349 seq_num += kNumLostPackets + 1; 350 seq_num += kNumLostPackets + 1;
350 nack->UpdateLastReceivedPacket(seq_num, seq_num * kTimestampIncrement); 351 nack->UpdateLastReceivedPacket(seq_num, seq_num * kTimestampIncrement);
351 352
352 const size_t kExpectedListSize = kNumLostPackets - kNackThreshold; 353 const size_t kExpectedListSize = kNumLostPackets - kNackThreshold;
353 std::vector<uint16_t> nack_list = nack->GetNackList(kShortRoundTripTimeMs); 354 std::vector<uint16_t> nack_list = nack->GetNackList(kShortRoundTripTimeMs);
354 EXPECT_EQ(kExpectedListSize, nack_list.size()); 355 EXPECT_EQ(kExpectedListSize, nack_list.size());
355 356
356 nack->Reset(); 357 nack->Reset();
357 nack_list = nack->GetNackList(kShortRoundTripTimeMs); 358 nack_list = nack->GetNackList(kShortRoundTripTimeMs);
358 EXPECT_TRUE(nack_list.empty()); 359 EXPECT_TRUE(nack_list.empty());
359 } 360 }
360 361
361 TEST(NackTest, ListSizeAppliedFromBeginning) { 362 TEST(NackTrackerTest, ListSizeAppliedFromBeginning) {
362 const size_t kNackListSize = 10; 363 const size_t kNackListSize = 10;
363 for (int m = 0; m < 2; ++m) { 364 for (int m = 0; m < 2; ++m) {
364 uint16_t seq_num_offset = (m == 0) ? 0 : 65525; // Wrap around if |m| is 1. 365 uint16_t seq_num_offset = (m == 0) ? 0 : 65525; // Wrap around if |m| is 1.
365 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 366 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
366 nack->UpdateSampleRate(kSampleRateHz); 367 nack->UpdateSampleRate(kSampleRateHz);
367 nack->SetMaxNackListSize(kNackListSize); 368 nack->SetMaxNackListSize(kNackListSize);
368 369
369 uint16_t seq_num = seq_num_offset; 370 uint16_t seq_num = seq_num_offset;
370 uint32_t timestamp = 0x12345678; 371 uint32_t timestamp = 0x12345678;
371 nack->UpdateLastReceivedPacket(seq_num, timestamp); 372 nack->UpdateLastReceivedPacket(seq_num, timestamp);
372 373
373 // Packet lost more than NACK-list size limit. 374 // Packet lost more than NACK-list size limit.
374 uint16_t num_lost_packets = kNackThreshold + kNackListSize + 5; 375 uint16_t num_lost_packets = kNackThreshold + kNackListSize + 5;
375 376
376 seq_num += num_lost_packets + 1; 377 seq_num += num_lost_packets + 1;
377 timestamp += (num_lost_packets + 1) * kTimestampIncrement; 378 timestamp += (num_lost_packets + 1) * kTimestampIncrement;
378 nack->UpdateLastReceivedPacket(seq_num, timestamp); 379 nack->UpdateLastReceivedPacket(seq_num, timestamp);
379 380
380 std::vector<uint16_t> nack_list = nack->GetNackList(kShortRoundTripTimeMs); 381 std::vector<uint16_t> nack_list = nack->GetNackList(kShortRoundTripTimeMs);
381 EXPECT_EQ(kNackListSize - kNackThreshold, nack_list.size()); 382 EXPECT_EQ(kNackListSize - kNackThreshold, nack_list.size());
382 } 383 }
383 } 384 }
384 385
385 TEST(NackTest, ChangeOfListSizeAppliedAndOldElementsRemoved) { 386 TEST(NackTrackerTest, ChangeOfListSizeAppliedAndOldElementsRemoved) {
386 const size_t kNackListSize = 10; 387 const size_t kNackListSize = 10;
387 for (int m = 0; m < 2; ++m) { 388 for (int m = 0; m < 2; ++m) {
388 uint16_t seq_num_offset = (m == 0) ? 0 : 65525; // Wrap around if |m| is 1. 389 uint16_t seq_num_offset = (m == 0) ? 0 : 65525; // Wrap around if |m| is 1.
389 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 390 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
390 nack->UpdateSampleRate(kSampleRateHz); 391 nack->UpdateSampleRate(kSampleRateHz);
391 392
392 uint16_t seq_num = seq_num_offset; 393 uint16_t seq_num = seq_num_offset;
393 uint32_t timestamp = 0x87654321; 394 uint32_t timestamp = 0x87654321;
394 nack->UpdateLastReceivedPacket(seq_num, timestamp); 395 nack->UpdateLastReceivedPacket(seq_num, timestamp);
395 396
396 // Packet lost more than NACK-list size limit. 397 // Packet lost more than NACK-list size limit.
397 uint16_t num_lost_packets = kNackThreshold + kNackListSize + 5; 398 uint16_t num_lost_packets = kNackThreshold + kNackListSize + 5;
398 399
399 std::unique_ptr<uint16_t[]> seq_num_lost(new uint16_t[num_lost_packets]); 400 std::unique_ptr<uint16_t[]> seq_num_lost(new uint16_t[num_lost_packets]);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 444
444 // After this packet, NACK list should be empty. 445 // After this packet, NACK list should be empty.
445 ++seq_num; 446 ++seq_num;
446 timestamp += kTimestampIncrement; 447 timestamp += kTimestampIncrement;
447 nack->UpdateLastReceivedPacket(seq_num, timestamp); 448 nack->UpdateLastReceivedPacket(seq_num, timestamp);
448 nack_list = nack->GetNackList(kShortRoundTripTimeMs); 449 nack_list = nack->GetNackList(kShortRoundTripTimeMs);
449 EXPECT_TRUE(nack_list.empty()); 450 EXPECT_TRUE(nack_list.empty());
450 } 451 }
451 } 452 }
452 453
453 TEST(NackTest, RoudTripTimeIsApplied) { 454 TEST(NackTrackerTest, RoudTripTimeIsApplied) {
454 const int kNackListSize = 200; 455 const int kNackListSize = 200;
455 std::unique_ptr<Nack> nack(Nack::Create(kNackThreshold)); 456 std::unique_ptr<NackTracker> nack(NackTracker::Create(kNackThreshold));
456 nack->UpdateSampleRate(kSampleRateHz); 457 nack->UpdateSampleRate(kSampleRateHz);
457 nack->SetMaxNackListSize(kNackListSize); 458 nack->SetMaxNackListSize(kNackListSize);
458 459
459 uint16_t seq_num = 0; 460 uint16_t seq_num = 0;
460 uint32_t timestamp = 0x87654321; 461 uint32_t timestamp = 0x87654321;
461 nack->UpdateLastReceivedPacket(seq_num, timestamp); 462 nack->UpdateLastReceivedPacket(seq_num, timestamp);
462 463
463 // Packet lost more than NACK-list size limit. 464 // Packet lost more than NACK-list size limit.
464 uint16_t kNumLostPackets = kNackThreshold + 5; 465 uint16_t kNumLostPackets = kNackThreshold + 5;
465 466
466 seq_num += (1 + kNumLostPackets); 467 seq_num += (1 + kNumLostPackets);
467 timestamp += (1 + kNumLostPackets) * kTimestampIncrement; 468 timestamp += (1 + kNumLostPackets) * kTimestampIncrement;
468 nack->UpdateLastReceivedPacket(seq_num, timestamp); 469 nack->UpdateLastReceivedPacket(seq_num, timestamp);
469 470
470 // Expected time-to-play are: 471 // Expected time-to-play are:
471 // kPacketSizeMs - 10, 2*kPacketSizeMs - 10, 3*kPacketSizeMs - 10, ... 472 // kPacketSizeMs - 10, 2*kPacketSizeMs - 10, 3*kPacketSizeMs - 10, ...
472 // 473 //
473 // sequence number: 1, 2, 3, 4, 5 474 // sequence number: 1, 2, 3, 4, 5
474 // time-to-play: 20, 50, 80, 110, 140 475 // time-to-play: 20, 50, 80, 110, 140
475 // 476 //
476 std::vector<uint16_t> nack_list = nack->GetNackList(100); 477 std::vector<uint16_t> nack_list = nack->GetNackList(100);
477 ASSERT_EQ(2u, nack_list.size()); 478 ASSERT_EQ(2u, nack_list.size());
478 EXPECT_EQ(4, nack_list[0]); 479 EXPECT_EQ(4, nack_list[0]);
479 EXPECT_EQ(5, nack_list[1]); 480 EXPECT_EQ(5, nack_list[1]);
480 } 481 }
481 482
482 } // namespace webrtc 483 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/neteq/nack_tracker.cc ('k') | webrtc/modules/audio_coding/neteq/nack_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698