From 83c4a02b76c8f4edac4b85ada9136d1e053a68f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=85hgren?= Date: Mon, 27 Nov 2017 12:07:09 +0100 Subject: [PATCH] Added metric for the delay in AEC3. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:8569 Change-Id: I659049a411654bd3a252ab29008fac467f903efd Reviewed-on: https://webrtc-review.googlesource.com/25600 Commit-Queue: Per Ã…hgren Reviewed-by: Gustaf Ullberg Cr-Commit-Position: refs/heads/master@{#20892} --- modules/audio_processing/aec3/block_processor.cc | 2 ++ modules/audio_processing/audio_processing_impl.cc | 1 + modules/audio_processing/include/audio_processing.h | 1 + .../audio_processing/include/audio_processing_statistics.h | 5 +++++ 4 files changed, 9 insertions(+) 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