| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2008 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 |
| 11 #include <memory> | 11 #include <memory> |
| 12 | 12 |
| 13 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h" | 13 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h" |
| 14 #include "webrtc/base/arraysize.h" | 14 #include "webrtc/base/arraysize.h" |
| 15 #include "webrtc/base/byteorder.h" | 15 #include "webrtc/base/byteorder.h" |
| 16 #include "webrtc/base/gunit.h" | |
| 17 #include "webrtc/base/safe_conversions.h" | 16 #include "webrtc/base/safe_conversions.h" |
| 18 #include "webrtc/call/call.h" | 17 #include "webrtc/call/call.h" |
| 19 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" | 18 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" |
| 20 #include "webrtc/media/base/fakemediaengine.h" | 19 #include "webrtc/media/base/fakemediaengine.h" |
| 21 #include "webrtc/media/base/fakenetworkinterface.h" | 20 #include "webrtc/media/base/fakenetworkinterface.h" |
| 22 #include "webrtc/media/base/fakertp.h" | 21 #include "webrtc/media/base/fakertp.h" |
| 23 #include "webrtc/media/base/mediaconstants.h" | 22 #include "webrtc/media/base/mediaconstants.h" |
| 24 #include "webrtc/media/engine/fakewebrtccall.h" | 23 #include "webrtc/media/engine/fakewebrtccall.h" |
| 25 #include "webrtc/media/engine/fakewebrtcvoiceengine.h" | 24 #include "webrtc/media/engine/fakewebrtcvoiceengine.h" |
| 26 #include "webrtc/media/engine/webrtcvoiceengine.h" | 25 #include "webrtc/media/engine/webrtcvoiceengine.h" |
| 27 #include "webrtc/modules/audio_coding/codecs/mock/mock_audio_decoder_factory.h" | 26 #include "webrtc/modules/audio_coding/codecs/mock/mock_audio_decoder_factory.h" |
| 28 #include "webrtc/modules/audio_device/include/mock_audio_device.h" | 27 #include "webrtc/modules/audio_device/include/mock_audio_device.h" |
| 29 #include "webrtc/modules/audio_processing/include/mock_audio_processing.h" | 28 #include "webrtc/modules/audio_processing/include/mock_audio_processing.h" |
| 30 #include "webrtc/pc/channel.h" | 29 #include "webrtc/pc/channel.h" |
| 31 #include "webrtc/test/field_trial.h" | 30 #include "webrtc/test/field_trial.h" |
| 31 #include "webrtc/test/gtest.h" |
| 32 #include "webrtc/voice_engine/transmit_mixer.h" |
| 32 | 33 |
| 33 using testing::Return; | 34 using testing::Return; |
| 34 using testing::StrictMock; | 35 using testing::StrictMock; |
| 35 | 36 |
| 36 namespace { | 37 namespace { |
| 37 | 38 |
| 38 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1); | 39 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1); |
| 39 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1); | 40 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1); |
| 40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); | 41 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); |
| 41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); | 42 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); |
| 42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); | 43 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); |
| 43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); | 44 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); |
| 44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); | 45 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); |
| 45 const cricket::AudioCodec | 46 const cricket::AudioCodec |
| 46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); | 47 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); |
| 47 const cricket::AudioCodec | 48 const cricket::AudioCodec |
| 48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); | 49 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); |
| 49 | 50 |
| 50 const uint32_t kSsrc1 = 0x99; | 51 const uint32_t kSsrc1 = 0x99; |
| 51 const uint32_t kSsrc2 = 2; | 52 const uint32_t kSsrc2 = 2; |
| 52 const uint32_t kSsrc3 = 3; | 53 const uint32_t kSsrc3 = 3; |
| 53 const uint32_t kSsrc4 = 0x42; | 54 const uint32_t kSsrc4 = 0x42; |
| 54 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; | 55 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; |
| 55 | 56 |
| 56 constexpr int kRtpHistoryMs = 5000; | 57 constexpr int kRtpHistoryMs = 5000; |
| 57 | 58 |
| 58 class FakeVoEWrapper : public cricket::VoEWrapper { | 59 class FakeVoEWrapper : public cricket::VoEWrapper { |
| 59 public: | 60 public: |
| 60 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) | 61 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) |
| 61 : cricket::VoEWrapper(engine, // processing | 62 : cricket::VoEWrapper(engine, // base |
| 62 engine, // base | |
| 63 engine, // codec | 63 engine, // codec |
| 64 engine, // hw | 64 engine, // hw |
| 65 engine) { // volume | 65 engine) { // volume |
| 66 } | 66 } |
| 67 }; | 67 }; |
| 68 | 68 |
| 69 class MockTransmitMixer : public webrtc::voe::TransmitMixer { |
| 70 public: |
| 71 MockTransmitMixer() = default; |
| 72 virtual ~MockTransmitMixer() = default; |
| 73 |
| 74 MOCK_METHOD1(EnableStereoChannelSwapping, void(bool enable)); |
| 75 }; |
| 69 } // namespace | 76 } // namespace |
| 70 | 77 |
| 71 // Tests that our stub library "works". | 78 // Tests that our stub library "works". |
| 72 TEST(WebRtcVoiceEngineTestStubLibrary, StartupShutdown) { | 79 TEST(WebRtcVoiceEngineTestStubLibrary, StartupShutdown) { |
| 73 StrictMock<webrtc::test::MockAudioDeviceModule> adm; | 80 StrictMock<webrtc::test::MockAudioDeviceModule> adm; |
| 74 EXPECT_CALL(adm, AddRef()).WillOnce(Return(0)); | 81 EXPECT_CALL(adm, AddRef()).WillOnce(Return(0)); |
| 75 EXPECT_CALL(adm, Release()).WillOnce(Return(0)); | 82 EXPECT_CALL(adm, Release()).WillOnce(Return(0)); |
| 76 EXPECT_CALL(adm, BuiltInAECIsAvailable()).WillOnce(Return(false)); | 83 EXPECT_CALL(adm, BuiltInAECIsAvailable()).WillOnce(Return(false)); |
| 77 EXPECT_CALL(adm, BuiltInAGCIsAvailable()).WillOnce(Return(false)); | 84 EXPECT_CALL(adm, BuiltInAGCIsAvailable()).WillOnce(Return(false)); |
| 78 EXPECT_CALL(adm, BuiltInNSIsAvailable()).WillOnce(Return(false)); | 85 EXPECT_CALL(adm, BuiltInNSIsAvailable()).WillOnce(Return(false)); |
| 86 EXPECT_CALL(adm, SetAGC(true)).WillOnce(Return(0)); |
| 79 StrictMock<webrtc::test::MockAudioProcessing> apm; | 87 StrictMock<webrtc::test::MockAudioProcessing> apm; |
| 80 EXPECT_CALL(apm, ApplyConfig(testing::_)); | 88 EXPECT_CALL(apm, ApplyConfig(testing::_)); |
| 81 EXPECT_CALL(apm, SetExtraOptions(testing::_)); | 89 EXPECT_CALL(apm, SetExtraOptions(testing::_)); |
| 82 EXPECT_CALL(apm, Initialize()).WillOnce(Return(0)); | 90 EXPECT_CALL(apm, Initialize()).WillOnce(Return(0)); |
| 83 cricket::FakeWebRtcVoiceEngine voe(&apm); | 91 StrictMock<MockTransmitMixer> transmit_mixer; |
| 92 EXPECT_CALL(transmit_mixer, EnableStereoChannelSwapping(false)); |
| 93 cricket::FakeWebRtcVoiceEngine voe(&apm, &transmit_mixer); |
| 84 EXPECT_FALSE(voe.IsInited()); | 94 EXPECT_FALSE(voe.IsInited()); |
| 85 { | 95 { |
| 86 cricket::WebRtcVoiceEngine engine( | 96 cricket::WebRtcVoiceEngine engine( |
| 87 &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, | 97 &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, |
| 88 new FakeVoEWrapper(&voe)); | 98 new FakeVoEWrapper(&voe)); |
| 89 EXPECT_TRUE(voe.IsInited()); | 99 EXPECT_TRUE(voe.IsInited()); |
| 90 } | 100 } |
| 91 EXPECT_FALSE(voe.IsInited()); | 101 EXPECT_FALSE(voe.IsInited()); |
| 92 } | 102 } |
| 93 | 103 |
| 94 class FakeAudioSink : public webrtc::AudioSinkInterface { | 104 class FakeAudioSink : public webrtc::AudioSinkInterface { |
| 95 public: | 105 public: |
| 96 void OnData(const Data& audio) override {} | 106 void OnData(const Data& audio) override {} |
| 97 }; | 107 }; |
| 98 | 108 |
| 99 class FakeAudioSource : public cricket::AudioSource { | 109 class FakeAudioSource : public cricket::AudioSource { |
| 100 void SetSink(Sink* sink) override {} | 110 void SetSink(Sink* sink) override {} |
| 101 }; | 111 }; |
| 102 | 112 |
| 103 class WebRtcVoiceEngineTestFake : public testing::Test { | 113 class WebRtcVoiceEngineTestFake : public testing::Test { |
| 104 public: | 114 public: |
| 105 WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} | 115 WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} |
| 106 | 116 |
| 107 explicit WebRtcVoiceEngineTestFake(const char* field_trials) | 117 explicit WebRtcVoiceEngineTestFake(const char* field_trials) |
| 108 : call_(webrtc::Call::Config(&event_log_)), voe_(&apm_), | 118 : apm_gc_(*apm_.gain_control()), apm_ec_(*apm_.echo_cancellation()), |
| 119 apm_ns_(*apm_.noise_suppression()), apm_vd_(*apm_.voice_detection()), |
| 120 call_(webrtc::Call::Config(&event_log_)), voe_(&apm_, &transmit_mixer_), |
| 109 override_field_trials_(field_trials) { | 121 override_field_trials_(field_trials) { |
| 122 // AudioDeviceModule. |
| 110 EXPECT_CALL(adm_, AddRef()).WillOnce(Return(0)); | 123 EXPECT_CALL(adm_, AddRef()).WillOnce(Return(0)); |
| 111 EXPECT_CALL(adm_, Release()).WillOnce(Return(0)); | 124 EXPECT_CALL(adm_, Release()).WillOnce(Return(0)); |
| 112 EXPECT_CALL(adm_, BuiltInAECIsAvailable()).WillOnce(Return(false)); | 125 EXPECT_CALL(adm_, BuiltInAECIsAvailable()).WillOnce(Return(false)); |
| 113 EXPECT_CALL(adm_, BuiltInAGCIsAvailable()).WillOnce(Return(false)); | 126 EXPECT_CALL(adm_, BuiltInAGCIsAvailable()).WillOnce(Return(false)); |
| 114 EXPECT_CALL(adm_, BuiltInNSIsAvailable()).WillOnce(Return(false)); | 127 EXPECT_CALL(adm_, BuiltInNSIsAvailable()).WillOnce(Return(false)); |
| 128 EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0)); |
| 129 // AudioProcessing. |
| 115 EXPECT_CALL(apm_, ApplyConfig(testing::_)); | 130 EXPECT_CALL(apm_, ApplyConfig(testing::_)); |
| 116 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); | 131 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); |
| 117 EXPECT_CALL(apm_, Initialize()).WillOnce(Return(0)); | 132 EXPECT_CALL(apm_, Initialize()).WillOnce(Return(0)); |
| 133 // Default Options. |
| 134 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 135 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 136 EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0)); |
| 137 EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0)); |
| 138 EXPECT_CALL(apm_vd_, Enable(true)).WillOnce(Return(0)); |
| 139 EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(false)); |
| 140 // Init does not overwrite default AGC config. |
| 141 EXPECT_CALL(apm_gc_, target_level_dbfs()).WillOnce(Return(1)); |
| 142 EXPECT_CALL(apm_gc_, compression_gain_db()).WillRepeatedly(Return(5)); |
| 143 EXPECT_CALL(apm_gc_, is_limiter_enabled()).WillRepeatedly(Return(true)); |
| 144 EXPECT_CALL(apm_gc_, set_target_level_dbfs(1)).WillOnce(Return(0)); |
| 145 EXPECT_CALL(apm_gc_, set_compression_gain_db(5)).WillRepeatedly(Return(0)); |
| 146 EXPECT_CALL(apm_gc_, enable_limiter(true)).WillRepeatedly(Return(0)); |
| 118 // TODO(kwiberg): We should use a mock AudioDecoderFactory, but a bunch of | 147 // TODO(kwiberg): We should use a mock AudioDecoderFactory, but a bunch of |
| 119 // the tests here probe the specific set of codecs provided by the builtin | 148 // the tests here probe the specific set of codecs provided by the builtin |
| 120 // factory. Those tests should probably be moved elsewhere. | 149 // factory. Those tests should probably be moved elsewhere. |
| 121 engine_.reset(new cricket::WebRtcVoiceEngine( | 150 engine_.reset(new cricket::WebRtcVoiceEngine( |
| 122 &adm_, webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, | 151 &adm_, webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, |
| 123 new FakeVoEWrapper(&voe_))); | 152 new FakeVoEWrapper(&voe_))); |
| 124 send_parameters_.codecs.push_back(kPcmuCodec); | 153 send_parameters_.codecs.push_back(kPcmuCodec); |
| 125 recv_parameters_.codecs.push_back(kPcmuCodec); | 154 recv_parameters_.codecs.push_back(kPcmuCodec); |
| 155 // Default Options. |
| 156 EXPECT_TRUE(IsHighPassFilterEnabled()); |
| 126 } | 157 } |
| 127 | 158 |
| 128 bool SetupChannel() { | 159 bool SetupChannel() { |
| 129 EXPECT_CALL(apm_, ApplyConfig(testing::_)); | 160 EXPECT_CALL(apm_, ApplyConfig(testing::_)); |
| 130 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); | 161 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); |
| 131 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), | 162 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), |
| 132 cricket::AudioOptions()); | 163 cricket::AudioOptions()); |
| 133 return (channel_ != nullptr); | 164 return (channel_ != nullptr); |
| 134 } | 165 } |
| 135 | 166 |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 } | 631 } |
| 601 } | 632 } |
| 602 | 633 |
| 603 bool IsHighPassFilterEnabled() { | 634 bool IsHighPassFilterEnabled() { |
| 604 return engine_->GetApmConfigForTest().high_pass_filter.enabled; | 635 return engine_->GetApmConfigForTest().high_pass_filter.enabled; |
| 605 } | 636 } |
| 606 | 637 |
| 607 protected: | 638 protected: |
| 608 StrictMock<webrtc::test::MockAudioDeviceModule> adm_; | 639 StrictMock<webrtc::test::MockAudioDeviceModule> adm_; |
| 609 StrictMock<webrtc::test::MockAudioProcessing> apm_; | 640 StrictMock<webrtc::test::MockAudioProcessing> apm_; |
| 641 webrtc::test::MockGainControl& apm_gc_; |
| 642 webrtc::test::MockEchoCancellation& apm_ec_; |
| 643 webrtc::test::MockNoiseSuppression& apm_ns_; |
| 644 webrtc::test::MockVoiceDetection& apm_vd_; |
| 645 StrictMock<MockTransmitMixer> transmit_mixer_; |
| 610 webrtc::RtcEventLogNullImpl event_log_; | 646 webrtc::RtcEventLogNullImpl event_log_; |
| 611 cricket::FakeCall call_; | 647 cricket::FakeCall call_; |
| 612 cricket::FakeWebRtcVoiceEngine voe_; | 648 cricket::FakeWebRtcVoiceEngine voe_; |
| 613 std::unique_ptr<cricket::WebRtcVoiceEngine> engine_; | 649 std::unique_ptr<cricket::WebRtcVoiceEngine> engine_; |
| 614 cricket::VoiceMediaChannel* channel_ = nullptr; | 650 cricket::VoiceMediaChannel* channel_ = nullptr; |
| 615 cricket::AudioSendParameters send_parameters_; | 651 cricket::AudioSendParameters send_parameters_; |
| 616 cricket::AudioRecvParameters recv_parameters_; | 652 cricket::AudioRecvParameters recv_parameters_; |
| 617 FakeAudioSource fake_source_; | 653 FakeAudioSource fake_source_; |
| 618 private: | 654 private: |
| 619 webrtc::test::ScopedFieldTrials override_field_trials_; | 655 webrtc::test::ScopedFieldTrials override_field_trials_; |
| (...skipping 1823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2443 | 2479 |
| 2444 // Now remove the recv streams. | 2480 // Now remove the recv streams. |
| 2445 EXPECT_TRUE(channel_->RemoveRecvStream(3)); | 2481 EXPECT_TRUE(channel_->RemoveRecvStream(3)); |
| 2446 EXPECT_TRUE(channel_->RemoveRecvStream(2)); | 2482 EXPECT_TRUE(channel_->RemoveRecvStream(2)); |
| 2447 } | 2483 } |
| 2448 | 2484 |
| 2449 // Test that we can create a channel configured for Codian bridges, | 2485 // Test that we can create a channel configured for Codian bridges, |
| 2450 // and start sending on it. | 2486 // and start sending on it. |
| 2451 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) { | 2487 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) { |
| 2452 EXPECT_TRUE(SetupSendStream()); | 2488 EXPECT_TRUE(SetupSendStream()); |
| 2453 cricket::AudioOptions options_adjust_agc; | 2489 send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10); |
| 2454 options_adjust_agc.adjust_agc_delta = rtc::Optional<int>(-10); | 2490 EXPECT_CALL(apm_gc_, |
| 2455 webrtc::AgcConfig agc_config; | 2491 set_target_level_dbfs(11)).Times(2).WillRepeatedly(Return(0)); |
| 2456 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | |
| 2457 EXPECT_EQ(0, agc_config.targetLeveldBOv); | |
| 2458 send_parameters_.options = options_adjust_agc; | |
| 2459 SetSendParameters(send_parameters_); | 2492 SetSendParameters(send_parameters_); |
| 2460 SetSend(true); | 2493 SetSend(true); |
| 2461 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2494 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); |
| 2462 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | |
| 2463 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated | |
| 2464 SetSend(false); | 2495 SetSend(false); |
| 2465 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2496 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); |
| 2466 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | |
| 2467 } | 2497 } |
| 2468 | 2498 |
| 2469 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { | 2499 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { |
| 2470 EXPECT_TRUE(SetupSendStream()); | 2500 EXPECT_TRUE(SetupSendStream()); |
| 2471 EXPECT_CALL(adm_, | 2501 EXPECT_CALL(adm_, |
| 2472 BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false)); | 2502 BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false)); |
| 2473 webrtc::AgcConfig agc_config; | 2503 EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0)); |
| 2474 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | 2504 EXPECT_CALL(apm_gc_, Enable(true)).Times(2).WillOnce(Return(0)); |
| 2475 EXPECT_EQ(0, agc_config.targetLeveldBOv); | |
| 2476 send_parameters_.options.tx_agc_target_dbov = rtc::Optional<uint16_t>(3); | 2505 send_parameters_.options.tx_agc_target_dbov = rtc::Optional<uint16_t>(3); |
| 2477 send_parameters_.options.tx_agc_digital_compression_gain = | 2506 send_parameters_.options.tx_agc_digital_compression_gain = |
| 2478 rtc::Optional<uint16_t>(9); | 2507 rtc::Optional<uint16_t>(9); |
| 2479 send_parameters_.options.tx_agc_limiter = rtc::Optional<bool>(true); | 2508 send_parameters_.options.tx_agc_limiter = rtc::Optional<bool>(true); |
| 2480 send_parameters_.options.auto_gain_control = rtc::Optional<bool>(true); | 2509 send_parameters_.options.auto_gain_control = rtc::Optional<bool>(true); |
| 2510 EXPECT_CALL(apm_gc_, set_target_level_dbfs(3)).WillOnce(Return(0)); |
| 2511 EXPECT_CALL(apm_gc_, set_compression_gain_db(9)).WillRepeatedly(Return(0)); |
| 2512 EXPECT_CALL(apm_gc_, enable_limiter(true)).WillRepeatedly(Return(0)); |
| 2481 SetSendParameters(send_parameters_); | 2513 SetSendParameters(send_parameters_); |
| 2482 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | |
| 2483 EXPECT_EQ(3, agc_config.targetLeveldBOv); | |
| 2484 EXPECT_EQ(9, agc_config.digitalCompressionGaindB); | |
| 2485 EXPECT_TRUE(agc_config.limiterEnable); | |
| 2486 | 2514 |
| 2487 // Check interaction with adjust_agc_delta. Both should be respected, for | 2515 // Check interaction with adjust_agc_delta. Both should be respected, for |
| 2488 // backwards compatibility. | 2516 // backwards compatibility. |
| 2489 send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10); | 2517 send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10); |
| 2518 EXPECT_CALL(apm_gc_, set_target_level_dbfs(13)).WillOnce(Return(0)); |
| 2490 SetSendParameters(send_parameters_); | 2519 SetSendParameters(send_parameters_); |
| 2491 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | |
| 2492 EXPECT_EQ(13, agc_config.targetLeveldBOv); | |
| 2493 } | 2520 } |
| 2494 | 2521 |
| 2495 TEST_F(WebRtcVoiceEngineTestFake, SampleRatesViaOptions) { | 2522 TEST_F(WebRtcVoiceEngineTestFake, SampleRatesViaOptions) { |
| 2496 EXPECT_TRUE(SetupSendStream()); | 2523 EXPECT_TRUE(SetupSendStream()); |
| 2497 EXPECT_CALL(adm_, SetRecordingSampleRate(48000)).WillOnce(Return(0)); | 2524 EXPECT_CALL(adm_, SetRecordingSampleRate(48000)).WillOnce(Return(0)); |
| 2498 EXPECT_CALL(adm_, SetPlayoutSampleRate(44100)).WillOnce(Return(0)); | 2525 EXPECT_CALL(adm_, SetPlayoutSampleRate(44100)).WillOnce(Return(0)); |
| 2499 send_parameters_.options.recording_sample_rate = | 2526 send_parameters_.options.recording_sample_rate = |
| 2500 rtc::Optional<uint32_t>(48000); | 2527 rtc::Optional<uint32_t>(48000); |
| 2501 send_parameters_.options.playout_sample_rate = rtc::Optional<uint32_t>(44100); | 2528 send_parameters_.options.playout_sample_rate = rtc::Optional<uint32_t>(44100); |
| 2502 SetSendParameters(send_parameters_); | 2529 SetSendParameters(send_parameters_); |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2950 } | 2977 } |
| 2951 | 2978 |
| 2952 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { | 2979 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { |
| 2953 EXPECT_TRUE(SetupSendStream()); | 2980 EXPECT_TRUE(SetupSendStream()); |
| 2954 EXPECT_CALL(adm_, | 2981 EXPECT_CALL(adm_, |
| 2955 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false)); | 2982 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false)); |
| 2956 EXPECT_CALL(adm_, | 2983 EXPECT_CALL(adm_, |
| 2957 BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false)); | 2984 BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false)); |
| 2958 EXPECT_CALL(adm_, | 2985 EXPECT_CALL(adm_, |
| 2959 BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false)); | 2986 BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false)); |
| 2960 bool ec_enabled; | 2987 |
| 2961 webrtc::EcModes ec_mode; | |
| 2962 webrtc::AecmModes aecm_mode; | |
| 2963 bool cng_enabled; | |
| 2964 bool agc_enabled; | |
| 2965 webrtc::AgcModes agc_mode; | |
| 2966 webrtc::AgcConfig agc_config; | |
| 2967 bool ns_enabled; | |
| 2968 webrtc::NsModes ns_mode; | |
| 2969 bool stereo_swapping_enabled; | |
| 2970 bool typing_detection_enabled; | |
| 2971 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 2972 voe_.GetAecmMode(aecm_mode, cng_enabled); | |
| 2973 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 2974 voe_.GetAgcConfig(agc_config); | |
| 2975 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 2976 stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled(); | |
| 2977 voe_.GetTypingDetectionStatus(typing_detection_enabled); | |
| 2978 EXPECT_TRUE(ec_enabled); | |
| 2979 EXPECT_TRUE(voe_.ec_metrics_enabled()); | |
| 2980 EXPECT_FALSE(cng_enabled); | |
| 2981 EXPECT_TRUE(agc_enabled); | |
| 2982 EXPECT_EQ(0, agc_config.targetLeveldBOv); | |
| 2983 EXPECT_TRUE(ns_enabled); | |
| 2984 EXPECT_TRUE(IsHighPassFilterEnabled()); | |
| 2985 EXPECT_FALSE(stereo_swapping_enabled); | |
| 2986 EXPECT_TRUE(typing_detection_enabled); | |
| 2987 EXPECT_EQ(ec_mode, webrtc::kEcConference); | |
| 2988 EXPECT_EQ(ns_mode, webrtc::kNsHighSuppression); | |
| 2989 EXPECT_EQ(50, voe_.GetNetEqCapacity()); | 2988 EXPECT_EQ(50, voe_.GetNetEqCapacity()); |
| 2990 EXPECT_FALSE(voe_.GetNetEqFastAccelerate()); | 2989 EXPECT_FALSE(voe_.GetNetEqFastAccelerate()); |
| 2991 | 2990 |
| 2992 // Nothing set in AudioOptions, so everything should be as default. | 2991 // Nothing set in AudioOptions, so everything should be as default. |
| 2993 send_parameters_.options = cricket::AudioOptions(); | 2992 send_parameters_.options = cricket::AudioOptions(); |
| 2994 SetSendParameters(send_parameters_); | 2993 SetSendParameters(send_parameters_); |
| 2995 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 2996 voe_.GetAecmMode(aecm_mode, cng_enabled); | |
| 2997 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 2998 voe_.GetAgcConfig(agc_config); | |
| 2999 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3000 stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled(); | |
| 3001 voe_.GetTypingDetectionStatus(typing_detection_enabled); | |
| 3002 EXPECT_TRUE(ec_enabled); | |
| 3003 EXPECT_TRUE(voe_.ec_metrics_enabled()); | |
| 3004 EXPECT_FALSE(cng_enabled); | |
| 3005 EXPECT_TRUE(agc_enabled); | |
| 3006 EXPECT_EQ(0, agc_config.targetLeveldBOv); | |
| 3007 EXPECT_TRUE(ns_enabled); | |
| 3008 EXPECT_TRUE(IsHighPassFilterEnabled()); | 2994 EXPECT_TRUE(IsHighPassFilterEnabled()); |
| 3009 EXPECT_FALSE(stereo_swapping_enabled); | |
| 3010 EXPECT_TRUE(typing_detection_enabled); | |
| 3011 EXPECT_EQ(ec_mode, webrtc::kEcConference); | |
| 3012 EXPECT_EQ(ns_mode, webrtc::kNsHighSuppression); | |
| 3013 EXPECT_EQ(50, voe_.GetNetEqCapacity()); | 2995 EXPECT_EQ(50, voe_.GetNetEqCapacity()); |
| 3014 EXPECT_FALSE(voe_.GetNetEqFastAccelerate()); | 2996 EXPECT_FALSE(voe_.GetNetEqFastAccelerate()); |
| 3015 | 2997 |
| 3016 // Turn echo cancellation off | 2998 // Turn echo cancellation off |
| 2999 EXPECT_CALL(apm_ec_, Enable(false)).WillOnce(Return(0)); |
| 3000 EXPECT_CALL(apm_ec_, enable_metrics(false)).WillOnce(Return(0)); |
| 3017 send_parameters_.options.echo_cancellation = rtc::Optional<bool>(false); | 3001 send_parameters_.options.echo_cancellation = rtc::Optional<bool>(false); |
| 3018 SetSendParameters(send_parameters_); | 3002 SetSendParameters(send_parameters_); |
| 3019 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3020 EXPECT_FALSE(ec_enabled); | |
| 3021 | 3003 |
| 3022 // Turn echo cancellation back on, with settings, and make sure | 3004 // Turn echo cancellation back on, with settings, and make sure |
| 3023 // nothing else changed. | 3005 // nothing else changed. |
| 3006 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3007 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3024 send_parameters_.options.echo_cancellation = rtc::Optional<bool>(true); | 3008 send_parameters_.options.echo_cancellation = rtc::Optional<bool>(true); |
| 3025 SetSendParameters(send_parameters_); | 3009 SetSendParameters(send_parameters_); |
| 3026 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3027 voe_.GetAecmMode(aecm_mode, cng_enabled); | |
| 3028 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 3029 voe_.GetAgcConfig(agc_config); | |
| 3030 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3031 stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled(); | |
| 3032 voe_.GetTypingDetectionStatus(typing_detection_enabled); | |
| 3033 EXPECT_TRUE(ec_enabled); | |
| 3034 EXPECT_TRUE(voe_.ec_metrics_enabled()); | |
| 3035 EXPECT_TRUE(agc_enabled); | |
| 3036 EXPECT_EQ(0, agc_config.targetLeveldBOv); | |
| 3037 EXPECT_TRUE(ns_enabled); | |
| 3038 EXPECT_TRUE(IsHighPassFilterEnabled()); | |
| 3039 EXPECT_FALSE(stereo_swapping_enabled); | |
| 3040 EXPECT_TRUE(typing_detection_enabled); | |
| 3041 EXPECT_EQ(ec_mode, webrtc::kEcConference); | |
| 3042 EXPECT_EQ(ns_mode, webrtc::kNsHighSuppression); | |
| 3043 | 3010 |
| 3044 // Turn on delay agnostic aec and make sure nothing change w.r.t. echo | 3011 // Turn on delay agnostic aec and make sure nothing change w.r.t. echo |
| 3045 // control. | 3012 // control. |
| 3013 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3014 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3046 send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(true); | 3015 send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(true); |
| 3047 SetSendParameters(send_parameters_); | 3016 SetSendParameters(send_parameters_); |
| 3048 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3049 voe_.GetAecmMode(aecm_mode, cng_enabled); | |
| 3050 EXPECT_TRUE(ec_enabled); | |
| 3051 EXPECT_TRUE(voe_.ec_metrics_enabled()); | |
| 3052 EXPECT_EQ(ec_mode, webrtc::kEcConference); | |
| 3053 | 3017 |
| 3054 // Turn off echo cancellation and delay agnostic aec. | 3018 // Turn off echo cancellation and delay agnostic aec. |
| 3019 EXPECT_CALL(apm_ec_, Enable(false)).WillOnce(Return(0)); |
| 3020 EXPECT_CALL(apm_ec_, enable_metrics(false)).WillOnce(Return(0)); |
| 3055 send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(false); | 3021 send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(false); |
| 3056 send_parameters_.options.extended_filter_aec = rtc::Optional<bool>(false); | 3022 send_parameters_.options.extended_filter_aec = rtc::Optional<bool>(false); |
| 3057 send_parameters_.options.echo_cancellation = rtc::Optional<bool>(false); | 3023 send_parameters_.options.echo_cancellation = rtc::Optional<bool>(false); |
| 3058 SetSendParameters(send_parameters_); | 3024 SetSendParameters(send_parameters_); |
| 3059 voe_.GetEcStatus(ec_enabled, ec_mode); | 3025 |
| 3060 EXPECT_FALSE(ec_enabled); | |
| 3061 // Turning delay agnostic aec back on should also turn on echo cancellation. | 3026 // Turning delay agnostic aec back on should also turn on echo cancellation. |
| 3027 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3028 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3062 send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(true); | 3029 send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(true); |
| 3063 SetSendParameters(send_parameters_); | 3030 SetSendParameters(send_parameters_); |
| 3064 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3065 EXPECT_TRUE(ec_enabled); | |
| 3066 EXPECT_TRUE(voe_.ec_metrics_enabled()); | |
| 3067 EXPECT_EQ(ec_mode, webrtc::kEcConference); | |
| 3068 | 3031 |
| 3069 // Turn off AGC | 3032 // Turn off AGC |
| 3033 EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0)); |
| 3034 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3035 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3036 EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0)); |
| 3070 send_parameters_.options.auto_gain_control = rtc::Optional<bool>(false); | 3037 send_parameters_.options.auto_gain_control = rtc::Optional<bool>(false); |
| 3071 SetSendParameters(send_parameters_); | 3038 SetSendParameters(send_parameters_); |
| 3072 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 3073 EXPECT_FALSE(agc_enabled); | |
| 3074 | 3039 |
| 3075 // Turn AGC back on | 3040 // Turn AGC back on |
| 3041 EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0)); |
| 3042 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3043 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3044 EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0)); |
| 3076 send_parameters_.options.auto_gain_control = rtc::Optional<bool>(true); | 3045 send_parameters_.options.auto_gain_control = rtc::Optional<bool>(true); |
| 3077 send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(); | 3046 send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(); |
| 3078 SetSendParameters(send_parameters_); | 3047 SetSendParameters(send_parameters_); |
| 3079 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 3080 EXPECT_TRUE(agc_enabled); | |
| 3081 voe_.GetAgcConfig(agc_config); | |
| 3082 EXPECT_EQ(0, agc_config.targetLeveldBOv); | |
| 3083 | 3048 |
| 3084 // Turn off other options (and stereo swapping on). | 3049 // Turn off other options (and stereo swapping on). |
| 3050 EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0)); |
| 3051 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3052 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3053 EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0)); |
| 3054 EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0)); |
| 3055 EXPECT_CALL(apm_vd_, Enable(false)).WillOnce(Return(0)); |
| 3056 EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(true)); |
| 3085 send_parameters_.options.noise_suppression = rtc::Optional<bool>(false); | 3057 send_parameters_.options.noise_suppression = rtc::Optional<bool>(false); |
| 3086 send_parameters_.options.highpass_filter = rtc::Optional<bool>(false); | 3058 send_parameters_.options.highpass_filter = rtc::Optional<bool>(false); |
| 3087 send_parameters_.options.typing_detection = rtc::Optional<bool>(false); | 3059 send_parameters_.options.typing_detection = rtc::Optional<bool>(false); |
| 3088 send_parameters_.options.stereo_swapping = rtc::Optional<bool>(true); | 3060 send_parameters_.options.stereo_swapping = rtc::Optional<bool>(true); |
| 3089 SetSendParameters(send_parameters_); | 3061 SetSendParameters(send_parameters_); |
| 3090 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3091 stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled(); | |
| 3092 voe_.GetTypingDetectionStatus(typing_detection_enabled); | |
| 3093 EXPECT_FALSE(ns_enabled); | |
| 3094 EXPECT_FALSE(IsHighPassFilterEnabled()); | 3062 EXPECT_FALSE(IsHighPassFilterEnabled()); |
| 3095 EXPECT_FALSE(typing_detection_enabled); | |
| 3096 EXPECT_TRUE(stereo_swapping_enabled); | |
| 3097 | 3063 |
| 3098 // Set options again to ensure it has no impact. | 3064 // Set options again to ensure it has no impact. |
| 3065 EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0)); |
| 3066 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3067 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3068 EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0)); |
| 3069 EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0)); |
| 3070 EXPECT_CALL(apm_vd_, Enable(false)).WillOnce(Return(0)); |
| 3071 EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(true)); |
| 3099 SetSendParameters(send_parameters_); | 3072 SetSendParameters(send_parameters_); |
| 3100 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3101 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3102 EXPECT_TRUE(ec_enabled); | |
| 3103 EXPECT_EQ(webrtc::kEcConference, ec_mode); | |
| 3104 EXPECT_FALSE(ns_enabled); | |
| 3105 EXPECT_EQ(webrtc::kNsHighSuppression, ns_mode); | |
| 3106 } | |
| 3107 | |
| 3108 TEST_F(WebRtcVoiceEngineTestFake, DefaultOptions) { | |
| 3109 EXPECT_TRUE(SetupSendStream()); | |
| 3110 | |
| 3111 bool ec_enabled; | |
| 3112 webrtc::EcModes ec_mode; | |
| 3113 bool agc_enabled; | |
| 3114 webrtc::AgcModes agc_mode; | |
| 3115 bool ns_enabled; | |
| 3116 webrtc::NsModes ns_mode; | |
| 3117 bool stereo_swapping_enabled; | |
| 3118 bool typing_detection_enabled; | |
| 3119 | |
| 3120 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3121 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 3122 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3123 stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled(); | |
| 3124 voe_.GetTypingDetectionStatus(typing_detection_enabled); | |
| 3125 EXPECT_TRUE(ec_enabled); | |
| 3126 EXPECT_TRUE(agc_enabled); | |
| 3127 EXPECT_TRUE(ns_enabled); | |
| 3128 EXPECT_TRUE(IsHighPassFilterEnabled()); | |
| 3129 EXPECT_TRUE(typing_detection_enabled); | |
| 3130 EXPECT_FALSE(stereo_swapping_enabled); | |
| 3131 } | |
| 3132 | |
| 3133 TEST_F(WebRtcVoiceEngineTestFake, InitDoesNotOverwriteDefaultAgcConfig) { | |
| 3134 webrtc::AgcConfig set_config = {0}; | |
| 3135 set_config.targetLeveldBOv = 3; | |
| 3136 set_config.digitalCompressionGaindB = 9; | |
| 3137 set_config.limiterEnable = true; | |
| 3138 EXPECT_EQ(0, voe_.SetAgcConfig(set_config)); | |
| 3139 | |
| 3140 webrtc::AgcConfig config = {0}; | |
| 3141 EXPECT_EQ(0, voe_.GetAgcConfig(config)); | |
| 3142 EXPECT_EQ(set_config.targetLeveldBOv, config.targetLeveldBOv); | |
| 3143 EXPECT_EQ(set_config.digitalCompressionGaindB, | |
| 3144 config.digitalCompressionGaindB); | |
| 3145 EXPECT_EQ(set_config.limiterEnable, config.limiterEnable); | |
| 3146 } | 3073 } |
| 3147 | 3074 |
| 3148 TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) { | 3075 TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) { |
| 3149 EXPECT_TRUE(SetupSendStream()); | 3076 EXPECT_TRUE(SetupSendStream()); |
| 3150 EXPECT_CALL(adm_, | 3077 EXPECT_CALL(adm_, |
| 3151 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false)); | 3078 BuiltInAECIsAvailable()).Times(8).WillRepeatedly(Return(false)); |
| 3152 EXPECT_CALL(adm_, | 3079 EXPECT_CALL(adm_, |
| 3153 BuiltInAGCIsAvailable()).Times(9).WillRepeatedly(Return(false)); | 3080 BuiltInAGCIsAvailable()).Times(8).WillRepeatedly(Return(false)); |
| 3154 EXPECT_CALL(adm_, | 3081 EXPECT_CALL(adm_, |
| 3155 BuiltInNSIsAvailable()).Times(9).WillRepeatedly(Return(false)); | 3082 BuiltInNSIsAvailable()).Times(8).WillRepeatedly(Return(false)); |
| 3156 EXPECT_CALL(adm_, | 3083 EXPECT_CALL(adm_, |
| 3157 RecordingIsInitialized()).Times(2).WillRepeatedly(Return(false)); | 3084 RecordingIsInitialized()).Times(2).WillRepeatedly(Return(false)); |
| 3158 EXPECT_CALL(adm_, Recording()).Times(2).WillRepeatedly(Return(false)); | 3085 EXPECT_CALL(adm_, Recording()).Times(2).WillRepeatedly(Return(false)); |
| 3159 EXPECT_CALL(adm_, InitRecording()).Times(2).WillRepeatedly(Return(0)); | 3086 EXPECT_CALL(adm_, InitRecording()).Times(2).WillRepeatedly(Return(0)); |
| 3160 EXPECT_CALL(apm_, ApplyConfig(testing::_)).Times(10); | 3087 EXPECT_CALL(apm_, ApplyConfig(testing::_)).Times(10); |
| 3161 EXPECT_CALL(apm_, SetExtraOptions(testing::_)).Times(10); | 3088 EXPECT_CALL(apm_, SetExtraOptions(testing::_)).Times(10); |
| 3162 | 3089 |
| 3163 std::unique_ptr<cricket::WebRtcVoiceMediaChannel> channel1( | 3090 std::unique_ptr<cricket::WebRtcVoiceMediaChannel> channel1( |
| 3164 static_cast<cricket::WebRtcVoiceMediaChannel*>(engine_->CreateChannel( | 3091 static_cast<cricket::WebRtcVoiceMediaChannel*>(engine_->CreateChannel( |
| 3165 &call_, cricket::MediaConfig(), cricket::AudioOptions()))); | 3092 &call_, cricket::MediaConfig(), cricket::AudioOptions()))); |
| 3166 std::unique_ptr<cricket::WebRtcVoiceMediaChannel> channel2( | 3093 std::unique_ptr<cricket::WebRtcVoiceMediaChannel> channel2( |
| 3167 static_cast<cricket::WebRtcVoiceMediaChannel*>(engine_->CreateChannel( | 3094 static_cast<cricket::WebRtcVoiceMediaChannel*>(engine_->CreateChannel( |
| 3168 &call_, cricket::MediaConfig(), cricket::AudioOptions()))); | 3095 &call_, cricket::MediaConfig(), cricket::AudioOptions()))); |
| 3169 | 3096 |
| 3170 // Have to add a stream to make SetSend work. | 3097 // Have to add a stream to make SetSend work. |
| 3171 cricket::StreamParams stream1; | 3098 cricket::StreamParams stream1; |
| 3172 stream1.ssrcs.push_back(1); | 3099 stream1.ssrcs.push_back(1); |
| 3173 channel1->AddSendStream(stream1); | 3100 channel1->AddSendStream(stream1); |
| 3174 cricket::StreamParams stream2; | 3101 cricket::StreamParams stream2; |
| 3175 stream2.ssrcs.push_back(2); | 3102 stream2.ssrcs.push_back(2); |
| 3176 channel2->AddSendStream(stream2); | 3103 channel2->AddSendStream(stream2); |
| 3177 | 3104 |
| 3178 // AEC and AGC and NS | 3105 // AEC and AGC and NS |
| 3179 cricket::AudioSendParameters parameters_options_all = send_parameters_; | 3106 cricket::AudioSendParameters parameters_options_all = send_parameters_; |
| 3180 parameters_options_all.options.echo_cancellation = rtc::Optional<bool>(true); | 3107 parameters_options_all.options.echo_cancellation = rtc::Optional<bool>(true); |
| 3181 parameters_options_all.options.auto_gain_control = rtc::Optional<bool>(true); | 3108 parameters_options_all.options.auto_gain_control = rtc::Optional<bool>(true); |
| 3182 parameters_options_all.options.noise_suppression = rtc::Optional<bool>(true); | 3109 parameters_options_all.options.noise_suppression = rtc::Optional<bool>(true); |
| 3110 EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0)); |
| 3111 EXPECT_CALL(apm_ec_, Enable(true)).Times(2).WillRepeatedly(Return(0)); |
| 3112 EXPECT_CALL(apm_ec_, enable_metrics(true)).Times(2).WillRepeatedly(Return(0)); |
| 3113 EXPECT_CALL(apm_gc_, Enable(true)).Times(2).WillRepeatedly(Return(0)); |
| 3114 EXPECT_CALL(apm_ns_, Enable(true)).Times(2).WillRepeatedly(Return(0)); |
| 3183 EXPECT_TRUE(channel1->SetSendParameters(parameters_options_all)); | 3115 EXPECT_TRUE(channel1->SetSendParameters(parameters_options_all)); |
| 3184 EXPECT_EQ(parameters_options_all.options, channel1->options()); | 3116 EXPECT_EQ(parameters_options_all.options, channel1->options()); |
| 3185 EXPECT_TRUE(channel2->SetSendParameters(parameters_options_all)); | 3117 EXPECT_TRUE(channel2->SetSendParameters(parameters_options_all)); |
| 3186 EXPECT_EQ(parameters_options_all.options, channel2->options()); | 3118 EXPECT_EQ(parameters_options_all.options, channel2->options()); |
| 3187 | 3119 |
| 3188 // unset NS | 3120 // unset NS |
| 3189 cricket::AudioSendParameters parameters_options_no_ns = send_parameters_; | 3121 cricket::AudioSendParameters parameters_options_no_ns = send_parameters_; |
| 3190 parameters_options_no_ns.options.noise_suppression = | 3122 parameters_options_no_ns.options.noise_suppression = |
| 3191 rtc::Optional<bool>(false); | 3123 rtc::Optional<bool>(false); |
| 3124 EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0)); |
| 3125 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3126 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3127 EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0)); |
| 3128 EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0)); |
| 3192 EXPECT_TRUE(channel1->SetSendParameters(parameters_options_no_ns)); | 3129 EXPECT_TRUE(channel1->SetSendParameters(parameters_options_no_ns)); |
| 3193 cricket::AudioOptions expected_options = parameters_options_all.options; | 3130 cricket::AudioOptions expected_options = parameters_options_all.options; |
| 3194 expected_options.echo_cancellation = rtc::Optional<bool>(true); | 3131 expected_options.echo_cancellation = rtc::Optional<bool>(true); |
| 3195 expected_options.auto_gain_control = rtc::Optional<bool>(true); | 3132 expected_options.auto_gain_control = rtc::Optional<bool>(true); |
| 3196 expected_options.noise_suppression = rtc::Optional<bool>(false); | 3133 expected_options.noise_suppression = rtc::Optional<bool>(false); |
| 3197 EXPECT_EQ(expected_options, channel1->options()); | 3134 EXPECT_EQ(expected_options, channel1->options()); |
| 3198 | 3135 |
| 3199 // unset AGC | 3136 // unset AGC |
| 3200 cricket::AudioSendParameters parameters_options_no_agc = send_parameters_; | 3137 cricket::AudioSendParameters parameters_options_no_agc = send_parameters_; |
| 3201 parameters_options_no_agc.options.auto_gain_control = | 3138 parameters_options_no_agc.options.auto_gain_control = |
| 3202 rtc::Optional<bool>(false); | 3139 rtc::Optional<bool>(false); |
| 3140 EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0)); |
| 3141 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3142 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3143 EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0)); |
| 3144 EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0)); |
| 3203 EXPECT_TRUE(channel2->SetSendParameters(parameters_options_no_agc)); | 3145 EXPECT_TRUE(channel2->SetSendParameters(parameters_options_no_agc)); |
| 3204 expected_options.echo_cancellation = rtc::Optional<bool>(true); | 3146 expected_options.echo_cancellation = rtc::Optional<bool>(true); |
| 3205 expected_options.auto_gain_control = rtc::Optional<bool>(false); | 3147 expected_options.auto_gain_control = rtc::Optional<bool>(false); |
| 3206 expected_options.noise_suppression = rtc::Optional<bool>(true); | 3148 expected_options.noise_suppression = rtc::Optional<bool>(true); |
| 3207 EXPECT_EQ(expected_options, channel2->options()); | 3149 EXPECT_EQ(expected_options, channel2->options()); |
| 3208 | 3150 |
| 3151 EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0)); |
| 3152 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3153 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3154 EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0)); |
| 3155 EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0)); |
| 3209 EXPECT_TRUE(channel_->SetSendParameters(parameters_options_all)); | 3156 EXPECT_TRUE(channel_->SetSendParameters(parameters_options_all)); |
| 3210 bool ec_enabled; | |
| 3211 webrtc::EcModes ec_mode; | |
| 3212 bool agc_enabled; | |
| 3213 webrtc::AgcModes agc_mode; | |
| 3214 bool ns_enabled; | |
| 3215 webrtc::NsModes ns_mode; | |
| 3216 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3217 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 3218 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3219 EXPECT_TRUE(ec_enabled); | |
| 3220 EXPECT_TRUE(agc_enabled); | |
| 3221 EXPECT_TRUE(ns_enabled); | |
| 3222 | 3157 |
| 3158 EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0)); |
| 3159 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3160 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3161 EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0)); |
| 3162 EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0)); |
| 3223 channel1->SetSend(true); | 3163 channel1->SetSend(true); |
| 3224 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3225 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 3226 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3227 EXPECT_TRUE(ec_enabled); | |
| 3228 EXPECT_TRUE(agc_enabled); | |
| 3229 EXPECT_FALSE(ns_enabled); | |
| 3230 | 3164 |
| 3165 EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0)); |
| 3166 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3167 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3168 EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0)); |
| 3169 EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0)); |
| 3231 channel2->SetSend(true); | 3170 channel2->SetSend(true); |
| 3232 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3233 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 3234 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3235 EXPECT_TRUE(ec_enabled); | |
| 3236 EXPECT_FALSE(agc_enabled); | |
| 3237 EXPECT_TRUE(ns_enabled); | |
| 3238 | 3171 |
| 3239 // Make sure settings take effect while we are sending. | 3172 // Make sure settings take effect while we are sending. |
| 3240 EXPECT_TRUE(channel_->SetSendParameters(parameters_options_all)); | |
| 3241 EXPECT_CALL(apm_, ApplyConfig(testing::_)); | |
| 3242 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); | |
| 3243 cricket::AudioSendParameters parameters_options_no_agc_nor_ns = | 3173 cricket::AudioSendParameters parameters_options_no_agc_nor_ns = |
| 3244 send_parameters_; | 3174 send_parameters_; |
| 3245 parameters_options_no_agc_nor_ns.options.auto_gain_control = | 3175 parameters_options_no_agc_nor_ns.options.auto_gain_control = |
| 3246 rtc::Optional<bool>(false); | 3176 rtc::Optional<bool>(false); |
| 3247 parameters_options_no_agc_nor_ns.options.noise_suppression = | 3177 parameters_options_no_agc_nor_ns.options.noise_suppression = |
| 3248 rtc::Optional<bool>(false); | 3178 rtc::Optional<bool>(false); |
| 3249 channel2->SetSend(true); | 3179 EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0)); |
| 3180 EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0)); |
| 3181 EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0)); |
| 3182 EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0)); |
| 3183 EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0)); |
| 3250 EXPECT_TRUE(channel2->SetSendParameters(parameters_options_no_agc_nor_ns)); | 3184 EXPECT_TRUE(channel2->SetSendParameters(parameters_options_no_agc_nor_ns)); |
| 3251 expected_options.echo_cancellation = rtc::Optional<bool>(true); | 3185 expected_options.echo_cancellation = rtc::Optional<bool>(true); |
| 3252 expected_options.auto_gain_control = rtc::Optional<bool>(false); | 3186 expected_options.auto_gain_control = rtc::Optional<bool>(false); |
| 3253 expected_options.noise_suppression = rtc::Optional<bool>(false); | 3187 expected_options.noise_suppression = rtc::Optional<bool>(false); |
| 3254 EXPECT_EQ(expected_options, channel2->options()); | 3188 EXPECT_EQ(expected_options, channel2->options()); |
| 3255 voe_.GetEcStatus(ec_enabled, ec_mode); | |
| 3256 voe_.GetAgcStatus(agc_enabled, agc_mode); | |
| 3257 voe_.GetNsStatus(ns_enabled, ns_mode); | |
| 3258 EXPECT_TRUE(ec_enabled); | |
| 3259 EXPECT_FALSE(agc_enabled); | |
| 3260 EXPECT_FALSE(ns_enabled); | |
| 3261 } | 3189 } |
| 3262 | 3190 |
| 3263 // This test verifies DSCP settings are properly applied on voice media channel. | 3191 // This test verifies DSCP settings are properly applied on voice media channel. |
| 3264 TEST_F(WebRtcVoiceEngineTestFake, TestSetDscpOptions) { | 3192 TEST_F(WebRtcVoiceEngineTestFake, TestSetDscpOptions) { |
| 3265 EXPECT_TRUE(SetupSendStream()); | 3193 EXPECT_TRUE(SetupSendStream()); |
| 3266 cricket::FakeNetworkInterface network_interface; | 3194 cricket::FakeNetworkInterface network_interface; |
| 3267 cricket::MediaConfig config; | 3195 cricket::MediaConfig config; |
| 3268 std::unique_ptr<cricket::VoiceMediaChannel> channel; | 3196 std::unique_ptr<cricket::VoiceMediaChannel> channel; |
| 3269 | 3197 |
| 3270 EXPECT_CALL(apm_, ApplyConfig(testing::_)).Times(3); | 3198 EXPECT_CALL(apm_, ApplyConfig(testing::_)).Times(3); |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3799 // Without this cast, the comparison turned unsigned and, thus, failed for -1. | 3727 // Without this cast, the comparison turned unsigned and, thus, failed for -1. |
| 3800 const int num_specs = static_cast<int>(specs.size()); | 3728 const int num_specs = static_cast<int>(specs.size()); |
| 3801 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); | 3729 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); |
| 3802 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); | 3730 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); |
| 3803 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); | 3731 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); |
| 3804 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); | 3732 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); |
| 3805 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); | 3733 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); |
| 3806 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); | 3734 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); |
| 3807 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); | 3735 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); |
| 3808 } | 3736 } |
| OLD | NEW |