Add NetEq config flag that enables RTX handling.
When enabled, the delay manager is updated with reordered packets. It also makes the peak detector ignore the reordered packets. Change-Id: I2bdc99764cc76b15e613ed3dc75f83aaf66eee4e Bug: webrtc:10178 Reviewed-on: https://webrtc-review.googlesource.com/c/116481 Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org> Reviewed-by: Minyue Li <minyue@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26187}
This commit is contained in:
committed by
Commit Bot
parent
d8bd75079b
commit
39b934ba2e
@ -49,7 +49,10 @@ class DelayManagerTest : public ::testing::Test {
|
||||
};
|
||||
|
||||
DelayManagerTest::DelayManagerTest()
|
||||
: dm_(nullptr), detector_(&tick_timer_), seq_no_(0x1234), ts_(0x12345678) {}
|
||||
: dm_(nullptr),
|
||||
detector_(&tick_timer_, false),
|
||||
seq_no_(0x1234),
|
||||
ts_(0x12345678) {}
|
||||
|
||||
void DelayManagerTest::SetUp() {
|
||||
RecreateDelayManager();
|
||||
@ -126,7 +129,7 @@ TEST_F(DelayManagerTest, UpdateNormal) {
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to 1 packet, and (base) target level equal to 1 as well.
|
||||
// Return false to indicate no peaks found.
|
||||
EXPECT_CALL(detector_, Update(1, 1)).WillOnce(Return(false));
|
||||
EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(false));
|
||||
InsertNextPacket();
|
||||
EXPECT_EQ(1 << 8, dm_->TargetLevel()); // In Q8.
|
||||
EXPECT_EQ(1, dm_->base_target_level());
|
||||
@ -149,7 +152,7 @@ TEST_F(DelayManagerTest, UpdateLongInterArrivalTime) {
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to 1 packet, and (base) target level equal to 1 as well.
|
||||
// Return false to indicate no peaks found.
|
||||
EXPECT_CALL(detector_, Update(2, 2)).WillOnce(Return(false));
|
||||
EXPECT_CALL(detector_, Update(2, false, 2)).WillOnce(Return(false));
|
||||
InsertNextPacket();
|
||||
EXPECT_EQ(2 << 8, dm_->TargetLevel()); // In Q8.
|
||||
EXPECT_EQ(2, dm_->base_target_level());
|
||||
@ -172,7 +175,7 @@ TEST_F(DelayManagerTest, UpdatePeakFound) {
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to 1 packet, and (base) target level equal to 1 as well.
|
||||
// Return true to indicate that peaks are found. Let the peak height be 5.
|
||||
EXPECT_CALL(detector_, Update(1, 1)).WillOnce(Return(true));
|
||||
EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(true));
|
||||
EXPECT_CALL(detector_, MaxPeakHeight()).WillOnce(Return(5));
|
||||
InsertNextPacket();
|
||||
EXPECT_EQ(5 << 8, dm_->TargetLevel());
|
||||
@ -194,7 +197,7 @@ TEST_F(DelayManagerTest, TargetDelay) {
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to 1 packet, and (base) target level equal to 1 as well.
|
||||
// Return false to indicate no peaks found.
|
||||
EXPECT_CALL(detector_, Update(1, 1)).WillOnce(Return(false));
|
||||
EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(false));
|
||||
InsertNextPacket();
|
||||
const int kExpectedTarget = 1;
|
||||
EXPECT_EQ(kExpectedTarget << 8, dm_->TargetLevel()); // In Q8.
|
||||
@ -216,7 +219,7 @@ TEST_F(DelayManagerTest, MaxDelay) {
|
||||
// Second packet arrival.
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to |kExpectedTarget| packet. Return true to indicate peaks found.
|
||||
EXPECT_CALL(detector_, Update(kExpectedTarget, _))
|
||||
EXPECT_CALL(detector_, Update(kExpectedTarget, false, _))
|
||||
.WillRepeatedly(Return(true));
|
||||
EXPECT_CALL(detector_, MaxPeakHeight())
|
||||
.WillRepeatedly(Return(kExpectedTarget));
|
||||
@ -246,7 +249,7 @@ TEST_F(DelayManagerTest, MinDelay) {
|
||||
// Second packet arrival.
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to |kExpectedTarget| packet. Return true to indicate peaks found.
|
||||
EXPECT_CALL(detector_, Update(kExpectedTarget, _))
|
||||
EXPECT_CALL(detector_, Update(kExpectedTarget, false, _))
|
||||
.WillRepeatedly(Return(true));
|
||||
EXPECT_CALL(detector_, MaxPeakHeight())
|
||||
.WillRepeatedly(Return(kExpectedTarget));
|
||||
@ -264,6 +267,15 @@ TEST_F(DelayManagerTest, MinDelay) {
|
||||
EXPECT_EQ(kMinDelayPackets << 8, dm_->TargetLevel());
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, UpdateReorderedPacket) {
|
||||
SetPacketAudioLength(kFrameSizeMs);
|
||||
InsertNextPacket();
|
||||
|
||||
// Insert packet that was sent before the previous packet.
|
||||
EXPECT_CALL(detector_, Update(_, true, _));
|
||||
EXPECT_EQ(0, dm_->Update(seq_no_ - 1, ts_ - kFrameSizeMs, kFs));
|
||||
}
|
||||
|
||||
// Tests that skipped sequence numbers (simulating empty packets) are handled
|
||||
// correctly.
|
||||
TEST_F(DelayManagerTest, EmptyPacketsReported) {
|
||||
@ -285,7 +297,7 @@ TEST_F(DelayManagerTest, EmptyPacketsReported) {
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to 1 packet, and (base) target level equal to 1 as well.
|
||||
// Return false to indicate no peaks found.
|
||||
EXPECT_CALL(detector_, Update(1, 1)).WillOnce(Return(false));
|
||||
EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(false));
|
||||
InsertNextPacket();
|
||||
|
||||
EXPECT_EQ(1 << 8, dm_->TargetLevel()); // In Q8.
|
||||
@ -309,7 +321,7 @@ TEST_F(DelayManagerTest, EmptyPacketsNotReported) {
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to 1 packet, and (base) target level equal to 1 as well.
|
||||
// Return false to indicate no peaks found.
|
||||
EXPECT_CALL(detector_, Update(10, 10)).WillOnce(Return(false));
|
||||
EXPECT_CALL(detector_, Update(10, false, 10)).WillOnce(Return(false));
|
||||
InsertNextPacket();
|
||||
|
||||
// Note 10 times higher target value.
|
||||
@ -348,7 +360,7 @@ TEST_F(DelayManagerTest, TargetDelayGreaterThanOne) {
|
||||
// Second packet arrival.
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to 1 packet.
|
||||
EXPECT_CALL(detector_, Update(1, 1)).WillOnce(Return(false));
|
||||
EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(false));
|
||||
InsertNextPacket();
|
||||
constexpr int kExpectedTarget = 1;
|
||||
EXPECT_EQ(kExpectedTarget << 8, dm_->TargetLevel()); // In Q8.
|
||||
|
||||
Reference in New Issue
Block a user