| 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 | 
|---|