| Index: webrtc/media/engine/webrtcvoiceengine_unittest.cc
|
| diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
|
| index 0bb350133933a0fc477b0644b620337535999990..a08ac6a92e24ad744fe3adcd48b1a91467f8fbff 100644
|
| --- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc
|
| +++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
|
| @@ -13,7 +13,6 @@
|
| #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
|
| #include "webrtc/base/arraysize.h"
|
| #include "webrtc/base/byteorder.h"
|
| -#include "webrtc/base/gunit.h"
|
| #include "webrtc/base/safe_conversions.h"
|
| #include "webrtc/call/call.h"
|
| #include "webrtc/logging/rtc_event_log/rtc_event_log.h"
|
| @@ -29,6 +28,8 @@
|
| #include "webrtc/modules/audio_processing/include/mock_audio_processing.h"
|
| #include "webrtc/pc/channel.h"
|
| #include "webrtc/test/field_trial.h"
|
| +#include "webrtc/test/gtest.h"
|
| +#include "webrtc/voice_engine/transmit_mixer.h"
|
|
|
| using testing::Return;
|
| using testing::StrictMock;
|
| @@ -58,14 +59,20 @@ constexpr int kRtpHistoryMs = 5000;
|
| class FakeVoEWrapper : public cricket::VoEWrapper {
|
| public:
|
| explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine)
|
| - : cricket::VoEWrapper(engine, // processing
|
| - engine, // base
|
| + : cricket::VoEWrapper(engine, // base
|
| engine, // codec
|
| engine, // hw
|
| engine) { // volume
|
| }
|
| };
|
|
|
| +class MockTransmitMixer : public webrtc::voe::TransmitMixer {
|
| + public:
|
| + MockTransmitMixer() = default;
|
| + virtual ~MockTransmitMixer() = default;
|
| +
|
| + MOCK_METHOD1(EnableStereoChannelSwapping, void(bool enable));
|
| +};
|
| } // namespace
|
|
|
| // Tests that our stub library "works".
|
| @@ -76,11 +83,14 @@ TEST(WebRtcVoiceEngineTestStubLibrary, StartupShutdown) {
|
| EXPECT_CALL(adm, BuiltInAECIsAvailable()).WillOnce(Return(false));
|
| EXPECT_CALL(adm, BuiltInAGCIsAvailable()).WillOnce(Return(false));
|
| EXPECT_CALL(adm, BuiltInNSIsAvailable()).WillOnce(Return(false));
|
| + EXPECT_CALL(adm, SetAGC(true)).WillOnce(Return(0));
|
| StrictMock<webrtc::test::MockAudioProcessing> apm;
|
| EXPECT_CALL(apm, ApplyConfig(testing::_));
|
| EXPECT_CALL(apm, SetExtraOptions(testing::_));
|
| EXPECT_CALL(apm, Initialize()).WillOnce(Return(0));
|
| - cricket::FakeWebRtcVoiceEngine voe(&apm);
|
| + StrictMock<MockTransmitMixer> transmit_mixer;
|
| + EXPECT_CALL(transmit_mixer, EnableStereoChannelSwapping(false));
|
| + cricket::FakeWebRtcVoiceEngine voe(&apm, &transmit_mixer);
|
| EXPECT_FALSE(voe.IsInited());
|
| {
|
| cricket::WebRtcVoiceEngine engine(
|
| @@ -105,16 +115,35 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
|
| WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {}
|
|
|
| explicit WebRtcVoiceEngineTestFake(const char* field_trials)
|
| - : call_(webrtc::Call::Config(&event_log_)), voe_(&apm_),
|
| + : apm_gc_(*apm_.gain_control()), apm_ec_(*apm_.echo_cancellation()),
|
| + apm_ns_(*apm_.noise_suppression()), apm_vd_(*apm_.voice_detection()),
|
| + call_(webrtc::Call::Config(&event_log_)), voe_(&apm_, &transmit_mixer_),
|
| override_field_trials_(field_trials) {
|
| + // AudioDeviceModule.
|
| EXPECT_CALL(adm_, AddRef()).WillOnce(Return(0));
|
| EXPECT_CALL(adm_, Release()).WillOnce(Return(0));
|
| EXPECT_CALL(adm_, BuiltInAECIsAvailable()).WillOnce(Return(false));
|
| EXPECT_CALL(adm_, BuiltInAGCIsAvailable()).WillOnce(Return(false));
|
| EXPECT_CALL(adm_, BuiltInNSIsAvailable()).WillOnce(Return(false));
|
| + EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
|
| + // AudioProcessing.
|
| EXPECT_CALL(apm_, ApplyConfig(testing::_));
|
| EXPECT_CALL(apm_, SetExtraOptions(testing::_));
|
| EXPECT_CALL(apm_, Initialize()).WillOnce(Return(0));
|
| + // Default Options.
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_vd_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(false));
|
| + // Init does not overwrite default AGC config.
|
| + EXPECT_CALL(apm_gc_, target_level_dbfs()).WillOnce(Return(1));
|
| + EXPECT_CALL(apm_gc_, compression_gain_db()).WillRepeatedly(Return(5));
|
| + EXPECT_CALL(apm_gc_, is_limiter_enabled()).WillRepeatedly(Return(true));
|
| + EXPECT_CALL(apm_gc_, set_target_level_dbfs(1)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, set_compression_gain_db(5)).WillRepeatedly(Return(0));
|
| + EXPECT_CALL(apm_gc_, enable_limiter(true)).WillRepeatedly(Return(0));
|
| // TODO(kwiberg): We should use a mock AudioDecoderFactory, but a bunch of
|
| // the tests here probe the specific set of codecs provided by the builtin
|
| // factory. Those tests should probably be moved elsewhere.
|
| @@ -123,6 +152,8 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
|
| new FakeVoEWrapper(&voe_)));
|
| send_parameters_.codecs.push_back(kPcmuCodec);
|
| recv_parameters_.codecs.push_back(kPcmuCodec);
|
| + // Default Options.
|
| + EXPECT_TRUE(IsHighPassFilterEnabled());
|
| }
|
|
|
| bool SetupChannel() {
|
| @@ -607,6 +638,11 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
|
| protected:
|
| StrictMock<webrtc::test::MockAudioDeviceModule> adm_;
|
| StrictMock<webrtc::test::MockAudioProcessing> apm_;
|
| + webrtc::test::MockGainControl& apm_gc_;
|
| + webrtc::test::MockEchoCancellation& apm_ec_;
|
| + webrtc::test::MockNoiseSuppression& apm_ns_;
|
| + webrtc::test::MockVoiceDetection& apm_vd_;
|
| + StrictMock<MockTransmitMixer> transmit_mixer_;
|
| webrtc::RtcEventLogNullImpl event_log_;
|
| cricket::FakeCall call_;
|
| cricket::FakeWebRtcVoiceEngine voe_;
|
| @@ -2450,46 +2486,37 @@ TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) {
|
| // and start sending on it.
|
| TEST_F(WebRtcVoiceEngineTestFake, CodianSend) {
|
| EXPECT_TRUE(SetupSendStream());
|
| - cricket::AudioOptions options_adjust_agc;
|
| - options_adjust_agc.adjust_agc_delta = rtc::Optional<int>(-10);
|
| - webrtc::AgcConfig agc_config;
|
| - EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
|
| - EXPECT_EQ(0, agc_config.targetLeveldBOv);
|
| - send_parameters_.options = options_adjust_agc;
|
| + send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10);
|
| + EXPECT_CALL(apm_gc_,
|
| + set_target_level_dbfs(11)).Times(2).WillRepeatedly(Return(0));
|
| SetSendParameters(send_parameters_);
|
| SetSend(true);
|
| EXPECT_TRUE(GetSendStream(kSsrc1).IsSending());
|
| - EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
|
| - EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated
|
| SetSend(false);
|
| EXPECT_FALSE(GetSendStream(kSsrc1).IsSending());
|
| - EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
|
| }
|
|
|
| TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) {
|
| EXPECT_TRUE(SetupSendStream());
|
| EXPECT_CALL(adm_,
|
| BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false));
|
| - webrtc::AgcConfig agc_config;
|
| - EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
|
| - EXPECT_EQ(0, agc_config.targetLeveldBOv);
|
| + EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).Times(2).WillOnce(Return(0));
|
| send_parameters_.options.tx_agc_target_dbov = rtc::Optional<uint16_t>(3);
|
| send_parameters_.options.tx_agc_digital_compression_gain =
|
| rtc::Optional<uint16_t>(9);
|
| send_parameters_.options.tx_agc_limiter = rtc::Optional<bool>(true);
|
| send_parameters_.options.auto_gain_control = rtc::Optional<bool>(true);
|
| + EXPECT_CALL(apm_gc_, set_target_level_dbfs(3)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, set_compression_gain_db(9)).WillRepeatedly(Return(0));
|
| + EXPECT_CALL(apm_gc_, enable_limiter(true)).WillRepeatedly(Return(0));
|
| SetSendParameters(send_parameters_);
|
| - EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
|
| - EXPECT_EQ(3, agc_config.targetLeveldBOv);
|
| - EXPECT_EQ(9, agc_config.digitalCompressionGaindB);
|
| - EXPECT_TRUE(agc_config.limiterEnable);
|
|
|
| // Check interaction with adjust_agc_delta. Both should be respected, for
|
| // backwards compatibility.
|
| send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10);
|
| + EXPECT_CALL(apm_gc_, set_target_level_dbfs(13)).WillOnce(Return(0));
|
| SetSendParameters(send_parameters_);
|
| - EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
|
| - EXPECT_EQ(13, agc_config.targetLeveldBOv);
|
| }
|
|
|
| TEST_F(WebRtcVoiceEngineTestFake, SampleRatesViaOptions) {
|
| @@ -2957,202 +2984,102 @@ TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) {
|
| BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false));
|
| EXPECT_CALL(adm_,
|
| BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false));
|
| - bool ec_enabled;
|
| - webrtc::EcModes ec_mode;
|
| - webrtc::AecmModes aecm_mode;
|
| - bool cng_enabled;
|
| - bool agc_enabled;
|
| - webrtc::AgcModes agc_mode;
|
| - webrtc::AgcConfig agc_config;
|
| - bool ns_enabled;
|
| - webrtc::NsModes ns_mode;
|
| - bool stereo_swapping_enabled;
|
| - bool typing_detection_enabled;
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAecmMode(aecm_mode, cng_enabled);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - voe_.GetAgcConfig(agc_config);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled();
|
| - voe_.GetTypingDetectionStatus(typing_detection_enabled);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_TRUE(voe_.ec_metrics_enabled());
|
| - EXPECT_FALSE(cng_enabled);
|
| - EXPECT_TRUE(agc_enabled);
|
| - EXPECT_EQ(0, agc_config.targetLeveldBOv);
|
| - EXPECT_TRUE(ns_enabled);
|
| - EXPECT_TRUE(IsHighPassFilterEnabled());
|
| - EXPECT_FALSE(stereo_swapping_enabled);
|
| - EXPECT_TRUE(typing_detection_enabled);
|
| - EXPECT_EQ(ec_mode, webrtc::kEcConference);
|
| - EXPECT_EQ(ns_mode, webrtc::kNsHighSuppression);
|
| +
|
| EXPECT_EQ(50, voe_.GetNetEqCapacity());
|
| EXPECT_FALSE(voe_.GetNetEqFastAccelerate());
|
|
|
| // Nothing set in AudioOptions, so everything should be as default.
|
| send_parameters_.options = cricket::AudioOptions();
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAecmMode(aecm_mode, cng_enabled);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - voe_.GetAgcConfig(agc_config);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled();
|
| - voe_.GetTypingDetectionStatus(typing_detection_enabled);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_TRUE(voe_.ec_metrics_enabled());
|
| - EXPECT_FALSE(cng_enabled);
|
| - EXPECT_TRUE(agc_enabled);
|
| - EXPECT_EQ(0, agc_config.targetLeveldBOv);
|
| - EXPECT_TRUE(ns_enabled);
|
| EXPECT_TRUE(IsHighPassFilterEnabled());
|
| - EXPECT_FALSE(stereo_swapping_enabled);
|
| - EXPECT_TRUE(typing_detection_enabled);
|
| - EXPECT_EQ(ec_mode, webrtc::kEcConference);
|
| - EXPECT_EQ(ns_mode, webrtc::kNsHighSuppression);
|
| EXPECT_EQ(50, voe_.GetNetEqCapacity());
|
| EXPECT_FALSE(voe_.GetNetEqFastAccelerate());
|
|
|
| // Turn echo cancellation off
|
| + EXPECT_CALL(apm_ec_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(false)).WillOnce(Return(0));
|
| send_parameters_.options.echo_cancellation = rtc::Optional<bool>(false);
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - EXPECT_FALSE(ec_enabled);
|
|
|
| // Turn echo cancellation back on, with settings, and make sure
|
| // nothing else changed.
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| send_parameters_.options.echo_cancellation = rtc::Optional<bool>(true);
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAecmMode(aecm_mode, cng_enabled);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - voe_.GetAgcConfig(agc_config);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled();
|
| - voe_.GetTypingDetectionStatus(typing_detection_enabled);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_TRUE(voe_.ec_metrics_enabled());
|
| - EXPECT_TRUE(agc_enabled);
|
| - EXPECT_EQ(0, agc_config.targetLeveldBOv);
|
| - EXPECT_TRUE(ns_enabled);
|
| - EXPECT_TRUE(IsHighPassFilterEnabled());
|
| - EXPECT_FALSE(stereo_swapping_enabled);
|
| - EXPECT_TRUE(typing_detection_enabled);
|
| - EXPECT_EQ(ec_mode, webrtc::kEcConference);
|
| - EXPECT_EQ(ns_mode, webrtc::kNsHighSuppression);
|
|
|
| // Turn on delay agnostic aec and make sure nothing change w.r.t. echo
|
| // control.
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(true);
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAecmMode(aecm_mode, cng_enabled);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_TRUE(voe_.ec_metrics_enabled());
|
| - EXPECT_EQ(ec_mode, webrtc::kEcConference);
|
|
|
| // Turn off echo cancellation and delay agnostic aec.
|
| + EXPECT_CALL(apm_ec_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(false)).WillOnce(Return(0));
|
| send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(false);
|
| send_parameters_.options.extended_filter_aec = rtc::Optional<bool>(false);
|
| send_parameters_.options.echo_cancellation = rtc::Optional<bool>(false);
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - EXPECT_FALSE(ec_enabled);
|
| +
|
| // Turning delay agnostic aec back on should also turn on echo cancellation.
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(true);
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_TRUE(voe_.ec_metrics_enabled());
|
| - EXPECT_EQ(ec_mode, webrtc::kEcConference);
|
|
|
| // Turn off AGC
|
| + EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0));
|
| send_parameters_.options.auto_gain_control = rtc::Optional<bool>(false);
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - EXPECT_FALSE(agc_enabled);
|
|
|
| // Turn AGC back on
|
| + EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0));
|
| send_parameters_.options.auto_gain_control = rtc::Optional<bool>(true);
|
| send_parameters_.options.adjust_agc_delta = rtc::Optional<int>();
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - EXPECT_TRUE(agc_enabled);
|
| - voe_.GetAgcConfig(agc_config);
|
| - EXPECT_EQ(0, agc_config.targetLeveldBOv);
|
|
|
| // Turn off other options (and stereo swapping on).
|
| + EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_vd_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(true));
|
| send_parameters_.options.noise_suppression = rtc::Optional<bool>(false);
|
| send_parameters_.options.highpass_filter = rtc::Optional<bool>(false);
|
| send_parameters_.options.typing_detection = rtc::Optional<bool>(false);
|
| send_parameters_.options.stereo_swapping = rtc::Optional<bool>(true);
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled();
|
| - voe_.GetTypingDetectionStatus(typing_detection_enabled);
|
| - EXPECT_FALSE(ns_enabled);
|
| EXPECT_FALSE(IsHighPassFilterEnabled());
|
| - EXPECT_FALSE(typing_detection_enabled);
|
| - EXPECT_TRUE(stereo_swapping_enabled);
|
|
|
| // Set options again to ensure it has no impact.
|
| + EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_vd_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(true));
|
| SetSendParameters(send_parameters_);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_EQ(webrtc::kEcConference, ec_mode);
|
| - EXPECT_FALSE(ns_enabled);
|
| - EXPECT_EQ(webrtc::kNsHighSuppression, ns_mode);
|
| -}
|
| -
|
| -TEST_F(WebRtcVoiceEngineTestFake, DefaultOptions) {
|
| - EXPECT_TRUE(SetupSendStream());
|
| -
|
| - bool ec_enabled;
|
| - webrtc::EcModes ec_mode;
|
| - bool agc_enabled;
|
| - webrtc::AgcModes agc_mode;
|
| - bool ns_enabled;
|
| - webrtc::NsModes ns_mode;
|
| - bool stereo_swapping_enabled;
|
| - bool typing_detection_enabled;
|
| -
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled();
|
| - voe_.GetTypingDetectionStatus(typing_detection_enabled);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_TRUE(agc_enabled);
|
| - EXPECT_TRUE(ns_enabled);
|
| - EXPECT_TRUE(IsHighPassFilterEnabled());
|
| - EXPECT_TRUE(typing_detection_enabled);
|
| - EXPECT_FALSE(stereo_swapping_enabled);
|
| -}
|
| -
|
| -TEST_F(WebRtcVoiceEngineTestFake, InitDoesNotOverwriteDefaultAgcConfig) {
|
| - webrtc::AgcConfig set_config = {0};
|
| - set_config.targetLeveldBOv = 3;
|
| - set_config.digitalCompressionGaindB = 9;
|
| - set_config.limiterEnable = true;
|
| - EXPECT_EQ(0, voe_.SetAgcConfig(set_config));
|
| -
|
| - webrtc::AgcConfig config = {0};
|
| - EXPECT_EQ(0, voe_.GetAgcConfig(config));
|
| - EXPECT_EQ(set_config.targetLeveldBOv, config.targetLeveldBOv);
|
| - EXPECT_EQ(set_config.digitalCompressionGaindB,
|
| - config.digitalCompressionGaindB);
|
| - EXPECT_EQ(set_config.limiterEnable, config.limiterEnable);
|
| }
|
|
|
| TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) {
|
| EXPECT_TRUE(SetupSendStream());
|
| EXPECT_CALL(adm_,
|
| - BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false));
|
| + BuiltInAECIsAvailable()).Times(8).WillRepeatedly(Return(false));
|
| EXPECT_CALL(adm_,
|
| - BuiltInAGCIsAvailable()).Times(9).WillRepeatedly(Return(false));
|
| + BuiltInAGCIsAvailable()).Times(8).WillRepeatedly(Return(false));
|
| EXPECT_CALL(adm_,
|
| - BuiltInNSIsAvailable()).Times(9).WillRepeatedly(Return(false));
|
| + BuiltInNSIsAvailable()).Times(8).WillRepeatedly(Return(false));
|
| EXPECT_CALL(adm_,
|
| RecordingIsInitialized()).Times(2).WillRepeatedly(Return(false));
|
| EXPECT_CALL(adm_, Recording()).Times(2).WillRepeatedly(Return(false));
|
| @@ -3180,6 +3107,11 @@ TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) {
|
| parameters_options_all.options.echo_cancellation = rtc::Optional<bool>(true);
|
| parameters_options_all.options.auto_gain_control = rtc::Optional<bool>(true);
|
| parameters_options_all.options.noise_suppression = rtc::Optional<bool>(true);
|
| + EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).Times(2).WillRepeatedly(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).Times(2).WillRepeatedly(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).Times(2).WillRepeatedly(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(true)).Times(2).WillRepeatedly(Return(0));
|
| EXPECT_TRUE(channel1->SetSendParameters(parameters_options_all));
|
| EXPECT_EQ(parameters_options_all.options, channel1->options());
|
| EXPECT_TRUE(channel2->SetSendParameters(parameters_options_all));
|
| @@ -3189,6 +3121,11 @@ TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) {
|
| cricket::AudioSendParameters parameters_options_no_ns = send_parameters_;
|
| parameters_options_no_ns.options.noise_suppression =
|
| rtc::Optional<bool>(false);
|
| + EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
|
| EXPECT_TRUE(channel1->SetSendParameters(parameters_options_no_ns));
|
| cricket::AudioOptions expected_options = parameters_options_all.options;
|
| expected_options.echo_cancellation = rtc::Optional<bool>(true);
|
| @@ -3200,64 +3137,55 @@ TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) {
|
| cricket::AudioSendParameters parameters_options_no_agc = send_parameters_;
|
| parameters_options_no_agc.options.auto_gain_control =
|
| rtc::Optional<bool>(false);
|
| + EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0));
|
| EXPECT_TRUE(channel2->SetSendParameters(parameters_options_no_agc));
|
| expected_options.echo_cancellation = rtc::Optional<bool>(true);
|
| expected_options.auto_gain_control = rtc::Optional<bool>(false);
|
| expected_options.noise_suppression = rtc::Optional<bool>(true);
|
| EXPECT_EQ(expected_options, channel2->options());
|
|
|
| + EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0));
|
| EXPECT_TRUE(channel_->SetSendParameters(parameters_options_all));
|
| - bool ec_enabled;
|
| - webrtc::EcModes ec_mode;
|
| - bool agc_enabled;
|
| - webrtc::AgcModes agc_mode;
|
| - bool ns_enabled;
|
| - webrtc::NsModes ns_mode;
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_TRUE(agc_enabled);
|
| - EXPECT_TRUE(ns_enabled);
|
|
|
| + EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
|
| channel1->SetSend(true);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_TRUE(agc_enabled);
|
| - EXPECT_FALSE(ns_enabled);
|
|
|
| + EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0));
|
| channel2->SetSend(true);
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_FALSE(agc_enabled);
|
| - EXPECT_TRUE(ns_enabled);
|
|
|
| // Make sure settings take effect while we are sending.
|
| - EXPECT_TRUE(channel_->SetSendParameters(parameters_options_all));
|
| - EXPECT_CALL(apm_, ApplyConfig(testing::_));
|
| - EXPECT_CALL(apm_, SetExtraOptions(testing::_));
|
| cricket::AudioSendParameters parameters_options_no_agc_nor_ns =
|
| send_parameters_;
|
| parameters_options_no_agc_nor_ns.options.auto_gain_control =
|
| rtc::Optional<bool>(false);
|
| parameters_options_no_agc_nor_ns.options.noise_suppression =
|
| rtc::Optional<bool>(false);
|
| - channel2->SetSend(true);
|
| + EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0));
|
| + EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
|
| EXPECT_TRUE(channel2->SetSendParameters(parameters_options_no_agc_nor_ns));
|
| expected_options.echo_cancellation = rtc::Optional<bool>(true);
|
| expected_options.auto_gain_control = rtc::Optional<bool>(false);
|
| expected_options.noise_suppression = rtc::Optional<bool>(false);
|
| EXPECT_EQ(expected_options, channel2->options());
|
| - voe_.GetEcStatus(ec_enabled, ec_mode);
|
| - voe_.GetAgcStatus(agc_enabled, agc_mode);
|
| - voe_.GetNsStatus(ns_enabled, ns_mode);
|
| - EXPECT_TRUE(ec_enabled);
|
| - EXPECT_FALSE(agc_enabled);
|
| - EXPECT_FALSE(ns_enabled);
|
| }
|
|
|
| // This test verifies DSCP settings are properly applied on voice media channel.
|
|
|