Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: webrtc/modules/audio_processing/audio_processing_impl.cc

Issue 2995043002: AGC2 dummy module: fixed gain param, APM integration, audioproc_f adaptation (Closed)
Patch Set: comments addressed Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 bool AudioProcessingImpl::ApmSubmoduleStates::CaptureMultiBandProcessingActive() 243 bool AudioProcessingImpl::ApmSubmoduleStates::CaptureMultiBandProcessingActive()
244 const { 244 const {
245 return low_cut_filter_enabled_ || echo_canceller_enabled_ || 245 return low_cut_filter_enabled_ || echo_canceller_enabled_ ||
246 mobile_echo_controller_enabled_ || noise_suppressor_enabled_ || 246 mobile_echo_controller_enabled_ || noise_suppressor_enabled_ ||
247 beamformer_enabled_ || adaptive_gain_controller_enabled_ || 247 beamformer_enabled_ || adaptive_gain_controller_enabled_ ||
248 echo_canceller3_enabled_; 248 echo_canceller3_enabled_;
249 } 249 }
250 250
251 bool AudioProcessingImpl::ApmSubmoduleStates::CaptureFullBandProcessingActive() 251 bool AudioProcessingImpl::ApmSubmoduleStates::CaptureFullBandProcessingActive()
252 const { 252 const {
253 return level_controller_enabled_; 253 return level_controller_enabled_ && gain_controller2_enabled_;
254 } 254 }
255 255
256 bool AudioProcessingImpl::ApmSubmoduleStates::RenderMultiBandSubModulesActive() 256 bool AudioProcessingImpl::ApmSubmoduleStates::RenderMultiBandSubModulesActive()
257 const { 257 const {
258 return RenderMultiBandProcessingActive() || echo_canceller_enabled_ || 258 return RenderMultiBandProcessingActive() || echo_canceller_enabled_ ||
259 mobile_echo_controller_enabled_ || adaptive_gain_controller_enabled_ || 259 mobile_echo_controller_enabled_ || adaptive_gain_controller_enabled_ ||
260 echo_canceller3_enabled_; 260 echo_canceller3_enabled_;
261 } 261 }
262 262
263 bool AudioProcessingImpl::ApmSubmoduleStates::RenderMultiBandProcessingActive() 263 bool AudioProcessingImpl::ApmSubmoduleStates::RenderMultiBandProcessingActive()
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 new VoiceDetectionImpl(&crit_capture_)); 364 new VoiceDetectionImpl(&crit_capture_));
365 public_submodules_->gain_control_for_experimental_agc.reset( 365 public_submodules_->gain_control_for_experimental_agc.reset(
366 new GainControlForExperimentalAgc( 366 new GainControlForExperimentalAgc(
367 public_submodules_->gain_control.get(), &crit_capture_)); 367 public_submodules_->gain_control.get(), &crit_capture_));
368 private_submodules_->residual_echo_detector.reset( 368 private_submodules_->residual_echo_detector.reset(
369 new ResidualEchoDetector()); 369 new ResidualEchoDetector());
370 370
371 // TODO(peah): Move this creation to happen only when the level controller 371 // TODO(peah): Move this creation to happen only when the level controller
372 // is enabled. 372 // is enabled.
373 private_submodules_->level_controller.reset(new LevelController()); 373 private_submodules_->level_controller.reset(new LevelController());
374
375 // TODO(alessiob): Move this creation to happen only when the gain
376 // controller is enabled.
AleBzk 2017/09/14 09:21:56 @Per: I replicated the TODO from LC, but the code
peah-webrtc 2017/09/15 07:44:25 Acknowledged.
AleBzk 2017/09/29 09:39:06 Done.
377 private_submodules_->gain_controller2.reset(new GainController2());
374 } 378 }
375 379
376 SetExtraOptions(config); 380 SetExtraOptions(config);
377 } 381 }
378 382
379 AudioProcessingImpl::~AudioProcessingImpl() { 383 AudioProcessingImpl::~AudioProcessingImpl() {
380 // Depends on gain_control_ and 384 // Depends on gain_control_ and
381 // public_submodules_->gain_control_for_experimental_agc. 385 // public_submodules_->gain_control_for_experimental_agc.
382 private_submodules_->agc_manager.reset(); 386 private_submodules_->agc_manager.reset();
383 // Depends on gain_control_. 387 // Depends on gain_control_.
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 673
670 if (config.echo_canceller3.enabled != 674 if (config.echo_canceller3.enabled !=
671 capture_nonlocked_.echo_canceller3_enabled) { 675 capture_nonlocked_.echo_canceller3_enabled) {
672 capture_nonlocked_.echo_canceller3_enabled = 676 capture_nonlocked_.echo_canceller3_enabled =
673 config_.echo_canceller3.enabled; 677 config_.echo_canceller3.enabled;
674 InitializeEchoCanceller3(); 678 InitializeEchoCanceller3();
675 LOG(LS_INFO) << "Echo canceller 3 activated: " 679 LOG(LS_INFO) << "Echo canceller 3 activated: "
676 << capture_nonlocked_.echo_canceller3_enabled; 680 << capture_nonlocked_.echo_canceller3_enabled;
677 } 681 }
678 682
679 config_ok = GainController2::Validate(config_.gain_controller2); 683 if (!GainController2::Validate(config_.gain_controller2)) {
peah-webrtc 2017/09/15 07:44:25 Even though this works, I think it makes sense to
AleBzk 2017/09/29 09:39:06 Done.
680 if (!config_ok) {
681 LOG(LS_ERROR) << "AudioProcessing module config error" << std::endl 684 LOG(LS_ERROR) << "AudioProcessing module config error" << std::endl
682 << "gain_controller2: " 685 << "Gain Controller 2: "
683 << GainController2::ToString(config_.gain_controller2) 686 << GainController2::ToString(config_.gain_controller2)
684 << std::endl 687 << std::endl
685 << "Reverting to default parameter set"; 688 << "Reverting to default parameter set";
686 config_.gain_controller2 = AudioProcessing::Config::GainController2(); 689 config_.gain_controller2 = AudioProcessing::Config::GainController2();
687 } 690 }
688 691 InitializeGainController2();
AleBzk 2017/09/14 09:21:56 @Per: every time that we call AudioProcessingImpl:
peah-webrtc 2017/09/15 07:44:25 I think so.
689 if (config.gain_controller2.enabled != 692 private_submodules_->gain_controller2->ApplyConfig(config_.gain_controller2);
690 capture_nonlocked_.gain_controller2_enabled) { 693 LOG(LS_INFO) << "Gain Controller 2 activated: "
691 capture_nonlocked_.gain_controller2_enabled = 694 << config_.gain_controller2.enabled;
692 config_.gain_controller2.enabled;
693 InitializeGainController2();
694 LOG(LS_INFO) << "Gain controller 2 activated: "
695 << capture_nonlocked_.gain_controller2_enabled;
696 }
697 } 695 }
698 696
699 void AudioProcessingImpl::SetExtraOptions(const webrtc::Config& config) { 697 void AudioProcessingImpl::SetExtraOptions(const webrtc::Config& config) {
700 // Run in a single-threaded manner when setting the extra options. 698 // Run in a single-threaded manner when setting the extra options.
701 rtc::CritScope cs_render(&crit_render_); 699 rtc::CritScope cs_render(&crit_render_);
702 rtc::CritScope cs_capture(&crit_capture_); 700 rtc::CritScope cs_capture(&crit_capture_);
703 701
704 public_submodules_->echo_cancellation->SetExtraOptions(config); 702 public_submodules_->echo_cancellation->SetExtraOptions(config);
705 703
706 if (capture_.transient_suppressor_enabled != 704 if (capture_.transient_suppressor_enabled !=
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
1263 1261
1264 public_submodules_->transient_suppressor->Suppress( 1262 public_submodules_->transient_suppressor->Suppress(
1265 capture_buffer->channels_f()[0], capture_buffer->num_frames(), 1263 capture_buffer->channels_f()[0], capture_buffer->num_frames(),
1266 capture_buffer->num_channels(), 1264 capture_buffer->num_channels(),
1267 capture_buffer->split_bands_const_f(0)[kBand0To8kHz], 1265 capture_buffer->split_bands_const_f(0)[kBand0To8kHz],
1268 capture_buffer->num_frames_per_band(), capture_buffer->keyboard_data(), 1266 capture_buffer->num_frames_per_band(), capture_buffer->keyboard_data(),
1269 capture_buffer->num_keyboard_frames(), voice_probability, 1267 capture_buffer->num_keyboard_frames(), voice_probability,
1270 capture_.key_pressed); 1268 capture_.key_pressed);
1271 } 1269 }
1272 1270
1273 if (capture_nonlocked_.gain_controller2_enabled) { 1271 if (config_.gain_controller2.enabled) {
1274 private_submodules_->gain_controller2->Process(capture_buffer); 1272 private_submodules_->gain_controller2->Process(capture_buffer);
1275 } 1273 }
1276 1274
1277 if (capture_nonlocked_.level_controller_enabled) { 1275 if (capture_nonlocked_.level_controller_enabled) {
1278 private_submodules_->level_controller->Process(capture_buffer); 1276 private_submodules_->level_controller->Process(capture_buffer);
1279 } 1277 }
1280 1278
1281 // The level estimator operates on the recombined data. 1279 // The level estimator operates on the recombined data.
1282 public_submodules_->level_estimator->ProcessStream(capture_buffer); 1280 public_submodules_->level_estimator->ProcessStream(capture_buffer);
1283 1281
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
1611 bool AudioProcessingImpl::UpdateActiveSubmoduleStates() { 1609 bool AudioProcessingImpl::UpdateActiveSubmoduleStates() {
1612 return submodule_states_.Update( 1610 return submodule_states_.Update(
1613 config_.high_pass_filter.enabled, 1611 config_.high_pass_filter.enabled,
1614 public_submodules_->echo_cancellation->is_enabled(), 1612 public_submodules_->echo_cancellation->is_enabled(),
1615 public_submodules_->echo_control_mobile->is_enabled(), 1613 public_submodules_->echo_control_mobile->is_enabled(),
1616 config_.residual_echo_detector.enabled, 1614 config_.residual_echo_detector.enabled,
1617 public_submodules_->noise_suppression->is_enabled(), 1615 public_submodules_->noise_suppression->is_enabled(),
1618 capture_nonlocked_.intelligibility_enabled, 1616 capture_nonlocked_.intelligibility_enabled,
1619 capture_nonlocked_.beamformer_enabled, 1617 capture_nonlocked_.beamformer_enabled,
1620 public_submodules_->gain_control->is_enabled(), 1618 public_submodules_->gain_control->is_enabled(),
1621 capture_nonlocked_.gain_controller2_enabled, 1619 config_.gain_controller2.enabled,
1622 capture_nonlocked_.level_controller_enabled, 1620 capture_nonlocked_.level_controller_enabled,
1623 capture_nonlocked_.echo_canceller3_enabled, 1621 capture_nonlocked_.echo_canceller3_enabled,
1624 public_submodules_->voice_detection->is_enabled(), 1622 public_submodules_->voice_detection->is_enabled(),
1625 public_submodules_->level_estimator->is_enabled(), 1623 public_submodules_->level_estimator->is_enabled(),
1626 capture_.transient_suppressor_enabled); 1624 capture_.transient_suppressor_enabled);
1627 } 1625 }
1628 1626
1629 1627
1630 void AudioProcessingImpl::InitializeTransient() { 1628 void AudioProcessingImpl::InitializeTransient() {
1631 if (capture_.transient_suppressor_enabled) { 1629 if (capture_.transient_suppressor_enabled) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1673 void AudioProcessingImpl::InitializeEchoCanceller3() { 1671 void AudioProcessingImpl::InitializeEchoCanceller3() {
1674 if (capture_nonlocked_.echo_canceller3_enabled) { 1672 if (capture_nonlocked_.echo_canceller3_enabled) {
1675 private_submodules_->echo_canceller3.reset(new EchoCanceller3( 1673 private_submodules_->echo_canceller3.reset(new EchoCanceller3(
1676 config_.echo_canceller3, proc_sample_rate_hz(), true)); 1674 config_.echo_canceller3, proc_sample_rate_hz(), true));
1677 } else { 1675 } else {
1678 private_submodules_->echo_canceller3.reset(); 1676 private_submodules_->echo_canceller3.reset();
1679 } 1677 }
1680 } 1678 }
1681 1679
1682 void AudioProcessingImpl::InitializeGainController2() { 1680 void AudioProcessingImpl::InitializeGainController2() {
1683 if (capture_nonlocked_.gain_controller2_enabled) { 1681 if (config_.gain_controller2.enabled) {
1684 private_submodules_->gain_controller2.reset( 1682 private_submodules_->gain_controller2->Initialize(proc_sample_rate_hz());
1685 new GainController2(proc_sample_rate_hz()));
1686 } else {
1687 private_submodules_->gain_controller2.reset();
1688 } 1683 }
1689 } 1684 }
1690 1685
1691 void AudioProcessingImpl::InitializeLevelController() { 1686 void AudioProcessingImpl::InitializeLevelController() {
1692 private_submodules_->level_controller->Initialize(proc_sample_rate_hz()); 1687 private_submodules_->level_controller->Initialize(proc_sample_rate_hz());
1693 } 1688 }
1694 1689
1695 void AudioProcessingImpl::InitializeResidualEchoDetector() { 1690 void AudioProcessingImpl::InitializeResidualEchoDetector() {
1696 private_submodules_->residual_echo_detector->Initialize(); 1691 private_submodules_->residual_echo_detector->Initialize();
1697 } 1692 }
1698 1693
1699 void AudioProcessingImpl::MaybeUpdateHistograms() { 1694 void AudioProcessingImpl::MaybeUpdateHistograms() {
1700 static const int kMinDiffDelayMs = 60; 1695 static const int kMinDiffDelayMs = 60;
1701 1696
1702 if (echo_cancellation()->is_enabled()) { 1697 if (echo_cancellation()->is_enabled()) {
1703 // Activate delay_jumps_ counters if we know echo_cancellation is runnning. 1698 // Activate delay_jumps_ counters if we know echo_cancellation is running.
1704 // If a stream has echo we know that the echo_cancellation is in process. 1699 // If a stream has echo we know that the echo_cancellation is in process.
1705 if (capture_.stream_delay_jumps == -1 && 1700 if (capture_.stream_delay_jumps == -1 &&
1706 echo_cancellation()->stream_has_echo()) { 1701 echo_cancellation()->stream_has_echo()) {
1707 capture_.stream_delay_jumps = 0; 1702 capture_.stream_delay_jumps = 0;
1708 } 1703 }
1709 if (capture_.aec_system_delay_jumps == -1 && 1704 if (capture_.aec_system_delay_jumps == -1 &&
1710 echo_cancellation()->stream_has_echo()) { 1705 echo_cancellation()->stream_has_echo()) {
1711 capture_.aec_system_delay_jumps = 0; 1706 capture_.aec_system_delay_jumps = 0;
1712 } 1707 }
1713 1708
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1779 // descriptions for other submodules. 1774 // descriptions for other submodules.
1780 if (capture_nonlocked_.level_controller_enabled) { 1775 if (capture_nonlocked_.level_controller_enabled) {
1781 experiments_description += "LevelController;"; 1776 experiments_description += "LevelController;";
1782 } 1777 }
1783 if (constants_.agc_clipped_level_min != kClippedLevelMin) { 1778 if (constants_.agc_clipped_level_min != kClippedLevelMin) {
1784 experiments_description += "AgcClippingLevelExperiment;"; 1779 experiments_description += "AgcClippingLevelExperiment;";
1785 } 1780 }
1786 if (capture_nonlocked_.echo_canceller3_enabled) { 1781 if (capture_nonlocked_.echo_canceller3_enabled) {
1787 experiments_description += "EchoCanceller3;"; 1782 experiments_description += "EchoCanceller3;";
1788 } 1783 }
1784 if (config_.gain_controller2.enabled) {
1785 experiments_description += "GainController2;";
1786 }
1789 1787
1790 InternalAPMConfig apm_config; 1788 InternalAPMConfig apm_config;
1791 1789
1792 apm_config.aec_enabled = public_submodules_->echo_cancellation->is_enabled(); 1790 apm_config.aec_enabled = public_submodules_->echo_cancellation->is_enabled();
1793 apm_config.aec_delay_agnostic_enabled = 1791 apm_config.aec_delay_agnostic_enabled =
1794 public_submodules_->echo_cancellation->is_delay_agnostic_enabled(); 1792 public_submodules_->echo_cancellation->is_delay_agnostic_enabled();
1795 apm_config.aec_drift_compensation_enabled = 1793 apm_config.aec_drift_compensation_enabled =
1796 public_submodules_->echo_cancellation->is_drift_compensation_enabled(); 1794 public_submodules_->echo_cancellation->is_drift_compensation_enabled();
1797 apm_config.aec_extended_filter_enabled = 1795 apm_config.aec_extended_filter_enabled =
1798 public_submodules_->echo_cancellation->is_extended_filter_enabled(); 1796 public_submodules_->echo_cancellation->is_extended_filter_enabled();
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1903 split_rate(kSampleRate16kHz), 1901 split_rate(kSampleRate16kHz),
1904 echo_path_gain_change(false) {} 1902 echo_path_gain_change(false) {}
1905 1903
1906 AudioProcessingImpl::ApmCaptureState::~ApmCaptureState() = default; 1904 AudioProcessingImpl::ApmCaptureState::~ApmCaptureState() = default;
1907 1905
1908 AudioProcessingImpl::ApmRenderState::ApmRenderState() = default; 1906 AudioProcessingImpl::ApmRenderState::ApmRenderState() = default;
1909 1907
1910 AudioProcessingImpl::ApmRenderState::~ApmRenderState() = default; 1908 AudioProcessingImpl::ApmRenderState::~ApmRenderState() = default;
1911 1909
1912 } // namespace webrtc 1910 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698