Enable Echo Control at injection.

Echo Control is enabled in capture_nonlocked_ when injected.
Renamed echo_canceller3_enabled to echo_controller_enabled.

Bug: webrtc:8346
Change-Id: Icf441f07ce64719358841544da7579feeb7cfdbb
Reviewed-on: https://webrtc-review.googlesource.com/10808
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20311}
This commit is contained in:
Gustaf Ullberg 2017-10-16 13:49:04 +02:00 committed by Commit Bot
parent 31fbb5425e
commit ce045acd94
3 changed files with 20 additions and 16 deletions

View File

@ -186,7 +186,7 @@ bool AudioProcessingImpl::ApmSubmoduleStates::Update(
bool adaptive_gain_controller_enabled, bool adaptive_gain_controller_enabled,
bool gain_controller2_enabled, bool gain_controller2_enabled,
bool level_controller_enabled, bool level_controller_enabled,
bool echo_canceller3_enabled, bool echo_controller_enabled,
bool voice_activity_detector_enabled, bool voice_activity_detector_enabled,
bool level_estimator_enabled, bool level_estimator_enabled,
bool transient_suppressor_enabled) { bool transient_suppressor_enabled) {
@ -206,7 +206,7 @@ bool AudioProcessingImpl::ApmSubmoduleStates::Update(
changed |= changed |=
(gain_controller2_enabled != gain_controller2_enabled_); (gain_controller2_enabled != gain_controller2_enabled_);
changed |= (level_controller_enabled != level_controller_enabled_); changed |= (level_controller_enabled != level_controller_enabled_);
changed |= (echo_canceller3_enabled != echo_canceller3_enabled_); changed |= (echo_controller_enabled != echo_controller_enabled_);
changed |= (level_estimator_enabled != level_estimator_enabled_); changed |= (level_estimator_enabled != level_estimator_enabled_);
changed |= changed |=
(voice_activity_detector_enabled != voice_activity_detector_enabled_); (voice_activity_detector_enabled != voice_activity_detector_enabled_);
@ -222,7 +222,7 @@ bool AudioProcessingImpl::ApmSubmoduleStates::Update(
adaptive_gain_controller_enabled_ = adaptive_gain_controller_enabled; adaptive_gain_controller_enabled_ = adaptive_gain_controller_enabled;
gain_controller2_enabled_ = gain_controller2_enabled; gain_controller2_enabled_ = gain_controller2_enabled;
level_controller_enabled_ = level_controller_enabled; level_controller_enabled_ = level_controller_enabled;
echo_canceller3_enabled_ = echo_canceller3_enabled; echo_controller_enabled_ = echo_controller_enabled;
level_estimator_enabled_ = level_estimator_enabled; level_estimator_enabled_ = level_estimator_enabled;
voice_activity_detector_enabled_ = voice_activity_detector_enabled; voice_activity_detector_enabled_ = voice_activity_detector_enabled;
transient_suppressor_enabled_ = transient_suppressor_enabled; transient_suppressor_enabled_ = transient_suppressor_enabled;
@ -248,7 +248,7 @@ bool AudioProcessingImpl::ApmSubmoduleStates::CaptureMultiBandProcessingActive()
return low_cut_filter_enabled_ || echo_canceller_enabled_ || return low_cut_filter_enabled_ || echo_canceller_enabled_ ||
mobile_echo_controller_enabled_ || noise_suppressor_enabled_ || mobile_echo_controller_enabled_ || noise_suppressor_enabled_ ||
beamformer_enabled_ || adaptive_gain_controller_enabled_ || beamformer_enabled_ || adaptive_gain_controller_enabled_ ||
echo_canceller3_enabled_; echo_controller_enabled_;
} }
bool AudioProcessingImpl::ApmSubmoduleStates::CaptureFullBandProcessingActive() bool AudioProcessingImpl::ApmSubmoduleStates::CaptureFullBandProcessingActive()
@ -261,7 +261,7 @@ bool AudioProcessingImpl::ApmSubmoduleStates::RenderMultiBandSubModulesActive()
const { const {
return RenderMultiBandProcessingActive() || echo_canceller_enabled_ || return RenderMultiBandProcessingActive() || echo_canceller_enabled_ ||
mobile_echo_controller_enabled_ || adaptive_gain_controller_enabled_ || mobile_echo_controller_enabled_ || adaptive_gain_controller_enabled_ ||
echo_canceller3_enabled_; echo_controller_enabled_;
} }
bool AudioProcessingImpl::ApmSubmoduleStates::RenderMultiBandProcessingActive() bool AudioProcessingImpl::ApmSubmoduleStates::RenderMultiBandProcessingActive()
@ -373,6 +373,10 @@ AudioProcessingImpl::AudioProcessingImpl(
rtc::CritScope cs_render(&crit_render_); rtc::CritScope cs_render(&crit_render_);
rtc::CritScope cs_capture(&crit_capture_); rtc::CritScope cs_capture(&crit_capture_);
// Mark Echo Controller enabled if a factory is injected.
capture_nonlocked_.echo_controller_enabled =
static_cast<bool>(echo_control_factory_);
public_submodules_->echo_cancellation.reset( public_submodules_->echo_cancellation.reset(
new EchoCancellationImpl(&crit_render_, &crit_capture_)); new EchoCancellationImpl(&crit_render_, &crit_capture_));
public_submodules_->echo_control_mobile.reset( public_submodules_->echo_control_mobile.reset(
@ -690,13 +694,13 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
// Inject EchoCanceller3 if requested. // Inject EchoCanceller3 if requested.
if (config.echo_canceller3.enabled && !echo_control_factory_) { if (config.echo_canceller3.enabled && !echo_control_factory_) {
capture_nonlocked_.echo_canceller3_enabled = capture_nonlocked_.echo_controller_enabled =
config_.echo_canceller3.enabled; config_.echo_canceller3.enabled;
echo_control_factory_ = std::unique_ptr<EchoControlFactory>( echo_control_factory_ = std::unique_ptr<EchoControlFactory>(
new EchoCanceller3Factory(config.echo_canceller3)); new EchoCanceller3Factory(config.echo_canceller3));
InitializeEchoController(); InitializeEchoController();
LOG(LS_INFO) << "Echo canceller 3 activated: " LOG(LS_INFO) << "Echo canceller 3 activated: "
<< capture_nonlocked_.echo_canceller3_enabled; << capture_nonlocked_.echo_controller_enabled;
} }
config_ok = GainController2::Validate(config_.gain_controller2); config_ok = GainController2::Validate(config_.gain_controller2);
@ -773,7 +777,7 @@ size_t AudioProcessingImpl::num_input_channels() const {
size_t AudioProcessingImpl::num_proc_channels() const { size_t AudioProcessingImpl::num_proc_channels() const {
// Used as callback from submodules, hence locking is not allowed. // Used as callback from submodules, hence locking is not allowed.
return (capture_nonlocked_.beamformer_enabled || return (capture_nonlocked_.beamformer_enabled ||
capture_nonlocked_.echo_canceller3_enabled) capture_nonlocked_.echo_controller_enabled)
? 1 ? 1
: num_output_channels(); : num_output_channels();
} }
@ -1642,7 +1646,7 @@ bool AudioProcessingImpl::UpdateActiveSubmoduleStates() {
public_submodules_->gain_control->is_enabled(), public_submodules_->gain_control->is_enabled(),
config_.gain_controller2.enabled, config_.gain_controller2.enabled,
capture_nonlocked_.level_controller_enabled, capture_nonlocked_.level_controller_enabled,
capture_nonlocked_.echo_canceller3_enabled, capture_nonlocked_.echo_controller_enabled,
public_submodules_->voice_detection->is_enabled(), public_submodules_->voice_detection->is_enabled(),
public_submodules_->level_estimator->is_enabled(), public_submodules_->level_estimator->is_enabled(),
capture_.transient_suppressor_enabled); capture_.transient_suppressor_enabled);
@ -1809,8 +1813,8 @@ void AudioProcessingImpl::WriteAecDumpConfigMessage(bool forced) {
if (constants_.agc_clipped_level_min != kClippedLevelMin) { if (constants_.agc_clipped_level_min != kClippedLevelMin) {
experiments_description += "AgcClippingLevelExperiment;"; experiments_description += "AgcClippingLevelExperiment;";
} }
if (capture_nonlocked_.echo_canceller3_enabled) { if (capture_nonlocked_.echo_controller_enabled) {
experiments_description += "EchoCanceller3;"; experiments_description += "EchoController;";
} }
if (config_.gain_controller2.enabled) { if (config_.gain_controller2.enabled) {
experiments_description += "GainController2;"; experiments_description += "GainController2;";

View File

@ -159,7 +159,7 @@ class AudioProcessingImpl : public AudioProcessing {
bool adaptive_gain_controller_enabled, bool adaptive_gain_controller_enabled,
bool gain_controller2_enabled, bool gain_controller2_enabled,
bool level_controller_enabled, bool level_controller_enabled,
bool echo_canceller3_enabled, bool echo_controller_enabled,
bool voice_activity_detector_enabled, bool voice_activity_detector_enabled,
bool level_estimator_enabled, bool level_estimator_enabled,
bool transient_suppressor_enabled); bool transient_suppressor_enabled);
@ -181,7 +181,7 @@ class AudioProcessingImpl : public AudioProcessing {
bool adaptive_gain_controller_enabled_ = false; bool adaptive_gain_controller_enabled_ = false;
bool gain_controller2_enabled_ = false; bool gain_controller2_enabled_ = false;
bool level_controller_enabled_ = false; bool level_controller_enabled_ = false;
bool echo_canceller3_enabled_ = false; bool echo_controller_enabled_ = false;
bool level_estimator_enabled_ = false; bool level_estimator_enabled_ = false;
bool voice_activity_detector_enabled_ = false; bool voice_activity_detector_enabled_ = false;
bool transient_suppressor_enabled_ = false; bool transient_suppressor_enabled_ = false;
@ -373,7 +373,7 @@ class AudioProcessingImpl : public AudioProcessing {
bool beamformer_enabled; bool beamformer_enabled;
bool intelligibility_enabled; bool intelligibility_enabled;
bool level_controller_enabled = false; bool level_controller_enabled = false;
bool echo_canceller3_enabled = false; bool echo_controller_enabled = false;
} capture_nonlocked_; } capture_nonlocked_;
struct ApmRenderState { struct ApmRenderState {

View File

@ -402,7 +402,7 @@ TEST_F(DebugDumpTest, VerifyCombinedExperimentalStringInclusive) {
ASSERT_TRUE(msg->has_experiments_description()); ASSERT_TRUE(msg->has_experiments_description());
EXPECT_PRED_FORMAT2(testing::IsSubstring, "RefinedAdaptiveFilter", EXPECT_PRED_FORMAT2(testing::IsSubstring, "RefinedAdaptiveFilter",
msg->experiments_description().c_str()); msg->experiments_description().c_str());
EXPECT_PRED_FORMAT2(testing::IsSubstring, "EchoCanceller3", EXPECT_PRED_FORMAT2(testing::IsSubstring, "EchoController",
msg->experiments_description().c_str()); msg->experiments_description().c_str());
EXPECT_PRED_FORMAT2(testing::IsSubstring, "AgcClippingLevelExperiment", EXPECT_PRED_FORMAT2(testing::IsSubstring, "AgcClippingLevelExperiment",
msg->experiments_description().c_str()); msg->experiments_description().c_str());
@ -457,7 +457,7 @@ TEST_F(DebugDumpTest, VerifyAec3ExperimentalString) {
if (event->type() == audioproc::Event::CONFIG) { if (event->type() == audioproc::Event::CONFIG) {
const audioproc::Config* msg = &event->config(); const audioproc::Config* msg = &event->config();
ASSERT_TRUE(msg->has_experiments_description()); ASSERT_TRUE(msg->has_experiments_description());
EXPECT_PRED_FORMAT2(testing::IsSubstring, "EchoCanceller3", EXPECT_PRED_FORMAT2(testing::IsSubstring, "EchoController",
msg->experiments_description().c_str()); msg->experiments_description().c_str());
} }
} }