diff --git a/modules/audio_processing/aec3/block_processor.cc b/modules/audio_processing/aec3/block_processor.cc index 20c3669000..f0b963087c 100644 --- a/modules/audio_processing/aec3/block_processor.cc +++ b/modules/audio_processing/aec3/block_processor.cc @@ -183,6 +183,8 @@ void BlockProcessorImpl::UpdateEchoLeakageStatus(bool leakage_detected) { void BlockProcessorImpl::GetMetrics(EchoControl::Metrics* metrics) const { echo_remover_->GetMetrics(metrics); + const int block_size_ms = sample_rate_hz_ == 8000 ? 8 : 4; + metrics->delay_ms = static_cast(render_buffer_->Delay()) * block_size_ms; } } // namespace diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index b5ef42e5dc..d61ab97c6e 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -1615,6 +1615,7 @@ AudioProcessingStats AudioProcessingImpl::GetStatistics( stats.echo_return_loss = ec_metrics.echo_return_loss; stats.echo_return_loss_enhancement = ec_metrics.echo_return_loss_enhancement; + stats.delay_ms = ec_metrics.delay_ms; } else if (public_submodules_->echo_cancellation->GetMetrics(&metrics) == Error::kNoError) { if (metrics.divergent_filter_fraction != -1.0f) { diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h index 6c8f4dbc02..d3a1ef507c 100644 --- a/modules/audio_processing/include/audio_processing.h +++ b/modules/audio_processing/include/audio_processing.h @@ -912,6 +912,7 @@ class EchoControl { struct Metrics { double echo_return_loss; double echo_return_loss_enhancement; + int delay_ms; }; // Collect current metrics from the echo controller. diff --git a/modules/audio_processing/include/audio_processing_statistics.h b/modules/audio_processing/include/audio_processing_statistics.h index 7dbc90735a..83c9d9932f 100644 --- a/modules/audio_processing/include/audio_processing_statistics.h +++ b/modules/audio_processing/include/audio_processing_statistics.h @@ -44,6 +44,11 @@ struct AudioProcessingStats { rtc::Optional residual_echo_likelihood; // Maximum residual echo likelihood from the last time period. rtc::Optional residual_echo_likelihood_recent_max; + + // The instantaneous delay estimate produced in the AEC. The unit is in + // milliseconds and the value is the instantaneous value at the time of the + // call to |GetStatistics()|. + int delay_ms; }; } // namespace webrtc