diff --git a/api/audio/BUILD.gn b/api/audio/BUILD.gn index 9ea145bc2c..270a06579c 100644 --- a/api/audio/BUILD.gn +++ b/api/audio/BUILD.gn @@ -89,4 +89,7 @@ rtc_source_set("echo_control") { sources = [ "echo_control.h", ] + deps = [ + "../../rtc_base:checks", + ] } diff --git a/api/audio/echo_canceller3_factory.cc b/api/audio/echo_canceller3_factory.cc index cff75dea5a..7df43b3fd4 100644 --- a/api/audio/echo_canceller3_factory.cc +++ b/api/audio/echo_canceller3_factory.cc @@ -21,9 +21,16 @@ EchoCanceller3Factory::EchoCanceller3Factory(const EchoCanceller3Config& config) : config_(config) {} std::unique_ptr EchoCanceller3Factory::Create(int sample_rate_hz) { - return std::make_unique(config_, sample_rate_hz, - /*num_render_channels=*/1, - /*num_capture_channels=*/1); + return Create(sample_rate_hz, /*num_render_channels=*/1, + /*num_capture_channels=*/1); +} + +std::unique_ptr EchoCanceller3Factory::Create( + int sample_rate_hz, + int num_render_channels, + int num_capture_channels) { + return std::make_unique( + config_, sample_rate_hz, num_render_channels, num_capture_channels); } } // namespace webrtc diff --git a/api/audio/echo_canceller3_factory.h b/api/audio/echo_canceller3_factory.h index 3fa6922a3b..43f49a1b66 100644 --- a/api/audio/echo_canceller3_factory.h +++ b/api/audio/echo_canceller3_factory.h @@ -29,9 +29,15 @@ class RTC_EXPORT EchoCanceller3Factory : public EchoControlFactory { explicit EchoCanceller3Factory(const EchoCanceller3Config& config); // Creates an EchoCanceller3 running at the specified sampling rate using a - // mono setup + // mono setup. std::unique_ptr Create(int sample_rate_hz) override; + // Creates an EchoCanceller3 running at the specified sampling rate using a + // multichannel setup. + std::unique_ptr Create(int sample_rate_hz, + int num_render_channels, + int num_capture_channels) override; + private: const EchoCanceller3Config config_; }; diff --git a/api/audio/echo_control.h b/api/audio/echo_control.h index d16c1ff086..11ba989d7a 100644 --- a/api/audio/echo_control.h +++ b/api/audio/echo_control.h @@ -13,6 +13,8 @@ #include +#include "rtc_base/checks.h" + namespace webrtc { class AudioBuffer; @@ -51,6 +53,14 @@ class EchoControl { class EchoControlFactory { public: virtual std::unique_ptr Create(int sample_rate_hz) = 0; + // TODO(peah): Make pure virtual. + virtual std::unique_ptr Create(int sample_rate_hz, + int num_render_channels, + int num_capture_channels) { + RTC_NOTREACHED(); + return nullptr; + } + virtual ~EchoControlFactory() = default; }; } // namespace webrtc diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index 4573aedf98..fb46e04577 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -1783,8 +1783,8 @@ void AudioProcessingImpl::InitializeEchoController() { if (use_echo_controller) { // Create and activate the echo controller. if (echo_control_factory_) { - submodules_.echo_controller = - echo_control_factory_->Create(proc_sample_rate_hz()); + submodules_.echo_controller = echo_control_factory_->Create( + proc_sample_rate_hz(), num_reverse_channels(), num_proc_channels()); } else { submodules_.echo_controller = std::make_unique( EchoCanceller3Config(), proc_sample_rate_hz(), num_reverse_channels(), diff --git a/modules/audio_processing/audio_processing_impl_unittest.cc b/modules/audio_processing/audio_processing_impl_unittest.cc index b4f78e544e..5a2391b510 100644 --- a/modules/audio_processing/audio_processing_impl_unittest.cc +++ b/modules/audio_processing/audio_processing_impl_unittest.cc @@ -54,6 +54,12 @@ class MockEchoControlFactory : public EchoControlFactory { // Returns a pointer to the next MockEchoControl that this factory creates. MockEchoControl* GetNext() const { return next_mock_.get(); } std::unique_ptr Create(int sample_rate_hz) override { + RTC_NOTREACHED(); + return nullptr; + } + std::unique_ptr Create(int sample_rate_hz, + int num_render_channels, + int num_capture_channels) override { std::unique_ptr mock = std::move(next_mock_); next_mock_ = std::make_unique(); return mock; diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc index 094823de41..06dbba7a5b 100644 --- a/modules/audio_processing/audio_processing_unittest.cc +++ b/modules/audio_processing/audio_processing_unittest.cc @@ -2430,8 +2430,8 @@ class MyEchoControlFactory : public EchoControlFactory { } std::unique_ptr Create(int sample_rate_hz, - size_t num_render_channels, - size_t num_capture_channels) { + int num_render_channels, + int num_capture_channels) { return Create(sample_rate_hz); } };