blob: fc4e0cb4cd636633c3b7902114200be1537f898f [file] [log] [blame]
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +00001/*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11// Unit tests for DelayManager class.
12
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "modules/audio_coding/neteq/delay_manager.h"
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000014
15#include <math.h>
16
Mirko Bonadei317a1f02019-09-17 17:06:18 +020017#include <memory>
18
Jakob Ivarsson7dff9f32020-11-11 15:26:10 +010019#include "absl/types/optional.h"
Jakob Ivarsson1eb3d7e2019-02-21 15:42:31 +010020#include "modules/audio_coding/neteq/histogram.h"
Jakob Ivarsson1eb3d7e2019-02-21 15:42:31 +010021#include "modules/audio_coding/neteq/mock/mock_histogram.h"
Jakob Ivarsson44507082019-03-05 16:59:03 +010022#include "modules/audio_coding/neteq/mock/mock_statistics_calculator.h"
Ruslan Burakov4a68fb92019-02-13 14:25:39 +010023#include "rtc_base/checks.h"
Minyue Li002fbb82018-10-04 11:31:03 +020024#include "test/field_trial.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020025#include "test/gmock.h"
26#include "test/gtest.h"
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000027
28namespace webrtc {
29
Jakob Ivarssondb42ed22019-02-27 10:08:09 +010030namespace {
Jakob Ivarsson74158ff2021-09-07 14:24:56 +020031constexpr int kMaxNumberOfPackets = 200;
Jakob Ivarssondb42ed22019-02-27 10:08:09 +010032constexpr int kTimeStepMs = 10;
33constexpr int kFs = 8000;
34constexpr int kFrameSizeMs = 20;
35constexpr int kTsIncrement = kFrameSizeMs * kFs / 1000;
36constexpr int kMaxBufferSizeMs = kMaxNumberOfPackets * kFrameSizeMs;
Jakob Ivarsson74158ff2021-09-07 14:24:56 +020037
Jakob Ivarssondb42ed22019-02-27 10:08:09 +010038} // namespace
39
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000040class DelayManagerTest : public ::testing::Test {
41 protected:
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000042 DelayManagerTest();
43 virtual void SetUp();
Ivo Creusen53a31f72019-10-24 15:20:39 +020044 absl::optional<int> InsertNextPacket();
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000045 void IncreaseTime(int inc_ms);
46
Jakob Ivarsson74158ff2021-09-07 14:24:56 +020047 DelayManager dm_;
henrik.lundinf3933702016-04-28 01:53:52 -070048 TickTimer tick_timer_;
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000049 uint32_t ts_;
50};
51
52DelayManagerTest::DelayManagerTest()
Jakob Ivarsson74158ff2021-09-07 14:24:56 +020053 : dm_(DelayManager::Config(), &tick_timer_), ts_(0x12345678) {}
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000054
55void DelayManagerTest::SetUp() {
Jakob Ivarsson74158ff2021-09-07 14:24:56 +020056 dm_.SetPacketAudioLength(kFrameSizeMs);
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000057}
58
Ivo Creusen53a31f72019-10-24 15:20:39 +020059absl::optional<int> DelayManagerTest::InsertNextPacket() {
Jakob Ivarsson74158ff2021-09-07 14:24:56 +020060 auto relative_delay = dm_.Update(ts_, kFs);
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000061 ts_ += kTsIncrement;
Ivo Creusen53a31f72019-10-24 15:20:39 +020062 return relative_delay;
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000063}
64
65void DelayManagerTest::IncreaseTime(int inc_ms) {
66 for (int t = 0; t < inc_ms; t += kTimeStepMs) {
henrik.lundinf3933702016-04-28 01:53:52 -070067 tick_timer_.Increment();
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000068 }
69}
Ruslan Burakov1e193fa2019-05-15 14:31:22 +020070
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000071TEST_F(DelayManagerTest, CreateAndDestroy) {
72 // Nothing to do here. The test fixture creates and destroys the DelayManager
73 // object.
74}
75
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000076TEST_F(DelayManagerTest, UpdateNormal) {
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000077 // First packet arrival.
78 InsertNextPacket();
79 // Advance time by one frame size.
80 IncreaseTime(kFrameSizeMs);
81 // Second packet arrival.
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000082 InsertNextPacket();
Jakob Ivarsson74158ff2021-09-07 14:24:56 +020083 EXPECT_EQ(20, dm_.TargetDelayMs());
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000084}
85
86TEST_F(DelayManagerTest, UpdateLongInterArrivalTime) {
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000087 // First packet arrival.
88 InsertNextPacket();
89 // Advance time by two frame size.
90 IncreaseTime(2 * kFrameSizeMs);
91 // Second packet arrival.
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000092 InsertNextPacket();
Jakob Ivarsson74158ff2021-09-07 14:24:56 +020093 EXPECT_EQ(40, dm_.TargetDelayMs());
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000094}
95
Niels Möller18f1adc2018-08-23 08:40:41 +020096TEST_F(DelayManagerTest, MaxDelay) {
Jakob Ivarsson80fb9782020-10-09 13:41:06 +020097 const int kExpectedTarget = 5 * kFrameSizeMs;
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +000098 // First packet arrival.
99 InsertNextPacket();
100 // Second packet arrival.
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200101 IncreaseTime(kExpectedTarget);
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000102 InsertNextPacket();
103
104 // No limit is set.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200105 EXPECT_EQ(kExpectedTarget, dm_.TargetDelayMs());
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000106
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200107 const int kMaxDelayMs = 3 * kFrameSizeMs;
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200108 EXPECT_TRUE(dm_.SetMaximumDelay(kMaxDelayMs));
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200109 IncreaseTime(kFrameSizeMs);
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000110 InsertNextPacket();
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200111 EXPECT_EQ(kMaxDelayMs, dm_.TargetDelayMs());
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000112
113 // Target level at least should be one packet.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200114 EXPECT_FALSE(dm_.SetMaximumDelay(kFrameSizeMs - 1));
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000115}
116
Niels Möller18f1adc2018-08-23 08:40:41 +0200117TEST_F(DelayManagerTest, MinDelay) {
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200118 const int kExpectedTarget = 5 * kFrameSizeMs;
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000119 // First packet arrival.
120 InsertNextPacket();
121 // Second packet arrival.
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200122 IncreaseTime(kExpectedTarget);
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000123 InsertNextPacket();
124
125 // No limit is applied.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200126 EXPECT_EQ(kExpectedTarget, dm_.TargetDelayMs());
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000127
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200128 int kMinDelayMs = 7 * kFrameSizeMs;
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200129 dm_.SetMinimumDelay(kMinDelayMs);
Jakob Ivarsson507f4342019-09-03 13:04:41 +0200130 IncreaseTime(kFrameSizeMs);
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000131 InsertNextPacket();
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200132 EXPECT_EQ(kMinDelayMs, dm_.TargetDelayMs());
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000133}
134
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100135TEST_F(DelayManagerTest, BaseMinimumDelayCheckValidRange) {
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100136 // Base minimum delay should be between [0, 10000] milliseconds.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200137 EXPECT_FALSE(dm_.SetBaseMinimumDelay(-1));
138 EXPECT_FALSE(dm_.SetBaseMinimumDelay(10001));
139 EXPECT_EQ(dm_.GetBaseMinimumDelay(), 0);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100140
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200141 EXPECT_TRUE(dm_.SetBaseMinimumDelay(7999));
142 EXPECT_EQ(dm_.GetBaseMinimumDelay(), 7999);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100143}
144
145TEST_F(DelayManagerTest, BaseMinimumDelayLowerThanMinimumDelay) {
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100146 constexpr int kBaseMinimumDelayMs = 100;
147 constexpr int kMinimumDelayMs = 200;
148
149 // Base minimum delay sets lower bound on minimum. That is why when base
150 // minimum delay is lower than minimum delay we use minimum delay.
151 RTC_DCHECK_LT(kBaseMinimumDelayMs, kMinimumDelayMs);
152
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200153 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMs));
154 EXPECT_TRUE(dm_.SetMinimumDelay(kMinimumDelayMs));
155 EXPECT_EQ(dm_.effective_minimum_delay_ms_for_test(), kMinimumDelayMs);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100156}
157
158TEST_F(DelayManagerTest, BaseMinimumDelayGreaterThanMinimumDelay) {
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100159 constexpr int kBaseMinimumDelayMs = 70;
160 constexpr int kMinimumDelayMs = 30;
161
162 // Base minimum delay sets lower bound on minimum. That is why when base
163 // minimum delay is greater than minimum delay we use base minimum delay.
164 RTC_DCHECK_GT(kBaseMinimumDelayMs, kMinimumDelayMs);
165
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200166 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMs));
167 EXPECT_TRUE(dm_.SetMinimumDelay(kMinimumDelayMs));
168 EXPECT_EQ(dm_.effective_minimum_delay_ms_for_test(), kBaseMinimumDelayMs);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100169}
170
171TEST_F(DelayManagerTest, BaseMinimumDelayGreaterThanBufferSize) {
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100172 constexpr int kBaseMinimumDelayMs = kMaxBufferSizeMs + 1;
173 constexpr int kMinimumDelayMs = 12;
Ruslan Burakovb35bacc2019-02-20 13:41:59 +0100174 constexpr int kMaximumDelayMs = 20;
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100175 constexpr int kMaxBufferSizeMsQ75 = 3 * kMaxBufferSizeMs / 4;
176
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200177 EXPECT_TRUE(dm_.SetMaximumDelay(kMaximumDelayMs));
Ruslan Burakovb35bacc2019-02-20 13:41:59 +0100178
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100179 // Base minimum delay is greater than minimum delay, that is why we clamp
180 // it to current the highest possible value which is maximum delay.
181 RTC_DCHECK_GT(kBaseMinimumDelayMs, kMinimumDelayMs);
182 RTC_DCHECK_GT(kBaseMinimumDelayMs, kMaxBufferSizeMs);
Ruslan Burakovb35bacc2019-02-20 13:41:59 +0100183 RTC_DCHECK_GT(kBaseMinimumDelayMs, kMaximumDelayMs);
184 RTC_DCHECK_LT(kMaximumDelayMs, kMaxBufferSizeMsQ75);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100185
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200186 EXPECT_TRUE(dm_.SetMinimumDelay(kMinimumDelayMs));
187 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMs));
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100188
189 // Unset maximum value.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200190 EXPECT_TRUE(dm_.SetMaximumDelay(0));
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100191
192 // With maximum value unset, the highest possible value now is 75% of
193 // currently possible maximum buffer size.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200194 EXPECT_EQ(dm_.effective_minimum_delay_ms_for_test(), kMaxBufferSizeMsQ75);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100195}
196
197TEST_F(DelayManagerTest, BaseMinimumDelayGreaterThanMaximumDelay) {
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100198 constexpr int kMaximumDelayMs = 400;
199 constexpr int kBaseMinimumDelayMs = kMaximumDelayMs + 1;
200 constexpr int kMinimumDelayMs = 20;
201
202 // Base minimum delay is greater than minimum delay, that is why we clamp
203 // it to current the highest possible value which is kMaximumDelayMs.
204 RTC_DCHECK_GT(kBaseMinimumDelayMs, kMinimumDelayMs);
205 RTC_DCHECK_GT(kBaseMinimumDelayMs, kMaximumDelayMs);
206 RTC_DCHECK_LT(kMaximumDelayMs, kMaxBufferSizeMs);
207
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200208 EXPECT_TRUE(dm_.SetMaximumDelay(kMaximumDelayMs));
209 EXPECT_TRUE(dm_.SetMinimumDelay(kMinimumDelayMs));
210 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMs));
211 EXPECT_EQ(dm_.effective_minimum_delay_ms_for_test(), kMaximumDelayMs);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100212}
213
214TEST_F(DelayManagerTest, BaseMinimumDelayLowerThanMaxSize) {
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100215 constexpr int kMaximumDelayMs = 400;
216 constexpr int kBaseMinimumDelayMs = kMaximumDelayMs - 1;
217 constexpr int kMinimumDelayMs = 20;
218
219 // Base minimum delay is greater than minimum delay, and lower than maximum
220 // delays that is why it is used.
221 RTC_DCHECK_GT(kBaseMinimumDelayMs, kMinimumDelayMs);
222 RTC_DCHECK_LT(kBaseMinimumDelayMs, kMaximumDelayMs);
223
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200224 EXPECT_TRUE(dm_.SetMaximumDelay(kMaximumDelayMs));
225 EXPECT_TRUE(dm_.SetMinimumDelay(kMinimumDelayMs));
226 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMs));
227 EXPECT_EQ(dm_.effective_minimum_delay_ms_for_test(), kBaseMinimumDelayMs);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100228}
229
230TEST_F(DelayManagerTest, MinimumDelayMemorization) {
231 // Check that when we increase base minimum delay to value higher than
232 // minimum delay then minimum delay is still memorized. This allows to
233 // restore effective minimum delay to memorized minimum delay value when we
234 // decrease base minimum delay.
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100235 constexpr int kBaseMinimumDelayMsLow = 10;
236 constexpr int kMinimumDelayMs = 20;
237 constexpr int kBaseMinimumDelayMsHigh = 30;
238
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200239 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMsLow));
240 EXPECT_TRUE(dm_.SetMinimumDelay(kMinimumDelayMs));
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100241 // Minimum delay is used as it is higher than base minimum delay.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200242 EXPECT_EQ(dm_.effective_minimum_delay_ms_for_test(), kMinimumDelayMs);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100243
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200244 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMsHigh));
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100245 // Base minimum delay is used as it is now higher than minimum delay.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200246 EXPECT_EQ(dm_.effective_minimum_delay_ms_for_test(), kBaseMinimumDelayMsHigh);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100247
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200248 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMsLow));
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100249 // Check that minimum delay is memorized and is used again.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200250 EXPECT_EQ(dm_.effective_minimum_delay_ms_for_test(), kMinimumDelayMs);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100251}
252
253TEST_F(DelayManagerTest, BaseMinimumDelay) {
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200254 const int kExpectedTarget = 5 * kFrameSizeMs;
Jakob Ivarssonb1ae5cc2020-10-06 15:37:28 +0000255 // First packet arrival.
256 InsertNextPacket();
257 // Second packet arrival.
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200258 IncreaseTime(kExpectedTarget);
Jakob Ivarssonb1ae5cc2020-10-06 15:37:28 +0000259 InsertNextPacket();
260
261 // No limit is applied.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200262 EXPECT_EQ(kExpectedTarget, dm_.TargetDelayMs());
Jakob Ivarssonff9f6462020-10-07 12:46:42 +0000263
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200264 constexpr int kBaseMinimumDelayMs = 7 * kFrameSizeMs;
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200265 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMs));
266 EXPECT_EQ(dm_.GetBaseMinimumDelay(), kBaseMinimumDelayMs);
Jakob Ivarssonff9f6462020-10-07 12:46:42 +0000267
268 IncreaseTime(kFrameSizeMs);
269 InsertNextPacket();
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200270 EXPECT_EQ(dm_.GetBaseMinimumDelay(), kBaseMinimumDelayMs);
271 EXPECT_EQ(kBaseMinimumDelayMs, dm_.TargetDelayMs());
Jakob Ivarssonff9f6462020-10-07 12:46:42 +0000272}
273
Jakob Ivarsson80fb9782020-10-09 13:41:06 +0200274TEST_F(DelayManagerTest, BaseMinimumDelayAffectsTargetDelay) {
Jakob Ivarssonff9f6462020-10-07 12:46:42 +0000275 const int kExpectedTarget = 5;
276 const int kTimeIncrement = kExpectedTarget * kFrameSizeMs;
Jakob Ivarssonff9f6462020-10-07 12:46:42 +0000277 // First packet arrival.
278 InsertNextPacket();
279 // Second packet arrival.
280 IncreaseTime(kTimeIncrement);
281 InsertNextPacket();
282
283 // No limit is applied.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200284 EXPECT_EQ(kTimeIncrement, dm_.TargetDelayMs());
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100285
286 // Minimum delay is lower than base minimum delay, that is why base minimum
287 // delay is used to calculate target level.
288 constexpr int kMinimumDelayPackets = kExpectedTarget + 1;
289 constexpr int kBaseMinimumDelayPackets = kExpectedTarget + 2;
290
291 constexpr int kMinimumDelayMs = kMinimumDelayPackets * kFrameSizeMs;
292 constexpr int kBaseMinimumDelayMs = kBaseMinimumDelayPackets * kFrameSizeMs;
293
294 EXPECT_TRUE(kMinimumDelayMs < kBaseMinimumDelayMs);
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200295 EXPECT_TRUE(dm_.SetMinimumDelay(kMinimumDelayMs));
296 EXPECT_TRUE(dm_.SetBaseMinimumDelay(kBaseMinimumDelayMs));
297 EXPECT_EQ(dm_.GetBaseMinimumDelay(), kBaseMinimumDelayMs);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100298
Jakob Ivarsson507f4342019-09-03 13:04:41 +0200299 IncreaseTime(kFrameSizeMs);
Ruslan Burakov4a68fb92019-02-13 14:25:39 +0100300 InsertNextPacket();
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200301 EXPECT_EQ(dm_.GetBaseMinimumDelay(), kBaseMinimumDelayMs);
302 EXPECT_EQ(kBaseMinimumDelayMs, dm_.TargetDelayMs());
henrik.lundinb8c55b12017-05-10 07:38:01 -0700303}
304
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +0000305TEST_F(DelayManagerTest, Failures) {
306 // Wrong sample rate.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200307 EXPECT_EQ(absl::nullopt, dm_.Update(0, -1));
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +0000308 // Wrong packet size.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200309 EXPECT_EQ(-1, dm_.SetPacketAudioLength(0));
310 EXPECT_EQ(-1, dm_.SetPacketAudioLength(-1));
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000311
312 // Minimum delay higher than a maximum delay is not accepted.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200313 EXPECT_TRUE(dm_.SetMaximumDelay(20));
314 EXPECT_FALSE(dm_.SetMinimumDelay(40));
turaj@webrtc.orgf1efc572013-08-16 23:44:24 +0000315
316 // Maximum delay less than minimum delay is not accepted.
Jakob Ivarsson74158ff2021-09-07 14:24:56 +0200317 EXPECT_TRUE(dm_.SetMaximumDelay(100));
318 EXPECT_TRUE(dm_.SetMinimumDelay(80));
319 EXPECT_FALSE(dm_.SetMaximumDelay(60));
Jakob Ivarsson74154e62019-08-22 15:00:16 +0200320}
321
Jakob Ivarsson44507082019-03-05 16:59:03 +0100322TEST_F(DelayManagerTest, RelativeArrivalDelayStatistic) {
Ivo Creusen53a31f72019-10-24 15:20:39 +0200323 EXPECT_EQ(absl::nullopt, InsertNextPacket());
Jakob Ivarsson44507082019-03-05 16:59:03 +0100324 IncreaseTime(kFrameSizeMs);
Ivo Creusen53a31f72019-10-24 15:20:39 +0200325 EXPECT_EQ(0, InsertNextPacket());
Jakob Ivarsson44507082019-03-05 16:59:03 +0100326 IncreaseTime(2 * kFrameSizeMs);
Ivo Creusen53a31f72019-10-24 15:20:39 +0200327
328 EXPECT_EQ(20, InsertNextPacket());
Jakob Ivarsson44507082019-03-05 16:59:03 +0100329}
330
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +0000331} // namespace webrtc