Redesign of the render buffering in AEC3
This CL centralizes the render buffering in AEC3 so that all render buffers are updated and synchronized/aligned with the render alignment buffer. Bug: webrtc:8597, chromium:790905 Change-Id: I8a94e5c1f27316b6100b420eec9652ea31c1a91d Reviewed-on: https://webrtc-review.googlesource.com/25680 Commit-Queue: Per Åhgren <peah@webrtc.org> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20989}
This commit is contained in:
@ -18,7 +18,7 @@
|
||||
#include "modules/audio_processing/aec3/aec3_common.h"
|
||||
#include "modules/audio_processing/aec3/aec3_fft.h"
|
||||
#include "modules/audio_processing/aec3/fft_data.h"
|
||||
#include "modules/audio_processing/aec3/render_buffer.h"
|
||||
#include "modules/audio_processing/aec3/render_delay_buffer.h"
|
||||
#include "modules/audio_processing/test/echo_canceller_test_tools.h"
|
||||
#include "rtc_base/random.h"
|
||||
#include "test/gtest.h"
|
||||
@ -58,18 +58,22 @@ TEST(RenderSignalAnalyzer, NoFalseDetectionOfNarrowBands) {
|
||||
Random random_generator(42U);
|
||||
std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
|
||||
std::array<float, kBlockSize> x_old;
|
||||
FftData X;
|
||||
Aec3Fft fft;
|
||||
RenderBuffer render_buffer(Aec3Optimization::kNone, 3, 1,
|
||||
std::vector<size_t>(1, 1));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
std::array<float, kFftLengthBy2Plus1> mask;
|
||||
x_old.fill(0.f);
|
||||
|
||||
for (size_t k = 0; k < 100; ++k) {
|
||||
RandomizeSampleVector(&random_generator, x[0]);
|
||||
fft.PaddedFft(x[0], x_old, &X);
|
||||
render_buffer.Insert(x);
|
||||
analyzer.Update(render_buffer, 0);
|
||||
|
||||
render_delay_buffer->Insert(x);
|
||||
if (k == 0) {
|
||||
render_delay_buffer->Reset();
|
||||
}
|
||||
render_delay_buffer->PrepareCaptureCall();
|
||||
|
||||
analyzer.Update(render_delay_buffer->GetRenderBuffer(),
|
||||
rtc::Optional<size_t>(0));
|
||||
}
|
||||
|
||||
mask.fill(1.f);
|
||||
@ -86,8 +90,11 @@ TEST(RenderSignalAnalyzer, NarrowBandDetection) {
|
||||
std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
|
||||
std::array<float, kBlockSize> x_old;
|
||||
Aec3Fft fft;
|
||||
RenderBuffer render_buffer(Aec3Optimization::kNone, 3, 1,
|
||||
std::vector<size_t>(1, 1));
|
||||
EchoCanceller3Config config;
|
||||
config.delay.min_echo_path_delay_blocks = 0;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
|
||||
std::array<float, kFftLengthBy2Plus1> mask;
|
||||
x_old.fill(0.f);
|
||||
constexpr int kSinusFrequencyBin = 32;
|
||||
@ -97,9 +104,15 @@ TEST(RenderSignalAnalyzer, NarrowBandDetection) {
|
||||
for (size_t k = 0; k < 100; ++k) {
|
||||
ProduceSinusoid(16000, 16000 / 2 * kSinusFrequencyBin / kFftLengthBy2,
|
||||
&sample_counter, x[0]);
|
||||
render_buffer.Insert(x);
|
||||
analyzer.Update(render_buffer, known_delay ? rtc::Optional<size_t>(0)
|
||||
: rtc::nullopt);
|
||||
|
||||
render_delay_buffer->Insert(x);
|
||||
if (k == 0) {
|
||||
render_delay_buffer->Reset();
|
||||
}
|
||||
render_delay_buffer->PrepareCaptureCall();
|
||||
|
||||
analyzer.Update(render_delay_buffer->GetRenderBuffer(),
|
||||
known_delay ? rtc::Optional<size_t>(0) : rtc::nullopt);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user