| 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 crit_capture_(crit_capture), | 70 crit_capture_(crit_capture), |
| 71 drift_compensation_enabled_(false), | 71 drift_compensation_enabled_(false), |
| 72 metrics_enabled_(false), | 72 metrics_enabled_(false), |
| 73 suppression_level_(kModerateSuppression), | 73 suppression_level_(kModerateSuppression), |
| 74 stream_drift_samples_(0), | 74 stream_drift_samples_(0), |
| 75 was_stream_drift_set_(false), | 75 was_stream_drift_set_(false), |
| 76 stream_has_echo_(false), | 76 stream_has_echo_(false), |
| 77 delay_logging_enabled_(false), | 77 delay_logging_enabled_(false), |
| 78 extended_filter_enabled_(false), | 78 extended_filter_enabled_(false), |
| 79 delay_agnostic_enabled_(false), | 79 delay_agnostic_enabled_(false), |
| 80 next_generation_aec_enabled_(false), |
| 80 render_queue_element_max_size_(0) { | 81 render_queue_element_max_size_(0) { |
| 81 RTC_DCHECK(apm); | 82 RTC_DCHECK(apm); |
| 82 RTC_DCHECK(crit_render); | 83 RTC_DCHECK(crit_render); |
| 83 RTC_DCHECK(crit_capture); | 84 RTC_DCHECK(crit_capture); |
| 84 } | 85 } |
| 85 | 86 |
| 86 EchoCancellationImpl::~EchoCancellationImpl() {} | 87 EchoCancellationImpl::~EchoCancellationImpl() {} |
| 87 | 88 |
| 88 int EchoCancellationImpl::ProcessRenderAudio(const AudioBuffer* audio) { | 89 int EchoCancellationImpl::ProcessRenderAudio(const AudioBuffer* audio) { |
| 89 rtc::CritScope cs_render(crit_render_); | 90 rtc::CritScope cs_render(crit_render_); |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 bool EchoCancellationImpl::is_delay_logging_enabled() const { | 350 bool EchoCancellationImpl::is_delay_logging_enabled() const { |
| 350 rtc::CritScope cs(crit_capture_); | 351 rtc::CritScope cs(crit_capture_); |
| 351 return delay_logging_enabled_; | 352 return delay_logging_enabled_; |
| 352 } | 353 } |
| 353 | 354 |
| 354 bool EchoCancellationImpl::is_delay_agnostic_enabled() const { | 355 bool EchoCancellationImpl::is_delay_agnostic_enabled() const { |
| 355 rtc::CritScope cs(crit_capture_); | 356 rtc::CritScope cs(crit_capture_); |
| 356 return delay_agnostic_enabled_; | 357 return delay_agnostic_enabled_; |
| 357 } | 358 } |
| 358 | 359 |
| 360 bool EchoCancellationImpl::is_next_generation_aec_enabled() const { |
| 361 rtc::CritScope cs(crit_capture_); |
| 362 return next_generation_aec_enabled_; |
| 363 } |
| 364 |
| 359 bool EchoCancellationImpl::is_extended_filter_enabled() const { | 365 bool EchoCancellationImpl::is_extended_filter_enabled() const { |
| 360 rtc::CritScope cs(crit_capture_); | 366 rtc::CritScope cs(crit_capture_); |
| 361 return extended_filter_enabled_; | 367 return extended_filter_enabled_; |
| 362 } | 368 } |
| 363 | 369 |
| 364 // TODO(bjornv): How should we handle the multi-channel case? | 370 // TODO(bjornv): How should we handle the multi-channel case? |
| 365 int EchoCancellationImpl::GetDelayMetrics(int* median, int* std) { | 371 int EchoCancellationImpl::GetDelayMetrics(int* median, int* std) { |
| 366 rtc::CritScope cs(crit_capture_); | 372 rtc::CritScope cs(crit_capture_); |
| 367 float fraction_poor_delays = 0; | 373 float fraction_poor_delays = 0; |
| 368 return GetDelayMetrics(median, std, &fraction_poor_delays); | 374 return GetDelayMetrics(median, std, &fraction_poor_delays); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 } else { | 446 } else { |
| 441 render_signal_queue_->Clear(); | 447 render_signal_queue_->Clear(); |
| 442 } | 448 } |
| 443 } | 449 } |
| 444 | 450 |
| 445 void EchoCancellationImpl::SetExtraOptions(const Config& config) { | 451 void EchoCancellationImpl::SetExtraOptions(const Config& config) { |
| 446 { | 452 { |
| 447 rtc::CritScope cs(crit_capture_); | 453 rtc::CritScope cs(crit_capture_); |
| 448 extended_filter_enabled_ = config.Get<ExtendedFilter>().enabled; | 454 extended_filter_enabled_ = config.Get<ExtendedFilter>().enabled; |
| 449 delay_agnostic_enabled_ = config.Get<DelayAgnostic>().enabled; | 455 delay_agnostic_enabled_ = config.Get<DelayAgnostic>().enabled; |
| 456 next_generation_aec_enabled_ = config.Get<NextGenerationAec>().enabled; |
| 450 } | 457 } |
| 451 Configure(); | 458 Configure(); |
| 452 } | 459 } |
| 453 | 460 |
| 454 void* EchoCancellationImpl::CreateHandle() const { | 461 void* EchoCancellationImpl::CreateHandle() const { |
| 455 return WebRtcAec_Create(); | 462 return WebRtcAec_Create(); |
| 456 } | 463 } |
| 457 | 464 |
| 458 void EchoCancellationImpl::DestroyHandle(void* handle) const { | 465 void EchoCancellationImpl::DestroyHandle(void* handle) const { |
| 459 assert(handle != NULL); | 466 assert(handle != NULL); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 479 config.metricsMode = metrics_enabled_; | 486 config.metricsMode = metrics_enabled_; |
| 480 config.nlpMode = MapSetting(suppression_level_); | 487 config.nlpMode = MapSetting(suppression_level_); |
| 481 config.skewMode = drift_compensation_enabled_; | 488 config.skewMode = drift_compensation_enabled_; |
| 482 config.delay_logging = delay_logging_enabled_; | 489 config.delay_logging = delay_logging_enabled_; |
| 483 WebRtcAec_enable_extended_filter( | 490 WebRtcAec_enable_extended_filter( |
| 484 WebRtcAec_aec_core(static_cast<Handle*>(handle)), | 491 WebRtcAec_aec_core(static_cast<Handle*>(handle)), |
| 485 extended_filter_enabled_ ? 1 : 0); | 492 extended_filter_enabled_ ? 1 : 0); |
| 486 WebRtcAec_enable_delay_agnostic( | 493 WebRtcAec_enable_delay_agnostic( |
| 487 WebRtcAec_aec_core(static_cast<Handle*>(handle)), | 494 WebRtcAec_aec_core(static_cast<Handle*>(handle)), |
| 488 delay_agnostic_enabled_ ? 1 : 0); | 495 delay_agnostic_enabled_ ? 1 : 0); |
| 496 WebRtcAec_enable_next_generation_aec( |
| 497 WebRtcAec_aec_core(static_cast<Handle*>(handle)), |
| 498 next_generation_aec_enabled_ ? 1 : 0); |
| 489 return WebRtcAec_set_config(static_cast<Handle*>(handle), config); | 499 return WebRtcAec_set_config(static_cast<Handle*>(handle), config); |
| 490 } | 500 } |
| 491 | 501 |
| 492 size_t EchoCancellationImpl::num_handles_required() const { | 502 size_t EchoCancellationImpl::num_handles_required() const { |
| 493 // Not locked as it only relies on APM public API which is threadsafe. | 503 // Not locked as it only relies on APM public API which is threadsafe. |
| 494 return apm_->num_output_channels() * apm_->num_reverse_channels(); | 504 return apm_->num_output_channels() * apm_->num_reverse_channels(); |
| 495 } | 505 } |
| 496 | 506 |
| 497 int EchoCancellationImpl::GetHandleError(void* handle) const { | 507 int EchoCancellationImpl::GetHandleError(void* handle) const { |
| 498 // Not locked as it does not rely on anything in the state. | 508 // Not locked as it does not rely on anything in the state. |
| 499 assert(handle != NULL); | 509 assert(handle != NULL); |
| 500 return AudioProcessing::kUnspecifiedError; | 510 return AudioProcessing::kUnspecifiedError; |
| 501 } | 511 } |
| 502 } // namespace webrtc | 512 } // namespace webrtc |
| OLD | NEW |