| 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 // AEC_UNSPECIFIED_ERROR | 50 // AEC_UNSPECIFIED_ERROR |
| 51 // AEC_UNINITIALIZED_ERROR | 51 // AEC_UNINITIALIZED_ERROR |
| 52 // AEC_NULL_POINTER_ERROR | 52 // AEC_NULL_POINTER_ERROR |
| 53 return AudioProcessing::kUnspecifiedError; | 53 return AudioProcessing::kUnspecifiedError; |
| 54 } | 54 } |
| 55 } | 55 } |
| 56 } // namespace | 56 } // namespace |
| 57 | 57 |
| 58 EchoCancellationImpl::EchoCancellationImpl(const AudioProcessing* apm, | 58 EchoCancellationImpl::EchoCancellationImpl(const AudioProcessing* apm, |
| 59 CriticalSectionWrapper* crit) | 59 CriticalSectionWrapper* crit) |
| 60 : ProcessingComponent(), | 60 : ProcessingComponent(), |
| 61 apm_(apm), | 61 apm_(apm), |
| 62 crit_(crit), | 62 crit_(crit), |
| 63 drift_compensation_enabled_(false), | 63 drift_compensation_enabled_(false), |
| 64 metrics_enabled_(false), | 64 metrics_enabled_(false), |
| 65 suppression_level_(kModerateSuppression), | 65 suppression_level_(kModerateSuppression), |
| 66 stream_drift_samples_(0), | 66 stream_drift_samples_(0), |
| 67 was_stream_drift_set_(false), | 67 was_stream_drift_set_(false), |
| 68 stream_has_echo_(false), | 68 stream_has_echo_(false), |
| 69 delay_logging_enabled_(false), | 69 delay_logging_enabled_(false), |
| 70 extended_filter_enabled_(false), | 70 delay_correction_enabled_(false), |
| 71 reported_delay_enabled_(true) { | 71 reported_delay_enabled_(true) {} |
| 72 } | |
| 73 | 72 |
| 74 EchoCancellationImpl::~EchoCancellationImpl() {} | 73 EchoCancellationImpl::~EchoCancellationImpl() {} |
| 75 | 74 |
| 76 int EchoCancellationImpl::ProcessRenderAudio(const AudioBuffer* audio) { | 75 int EchoCancellationImpl::ProcessRenderAudio(const AudioBuffer* audio) { |
| 77 if (!is_component_enabled()) { | 76 if (!is_component_enabled()) { |
| 78 return apm_->kNoError; | 77 return apm_->kNoError; |
| 79 } | 78 } |
| 80 | 79 |
| 81 assert(audio->num_frames_per_band() <= 160); | 80 assert(audio->num_frames_per_band() <= 160); |
| 82 assert(audio->num_channels() == apm_->num_reverse_channels()); | 81 assert(audio->num_channels() == apm_->num_reverse_channels()); |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 int EchoCancellationImpl::Initialize() { | 320 int EchoCancellationImpl::Initialize() { |
| 322 int err = ProcessingComponent::Initialize(); | 321 int err = ProcessingComponent::Initialize(); |
| 323 if (err != apm_->kNoError || !is_component_enabled()) { | 322 if (err != apm_->kNoError || !is_component_enabled()) { |
| 324 return err; | 323 return err; |
| 325 } | 324 } |
| 326 | 325 |
| 327 return apm_->kNoError; | 326 return apm_->kNoError; |
| 328 } | 327 } |
| 329 | 328 |
| 330 void EchoCancellationImpl::SetExtraOptions(const Config& config) { | 329 void EchoCancellationImpl::SetExtraOptions(const Config& config) { |
| 331 // Both ExtendedFilter and DelayCorrection are diabled by default. If any one | 330 delay_correction_enabled_ = config.Get<DelayCorrection>().enabled; |
| 332 // of them is true, then the extended filter mode is enabled. | |
| 333 extended_filter_enabled_ = config.Get<ExtendedFilter>().enabled || | |
| 334 config.Get<DelayCorrection>().enabled; | |
| 335 reported_delay_enabled_ = config.Get<ReportedDelay>().enabled; | 331 reported_delay_enabled_ = config.Get<ReportedDelay>().enabled; |
| 336 Configure(); | 332 Configure(); |
| 337 } | 333 } |
| 338 | 334 |
| 339 void* EchoCancellationImpl::CreateHandle() const { | 335 void* EchoCancellationImpl::CreateHandle() const { |
| 340 Handle* handle = NULL; | 336 Handle* handle = NULL; |
| 341 if (WebRtcAec_Create(&handle) != apm_->kNoError) { | 337 if (WebRtcAec_Create(&handle) != apm_->kNoError) { |
| 342 handle = NULL; | 338 handle = NULL; |
| 343 } else { | 339 } else { |
| 344 assert(handle != NULL); | 340 assert(handle != NULL); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 363 } | 359 } |
| 364 | 360 |
| 365 int EchoCancellationImpl::ConfigureHandle(void* handle) const { | 361 int EchoCancellationImpl::ConfigureHandle(void* handle) const { |
| 366 assert(handle != NULL); | 362 assert(handle != NULL); |
| 367 AecConfig config; | 363 AecConfig config; |
| 368 config.metricsMode = metrics_enabled_; | 364 config.metricsMode = metrics_enabled_; |
| 369 config.nlpMode = MapSetting(suppression_level_); | 365 config.nlpMode = MapSetting(suppression_level_); |
| 370 config.skewMode = drift_compensation_enabled_; | 366 config.skewMode = drift_compensation_enabled_; |
| 371 config.delay_logging = delay_logging_enabled_; | 367 config.delay_logging = delay_logging_enabled_; |
| 372 | 368 |
| 373 WebRtcAec_enable_extended_filter( | 369 WebRtcAec_enable_delay_correction(WebRtcAec_aec_core( |
| 374 WebRtcAec_aec_core(static_cast<Handle*>(handle)), | 370 static_cast<Handle*>(handle)), delay_correction_enabled_ ? 1 : 0); |
| 375 extended_filter_enabled_ ? 1 : 0); | |
| 376 WebRtcAec_enable_reported_delay(WebRtcAec_aec_core( | 371 WebRtcAec_enable_reported_delay(WebRtcAec_aec_core( |
| 377 static_cast<Handle*>(handle)), reported_delay_enabled_ ? 1 : 0); | 372 static_cast<Handle*>(handle)), reported_delay_enabled_ ? 1 : 0); |
| 378 return WebRtcAec_set_config(static_cast<Handle*>(handle), config); | 373 return WebRtcAec_set_config(static_cast<Handle*>(handle), config); |
| 379 } | 374 } |
| 380 | 375 |
| 381 int EchoCancellationImpl::num_handles_required() const { | 376 int EchoCancellationImpl::num_handles_required() const { |
| 382 return apm_->num_output_channels() * | 377 return apm_->num_output_channels() * |
| 383 apm_->num_reverse_channels(); | 378 apm_->num_reverse_channels(); |
| 384 } | 379 } |
| 385 | 380 |
| 386 int EchoCancellationImpl::GetHandleError(void* handle) const { | 381 int EchoCancellationImpl::GetHandleError(void* handle) const { |
| 387 assert(handle != NULL); | 382 assert(handle != NULL); |
| 388 return MapError(WebRtcAec_get_error_code(static_cast<Handle*>(handle))); | 383 return MapError(WebRtcAec_get_error_code(static_cast<Handle*>(handle))); |
| 389 } | 384 } |
| 390 } // namespace webrtc | 385 } // namespace webrtc |
| OLD | NEW |