From 098c4ea2ca6e8c86c1cc14ec304af8af0292e0ea Mon Sep 17 00:00:00 2001 From: Jakob Ivarsson Date: Mon, 18 Apr 2022 20:31:51 +0200 Subject: [PATCH] Add generated comfort noise counter. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently only implemented for codec internal CNG (Opus). Bug: webrtc:13322 Change-Id: I00622f2967f066dba64a792e26081038ae0cb0d9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/259200 Reviewed-by: Ivo Creusen Commit-Queue: Jakob Ivarsson‎ Cr-Commit-Position: refs/heads/main@{#36590} --- api/neteq/neteq.h | 2 ++ modules/audio_coding/neteq/neteq_impl.cc | 1 + modules/audio_coding/neteq/statistics_calculator.cc | 4 ++++ modules/audio_coding/neteq/statistics_calculator.h | 3 +++ modules/audio_coding/neteq/tools/neteq_stats_plotter.cc | 6 ++++++ 5 files changed, 16 insertions(+) diff --git a/api/neteq/neteq.h b/api/neteq/neteq.h index 675742a1ce..aed18faefc 100644 --- a/api/neteq/neteq.h +++ b/api/neteq/neteq.h @@ -88,6 +88,8 @@ struct NetEqLifetimeStatistics { // these events. int32_t interruption_count = 0; int32_t total_interruption_duration_ms = 0; + // Total number of comfort noise samples generated during DTX. + uint64_t generated_noise_samples = 0; }; // Metrics that describe the operations performed in NetEq, and the internal diff --git a/modules/audio_coding/neteq/neteq_impl.cc b/modules/audio_coding/neteq/neteq_impl.cc index 30886c3ace..d77acc04dd 100644 --- a/modules/audio_coding/neteq/neteq_impl.cc +++ b/modules/audio_coding/neteq/neteq_impl.cc @@ -1455,6 +1455,7 @@ int NetEqImpl::DecodeCng(AudioDecoder* decoder, return kDecodedTooMuch; } } + stats_->GeneratedNoiseSamples(*decoded_length); return 0; } diff --git a/modules/audio_coding/neteq/statistics_calculator.cc b/modules/audio_coding/neteq/statistics_calculator.cc index 8e281302b7..a0739a9345 100644 --- a/modules/audio_coding/neteq/statistics_calculator.cc +++ b/modules/audio_coding/neteq/statistics_calculator.cc @@ -230,6 +230,10 @@ void StatisticsCalculator::AcceleratedSamples(size_t num_samples) { lifetime_stats_.removed_samples_for_acceleration += num_samples; } +void StatisticsCalculator::GeneratedNoiseSamples(size_t num_samples) { + lifetime_stats_.generated_noise_samples += num_samples; +} + void StatisticsCalculator::PacketsDiscarded(size_t num_packets) { operations_and_state_.discarded_primary_packets += num_packets; } diff --git a/modules/audio_coding/neteq/statistics_calculator.h b/modules/audio_coding/neteq/statistics_calculator.h index 269e6a09b2..e9b3d0328f 100644 --- a/modules/audio_coding/neteq/statistics_calculator.h +++ b/modules/audio_coding/neteq/statistics_calculator.h @@ -64,6 +64,9 @@ class StatisticsCalculator { // Reports that `num_samples` samples were removed through accelerate. void AcceleratedSamples(size_t num_samples); + // Reports that `num_samples` comfort noise samples were generated. + void GeneratedNoiseSamples(size_t num_samples); + // Reports that `num_packets` packets were discarded. virtual void PacketsDiscarded(size_t num_packets); diff --git a/modules/audio_coding/neteq/tools/neteq_stats_plotter.cc b/modules/audio_coding/neteq/tools/neteq_stats_plotter.cc index 3f06b1cfc4..db901c6a49 100644 --- a/modules/audio_coding/neteq/tools/neteq_stats_plotter.cc +++ b/modules/audio_coding/neteq/tools/neteq_stats_plotter.cc @@ -94,6 +94,12 @@ void NetEqStatsPlotter::SimulationEnded(int64_t simulation_time_ms) { printf(" interruption_ratio: %f\n", static_cast(lifetime_stats.total_interruption_duration_ms) / simulation_time_ms); + printf(" removed_samples_for_acceleration: %" PRIu64 "\n", + lifetime_stats.removed_samples_for_acceleration); + printf(" inserted_samples_for_deceleration: %" PRIu64 "\n", + lifetime_stats.inserted_samples_for_deceleration); + printf(" generated_noise_samples: %" PRIu64 "\n", + lifetime_stats.generated_noise_samples); } }