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:

committed by
Commit Bot

parent
737e073f8d
commit
bd83b914c3
@ -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_
|
||||
|
Reference in New Issue
Block a user