| Index: webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc
 | 
| diff --git a/webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc b/webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc
 | 
| index 8b47adb9c549376b47abcf229ac70db17e33b524..43db87f4fa7e78ce7cb543cfdbda0dd7565c8f04 100644
 | 
| --- a/webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc
 | 
| +++ b/webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc
 | 
| @@ -441,7 +441,9 @@ TEST_F(NetEqImplTest, VerifyTimestampPropagation) {
 | 
|    // Pull audio once.
 | 
|    const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
 | 
|    AudioFrame output;
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
| +  ASSERT_FALSE(muted);
 | 
|    ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
 | 
| @@ -518,7 +520,8 @@ TEST_F(NetEqImplTest, ReorderedPacket) {
 | 
|    // Pull audio once.
 | 
|    const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
 | 
|    AudioFrame output;
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
 | 
| @@ -546,7 +549,7 @@ TEST_F(NetEqImplTest, ReorderedPacket) {
 | 
|                        Return(kPayloadLengthSamples)));
 | 
|  
 | 
|    // Pull audio once.
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
 | 
| @@ -586,7 +589,8 @@ TEST_F(NetEqImplTest, FirstPacketUnknown) {
 | 
|    // Pull audio once.
 | 
|    const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
 | 
|    AudioFrame output;
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    ASSERT_LE(output.samples_per_channel_, kMaxOutputSize);
 | 
|    EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
| @@ -607,7 +611,7 @@ TEST_F(NetEqImplTest, FirstPacketUnknown) {
 | 
|  
 | 
|    // Pull audio repeatedly and make sure we get normal output, that is not PLC.
 | 
|    for (size_t i = 0; i < 3; ++i) {
 | 
| -    EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +    EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|      ASSERT_LE(output.samples_per_channel_, kMaxOutputSize);
 | 
|      EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|      EXPECT_EQ(1u, output.num_channels_);
 | 
| @@ -711,7 +715,8 @@ TEST_F(NetEqImplTest, CodecInternalCng) {
 | 
|        50 * kSampleRateKhz, 10 * kSampleRateKhz
 | 
|    };
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    rtc::Optional<uint32_t> last_timestamp = neteq_->GetPlayoutTimestamp();
 | 
|    ASSERT_TRUE(last_timestamp);
 | 
|  
 | 
| @@ -733,7 +738,7 @@ TEST_F(NetEqImplTest, CodecInternalCng) {
 | 
|      ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|      EXPECT_EQ(1u, output.num_channels_);
 | 
|      EXPECT_EQ(expected_type[i - 1], output.speech_type_);
 | 
| -    EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +    EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|      SCOPED_TRACE("");
 | 
|      verify_timestamp(neteq_->GetPlayoutTimestamp(), i);
 | 
|    }
 | 
| @@ -749,7 +754,7 @@ TEST_F(NetEqImplTest, CodecInternalCng) {
 | 
|      ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|      EXPECT_EQ(1u, output.num_channels_);
 | 
|      EXPECT_EQ(expected_type[i - 1], output.speech_type_);
 | 
| -    EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +    EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|      SCOPED_TRACE("");
 | 
|      verify_timestamp(neteq_->GetPlayoutTimestamp(), i);
 | 
|    }
 | 
| @@ -841,9 +846,10 @@ TEST_F(NetEqImplTest, UnsupportedDecoder) {
 | 
|              neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
 | 
|  
 | 
|    AudioFrame output;
 | 
| +  bool muted;
 | 
|    // First call to GetAudio will try to decode the "faulty" packet.
 | 
|    // Expect kFail return value...
 | 
| -  EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output));
 | 
| +  EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &muted));
 | 
|    // ... and kOtherDecoderError error code.
 | 
|    EXPECT_EQ(NetEq::kOtherDecoderError, neteq_->LastError());
 | 
|    // Output size and number of channels should be correct.
 | 
| @@ -853,7 +859,7 @@ TEST_F(NetEqImplTest, UnsupportedDecoder) {
 | 
|  
 | 
|    // Second call to GetAudio will decode the packet that is ok. No errors are
 | 
|    // expected.
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels);
 | 
|    EXPECT_EQ(kChannels, output.num_channels_);
 | 
|  }
 | 
| @@ -946,7 +952,8 @@ TEST_F(NetEqImplTest, DecodedPayloadTooShort) {
 | 
|    // Pull audio once.
 | 
|    const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
 | 
|    AudioFrame output;
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
 | 
| @@ -1038,13 +1045,14 @@ TEST_F(NetEqImplTest, DecodingError) {
 | 
|    // Pull audio.
 | 
|    const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
 | 
|    AudioFrame output;
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
 | 
|  
 | 
|    // Pull audio again. Decoder fails.
 | 
| -  EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output));
 | 
| +  EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError());
 | 
|    EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError());
 | 
|    EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
| @@ -1053,13 +1061,13 @@ TEST_F(NetEqImplTest, DecodingError) {
 | 
|    // returned.
 | 
|  
 | 
|    // Pull audio again, should continue an expansion.
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kPLC, output.speech_type_);
 | 
|  
 | 
|    // Pull audio again, should behave normal.
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
 | 
| @@ -1147,13 +1155,14 @@ TEST_F(NetEqImplTest, DecodingErrorDuringInternalCng) {
 | 
|    // Pull audio.
 | 
|    const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
 | 
|    AudioFrame output;
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kCNG, output.speech_type_);
 | 
|  
 | 
|    // Pull audio again. Decoder fails.
 | 
| -  EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output));
 | 
| +  EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError());
 | 
|    EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError());
 | 
|    EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
| @@ -1162,7 +1171,7 @@ TEST_F(NetEqImplTest, DecodingErrorDuringInternalCng) {
 | 
|    // returned.
 | 
|  
 | 
|    // Pull audio again, should resume codec CNG.
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
 | 
|    EXPECT_EQ(1u, output.num_channels_);
 | 
|    EXPECT_EQ(AudioFrame::kCNG, output.speech_type_);
 | 
| @@ -1185,7 +1194,8 @@ TEST_F(NetEqImplTest, TickTimerIncrement) {
 | 
|    ASSERT_TRUE(tick_timer_);
 | 
|    EXPECT_EQ(0u, tick_timer_->ticks());
 | 
|    AudioFrame output;
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
 | 
|    EXPECT_EQ(1u, tick_timer_->ticks());
 | 
|  }
 | 
|  
 | 
| @@ -1240,8 +1250,10 @@ class NetEqImplTest120ms : public NetEqImplTest {
 | 
|    uint32_t first_timestamp() const { return 10u; }
 | 
|  
 | 
|    void GetFirstPacket() {
 | 
| +    bool muted;
 | 
|      for (int i = 0; i < 12; i++) {
 | 
| -      EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +      EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
| +      EXPECT_FALSE(muted);
 | 
|      }
 | 
|    }
 | 
|  
 | 
| @@ -1280,7 +1292,8 @@ TEST_F(NetEqImplTest120ms, AudioRepetition) {
 | 
|    InsertPacket(first_timestamp());
 | 
|    GetFirstPacket();
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|    EXPECT_EQ(kAudioRepetition, neteq_->last_operation_for_test());
 | 
|  }
 | 
|  
 | 
| @@ -1292,7 +1305,8 @@ TEST_F(NetEqImplTest120ms, AlternativePlc) {
 | 
|    InsertPacket(first_timestamp());
 | 
|    GetFirstPacket();
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|    EXPECT_EQ(kAlternativePlc, neteq_->last_operation_for_test());
 | 
|  }
 | 
|  
 | 
| @@ -1303,7 +1317,8 @@ TEST_F(NetEqImplTest120ms, CodecInternalCng) {
 | 
|    InsertPacket(first_timestamp());
 | 
|    GetFirstPacket();
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|    EXPECT_EQ(kCodecInternalCng, neteq_->last_operation_for_test());
 | 
|  }
 | 
|  
 | 
| @@ -1324,14 +1339,15 @@ TEST_F(NetEqImplTest120ms, Merge) {
 | 
|    InsertPacket(first_timestamp());
 | 
|  
 | 
|    GetFirstPacket();
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|  
 | 
|    InsertPacket(first_timestamp() + 2 * timestamp_diff_between_packets());
 | 
|  
 | 
|    // Delay manager reports a target level which should cause a Merge.
 | 
|    EXPECT_CALL(*mock_delay_manager_, TargetLevel()).WillOnce(Return(-10));
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|    EXPECT_EQ(kMerge, neteq_->last_operation_for_test());
 | 
|  }
 | 
|  
 | 
| @@ -1342,7 +1358,8 @@ TEST_F(NetEqImplTest120ms, Expand) {
 | 
|    InsertPacket(first_timestamp());
 | 
|    GetFirstPacket();
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|    EXPECT_EQ(kExpand, neteq_->last_operation_for_test());
 | 
|  }
 | 
|  
 | 
| @@ -1359,7 +1376,8 @@ TEST_F(NetEqImplTest120ms, FastAccelerate) {
 | 
|        .Times(1)
 | 
|        .WillOnce(DoAll(SetArgPointee<0>(0), SetArgPointee<1>(0)));
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|    EXPECT_EQ(kFastAccelerate, neteq_->last_operation_for_test());
 | 
|  }
 | 
|  
 | 
| @@ -1377,7 +1395,8 @@ TEST_F(NetEqImplTest120ms, PreemptiveExpand) {
 | 
|        .Times(1)
 | 
|        .WillOnce(DoAll(SetArgPointee<0>(100), SetArgPointee<1>(100)));
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|    EXPECT_EQ(kPreemptiveExpand, neteq_->last_operation_for_test());
 | 
|  }
 | 
|  
 | 
| @@ -1395,7 +1414,8 @@ TEST_F(NetEqImplTest120ms, Accelerate) {
 | 
|        .Times(1)
 | 
|        .WillOnce(DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2)));
 | 
|  
 | 
| -  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_));
 | 
| +  bool muted;
 | 
| +  EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
 | 
|    EXPECT_EQ(kAccelerate, neteq_->last_operation_for_test());
 | 
|  }
 | 
|  
 | 
| 
 |