Index: webrtc/modules/audio_coding/neteq/delay_manager_unittest.cc |
diff --git a/webrtc/modules/audio_coding/neteq/delay_manager_unittest.cc b/webrtc/modules/audio_coding/neteq/delay_manager_unittest.cc |
index 84ceb8871d7c6a5ba3595341e058b6c357e8f9ae..a6ee58d8e154f75c14dae711571a9ca46d9c9f8e 100644 |
--- a/webrtc/modules/audio_coding/neteq/delay_manager_unittest.cc |
+++ b/webrtc/modules/audio_coding/neteq/delay_manager_unittest.cc |
@@ -266,6 +266,58 @@ TEST_F(DelayManagerTest, MinAndRequiredDelay) { |
EXPECT_EQ(kMinDelayPackets << 8, dm_->TargetLevel()); |
} |
+// Tests that skipped sequence numbers (simulating empty packets) are handled |
+// correctly. |
+TEST_F(DelayManagerTest, EmptyPacketsReported) { |
+ SetPacketAudioLength(kFrameSizeMs); |
+ // First packet arrival. |
+ InsertNextPacket(); |
+ |
+ // Advance time by one frame size. |
+ IncreaseTime(kFrameSizeMs); |
+ |
+ // Advance the sequence number by 5, simulating that 5 empty packets were |
+ // received, but never inserted. |
+ seq_no_ += 10; |
+ for (int j = 0; j < 10; ++j) { |
+ dm_->RegisterEmptyPacket(); |
+ } |
+ |
+ // Second packet arrival. |
+ // 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)); |
+ InsertNextPacket(); |
+ |
+ EXPECT_EQ(1 << 8, dm_->TargetLevel()); // In Q8. |
+} |
+ |
+// Same as above, but do not call RegisterEmptyPacket. Observe the target level |
+// increase dramatically. |
+TEST_F(DelayManagerTest, EmptyPacketsNotReported) { |
+ SetPacketAudioLength(kFrameSizeMs); |
+ // First packet arrival. |
+ InsertNextPacket(); |
+ |
+ // Advance time by one frame size. |
+ IncreaseTime(kFrameSizeMs); |
+ |
+ // Advance the sequence number by 5, simulating that 5 empty packets were |
+ // received, but never inserted. |
+ seq_no_ += 10; |
+ |
+ // Second packet arrival. |
+ // 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)); |
+ InsertNextPacket(); |
+ |
+ // Note 10 times higher target value. |
+ EXPECT_EQ(10 * 1 << 8, dm_->TargetLevel()); // In Q8. |
+} |
+ |
TEST_F(DelayManagerTest, Failures) { |
// Wrong sample rate. |
EXPECT_EQ(-1, dm_->Update(0, 0, -1)); |