AEC3: Add signal dependent mixing before alignment
This CL adds code for doing signal-dependent downmixing before the delay estimation in the multichannel case. As part of the CL, the unittests of the render delay controller are corrected. However, as that caused some of them to fail, the CL (for now) as well disables the failing test. Bug: webrtc:11153,chromium:1029740, webrtc:11161 Change-Id: I0b765c28fa5e547aabd6dfbd24b626ff9a16346f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161045 Commit-Queue: Per Åhgren <peah@webrtc.org> Reviewed-by: Sam Zackrisson <saza@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29980}
This commit is contained in:
@ -23,6 +23,7 @@
|
||||
#include "api/audio/echo_canceller3_config.h"
|
||||
#include "modules/audio_processing/aec3/aec3_common.h"
|
||||
#include "modules/audio_processing/aec3/aec3_fft.h"
|
||||
#include "modules/audio_processing/aec3/alignment_mixer.h"
|
||||
#include "modules/audio_processing/aec3/block_buffer.h"
|
||||
#include "modules/audio_processing/aec3/decimator.h"
|
||||
#include "modules/audio_processing/aec3/downsampled_render_buffer.h"
|
||||
@ -81,6 +82,7 @@ class RenderDelayBufferImpl final : public RenderDelayBuffer {
|
||||
absl::optional<size_t> delay_;
|
||||
RenderBuffer echo_remover_buffer_;
|
||||
DownsampledRenderBuffer low_rate_;
|
||||
AlignmentMixer render_mixer_;
|
||||
Decimator render_decimator_;
|
||||
const Aec3Fft fft_;
|
||||
std::vector<float> render_ds_;
|
||||
@ -141,6 +143,7 @@ RenderDelayBufferImpl::RenderDelayBufferImpl(const EchoCanceller3Config& config,
|
||||
echo_remover_buffer_(&blocks_, &spectra_, &ffts_),
|
||||
low_rate_(GetDownSampledBufferSize(down_sampling_factor_,
|
||||
config.delay.num_filters)),
|
||||
render_mixer_(num_render_channels, config.delay.render_alignment_mixing),
|
||||
render_decimator_(down_sampling_factor_),
|
||||
fft_(),
|
||||
render_ds_(sub_block_size_, 0.f),
|
||||
@ -404,8 +407,9 @@ void RenderDelayBufferImpl::InsertBlock(
|
||||
}
|
||||
}
|
||||
|
||||
render_decimator_.Decimate(b.buffer[b.write][0],
|
||||
config_.delay.downmix_before_delay_estimation, ds);
|
||||
std::array<float, kBlockSize> downmixed_render;
|
||||
render_mixer_.ProduceOutput(b.buffer[b.write][0], downmixed_render);
|
||||
render_decimator_.Decimate(downmixed_render, ds);
|
||||
data_dumper_->DumpWav("aec3_render_decimator_output", ds.size(), ds.data(),
|
||||
16000 / down_sampling_factor_, 1);
|
||||
std::copy(ds.rbegin(), ds.rend(), lr.buffer.begin() + lr.write);
|
||||
|
||||
Reference in New Issue
Block a user