| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 ASSERT_EQ(true, | 148 ASSERT_EQ(true, |
| 149 neteq->RegisterPayloadType(98, SdpAudioFormat("cn", 16000, 1))); | 149 neteq->RegisterPayloadType(98, SdpAudioFormat("cn", 16000, 1))); |
| 150 } | 150 } |
| 151 } // namespace | 151 } // namespace |
| 152 | 152 |
| 153 class ResultSink { | 153 class ResultSink { |
| 154 public: | 154 public: |
| 155 explicit ResultSink(const std::string& output_file); | 155 explicit ResultSink(const std::string& output_file); |
| 156 ~ResultSink(); | 156 ~ResultSink(); |
| 157 | 157 |
| 158 template<typename T, size_t n> void AddResult( | 158 template<typename T> void AddResult(const T* test_results, size_t length); |
| 159 const T (&test_results)[n], | |
| 160 size_t length); | |
| 161 | 159 |
| 162 void AddResult(const NetEqNetworkStatistics& stats); | 160 void AddResult(const NetEqNetworkStatistics& stats); |
| 163 void AddResult(const RtcpStatistics& stats); | 161 void AddResult(const RtcpStatistics& stats); |
| 164 | 162 |
| 165 void VerifyChecksum(const std::string& ref_check_sum); | 163 void VerifyChecksum(const std::string& ref_check_sum); |
| 166 | 164 |
| 167 private: | 165 private: |
| 168 FILE* output_fp_; | 166 FILE* output_fp_; |
| 169 std::unique_ptr<rtc::MessageDigest> digest_; | 167 std::unique_ptr<rtc::MessageDigest> digest_; |
| 170 }; | 168 }; |
| 171 | 169 |
| 172 ResultSink::ResultSink(const std::string &output_file) | 170 ResultSink::ResultSink(const std::string &output_file) |
| 173 : output_fp_(nullptr), | 171 : output_fp_(nullptr), |
| 174 digest_(new rtc::Sha1Digest()) { | 172 digest_(new rtc::Sha1Digest()) { |
| 175 if (!output_file.empty()) { | 173 if (!output_file.empty()) { |
| 176 output_fp_ = fopen(output_file.c_str(), "wb"); | 174 output_fp_ = fopen(output_file.c_str(), "wb"); |
| 177 EXPECT_TRUE(output_fp_ != NULL); | 175 EXPECT_TRUE(output_fp_ != NULL); |
| 178 } | 176 } |
| 179 } | 177 } |
| 180 | 178 |
| 181 ResultSink::~ResultSink() { | 179 ResultSink::~ResultSink() { |
| 182 if (output_fp_) | 180 if (output_fp_) |
| 183 fclose(output_fp_); | 181 fclose(output_fp_); |
| 184 } | 182 } |
| 185 | 183 |
| 186 template<typename T, size_t n> | 184 template<typename T> |
| 187 void ResultSink::AddResult(const T (&test_results)[n], size_t length) { | 185 void ResultSink::AddResult(const T* test_results, size_t length) { |
| 188 if (output_fp_) { | 186 if (output_fp_) { |
| 189 ASSERT_EQ(length, fwrite(&test_results, sizeof(T), length, output_fp_)); | 187 ASSERT_EQ(length, fwrite(test_results, sizeof(T), length, output_fp_)); |
| 190 } | 188 } |
| 191 digest_->Update(&test_results, sizeof(T) * length); | 189 digest_->Update(test_results, sizeof(T) * length); |
| 192 } | 190 } |
| 193 | 191 |
| 194 void ResultSink::AddResult(const NetEqNetworkStatistics& stats_raw) { | 192 void ResultSink::AddResult(const NetEqNetworkStatistics& stats_raw) { |
| 195 #ifdef WEBRTC_NETEQ_UNITTEST_BITEXACT | 193 #ifdef WEBRTC_NETEQ_UNITTEST_BITEXACT |
| 196 neteq_unittest::NetEqNetworkStatistics stats; | 194 neteq_unittest::NetEqNetworkStatistics stats; |
| 197 Convert(stats_raw, &stats); | 195 Convert(stats_raw, &stats); |
| 198 | 196 |
| 199 ProtoString stats_string; | 197 ProtoString stats_string; |
| 200 ASSERT_TRUE(stats.SerializeToString(&stats_string)); | 198 ASSERT_TRUE(stats.SerializeToString(&stats_string)); |
| 201 AddMessage(output_fp_, digest_.get(), stats_string); | 199 AddMessage(output_fp_, digest_.get(), stats_string); |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 ResultSink rtcp_stats(rtcp_out_file); | 367 ResultSink rtcp_stats(rtcp_out_file); |
| 370 | 368 |
| 371 packet_ = rtp_source_->NextPacket(); | 369 packet_ = rtp_source_->NextPacket(); |
| 372 int i = 0; | 370 int i = 0; |
| 373 while (packet_) { | 371 while (packet_) { |
| 374 std::ostringstream ss; | 372 std::ostringstream ss; |
| 375 ss << "Lap number " << i++ << " in DecodeAndCompare while loop"; | 373 ss << "Lap number " << i++ << " in DecodeAndCompare while loop"; |
| 376 SCOPED_TRACE(ss.str()); // Print out the parameter values on failure. | 374 SCOPED_TRACE(ss.str()); // Print out the parameter values on failure. |
| 377 ASSERT_NO_FATAL_FAILURE(Process()); | 375 ASSERT_NO_FATAL_FAILURE(Process()); |
| 378 ASSERT_NO_FATAL_FAILURE(output.AddResult( | 376 ASSERT_NO_FATAL_FAILURE(output.AddResult( |
| 379 out_frame_.data_, out_frame_.samples_per_channel_)); | 377 out_frame_.data(), out_frame_.samples_per_channel_)); |
| 380 | 378 |
| 381 // Query the network statistics API once per second | 379 // Query the network statistics API once per second |
| 382 if (sim_clock_ % 1000 == 0) { | 380 if (sim_clock_ % 1000 == 0) { |
| 383 // Process NetworkStatistics. | 381 // Process NetworkStatistics. |
| 384 NetEqNetworkStatistics current_network_stats; | 382 NetEqNetworkStatistics current_network_stats; |
| 385 ASSERT_EQ(0, neteq_->NetworkStatistics(¤t_network_stats)); | 383 ASSERT_EQ(0, neteq_->NetworkStatistics(¤t_network_stats)); |
| 386 ASSERT_NO_FATAL_FAILURE(network_stats.AddResult(current_network_stats)); | 384 ASSERT_NO_FATAL_FAILURE(network_stats.AddResult(current_network_stats)); |
| 387 | 385 |
| 388 // Compare with CurrentDelay, which should be identical. | 386 // Compare with CurrentDelay, which should be identical. |
| 389 EXPECT_EQ(current_network_stats.current_buffer_size_ms, | 387 EXPECT_EQ(current_network_stats.current_buffer_size_ms, |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 | 841 |
| 844 TEST_F(NetEqDecodingTest, MAYBE_DecoderError) { | 842 TEST_F(NetEqDecodingTest, MAYBE_DecoderError) { |
| 845 const size_t kPayloadBytes = 100; | 843 const size_t kPayloadBytes = 100; |
| 846 uint8_t payload[kPayloadBytes] = {0}; | 844 uint8_t payload[kPayloadBytes] = {0}; |
| 847 RTPHeader rtp_info; | 845 RTPHeader rtp_info; |
| 848 PopulateRtpInfo(0, 0, &rtp_info); | 846 PopulateRtpInfo(0, 0, &rtp_info); |
| 849 rtp_info.payloadType = 103; // iSAC, but the payload is invalid. | 847 rtp_info.payloadType = 103; // iSAC, but the payload is invalid. |
| 850 EXPECT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0)); | 848 EXPECT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0)); |
| 851 // Set all of |out_data_| to 1, and verify that it was set to 0 by the call | 849 // Set all of |out_data_| to 1, and verify that it was set to 0 by the call |
| 852 // to GetAudio. | 850 // to GetAudio. |
| 851 int16_t* out_frame_data = out_frame_.mutable_data(); |
| 853 for (size_t i = 0; i < AudioFrame::kMaxDataSizeSamples; ++i) { | 852 for (size_t i = 0; i < AudioFrame::kMaxDataSizeSamples; ++i) { |
| 854 out_frame_.data_[i] = 1; | 853 out_frame_data[i] = 1; |
| 855 } | 854 } |
| 856 bool muted; | 855 bool muted; |
| 857 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&out_frame_, &muted)); | 856 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&out_frame_, &muted)); |
| 858 ASSERT_FALSE(muted); | 857 ASSERT_FALSE(muted); |
| 859 // Verify that there is a decoder error to check. | 858 // Verify that there is a decoder error to check. |
| 860 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError()); | 859 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError()); |
| 861 | 860 |
| 862 enum NetEqDecoderError { | 861 enum NetEqDecoderError { |
| 863 ISAC_LENGTH_MISMATCH = 6730, | 862 ISAC_LENGTH_MISMATCH = 6730, |
| 864 ISAC_RANGE_ERROR_DECODE_FRAME_LENGTH = 6640 | 863 ISAC_RANGE_ERROR_DECODE_FRAME_LENGTH = 6640 |
| 865 }; | 864 }; |
| 866 #if defined(WEBRTC_CODEC_ISAC) | 865 #if defined(WEBRTC_CODEC_ISAC) |
| 867 EXPECT_EQ(ISAC_LENGTH_MISMATCH, neteq_->LastDecoderError()); | 866 EXPECT_EQ(ISAC_LENGTH_MISMATCH, neteq_->LastDecoderError()); |
| 868 #elif defined(WEBRTC_CODEC_ISACFX) | 867 #elif defined(WEBRTC_CODEC_ISACFX) |
| 869 EXPECT_EQ(ISAC_RANGE_ERROR_DECODE_FRAME_LENGTH, neteq_->LastDecoderError()); | 868 EXPECT_EQ(ISAC_RANGE_ERROR_DECODE_FRAME_LENGTH, neteq_->LastDecoderError()); |
| 870 #endif | 869 #endif |
| 871 // Verify that the first 160 samples are set to 0, and that the remaining | 870 // Verify that the first 160 samples are set to 0. |
| 872 // samples are left unmodified. | |
| 873 static const int kExpectedOutputLength = 160; // 10 ms at 16 kHz sample rate. | 871 static const int kExpectedOutputLength = 160; // 10 ms at 16 kHz sample rate. |
| 872 const int16_t* const_out_frame_data = out_frame_.data(); |
| 874 for (int i = 0; i < kExpectedOutputLength; ++i) { | 873 for (int i = 0; i < kExpectedOutputLength; ++i) { |
| 875 std::ostringstream ss; | 874 std::ostringstream ss; |
| 876 ss << "i = " << i; | 875 ss << "i = " << i; |
| 877 SCOPED_TRACE(ss.str()); // Print out the parameter values on failure. | 876 SCOPED_TRACE(ss.str()); // Print out the parameter values on failure. |
| 878 EXPECT_EQ(0, out_frame_.data_[i]); | 877 EXPECT_EQ(0, const_out_frame_data[i]); |
| 879 } | |
| 880 for (size_t i = kExpectedOutputLength; i < AudioFrame::kMaxDataSizeSamples; | |
| 881 ++i) { | |
| 882 std::ostringstream ss; | |
| 883 ss << "i = " << i; | |
| 884 SCOPED_TRACE(ss.str()); // Print out the parameter values on failure. | |
| 885 EXPECT_EQ(1, out_frame_.data_[i]); | |
| 886 } | 878 } |
| 887 } | 879 } |
| 888 | 880 |
| 889 TEST_F(NetEqDecodingTest, GetAudioBeforeInsertPacket) { | 881 TEST_F(NetEqDecodingTest, GetAudioBeforeInsertPacket) { |
| 890 // Set all of |out_data_| to 1, and verify that it was set to 0 by the call | 882 // Set all of |out_data_| to 1, and verify that it was set to 0 by the call |
| 891 // to GetAudio. | 883 // to GetAudio. |
| 884 int16_t* out_frame_data = out_frame_.mutable_data(); |
| 892 for (size_t i = 0; i < AudioFrame::kMaxDataSizeSamples; ++i) { | 885 for (size_t i = 0; i < AudioFrame::kMaxDataSizeSamples; ++i) { |
| 893 out_frame_.data_[i] = 1; | 886 out_frame_data[i] = 1; |
| 894 } | 887 } |
| 895 bool muted; | 888 bool muted; |
| 896 EXPECT_EQ(0, neteq_->GetAudio(&out_frame_, &muted)); | 889 EXPECT_EQ(0, neteq_->GetAudio(&out_frame_, &muted)); |
| 897 ASSERT_FALSE(muted); | 890 ASSERT_FALSE(muted); |
| 898 // Verify that the first block of samples is set to 0. | 891 // Verify that the first block of samples is set to 0. |
| 899 static const int kExpectedOutputLength = | 892 static const int kExpectedOutputLength = |
| 900 kInitSampleRateHz / 100; // 10 ms at initial sample rate. | 893 kInitSampleRateHz / 100; // 10 ms at initial sample rate. |
| 894 const int16_t* const_out_frame_data = out_frame_.data(); |
| 901 for (int i = 0; i < kExpectedOutputLength; ++i) { | 895 for (int i = 0; i < kExpectedOutputLength; ++i) { |
| 902 std::ostringstream ss; | 896 std::ostringstream ss; |
| 903 ss << "i = " << i; | 897 ss << "i = " << i; |
| 904 SCOPED_TRACE(ss.str()); // Print out the parameter values on failure. | 898 SCOPED_TRACE(ss.str()); // Print out the parameter values on failure. |
| 905 EXPECT_EQ(0, out_frame_.data_[i]); | 899 EXPECT_EQ(0, const_out_frame_data[i]); |
| 906 } | 900 } |
| 907 // Verify that the sample rate did not change from the initial configuration. | 901 // Verify that the sample rate did not change from the initial configuration. |
| 908 EXPECT_EQ(config_.sample_rate_hz, neteq_->last_output_sample_rate_hz()); | 902 EXPECT_EQ(config_.sample_rate_hz, neteq_->last_output_sample_rate_hz()); |
| 909 } | 903 } |
| 910 | 904 |
| 911 class NetEqBgnTest : public NetEqDecodingTest { | 905 class NetEqBgnTest : public NetEqDecodingTest { |
| 912 protected: | 906 protected: |
| 913 virtual void TestCondition(double sum_squared_noise, | 907 virtual void TestCondition(double sum_squared_noise, |
| 914 bool should_be_faded) = 0; | 908 bool should_be_faded) = 0; |
| 915 | 909 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 982 // To be able to test the fading of background noise we need at lease to | 976 // To be able to test the fading of background noise we need at lease to |
| 983 // pull 611 frames. | 977 // pull 611 frames. |
| 984 const int kFadingThreshold = 611; | 978 const int kFadingThreshold = 611; |
| 985 | 979 |
| 986 // Test several CNG-to-PLC packet for the expected behavior. The number 20 | 980 // Test several CNG-to-PLC packet for the expected behavior. The number 20 |
| 987 // is arbitrary, but sufficiently large to test enough number of frames. | 981 // is arbitrary, but sufficiently large to test enough number of frames. |
| 988 const int kNumPlcToCngTestFrames = 20; | 982 const int kNumPlcToCngTestFrames = 20; |
| 989 bool plc_to_cng = false; | 983 bool plc_to_cng = false; |
| 990 for (int n = 0; n < kFadingThreshold + kNumPlcToCngTestFrames; ++n) { | 984 for (int n = 0; n < kFadingThreshold + kNumPlcToCngTestFrames; ++n) { |
| 991 output.Reset(); | 985 output.Reset(); |
| 992 memset(output.data_, 1, sizeof(output.data_)); // Set to non-zero. | 986 // Set to non-zero. |
| 987 memset(output.mutable_data(), 1, AudioFrame::kMaxDataSizeBytes); |
| 993 ASSERT_EQ(0, neteq_->GetAudio(&output, &muted)); | 988 ASSERT_EQ(0, neteq_->GetAudio(&output, &muted)); |
| 994 ASSERT_FALSE(muted); | 989 ASSERT_FALSE(muted); |
| 995 ASSERT_EQ(1u, output.num_channels_); | 990 ASSERT_EQ(1u, output.num_channels_); |
| 996 ASSERT_EQ(expected_samples_per_channel, output.samples_per_channel_); | 991 ASSERT_EQ(expected_samples_per_channel, output.samples_per_channel_); |
| 997 if (output.speech_type_ == AudioFrame::kPLCCNG) { | 992 if (output.speech_type_ == AudioFrame::kPLCCNG) { |
| 998 plc_to_cng = true; | 993 plc_to_cng = true; |
| 999 double sum_squared = 0; | 994 double sum_squared = 0; |
| 995 const int16_t* output_data = output.data(); |
| 1000 for (size_t k = 0; | 996 for (size_t k = 0; |
| 1001 k < output.num_channels_ * output.samples_per_channel_; ++k) | 997 k < output.num_channels_ * output.samples_per_channel_; ++k) |
| 1002 sum_squared += output.data_[k] * output.data_[k]; | 998 sum_squared += output_data[k] * output_data[k]; |
| 1003 TestCondition(sum_squared, n > kFadingThreshold); | 999 TestCondition(sum_squared, n > kFadingThreshold); |
| 1004 } else { | 1000 } else { |
| 1005 EXPECT_EQ(AudioFrame::kPLC, output.speech_type_); | 1001 EXPECT_EQ(AudioFrame::kPLC, output.speech_type_); |
| 1006 } | 1002 } |
| 1007 } | 1003 } |
| 1008 EXPECT_TRUE(plc_to_cng); // Just to be sure that PLC-to-CNG has occurred. | 1004 EXPECT_TRUE(plc_to_cng); // Just to be sure that PLC-to-CNG has occurred. |
| 1009 } | 1005 } |
| 1010 }; | 1006 }; |
| 1011 | 1007 |
| 1012 class NetEqBgnTestOn : public NetEqBgnTest { | 1008 class NetEqBgnTestOn : public NetEqBgnTest { |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1349 // Insert one speech packet. | 1345 // Insert one speech packet. |
| 1350 InsertPacket(0); | 1346 InsertPacket(0); |
| 1351 // Pull out audio once and expect it not to be muted. | 1347 // Pull out audio once and expect it not to be muted. |
| 1352 EXPECT_FALSE(GetAudioReturnMuted()); | 1348 EXPECT_FALSE(GetAudioReturnMuted()); |
| 1353 // Pull data until faded out. | 1349 // Pull data until faded out. |
| 1354 GetAudioUntilMuted(); | 1350 GetAudioUntilMuted(); |
| 1355 | 1351 |
| 1356 // Verify that output audio is not written during muted mode. Other parameters | 1352 // Verify that output audio is not written during muted mode. Other parameters |
| 1357 // should be correct, though. | 1353 // should be correct, though. |
| 1358 AudioFrame new_frame; | 1354 AudioFrame new_frame; |
| 1359 for (auto& d : new_frame.data_) { | 1355 int16_t* frame_data = new_frame.mutable_data(); |
| 1360 d = 17; | 1356 for (size_t i = 0; i < AudioFrame::kMaxDataSizeSamples; i++) { |
| 1357 frame_data[i] = 17; |
| 1361 } | 1358 } |
| 1362 bool muted; | 1359 bool muted; |
| 1363 EXPECT_EQ(0, neteq_->GetAudio(&new_frame, &muted)); | 1360 EXPECT_EQ(0, neteq_->GetAudio(&new_frame, &muted)); |
| 1364 EXPECT_TRUE(muted); | 1361 EXPECT_TRUE(muted); |
| 1365 for (auto d : new_frame.data_) { | 1362 for (size_t i = 0; i < AudioFrame::kMaxDataSizeSamples; i++) { |
| 1366 EXPECT_EQ(17, d); | 1363 EXPECT_EQ(17, frame_data[i]); |
| 1367 } | 1364 } |
| 1368 EXPECT_EQ(out_frame_.timestamp_ + out_frame_.samples_per_channel_, | 1365 EXPECT_EQ(out_frame_.timestamp_ + out_frame_.samples_per_channel_, |
| 1369 new_frame.timestamp_); | 1366 new_frame.timestamp_); |
| 1370 EXPECT_EQ(out_frame_.samples_per_channel_, new_frame.samples_per_channel_); | 1367 EXPECT_EQ(out_frame_.samples_per_channel_, new_frame.samples_per_channel_); |
| 1371 EXPECT_EQ(out_frame_.sample_rate_hz_, new_frame.sample_rate_hz_); | 1368 EXPECT_EQ(out_frame_.sample_rate_hz_, new_frame.sample_rate_hz_); |
| 1372 EXPECT_EQ(out_frame_.num_channels_, new_frame.num_channels_); | 1369 EXPECT_EQ(out_frame_.num_channels_, new_frame.num_channels_); |
| 1373 EXPECT_EQ(out_frame_.speech_type_, new_frame.speech_type_); | 1370 EXPECT_EQ(out_frame_.speech_type_, new_frame.speech_type_); |
| 1374 EXPECT_EQ(out_frame_.vad_activity_, new_frame.vad_activity_); | 1371 EXPECT_EQ(out_frame_.vad_activity_, new_frame.vad_activity_); |
| 1375 | 1372 |
| 1376 // Insert new data. Timestamp is corrected for the time elapsed since the last | 1373 // Insert new data. Timestamp is corrected for the time elapsed since the last |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1515 << " != " << b.vad_activity_ << ")"; | 1512 << " != " << b.vad_activity_ << ")"; |
| 1516 return ::testing::AssertionSuccess(); | 1513 return ::testing::AssertionSuccess(); |
| 1517 } | 1514 } |
| 1518 | 1515 |
| 1519 ::testing::AssertionResult AudioFramesEqual(const AudioFrame& a, | 1516 ::testing::AssertionResult AudioFramesEqual(const AudioFrame& a, |
| 1520 const AudioFrame& b) { | 1517 const AudioFrame& b) { |
| 1521 ::testing::AssertionResult res = AudioFramesEqualExceptData(a, b); | 1518 ::testing::AssertionResult res = AudioFramesEqualExceptData(a, b); |
| 1522 if (!res) | 1519 if (!res) |
| 1523 return res; | 1520 return res; |
| 1524 if (memcmp( | 1521 if (memcmp( |
| 1525 a.data_, b.data_, | 1522 a.data(), b.data(), |
| 1526 a.samples_per_channel_ * a.num_channels_ * sizeof(a.data_[0])) != 0) { | 1523 a.samples_per_channel_ * a.num_channels_ * sizeof(*a.data())) != 0) { |
| 1527 return ::testing::AssertionFailure() << "data_ diff"; | 1524 return ::testing::AssertionFailure() << "data_ diff"; |
| 1528 } | 1525 } |
| 1529 return ::testing::AssertionSuccess(); | 1526 return ::testing::AssertionSuccess(); |
| 1530 } | 1527 } |
| 1531 | 1528 |
| 1532 } // namespace | 1529 } // namespace |
| 1533 | 1530 |
| 1534 TEST_F(NetEqDecodingTestTwoInstances, CompareMutedStateOnOff) { | 1531 TEST_F(NetEqDecodingTestTwoInstances, CompareMutedStateOnOff) { |
| 1535 ASSERT_FALSE(config_.enable_muted_state); | 1532 ASSERT_FALSE(config_.enable_muted_state); |
| 1536 config2_.enable_muted_state = true; | 1533 config2_.enable_muted_state = true; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1641 // Pull out data once. | 1638 // Pull out data once. |
| 1642 AudioFrame output; | 1639 AudioFrame output; |
| 1643 bool muted; | 1640 bool muted; |
| 1644 ASSERT_EQ(0, neteq_->GetAudio(&output, &muted)); | 1641 ASSERT_EQ(0, neteq_->GetAudio(&output, &muted)); |
| 1645 | 1642 |
| 1646 EXPECT_EQ(std::vector<uint32_t>({kRtpTimestamp1, kRtpTimestamp2}), | 1643 EXPECT_EQ(std::vector<uint32_t>({kRtpTimestamp1, kRtpTimestamp2}), |
| 1647 neteq_->LastDecodedTimestamps()); | 1644 neteq_->LastDecodedTimestamps()); |
| 1648 } | 1645 } |
| 1649 | 1646 |
| 1650 } // namespace webrtc | 1647 } // namespace webrtc |
| OLD | NEW |