diff --git a/webrtc/modules/audio_processing/aec3/aec3_common.h b/webrtc/modules/audio_processing/aec3/aec3_common.h index f03a7e33d2..dbfc4ed0d6 100644 --- a/webrtc/modules/audio_processing/aec3/aec3_common.h +++ b/webrtc/modules/audio_processing/aec3/aec3_common.h @@ -68,6 +68,7 @@ constexpr size_t kRenderTransferQueueSize = kMaxApiCallsJitterBlocks / 2; static_assert(2 * kRenderTransferQueueSize >= kMaxApiCallsJitterBlocks, "Requirement to ensure buffer overflow detection"); +// TODO(peah): Integrate this with how it is done inside audio_processing_impl. constexpr size_t NumBandsForRate(int sample_rate_hz) { return static_cast(sample_rate_hz == 8000 ? 1 : sample_rate_hz / 16000); diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc index f9cc98faa0..636d6ca5f0 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.cc +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc @@ -562,11 +562,17 @@ int AudioProcessingImpl::InitializeLocked(const ProcessingConfig& config) { capture_nonlocked_.capture_processing_format = StreamConfig(capture_processing_rate); - int render_processing_rate = FindNativeProcessRateToUse( - std::min(formats_.api_format.reverse_input_stream().sample_rate_hz(), - formats_.api_format.reverse_output_stream().sample_rate_hz()), - submodule_states_.CaptureMultiBandSubModulesActive() || - submodule_states_.RenderMultiBandSubModulesActive()); + int render_processing_rate; + if (!config_.echo_canceller3.enabled) { + render_processing_rate = FindNativeProcessRateToUse( + std::min(formats_.api_format.reverse_input_stream().sample_rate_hz(), + formats_.api_format.reverse_output_stream().sample_rate_hz()), + submodule_states_.CaptureMultiBandSubModulesActive() || + submodule_states_.RenderMultiBandSubModulesActive()); + } else { + render_processing_rate = capture_processing_rate; + } + // TODO(aluebs): Remove this restriction once we figure out why the 3-band // splitting filter degrades the AEC performance. if (render_processing_rate > kSampleRate32kHz && @@ -575,6 +581,7 @@ int AudioProcessingImpl::InitializeLocked(const ProcessingConfig& config) { ? kSampleRate32kHz : kSampleRate16kHz; } + // If the forward sample rate is 8 kHz, the render stream is also processed // at this rate. if (capture_nonlocked_.capture_processing_format.sample_rate_hz() ==