Bump to WebRTC M120 release
Some API deprecation -- ExperimentalAgc and ExperimentalNs are gone. We're continuing to carry iSAC even though it's gone upstream, but maybe we'll want to drop that soon.
This commit is contained in:
@ -20,7 +20,6 @@
|
||||
#include "api/array_view.h"
|
||||
#include "modules/audio_processing/aec3/aec3_common.h"
|
||||
#include "modules/audio_processing/logging/apm_data_dumper.h"
|
||||
#include "rtc_base/atomic_ops.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "system_wrappers/include/field_trial.h"
|
||||
|
||||
@ -97,7 +96,7 @@ void ComputeAvgRenderReverb(
|
||||
|
||||
} // namespace
|
||||
|
||||
int AecState::instance_count_ = 0;
|
||||
std::atomic<int> AecState::instance_count_(0);
|
||||
|
||||
void AecState::GetResidualEchoScaling(
|
||||
rtc::ArrayView<float> residual_scaling) const {
|
||||
@ -113,18 +112,9 @@ void AecState::GetResidualEchoScaling(
|
||||
residual_scaling);
|
||||
}
|
||||
|
||||
absl::optional<float> AecState::ErleUncertainty() const {
|
||||
if (SaturatedEcho()) {
|
||||
return 1.f;
|
||||
}
|
||||
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
AecState::AecState(const EchoCanceller3Config& config,
|
||||
size_t num_capture_channels)
|
||||
: data_dumper_(
|
||||
new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))),
|
||||
: data_dumper_(new ApmDataDumper(instance_count_.fetch_add(1) + 1)),
|
||||
config_(config),
|
||||
num_capture_channels_(num_capture_channels),
|
||||
deactivate_initial_state_reset_at_echo_path_change_(
|
||||
@ -197,8 +187,10 @@ void AecState::Update(
|
||||
|
||||
// Analyze the filter outputs and filters.
|
||||
bool any_filter_converged;
|
||||
bool any_coarse_filter_converged;
|
||||
bool all_filters_diverged;
|
||||
subtractor_output_analyzer_.Update(subtractor_output, &any_filter_converged,
|
||||
&any_coarse_filter_converged,
|
||||
&all_filters_diverged);
|
||||
|
||||
bool any_filter_consistent;
|
||||
@ -212,15 +204,16 @@ void AecState::Update(
|
||||
strong_not_saturated_render_blocks_);
|
||||
}
|
||||
|
||||
const std::vector<std::vector<float>>& aligned_render_block =
|
||||
render_buffer.Block(-delay_state_.MinDirectPathFilterDelay())[0];
|
||||
const Block& aligned_render_block =
|
||||
render_buffer.GetBlock(-delay_state_.MinDirectPathFilterDelay());
|
||||
|
||||
// Update render counters.
|
||||
bool active_render = false;
|
||||
for (size_t ch = 0; ch < aligned_render_block.size(); ++ch) {
|
||||
const float render_energy = std::inner_product(
|
||||
aligned_render_block[ch].begin(), aligned_render_block[ch].end(),
|
||||
aligned_render_block[ch].begin(), 0.f);
|
||||
for (int ch = 0; ch < aligned_render_block.NumChannels(); ++ch) {
|
||||
const float render_energy =
|
||||
std::inner_product(aligned_render_block.begin(/*block=*/0, ch),
|
||||
aligned_render_block.end(/*block=*/0, ch),
|
||||
aligned_render_block.begin(/*block=*/0, ch), 0.f);
|
||||
if (render_energy > (config_.render_levels.active_render_limit *
|
||||
config_.render_levels.active_render_limit) *
|
||||
kFftLengthBy2) {
|
||||
@ -235,8 +228,9 @@ void AecState::Update(
|
||||
std::array<float, kFftLengthBy2Plus1> avg_render_spectrum_with_reverb;
|
||||
|
||||
ComputeAvgRenderReverb(render_buffer.GetSpectrumBuffer(),
|
||||
delay_state_.MinDirectPathFilterDelay(), ReverbDecay(),
|
||||
&avg_render_reverb_, avg_render_spectrum_with_reverb);
|
||||
delay_state_.MinDirectPathFilterDelay(),
|
||||
ReverbDecay(/*mild=*/false), &avg_render_reverb_,
|
||||
avg_render_spectrum_with_reverb);
|
||||
|
||||
if (config_.echo_audibility.use_stationarity_properties) {
|
||||
// Update the echo audibility evaluator.
|
||||
@ -272,10 +266,10 @@ void AecState::Update(
|
||||
|
||||
// Detect whether the transparent mode should be activated.
|
||||
if (transparent_state_) {
|
||||
transparent_state_->Update(delay_state_.MinDirectPathFilterDelay(),
|
||||
any_filter_consistent, any_filter_converged,
|
||||
all_filters_diverged, active_render,
|
||||
SaturatedCapture());
|
||||
transparent_state_->Update(
|
||||
delay_state_.MinDirectPathFilterDelay(), any_filter_consistent,
|
||||
any_filter_converged, any_coarse_filter_converged, all_filters_diverged,
|
||||
active_render, SaturatedCapture());
|
||||
}
|
||||
|
||||
// Analyze the quality of the filter.
|
||||
@ -300,7 +294,9 @@ void AecState::Update(
|
||||
data_dumper_->DumpRaw("aec3_active_render", active_render);
|
||||
data_dumper_->DumpRaw("aec3_erl", Erl());
|
||||
data_dumper_->DumpRaw("aec3_erl_time_domain", ErlTimeDomain());
|
||||
data_dumper_->DumpRaw("aec3_erle", Erle()[0]);
|
||||
data_dumper_->DumpRaw("aec3_erle", Erle(/*onset_compensated=*/false)[0]);
|
||||
data_dumper_->DumpRaw("aec3_erle_onset_compensated",
|
||||
Erle(/*onset_compensated=*/true)[0]);
|
||||
data_dumper_->DumpRaw("aec3_usable_linear_estimate", UsableLinearEstimate());
|
||||
data_dumper_->DumpRaw("aec3_transparent_mode", TransparentModeActive());
|
||||
data_dumper_->DumpRaw("aec3_filter_delay",
|
||||
@ -312,12 +308,19 @@ void AecState::Update(
|
||||
data_dumper_->DumpRaw("aec3_capture_saturation", SaturatedCapture());
|
||||
data_dumper_->DumpRaw("aec3_echo_saturation", SaturatedEcho());
|
||||
data_dumper_->DumpRaw("aec3_any_filter_converged", any_filter_converged);
|
||||
data_dumper_->DumpRaw("aec3_any_coarse_filter_converged",
|
||||
any_coarse_filter_converged);
|
||||
data_dumper_->DumpRaw("aec3_all_filters_diverged", all_filters_diverged);
|
||||
|
||||
data_dumper_->DumpRaw("aec3_external_delay_avaliable",
|
||||
external_delay ? 1 : 0);
|
||||
data_dumper_->DumpRaw("aec3_filter_tail_freq_resp_est",
|
||||
GetReverbFrequencyResponse());
|
||||
data_dumper_->DumpRaw("aec3_subtractor_y2", subtractor_output[0].y2);
|
||||
data_dumper_->DumpRaw("aec3_subtractor_e2_coarse",
|
||||
subtractor_output[0].e2_coarse);
|
||||
data_dumper_->DumpRaw("aec3_subtractor_e2_refined",
|
||||
subtractor_output[0].e2_refined);
|
||||
}
|
||||
|
||||
AecState::InitialState::InitialState(const EchoCanceller3Config& config)
|
||||
@ -442,7 +445,7 @@ void AecState::FilteringQualityAnalyzer::Update(
|
||||
}
|
||||
|
||||
void AecState::SaturationDetector::Update(
|
||||
rtc::ArrayView<const std::vector<float>> x,
|
||||
const Block& x,
|
||||
bool saturated_capture,
|
||||
bool usable_linear_estimate,
|
||||
rtc::ArrayView<const SubtractorOutput> subtractor_output,
|
||||
@ -462,8 +465,9 @@ void AecState::SaturationDetector::Update(
|
||||
}
|
||||
} else {
|
||||
float max_sample = 0.f;
|
||||
for (auto& channel : x) {
|
||||
for (float sample : channel) {
|
||||
for (int ch = 0; ch < x.NumChannels(); ++ch) {
|
||||
rtc::ArrayView<const float, kBlockSize> x_ch = x.View(/*band=*/0, ch);
|
||||
for (float sample : x_ch) {
|
||||
max_sample = std::max(max_sample, fabsf(sample));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user