Fixing sample-rate dependent band-split filter issues in AEC3

This CL ensures that the number of bands
for the render side matches that for the capture side
when AEC3 is active. Without this, there was problems
when the render rate is different from the capture rate.

BUG=webrtc:6018

Review-Url: https://codereview.webrtc.org/2800033003
Cr-Commit-Position: refs/heads/master@{#17586}
This commit is contained in:
peah 2017-04-07 03:57:48 -07:00 committed by Commit bot
parent ea44ad4efc
commit 2ce640fada
2 changed files with 13 additions and 5 deletions

View File

@ -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<size_t>(sample_rate_hz == 8000 ? 1
: sample_rate_hz / 16000);

View File

@ -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() ==