OLD | NEW |
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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 #endif | 162 #endif |
163 config.Get<Beamforming>().array_geometry, | 163 config.Get<Beamforming>().array_geometry, |
164 config.Get<Beamforming>().target_direction), | 164 config.Get<Beamforming>().target_direction), |
165 capture_nonlocked_(config.Get<Beamforming>().enabled) | 165 capture_nonlocked_(config.Get<Beamforming>().enabled) |
166 { | 166 { |
167 { | 167 { |
168 rtc::CritScope cs_render(&crit_render_); | 168 rtc::CritScope cs_render(&crit_render_); |
169 rtc::CritScope cs_capture(&crit_capture_); | 169 rtc::CritScope cs_capture(&crit_capture_); |
170 | 170 |
171 public_submodules_->echo_cancellation.reset( | 171 public_submodules_->echo_cancellation.reset( |
172 new EchoCancellationImpl(this, &crit_render_, &crit_capture_)); | 172 new EchoCancellationImpl(&crit_render_, &crit_capture_)); |
173 public_submodules_->echo_control_mobile = | 173 public_submodules_->echo_control_mobile = |
174 new EchoControlMobileImpl(this, &crit_render_, &crit_capture_); | 174 new EchoControlMobileImpl(this, &crit_render_, &crit_capture_); |
175 public_submodules_->gain_control = | 175 public_submodules_->gain_control = |
176 new GainControlImpl(this, &crit_capture_, &crit_capture_); | 176 new GainControlImpl(this, &crit_capture_, &crit_capture_); |
177 public_submodules_->high_pass_filter.reset( | 177 public_submodules_->high_pass_filter.reset( |
178 new HighPassFilterImpl(&crit_capture_)); | 178 new HighPassFilterImpl(&crit_capture_)); |
179 public_submodules_->level_estimator.reset( | 179 public_submodules_->level_estimator.reset( |
180 new LevelEstimatorImpl(&crit_capture_)); | 180 new LevelEstimatorImpl(&crit_capture_)); |
181 public_submodules_->noise_suppression.reset( | 181 public_submodules_->noise_suppression.reset( |
182 new NoiseSuppressionImpl(&crit_capture_)); | 182 new NoiseSuppressionImpl(&crit_capture_)); |
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 | 708 |
709 if (capture_nonlocked_.beamformer_enabled) { | 709 if (capture_nonlocked_.beamformer_enabled) { |
710 private_submodules_->beamformer->ProcessChunk(*ca->split_data_f(), | 710 private_submodules_->beamformer->ProcessChunk(*ca->split_data_f(), |
711 ca->split_data_f()); | 711 ca->split_data_f()); |
712 ca->set_num_channels(1); | 712 ca->set_num_channels(1); |
713 } | 713 } |
714 | 714 |
715 public_submodules_->high_pass_filter->ProcessCaptureAudio(ca); | 715 public_submodules_->high_pass_filter->ProcessCaptureAudio(ca); |
716 RETURN_ON_ERR(public_submodules_->gain_control->AnalyzeCaptureAudio(ca)); | 716 RETURN_ON_ERR(public_submodules_->gain_control->AnalyzeCaptureAudio(ca)); |
717 public_submodules_->noise_suppression->AnalyzeCaptureAudio(ca); | 717 public_submodules_->noise_suppression->AnalyzeCaptureAudio(ca); |
718 RETURN_ON_ERR(public_submodules_->echo_cancellation->ProcessCaptureAudio(ca)); | 718 |
| 719 // Ensure that not both the AEC and AECM are active at the same time. |
| 720 // TODO(peah): Simplify once the public API Enable functions for these |
| 721 // are moved to APM. |
| 722 if (public_submodules_->echo_cancellation->is_enabled() && |
| 723 public_submodules_->echo_control_mobile->is_enabled()) { |
| 724 return AudioProcessing::kBadParameterError; |
| 725 } |
| 726 |
| 727 // Ensure that the stream delay was set before the call to the |
| 728 // AEC ProcessCaptureAudio function. |
| 729 if (!was_stream_delay_set()) { |
| 730 return AudioProcessing::kBadParameterError; |
| 731 } |
| 732 |
| 733 RETURN_ON_ERR(public_submodules_->echo_cancellation->ProcessCaptureAudio( |
| 734 ca, stream_delay_ms())); |
719 | 735 |
720 if (public_submodules_->echo_control_mobile->is_enabled() && | 736 if (public_submodules_->echo_control_mobile->is_enabled() && |
721 public_submodules_->noise_suppression->is_enabled()) { | 737 public_submodules_->noise_suppression->is_enabled()) { |
722 ca->CopyLowPassToReference(); | 738 ca->CopyLowPassToReference(); |
723 } | 739 } |
724 public_submodules_->noise_suppression->ProcessCaptureAudio(ca); | 740 public_submodules_->noise_suppression->ProcessCaptureAudio(ca); |
725 if (constants_.intelligibility_enabled) { | 741 if (constants_.intelligibility_enabled) { |
726 RTC_DCHECK(public_submodules_->noise_suppression->is_enabled()); | 742 RTC_DCHECK(public_submodules_->noise_suppression->is_enabled()); |
727 public_submodules_->intelligibility_enhancer->SetCaptureNoiseEstimate( | 743 public_submodules_->intelligibility_enhancer->SetCaptureNoiseEstimate( |
728 public_submodules_->noise_suppression->NoiseEstimate()); | 744 public_submodules_->noise_suppression->NoiseEstimate()); |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1244 public_submodules_->high_pass_filter->Initialize(num_proc_channels(), | 1260 public_submodules_->high_pass_filter->Initialize(num_proc_channels(), |
1245 proc_sample_rate_hz()); | 1261 proc_sample_rate_hz()); |
1246 } | 1262 } |
1247 | 1263 |
1248 void AudioProcessingImpl::InitializeNoiseSuppression() { | 1264 void AudioProcessingImpl::InitializeNoiseSuppression() { |
1249 public_submodules_->noise_suppression->Initialize(num_proc_channels(), | 1265 public_submodules_->noise_suppression->Initialize(num_proc_channels(), |
1250 proc_sample_rate_hz()); | 1266 proc_sample_rate_hz()); |
1251 } | 1267 } |
1252 | 1268 |
1253 void AudioProcessingImpl::InitializeEchoCanceller() { | 1269 void AudioProcessingImpl::InitializeEchoCanceller() { |
1254 public_submodules_->echo_cancellation->Initialize(); | 1270 public_submodules_->echo_cancellation->Initialize( |
| 1271 proc_sample_rate_hz(), num_reverse_channels(), num_output_channels(), |
| 1272 num_proc_channels()); |
1255 } | 1273 } |
1256 | 1274 |
1257 void AudioProcessingImpl::InitializeLevelEstimator() { | 1275 void AudioProcessingImpl::InitializeLevelEstimator() { |
1258 public_submodules_->level_estimator->Initialize(); | 1276 public_submodules_->level_estimator->Initialize(); |
1259 } | 1277 } |
1260 | 1278 |
1261 void AudioProcessingImpl::InitializeVoiceDetection() { | 1279 void AudioProcessingImpl::InitializeVoiceDetection() { |
1262 public_submodules_->voice_detection->Initialize(proc_split_sample_rate_hz()); | 1280 public_submodules_->voice_detection->Initialize(proc_split_sample_rate_hz()); |
1263 } | 1281 } |
1264 | 1282 |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1457 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); | 1475 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); |
1458 | 1476 |
1459 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), | 1477 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
1460 &debug_dump_.num_bytes_left_for_log_, | 1478 &debug_dump_.num_bytes_left_for_log_, |
1461 &crit_debug_, &debug_dump_.capture)); | 1479 &crit_debug_, &debug_dump_.capture)); |
1462 return kNoError; | 1480 return kNoError; |
1463 } | 1481 } |
1464 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP | 1482 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
1465 | 1483 |
1466 } // namespace webrtc | 1484 } // namespace webrtc |
OLD | NEW |