Separate AEC3 config from AudioProcessing::Config.

The struct containing the config for AEC3 is removed from
AudioProcessing::Config and is put in a new struct called
EchoCanceller3Config.

AEC3 should no longer be activated through
AudioProcessing::ApplyConfig. Instead an EchoCanceller3Factory
can be injected at AudioProcessing creation.

Bug: webrtc:8346
Change-Id: I27e3592e675eec3632a60c45d9e0d12514c2c567
Reviewed-on: https://webrtc-review.googlesource.com/11420
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20342}
This commit is contained in:
Gustaf Ullberg
2017-10-18 12:32:42 +02:00
committed by Commit Bot
parent 737e073f8d
commit bd83b914c3
36 changed files with 285 additions and 323 deletions

View File

@ -267,71 +267,9 @@ class AudioProcessing : public rtc::RefCountInterface {
bool enabled = false;
} high_pass_filter;
// Enables the next generation AEC functionality. This feature replaces the
// standard methods for echo removal in the AEC.
// The functionality is not yet activated in the code and turning this on
// does not yet have the desired behavior.
// Deprecated way of activating AEC3.
// TODO(gustaf): Remove when possible.
struct EchoCanceller3 {
struct Param {
struct Delay {
size_t default_delay = 5;
} delay;
struct Erle {
float min = 1.f;
float max_l = 8.f;
float max_h = 1.5f;
} erle;
struct EpStrength {
float lf = 10.f;
float mf = 10.f;
float hf = 10.f;
float default_len = 0.f;
bool echo_can_saturate = true;
bool bounded_erl = false;
} ep_strength;
struct Mask {
float m1 = 0.01f;
float m2 = 0.0001f;
float m3 = 0.01f;
float m4 = 0.1f;
float m5 = 0.3f;
float m6 = 0.0001f;
float m7 = 0.01f;
float m8 = 0.0001f;
float m9 = 0.1f;
} gain_mask;
struct EchoAudibility {
float low_render_limit = 4 * 64.f;
float normal_render_limit = 64.f;
} echo_audibility;
struct RenderLevels {
float active_render_limit = 100.f;
float poor_excitation_render_limit = 150.f;
} render_levels;
struct GainUpdates {
struct GainChanges {
float max_inc;
float max_dec;
float rate_inc;
float rate_dec;
float min_inc;
float min_dec;
};
GainChanges low_noise = {3.f, 3.f, 1.5f, 1.5f, 1.5f, 1.5f};
GainChanges normal = {2.f, 2.f, 1.5f, 1.5f, 1.2f, 1.2f};
GainChanges saturation = {1.2f, 1.2f, 1.5f, 1.5f, 1.f, 1.f};
GainChanges nonlinear = {1.5f, 1.5f, 1.2f, 1.2f, 1.1f, 1.1f};
float floor_first_increase = 0.0001f;
} gain_updates;
} param;
bool enabled = false;
} echo_canceller3;
@ -1194,6 +1132,78 @@ class VoiceDetection {
protected:
virtual ~VoiceDetection() {}
};
// Configuration struct for EchoCanceller3
struct EchoCanceller3Config {
struct Delay {
size_t default_delay = 5;
} delay;
struct Erle {
float min = 1.f;
float max_l = 8.f;
float max_h = 1.5f;
} erle;
struct EpStrength {
float lf = 10.f;
float mf = 10.f;
float hf = 10.f;
float default_len = 0.f;
bool echo_can_saturate = true;
bool bounded_erl = false;
} ep_strength;
struct Mask {
float m1 = 0.01f;
float m2 = 0.0001f;
float m3 = 0.01f;
float m4 = 0.1f;
float m5 = 0.3f;
float m6 = 0.0001f;
float m7 = 0.01f;
float m8 = 0.0001f;
float m9 = 0.1f;
} gain_mask;
struct EchoAudibility {
float low_render_limit = 4 * 64.f;
float normal_render_limit = 64.f;
} echo_audibility;
struct RenderLevels {
float active_render_limit = 100.f;
float poor_excitation_render_limit = 150.f;
} render_levels;
struct GainUpdates {
struct GainChanges {
float max_inc;
float max_dec;
float rate_inc;
float rate_dec;
float min_inc;
float min_dec;
};
GainChanges low_noise = {3.f, 3.f, 1.5f, 1.5f, 1.5f, 1.5f};
GainChanges normal = {2.f, 2.f, 1.5f, 1.5f, 1.2f, 1.2f};
GainChanges saturation = {1.2f, 1.2f, 1.5f, 1.5f, 1.f, 1.f};
GainChanges nonlinear = {1.5f, 1.5f, 1.2f, 1.2f, 1.1f, 1.1f};
float floor_first_increase = 0.0001f;
} gain_updates;
};
class EchoCanceller3Factory : public EchoControlFactory {
public:
EchoCanceller3Factory();
EchoCanceller3Factory(const EchoCanceller3Config& config);
std::unique_ptr<EchoControl> Create(int sample_rate_hz) override;
private:
EchoCanceller3Config config_;
};
} // namespace webrtc
#endif // MODULES_AUDIO_PROCESSING_INCLUDE_AUDIO_PROCESSING_H_