Index: webrtc/modules/audio_coding/neteq/neteq_unittest.cc |
diff --git a/webrtc/modules/audio_coding/neteq/neteq_unittest.cc b/webrtc/modules/audio_coding/neteq/neteq_unittest.cc |
index 14a48af6709b43083bd11aeb9a2ec333827ca6a9..4b6e5d7ac8ca257b6e45aa4823564b317c43772e 100644 |
--- a/webrtc/modules/audio_coding/neteq/neteq_unittest.cc |
+++ b/webrtc/modules/audio_coding/neteq/neteq_unittest.cc |
@@ -1315,6 +1315,17 @@ class NetEqDecodingTestWithMutedState : public NetEqDecodingTest { |
EXPECT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0)); |
} |
+ void InsertCngPacket(uint32_t rtp_timestamp) { |
+ uint8_t payload[kPayloadBytes] = {0}; |
+ WebRtcRTPHeader rtp_info; |
+ size_t payload_len; |
+ PopulateCng(0, rtp_timestamp, &rtp_info, payload, &payload_len); |
+ EXPECT_EQ( |
+ NetEq::kOK, |
+ neteq_->InsertPacket( |
+ rtp_info, rtc::ArrayView<const uint8_t>(payload, payload_len), 0)); |
+ } |
+ |
bool GetAudioReturnMuted() { |
bool muted; |
EXPECT_EQ(0, neteq_->GetAudio(&out_frame_, &muted)); |
@@ -1429,6 +1440,39 @@ TEST_F(NetEqDecodingTestWithMutedState, MutedStateOldPacket) { |
EXPECT_EQ(AudioFrame::kNormalSpeech, out_frame_.speech_type_); |
} |
+// Verifies that NetEq doesn't enter muted state when CNG mode is active and the |
+// packet stream is suspended for a long time. |
+TEST_F(NetEqDecodingTestWithMutedState, DoNotMuteExtendedCngWithoutPackets) { |
+ // Insert one CNG packet. |
+ InsertCngPacket(0); |
+ |
+ // Pull 10 seconds of audio (10 ms audio generated per lap). |
+ for (int i = 0; i < 1000; ++i) { |
+ bool muted; |
+ EXPECT_EQ(0, neteq_->GetAudio(&out_frame_, &muted)); |
+ ASSERT_FALSE(muted); |
+ } |
+ EXPECT_EQ(AudioFrame::kCNG, out_frame_.speech_type_); |
+} |
+ |
+// Verifies that NetEq goes back to normal after a long CNG period with the |
+// packet stream suspended. |
+TEST_F(NetEqDecodingTestWithMutedState, RecoverAfterExtendedCngWithoutPackets) { |
+ // Insert one CNG packet. |
+ InsertCngPacket(0); |
+ |
+ // Pull 10 seconds of audio (10 ms audio generated per lap). |
+ for (int i = 0; i < 1000; ++i) { |
+ bool muted; |
+ EXPECT_EQ(0, neteq_->GetAudio(&out_frame_, &muted)); |
+ } |
+ |
+ // Insert new data. Timestamp is corrected for the time elapsed since the last |
+ // packet. Verify that normal operation resumes. |
+ InsertPacket(kSamples * counter_); |
+ GetAudioUntilNormal(); |
+} |
+ |
class NetEqDecodingTestTwoInstances : public NetEqDecodingTest { |
public: |
NetEqDecodingTestTwoInstances() : NetEqDecodingTest() {} |