AEC3: Fix computation of audio buffer delay
This change fixes a bug where the initial delay could be set incorrectly. Bug: webrtc:10896 Change-Id: I66b2234b69c46639488f4561e973384001230861 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/149820 Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28894}
This commit is contained in:

committed by
Commit Bot

parent
17f9ee5358
commit
cd277b84da
@ -54,7 +54,7 @@ std::string ProduceDebugText(size_t delay) {
|
||||
// their reference counterparts.
|
||||
TEST(AdaptiveFirFilter, FilterAdaptationNeonOptimizations) {
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 48000));
|
||||
Random random_generator(42U);
|
||||
std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
|
||||
FftData S_C;
|
||||
@ -165,7 +165,7 @@ TEST(AdaptiveFirFilter, FilterAdaptationSse2Optimizations) {
|
||||
bool use_sse2 = (WebRtc_GetCPUInfo(kSSE2) != 0);
|
||||
if (use_sse2) {
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 48000));
|
||||
Random random_generator(42U);
|
||||
std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
|
||||
FftData S_C;
|
||||
@ -281,7 +281,7 @@ TEST(AdaptiveFirFilter, NullFilterOutput) {
|
||||
ApmDataDumper data_dumper(42);
|
||||
AdaptiveFirFilter filter(9, 9, 250, DetectOptimization(), &data_dumper);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 48000));
|
||||
EXPECT_DEATH(filter.Filter(*render_delay_buffer->GetRenderBuffer(), nullptr),
|
||||
"");
|
||||
}
|
||||
@ -320,7 +320,7 @@ TEST(AdaptiveFirFilter, FilterAndAdapt) {
|
||||
Aec3Fft fft;
|
||||
config.delay.default_delay = 1;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
ShadowFilterUpdateGain gain(config.filter.shadow,
|
||||
config.filter.config_change_duration_blocks);
|
||||
Random random_generator(42U);
|
||||
|
@ -25,7 +25,7 @@ TEST(AecState, NormalUsage) {
|
||||
absl::optional<DelayEstimate> delay_estimate =
|
||||
DelayEstimate(DelayEstimate::Quality::kRefined, 10);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
std::array<float, kFftLengthBy2Plus1> E2_main = {};
|
||||
std::array<float, kFftLengthBy2Plus1> Y2 = {};
|
||||
std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
|
||||
@ -179,7 +179,7 @@ TEST(AecState, ConvergedFilterDelay) {
|
||||
EchoCanceller3Config config;
|
||||
AecState state(config);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
absl::optional<DelayEstimate> delay_estimate;
|
||||
std::array<float, kFftLengthBy2Plus1> E2_main;
|
||||
std::array<float, kFftLengthBy2Plus1> Y2;
|
||||
|
@ -232,7 +232,7 @@ void BlockProcessorImpl::SetAudioBufferDelay(size_t delay_ms) {
|
||||
BlockProcessor* BlockProcessor::Create(const EchoCanceller3Config& config,
|
||||
int sample_rate_hz) {
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(sample_rate_hz)));
|
||||
RenderDelayBuffer::Create(config, sample_rate_hz));
|
||||
std::unique_ptr<RenderDelayController> delay_controller;
|
||||
if (!config.delay.use_external_delay_estimator) {
|
||||
delay_controller.reset(
|
||||
|
@ -39,7 +39,7 @@ TEST(EchoPathDelayEstimator, BasicApiCalls) {
|
||||
ApmDataDumper data_dumper(0);
|
||||
EchoCanceller3Config config;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
EchoPathDelayEstimator estimator(&data_dumper, config);
|
||||
std::vector<std::vector<float>> render(3, std::vector<float>(kBlockSize));
|
||||
std::vector<float> capture(kBlockSize);
|
||||
@ -65,7 +65,7 @@ TEST(EchoPathDelayEstimator, DelayEstimation) {
|
||||
for (size_t delay_samples : {30, 64, 150, 200, 800, 4000}) {
|
||||
SCOPED_TRACE(ProduceDebugText(delay_samples, down_sampling_factor));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
DelayBuffer<float> signal_delay_buffer(delay_samples);
|
||||
EchoPathDelayEstimator estimator(&data_dumper, config);
|
||||
|
||||
@ -113,7 +113,7 @@ TEST(EchoPathDelayEstimator, NoDelayEstimatesForLowLevelRenderSignals) {
|
||||
ApmDataDumper data_dumper(0);
|
||||
EchoPathDelayEstimator estimator(&data_dumper, config);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 48000));
|
||||
for (size_t k = 0; k < 100; ++k) {
|
||||
RandomizeSampleVector(&random_generator, render[0]);
|
||||
for (auto& render_k : render[0]) {
|
||||
@ -137,7 +137,7 @@ TEST(EchoPathDelayEstimator, DISABLED_WrongRenderBlockSize) {
|
||||
EchoCanceller3Config config;
|
||||
EchoPathDelayEstimator estimator(&data_dumper, config);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
std::vector<float> capture(kBlockSize);
|
||||
EXPECT_DEATH(estimator.EstimateDelay(
|
||||
render_delay_buffer->GetDownsampledRenderBuffer(), capture),
|
||||
@ -152,7 +152,7 @@ TEST(EchoPathDelayEstimator, WrongCaptureBlockSize) {
|
||||
EchoCanceller3Config config;
|
||||
EchoPathDelayEstimator estimator(&data_dumper, config);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
std::vector<float> capture(std::vector<float>(kBlockSize - 1));
|
||||
EXPECT_DEATH(estimator.EstimateDelay(
|
||||
render_delay_buffer->GetDownsampledRenderBuffer(), capture),
|
||||
|
@ -48,8 +48,8 @@ TEST(EchoRemover, BasicApiCalls) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<EchoRemover> remover(
|
||||
EchoRemover::Create(EchoCanceller3Config(), rate));
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(RenderDelayBuffer::Create(
|
||||
EchoCanceller3Config(), NumBandsForRate(rate)));
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), rate));
|
||||
|
||||
std::vector<std::vector<float>> render(NumBandsForRate(rate),
|
||||
std::vector<float>(kBlockSize, 0.f));
|
||||
@ -89,8 +89,8 @@ TEST(EchoRemover, WrongCaptureBlockSize) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<EchoRemover> remover(
|
||||
EchoRemover::Create(EchoCanceller3Config(), rate));
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(RenderDelayBuffer::Create(
|
||||
EchoCanceller3Config(), NumBandsForRate(rate)));
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), rate));
|
||||
std::vector<std::vector<float>> capture(
|
||||
NumBandsForRate(rate), std::vector<float>(kBlockSize - 1, 0.f));
|
||||
EchoPathVariability echo_path_variability(
|
||||
@ -111,8 +111,8 @@ TEST(EchoRemover, DISABLED_WrongCaptureNumBands) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<EchoRemover> remover(
|
||||
EchoRemover::Create(EchoCanceller3Config(), rate));
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(RenderDelayBuffer::Create(
|
||||
EchoCanceller3Config(), NumBandsForRate(rate)));
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), rate));
|
||||
std::vector<std::vector<float>> capture(
|
||||
NumBandsForRate(rate == 48000 ? 16000 : rate + 16000),
|
||||
std::vector<float>(kBlockSize, 0.f));
|
||||
@ -131,7 +131,7 @@ TEST(EchoRemover, NullCapture) {
|
||||
std::unique_ptr<EchoRemover> remover(
|
||||
EchoRemover::Create(EchoCanceller3Config(), 8000));
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 8000));
|
||||
EchoPathVariability echo_path_variability(
|
||||
false, EchoPathVariability::DelayAdjustment::kNone, false);
|
||||
EXPECT_DEATH(
|
||||
@ -160,7 +160,7 @@ TEST(EchoRemover, BasicEchoRemoval) {
|
||||
EchoCanceller3Config config;
|
||||
std::unique_ptr<EchoRemover> remover(EchoRemover::Create(config, rate));
|
||||
std::unique_ptr<RenderDelayBuffer> render_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
render_buffer->AlignFromDelay(delay_samples / kBlockSize);
|
||||
|
||||
std::vector<std::unique_ptr<DelayBuffer<float>>> delay_buffers(x.size());
|
||||
|
@ -109,7 +109,7 @@ TEST(ErleEstimator, VerifyErleIncreaseAndHold) {
|
||||
std::vector<std::array<float, kFftLengthBy2Plus1>> filter_frequency_response(
|
||||
config.filter.main.length_blocks);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
|
||||
GetFilterFreq(filter_frequency_response, config.delay.delay_headroom_samples);
|
||||
|
||||
@ -153,7 +153,7 @@ TEST(ErleEstimator, VerifyErleTrackingOnOnsets) {
|
||||
config.filter.main.length_blocks);
|
||||
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
|
||||
GetFilterFreq(filter_frequency_response, config.delay.delay_headroom_samples);
|
||||
|
||||
|
@ -65,7 +65,7 @@ void RunFilterUpdateTest(int num_blocks_to_process,
|
||||
std::vector<float> y(kBlockSize, 0.f);
|
||||
config.delay.default_delay = 1;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
AecState aec_state(config);
|
||||
RenderSignalAnalyzer render_signal_analyzer(config);
|
||||
absl::optional<DelayEstimate> delay_estimate;
|
||||
|
@ -163,7 +163,7 @@ TEST(MatchedFilter, LagEstimation) {
|
||||
config.delay.delay_candidate_detection_threshold);
|
||||
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
|
||||
// Analyze the correlation between render and capture.
|
||||
for (size_t k = 0; k < (600 + delay_samples / sub_block_size); ++k) {
|
||||
@ -259,7 +259,7 @@ TEST(MatchedFilter, LagNotReliableForUncorrelatedRenderAndCapture) {
|
||||
std::fill(capture.begin(), capture.end(), 0.f);
|
||||
ApmDataDumper data_dumper(0);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
MatchedFilter filter(&data_dumper, DetectOptimization(), sub_block_size,
|
||||
kWindowSizeSubBlocks, kNumMatchedFilters,
|
||||
kAlignmentShiftSubBlocks, 150,
|
||||
@ -304,7 +304,7 @@ TEST(MatchedFilter, LagNotUpdatedForLowLevelRender) {
|
||||
config.delay.delay_estimate_smoothing,
|
||||
config.delay.delay_candidate_detection_threshold);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 48000));
|
||||
Decimator capture_decimator(down_sampling_factor);
|
||||
|
||||
// Analyze the correlation between render and capture.
|
||||
|
@ -39,7 +39,7 @@ namespace {
|
||||
|
||||
class RenderDelayBufferImpl final : public RenderDelayBuffer {
|
||||
public:
|
||||
RenderDelayBufferImpl(const EchoCanceller3Config& config, size_t num_bands);
|
||||
RenderDelayBufferImpl(const EchoCanceller3Config& config, int sample_rate_hz);
|
||||
RenderDelayBufferImpl() = delete;
|
||||
~RenderDelayBufferImpl() override;
|
||||
|
||||
@ -90,7 +90,7 @@ class RenderDelayBufferImpl final : public RenderDelayBuffer {
|
||||
bool external_audio_buffer_delay_verified_after_reset_ = false;
|
||||
size_t min_latency_blocks_ = 0;
|
||||
size_t excess_render_detection_counter_ = 0;
|
||||
size_t num_bands_;
|
||||
int sample_rate_hz_;
|
||||
|
||||
int MapDelayToTotalDelay(size_t delay) const;
|
||||
int ComputeDelay() const;
|
||||
@ -109,7 +109,7 @@ class RenderDelayBufferImpl final : public RenderDelayBuffer {
|
||||
int RenderDelayBufferImpl::instance_count_ = 0;
|
||||
|
||||
RenderDelayBufferImpl::RenderDelayBufferImpl(const EchoCanceller3Config& config,
|
||||
size_t num_bands)
|
||||
int sample_rate_hz)
|
||||
: data_dumper_(
|
||||
new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))),
|
||||
optimization_(DetectOptimization()),
|
||||
@ -121,7 +121,7 @@ RenderDelayBufferImpl::RenderDelayBufferImpl(const EchoCanceller3Config& config,
|
||||
blocks_(GetRenderDelayBufferSize(down_sampling_factor_,
|
||||
config.delay.num_filters,
|
||||
config.filter.main.length_blocks),
|
||||
num_bands,
|
||||
NumBandsForRate(sample_rate_hz),
|
||||
kBlockSize),
|
||||
spectra_(blocks_.buffer.size(), kFftLengthBy2Plus1),
|
||||
ffts_(blocks_.buffer.size()),
|
||||
@ -133,7 +133,8 @@ RenderDelayBufferImpl::RenderDelayBufferImpl(const EchoCanceller3Config& config,
|
||||
fft_(),
|
||||
render_ds_(sub_block_size_, 0.f),
|
||||
buffer_headroom_(config.filter.main.length_blocks),
|
||||
num_bands_(num_bands) {
|
||||
sample_rate_hz_(sample_rate_hz) {
|
||||
RTC_DCHECK_GE(sample_rate_hz, 8000);
|
||||
RTC_DCHECK_EQ(blocks_.buffer.size(), ffts_.buffer.size());
|
||||
RTC_DCHECK_EQ(spectra_.buffer.size(), ffts_.buffer.size());
|
||||
|
||||
@ -314,7 +315,8 @@ void RenderDelayBufferImpl::SetAudioBufferDelay(size_t delay_ms) {
|
||||
}
|
||||
|
||||
// Convert delay from milliseconds to blocks (rounded down).
|
||||
external_audio_buffer_delay_ = delay_ms >> ((num_bands_ == 1) ? 1 : 2);
|
||||
external_audio_buffer_delay_ =
|
||||
delay_ms >> ((sample_rate_hz_ == 8000) ? 1 : 2);
|
||||
}
|
||||
|
||||
bool RenderDelayBufferImpl::HasReceivedBufferDelay() {
|
||||
@ -455,8 +457,8 @@ bool RenderDelayBufferImpl::RenderUnderrun() {
|
||||
} // namespace
|
||||
|
||||
RenderDelayBuffer* RenderDelayBuffer::Create(const EchoCanceller3Config& config,
|
||||
size_t num_bands) {
|
||||
return new RenderDelayBufferImpl(config, num_bands);
|
||||
int sample_rate_hz) {
|
||||
return new RenderDelayBufferImpl(config, sample_rate_hz);
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
@ -33,7 +33,7 @@ class RenderDelayBuffer {
|
||||
};
|
||||
|
||||
static RenderDelayBuffer* Create(const EchoCanceller3Config& config,
|
||||
size_t num_bands);
|
||||
int sample_rate_hz);
|
||||
virtual ~RenderDelayBuffer() = default;
|
||||
|
||||
// Resets the buffer alignment.
|
||||
|
@ -38,7 +38,7 @@ TEST(RenderDelayBuffer, BufferOverflow) {
|
||||
for (auto rate : {8000, 16000, 32000, 48000}) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<RenderDelayBuffer> delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
std::vector<std::vector<float>> block_to_insert(
|
||||
NumBandsForRate(rate), std::vector<float>(kBlockSize, 0.f));
|
||||
for (size_t k = 0; k < 10; ++k) {
|
||||
@ -62,7 +62,7 @@ TEST(RenderDelayBuffer, BufferOverflow) {
|
||||
TEST(RenderDelayBuffer, AvailableBlock) {
|
||||
constexpr size_t kNumBands = 1;
|
||||
std::unique_ptr<RenderDelayBuffer> delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), kNumBands));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 16000));
|
||||
std::vector<std::vector<float>> input_block(
|
||||
kNumBands, std::vector<float>(kBlockSize, 1.f));
|
||||
EXPECT_EQ(RenderDelayBuffer::BufferingEvent::kNone,
|
||||
@ -74,7 +74,7 @@ TEST(RenderDelayBuffer, AvailableBlock) {
|
||||
TEST(RenderDelayBuffer, AlignFromDelay) {
|
||||
EchoCanceller3Config config;
|
||||
std::unique_ptr<RenderDelayBuffer> delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 1));
|
||||
RenderDelayBuffer::Create(config, 16000));
|
||||
ASSERT_TRUE(delay_buffer->Delay());
|
||||
delay_buffer->Reset();
|
||||
size_t initial_internal_delay = 0;
|
||||
@ -92,7 +92,7 @@ TEST(RenderDelayBuffer, AlignFromDelay) {
|
||||
// tests on test bots has been fixed.
|
||||
TEST(RenderDelayBuffer, DISABLED_WrongDelay) {
|
||||
std::unique_ptr<RenderDelayBuffer> delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 48000));
|
||||
EXPECT_DEATH(delay_buffer->AlignFromDelay(21), "");
|
||||
}
|
||||
|
||||
@ -100,8 +100,8 @@ TEST(RenderDelayBuffer, DISABLED_WrongDelay) {
|
||||
TEST(RenderDelayBuffer, WrongNumberOfBands) {
|
||||
for (auto rate : {16000, 32000, 48000}) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<RenderDelayBuffer> delay_buffer(RenderDelayBuffer::Create(
|
||||
EchoCanceller3Config(), NumBandsForRate(rate)));
|
||||
std::unique_ptr<RenderDelayBuffer> delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), rate));
|
||||
std::vector<std::vector<float>> block_to_insert(
|
||||
NumBandsForRate(rate < 48000 ? rate + 16000 : 16000),
|
||||
std::vector<float>(kBlockSize, 0.f));
|
||||
@ -114,7 +114,7 @@ TEST(RenderDelayBuffer, WrongBlockLength) {
|
||||
for (auto rate : {8000, 16000, 32000, 48000}) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<RenderDelayBuffer> delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 48000));
|
||||
std::vector<std::vector<float>> block_to_insert(
|
||||
NumBandsForRate(rate), std::vector<float>(kBlockSize - 1, 0.f));
|
||||
EXPECT_DEATH(delay_buffer->Insert(block_to_insert), "");
|
||||
|
@ -56,7 +56,7 @@ TEST(RenderDelayController, NoRenderSignal) {
|
||||
for (auto rate : {8000, 16000, 32000, 48000}) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<RenderDelayBuffer> delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
std::unique_ptr<RenderDelayController> delay_controller(
|
||||
RenderDelayController::Create(config, rate));
|
||||
for (size_t k = 0; k < 100; ++k) {
|
||||
@ -84,7 +84,7 @@ TEST(RenderDelayController, BasicApiCalls) {
|
||||
std::vector<std::vector<float>> render_block(
|
||||
NumBandsForRate(rate), std::vector<float>(kBlockSize, 0.f));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
std::unique_ptr<RenderDelayController> delay_controller(
|
||||
RenderDelayController::Create(EchoCanceller3Config(), rate));
|
||||
for (size_t k = 0; k < 10; ++k) {
|
||||
@ -122,7 +122,7 @@ TEST(RenderDelayController, Alignment) {
|
||||
absl::optional<DelayEstimate> delay_blocks;
|
||||
SCOPED_TRACE(ProduceDebugText(rate, delay_samples));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
std::unique_ptr<RenderDelayController> delay_controller(
|
||||
RenderDelayController::Create(config, rate));
|
||||
DelayBuffer<float> signal_delay_buffer(delay_samples);
|
||||
@ -169,7 +169,7 @@ TEST(RenderDelayController, NonCausalAlignment) {
|
||||
absl::optional<DelayEstimate> delay_blocks;
|
||||
SCOPED_TRACE(ProduceDebugText(rate, -delay_samples));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
std::unique_ptr<RenderDelayController> delay_controller(
|
||||
RenderDelayController::Create(EchoCanceller3Config(), rate));
|
||||
DelayBuffer<float> signal_delay_buffer(-delay_samples);
|
||||
@ -209,7 +209,7 @@ TEST(RenderDelayController, AlignmentWithJitter) {
|
||||
absl::optional<DelayEstimate> delay_blocks;
|
||||
SCOPED_TRACE(ProduceDebugText(rate, delay_samples));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
std::unique_ptr<RenderDelayController> delay_controller(
|
||||
RenderDelayController::Create(config, rate));
|
||||
DelayBuffer<float> signal_delay_buffer(delay_samples);
|
||||
@ -262,7 +262,7 @@ TEST(RenderDelayController, InitialHeadroom) {
|
||||
for (auto rate : {8000, 16000, 32000, 48000}) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
|
||||
std::unique_ptr<RenderDelayController> delay_controller(
|
||||
RenderDelayController::Create(config, rate));
|
||||
@ -280,7 +280,7 @@ TEST(RenderDelayController, WrongCaptureSize) {
|
||||
for (auto rate : {8000, 16000, 32000, 48000}) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
EXPECT_DEATH(
|
||||
std::unique_ptr<RenderDelayController>(
|
||||
RenderDelayController::Create(EchoCanceller3Config(), rate))
|
||||
@ -298,7 +298,7 @@ TEST(RenderDelayController, DISABLED_WrongSampleRate) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
EchoCanceller3Config config;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, NumBandsForRate(rate)));
|
||||
RenderDelayBuffer::Create(config, rate));
|
||||
EXPECT_DEATH(
|
||||
std::unique_ptr<RenderDelayController>(
|
||||
RenderDelayController::Create(EchoCanceller3Config(), rate)),
|
||||
|
@ -61,7 +61,7 @@ TEST(RenderSignalAnalyzer, NoFalseDetectionOfNarrowBands) {
|
||||
std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
|
||||
std::array<float, kBlockSize> x_old;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 3));
|
||||
RenderDelayBuffer::Create(EchoCanceller3Config(), 48000));
|
||||
std::array<float, kFftLengthBy2Plus1> mask;
|
||||
x_old.fill(0.f);
|
||||
|
||||
@ -94,7 +94,7 @@ TEST(RenderSignalAnalyzer, NarrowBandDetection) {
|
||||
Aec3Fft fft;
|
||||
EchoCanceller3Config config;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
|
||||
std::array<float, kFftLengthBy2Plus1> mask;
|
||||
x_old.fill(0.f);
|
||||
|
@ -27,7 +27,7 @@ TEST(ResidualEchoEstimator, NullResidualEchoPowerOutput) {
|
||||
EchoCanceller3Config config;
|
||||
AecState aec_state(config);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
std::vector<std::array<float, kFftLengthBy2Plus1>> H2;
|
||||
std::array<float, kFftLengthBy2Plus1> S2_linear;
|
||||
std::array<float, kFftLengthBy2Plus1> Y2;
|
||||
@ -47,7 +47,7 @@ TEST(ResidualEchoEstimator, DISABLED_BasicTest) {
|
||||
ResidualEchoEstimator estimator(config);
|
||||
AecState aec_state(config);
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
|
||||
std::array<float, kFftLengthBy2Plus1> E2_main;
|
||||
std::array<float, kFftLengthBy2Plus1> E2_shadow;
|
||||
|
@ -52,7 +52,7 @@ void RunFilterUpdateTest(int num_blocks_to_process,
|
||||
|
||||
config.delay.default_delay = 1;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
|
||||
std::array<float, kBlockSize> x_old;
|
||||
x_old.fill(0.f);
|
||||
|
@ -62,7 +62,7 @@ class TestInputs {
|
||||
};
|
||||
|
||||
TestInputs::TestInputs(const EchoCanceller3Config& cfg)
|
||||
: render_delay_buffer_(RenderDelayBuffer::Create(cfg, 1)),
|
||||
: render_delay_buffer_(RenderDelayBuffer::Create(cfg, 16000)),
|
||||
H2_(cfg.filter.main.length_blocks),
|
||||
x_(1, std::vector<float>(kBlockSize, 0.f)) {
|
||||
render_delay_buffer_->AlignFromDelay(4);
|
||||
|
@ -43,7 +43,7 @@ float RunSubtractorTest(int num_blocks_to_process,
|
||||
SubtractorOutput output;
|
||||
config.delay.default_delay = 1;
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
RenderSignalAnalyzer render_signal_analyzer(config);
|
||||
Random random_generator(42U);
|
||||
Aec3Fft fft;
|
||||
@ -126,7 +126,7 @@ TEST(Subtractor, DISABLED_NullOutput) {
|
||||
EchoCanceller3Config config;
|
||||
Subtractor subtractor(config, &data_dumper, DetectOptimization());
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
RenderSignalAnalyzer render_signal_analyzer(config);
|
||||
std::vector<float> y(kBlockSize, 0.f);
|
||||
|
||||
@ -142,7 +142,7 @@ TEST(Subtractor, WrongCaptureSize) {
|
||||
EchoCanceller3Config config;
|
||||
Subtractor subtractor(config, &data_dumper, DetectOptimization());
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
RenderSignalAnalyzer render_signal_analyzer(config);
|
||||
std::vector<float> y(kBlockSize - 1, 0.f);
|
||||
SubtractorOutput output;
|
||||
|
@ -75,7 +75,7 @@ TEST(SuppressionGain, BasicGainComputation) {
|
||||
ApmDataDumper data_dumper(42);
|
||||
Subtractor subtractor(config, &data_dumper, DetectOptimization());
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderDelayBuffer::Create(config, 48000));
|
||||
absl::optional<DelayEstimate> delay_estimate;
|
||||
|
||||
// Ensure that a strong noise is detected to mask any echoes.
|
||||
|
Reference in New Issue
Block a user