Introduce injectable NetEqController interface.
This interface is implemented by the DecisionLogic class, which now contains the DelayManager and DelayPeakDetector.
Bug: webrtc:11005
Change-Id: I4fb69fa359e60831cf153e41f101d5b623749380
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/155176
Reviewed-by: Minyue Li <minyue@webrtc.org>
Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org>
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29613}
diff --git a/modules/audio_coding/neteq/delay_manager_unittest.cc b/modules/audio_coding/neteq/delay_manager_unittest.cc
index c691fd5..7abc3fb 100644
--- a/modules/audio_coding/neteq/delay_manager_unittest.cc
+++ b/modules/audio_coding/neteq/delay_manager_unittest.cc
@@ -50,7 +50,7 @@
virtual void TearDown();
void RecreateDelayManager();
void SetPacketAudioLength(int lengt_ms);
- void InsertNextPacket();
+ absl::optional<int> InsertNextPacket();
void IncreaseTime(int inc_ms);
std::unique_ptr<DelayManager> dm_;
@@ -84,11 +84,10 @@
dm_ = std::make_unique<DelayManager>(
kMaxNumberOfPackets, kMinDelayMs, kDefaultHistogramQuantile,
histogram_mode_, enable_rtx_handling_, &detector_, &tick_timer_,
- &stats_, std::move(histogram));
+ std::move(histogram));
} else {
dm_ = DelayManager::Create(kMaxNumberOfPackets, kMinDelayMs,
- enable_rtx_handling_, &detector_, &tick_timer_,
- &stats_);
+ enable_rtx_handling_, &detector_, &tick_timer_);
}
}
@@ -97,10 +96,11 @@
dm_->SetPacketAudioLength(lengt_ms);
}
-void DelayManagerTest::InsertNextPacket() {
- EXPECT_EQ(0, dm_->Update(seq_no_, ts_, kFs));
+absl::optional<int> DelayManagerTest::InsertNextPacket() {
+ auto relative_delay = dm_->Update(seq_no_, ts_, kFs);
seq_no_ += 1;
ts_ += kTsIncrement;
+ return relative_delay;
}
void DelayManagerTest::IncreaseTime(int inc_ms) {
@@ -416,11 +416,11 @@
// Insert reordered packet.
EXPECT_CALL(*mock_histogram_, Add(2));
- EXPECT_EQ(0, dm_->Update(seq_no_ - 3, ts_ - 3 * kFrameSizeMs, kFs));
+ dm_->Update(seq_no_ - 3, ts_ - 3 * kFrameSizeMs, kFs);
// Insert another reordered packet.
EXPECT_CALL(*mock_histogram_, Add(1));
- EXPECT_EQ(0, dm_->Update(seq_no_ - 2, ts_ - 2 * kFrameSizeMs, kFs));
+ dm_->Update(seq_no_ - 2, ts_ - 2 * kFrameSizeMs, kFs);
// Insert the next packet in order and verify that the inter-arrival time is
// estimated correctly.
@@ -475,7 +475,7 @@
TEST_F(DelayManagerTest, Failures) {
// Wrong sample rate.
- EXPECT_EQ(-1, dm_->Update(0, 0, -1));
+ EXPECT_EQ(absl::nullopt, dm_->Update(0, 0, -1));
// Wrong packet size.
EXPECT_EQ(-1, dm_->SetPacketAudioLength(0));
EXPECT_EQ(-1, dm_->SetPacketAudioLength(-1));
@@ -550,14 +550,14 @@
IncreaseTime(2 * kFrameSizeMs);
EXPECT_CALL(*mock_histogram_, Add(1)); // 20ms delayed.
- EXPECT_EQ(0, dm_->Update(seq_no_, ts_, kFs));
+ dm_->Update(seq_no_, ts_, kFs);
IncreaseTime(2 * kFrameSizeMs);
EXPECT_CALL(*mock_histogram_, Add(2)); // 40ms delayed.
- EXPECT_EQ(0, dm_->Update(seq_no_ + 1, ts_ + kTsIncrement, kFs));
+ dm_->Update(seq_no_ + 1, ts_ + kTsIncrement, kFs);
EXPECT_CALL(*mock_histogram_, Add(1)); // Reordered, 20ms delayed.
- EXPECT_EQ(0, dm_->Update(seq_no_, ts_, kFs));
+ dm_->Update(seq_no_, ts_, kFs);
}
TEST_F(DelayManagerTest, MaxDelayHistory) {
@@ -579,20 +579,17 @@
IncreaseTime(kMaxHistoryMs + kFrameSizeMs);
ts_ += kFs * kMaxHistoryMs / 1000;
EXPECT_CALL(*mock_histogram_, Add(0)); // Not delayed.
- EXPECT_EQ(0, dm_->Update(seq_no_, ts_, kFs));
+ dm_->Update(seq_no_, ts_, kFs);
}
TEST_F(DelayManagerTest, RelativeArrivalDelayStatistic) {
SetPacketAudioLength(kFrameSizeMs);
- InsertNextPacket();
-
+ EXPECT_EQ(absl::nullopt, InsertNextPacket());
IncreaseTime(kFrameSizeMs);
- EXPECT_CALL(stats_, RelativePacketArrivalDelay(0));
- InsertNextPacket();
-
+ EXPECT_EQ(0, InsertNextPacket());
IncreaseTime(2 * kFrameSizeMs);
- EXPECT_CALL(stats_, RelativePacketArrivalDelay(20));
- InsertNextPacket();
+
+ EXPECT_EQ(20, InsertNextPacket());
}
TEST_F(DelayManagerTest, DecelerationTargetLevelOffset) {