Hi all,
You can stop reading if your code doesn't configure AEC (acoustic echo cancellation) via the webrtc::AudioProcessing interface.
What’s changing?
On August 16:
The flag webrtc::AudioProcessing::Config::EchoCanceller::enable will apply to all echo cancellation performed by the audio processing module, both injected and built-in AECs. (It's currently a no-op.)
The flag webrtc::AudioProcessing::Config::EchoCanceller::mobile_mode will determine which built-in AEC is used, if no injected AEC is present.
On September 4:
We remove the interfaces webrtc::EchoControlMobile and webrtc::EchoCancellation.
What do I need to do?
Before August 16, you need to set the fields of a webrtc::AudioProcessing::Config in tandem with your current AEC configuration, and call AudioProcessing::ApplyConfig with it.
After August 16 and before September 4, you will need to stop using the old AEC interfaces.
How?
Here's one example for using the config in tandem, below are more examples of config usage:
rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing = ... ; webrtc::AudioProcessing::Config config = audio_processing->GetConfig(); // Example: Enable AEC effect, and set builtin echo cancellation (if used) to AEC2. config.echo_canceller.enabled = true; config.echo_canceller.mobile_mode = false; // Example: Enable AEC effect, and set builtin echo cancellation (if used) to AECM. config.echo_canceller.enabled = true; config.echo_canceller.mobile_mode = true; // Example: Disable AEC effect. config.echo_canceller.enabled = false; // Customize the rest of config. ... // Apply all settings in config, including unchanged defaults. audio_processing->ApplyConfig(config); |
The remaining settings in webrtc::EchoControlMobile will be non-configurable: We’ll cement the current defaults for routing mode (speakerphone) and comfort noise (disabled). Set/get echo path will be deprecated.
For webrtc::EchoCancellation, the suppression level will be the by far most used setting (high suppression), and drift compensation the current default (disabled). Metrics are still available via AudioProcessing::GetStatistics(). stream_has_echo() and aec_core() will be deprecated.
Why are you doing this?
These pointer-to-internal-component interfaces restrict our threading model and internal refactoring, and expose a lot of little-tested legacy code.
If you have any questions, feel free to reach out.