Reland "Correct AEC3 multichannel functionality activation"

This is a reland of 9dda1b3a484ebeef921e419406402039f3852427

Original change's description:
> Correct AEC3 multichannel functionality activation
> 
> This CL corrects the AEC3 multichannel activation
> to also work for the case when a factory is used
> for the activation.
> 
> Bug: webrtc:10913
> Change-Id: Ic2807d8bcef759261fde14447cff30633ba248dc
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158794
> Commit-Queue: Per Åhgren <peah@webrtc.org>
> Reviewed-by: Sam Zackrisson <saza@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#29676}

Bug: webrtc:10913
Change-Id: I1cb3d0de61ea0b299158ca85433f2442c65c196f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158886
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29690}
This commit is contained in:
Per Åhgren 2019-11-01 20:44:11 +01:00 committed by Commit Bot
parent 4c04d8e10c
commit 4e5c709ed4
7 changed files with 40 additions and 8 deletions

View File

@ -89,4 +89,7 @@ rtc_source_set("echo_control") {
sources = [
"echo_control.h",
]
deps = [
"../../rtc_base:checks",
]
}

View File

@ -21,9 +21,16 @@ EchoCanceller3Factory::EchoCanceller3Factory(const EchoCanceller3Config& config)
: config_(config) {}
std::unique_ptr<EchoControl> EchoCanceller3Factory::Create(int sample_rate_hz) {
return std::make_unique<EchoCanceller3>(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<EchoControl> EchoCanceller3Factory::Create(
int sample_rate_hz,
int num_render_channels,
int num_capture_channels) {
return std::make_unique<EchoCanceller3>(
config_, sample_rate_hz, num_render_channels, num_capture_channels);
}
} // namespace webrtc

View File

@ -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<EchoControl> Create(int sample_rate_hz) override;
// Creates an EchoCanceller3 running at the specified sampling rate using a
// multichannel setup.
std::unique_ptr<EchoControl> Create(int sample_rate_hz,
int num_render_channels,
int num_capture_channels) override;
private:
const EchoCanceller3Config config_;
};

View File

@ -13,6 +13,8 @@
#include <memory>
#include "rtc_base/checks.h"
namespace webrtc {
class AudioBuffer;
@ -51,6 +53,14 @@ class EchoControl {
class EchoControlFactory {
public:
virtual std::unique_ptr<EchoControl> Create(int sample_rate_hz) = 0;
// TODO(peah): Make pure virtual.
virtual std::unique_ptr<EchoControl> Create(int sample_rate_hz,
int num_render_channels,
int num_capture_channels) {
RTC_NOTREACHED();
return nullptr;
}
virtual ~EchoControlFactory() = default;
};
} // namespace webrtc

View File

@ -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<EchoCanceller3>(
EchoCanceller3Config(), proc_sample_rate_hz(), num_reverse_channels(),

View File

@ -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<EchoControl> Create(int sample_rate_hz) override {
RTC_NOTREACHED();
return nullptr;
}
std::unique_ptr<EchoControl> Create(int sample_rate_hz,
int num_render_channels,
int num_capture_channels) override {
std::unique_ptr<EchoControl> mock = std::move(next_mock_);
next_mock_ = std::make_unique<MockEchoControl>();
return mock;

View File

@ -2430,8 +2430,8 @@ class MyEchoControlFactory : public EchoControlFactory {
}
std::unique_ptr<EchoControl> 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);
}
};