From 76714a6cc8a0eb2e78a9e63f45284e7060276393 Mon Sep 17 00:00:00 2001 From: Alessio Bazzica Date: Wed, 13 Jan 2021 18:08:40 +0100 Subject: [PATCH] AGC2 minor code clean up Dead code removed plus const ref std::string to avoid copies. Bug: webrtc:7494 Change-Id: Ic408a810ae310fea942f25fc697ab81017c8a739 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/201624 Reviewed-by: Gustaf Ullberg Commit-Queue: Alessio Bazzica Cr-Commit-Position: refs/heads/master@{#32968} --- .../agc2/fixed_gain_controller.cc | 101 ------------------ .../agc2/interpolated_gain_curve.cc | 13 +-- .../agc2/interpolated_gain_curve.h | 10 +- modules/audio_processing/agc2/limiter.cc | 2 +- modules/audio_processing/agc2/limiter.h | 2 +- 5 files changed, 14 insertions(+), 114 deletions(-) delete mode 100644 modules/audio_processing/agc2/fixed_gain_controller.cc diff --git a/modules/audio_processing/agc2/fixed_gain_controller.cc b/modules/audio_processing/agc2/fixed_gain_controller.cc deleted file mode 100644 index ef908dc358..0000000000 --- a/modules/audio_processing/agc2/fixed_gain_controller.cc +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include "modules/audio_processing/agc2/fixed_gain_controller.h" - -#include "api/array_view.h" -#include "common_audio/include/audio_util.h" -#include "modules/audio_processing/agc2/agc2_common.h" -#include "modules/audio_processing/logging/apm_data_dumper.h" -#include "rtc_base/checks.h" -#include "rtc_base/logging.h" -#include "rtc_base/numerics/safe_minmax.h" - -namespace webrtc { -namespace { - -// Returns true when the gain factor is so close to 1 that it would -// not affect int16 samples. -bool CloseToOne(float gain_factor) { - return 1.f - 1.f / kMaxFloatS16Value <= gain_factor && - gain_factor <= 1.f + 1.f / kMaxFloatS16Value; -} -} // namespace - -FixedGainController::FixedGainController(ApmDataDumper* apm_data_dumper) - : FixedGainController(apm_data_dumper, "Agc2") {} - -FixedGainController::FixedGainController(ApmDataDumper* apm_data_dumper, - std::string histogram_name_prefix) - : apm_data_dumper_(apm_data_dumper), - limiter_(48000, apm_data_dumper_, histogram_name_prefix) { - // Do update histograms.xml when adding name prefixes. - RTC_DCHECK(histogram_name_prefix == "" || histogram_name_prefix == "Test" || - histogram_name_prefix == "AudioMixer" || - histogram_name_prefix == "Agc2"); -} - -void FixedGainController::SetGain(float gain_to_apply_db) { - // Changes in gain_to_apply_ cause discontinuities. We assume - // gain_to_apply_ is set in the beginning of the call. If it is - // frequently changed, we should add interpolation between the - // values. - // The gain - RTC_DCHECK_LE(-50.f, gain_to_apply_db); - RTC_DCHECK_LE(gain_to_apply_db, 50.f); - const float previous_applied_gained = gain_to_apply_; - gain_to_apply_ = DbToRatio(gain_to_apply_db); - RTC_DCHECK_LT(0.f, gain_to_apply_); - RTC_DLOG(LS_INFO) << "Gain to apply: " << gain_to_apply_db << " db."; - // Reset the gain curve applier to quickly react on abrupt level changes - // caused by large changes of the applied gain. - if (previous_applied_gained != gain_to_apply_) { - limiter_.Reset(); - } -} - -void FixedGainController::SetSampleRate(size_t sample_rate_hz) { - limiter_.SetSampleRate(sample_rate_hz); -} - -void FixedGainController::Process(AudioFrameView signal) { - // Apply fixed digital gain. One of the - // planned usages of the FGC is to only use the limiter. In that - // case, the gain would be 1.0. Not doing the multiplications speeds - // it up considerably. Hence the check. - if (!CloseToOne(gain_to_apply_)) { - for (size_t k = 0; k < signal.num_channels(); ++k) { - rtc::ArrayView channel_view = signal.channel(k); - for (auto& sample : channel_view) { - sample *= gain_to_apply_; - } - } - } - - // Use the limiter. - limiter_.Process(signal); - - // Dump data for debug. - const auto channel_view = signal.channel(0); - apm_data_dumper_->DumpRaw("agc2_fixed_digital_gain_curve_applier", - channel_view.size(), channel_view.data()); - // Hard-clipping. - for (size_t k = 0; k < signal.num_channels(); ++k) { - rtc::ArrayView channel_view = signal.channel(k); - for (auto& sample : channel_view) { - sample = rtc::SafeClamp(sample, kMinFloatS16Value, kMaxFloatS16Value); - } - } -} - -float FixedGainController::LastAudioLevel() const { - return limiter_.LastAudioLevel(); -} -} // namespace webrtc diff --git a/modules/audio_processing/agc2/interpolated_gain_curve.cc b/modules/audio_processing/agc2/interpolated_gain_curve.cc index 502e7024b0..3dd501096a 100644 --- a/modules/audio_processing/agc2/interpolated_gain_curve.cc +++ b/modules/audio_processing/agc2/interpolated_gain_curve.cc @@ -28,8 +28,9 @@ constexpr std::array constexpr std::array InterpolatedGainCurve::approximation_params_q_; -InterpolatedGainCurve::InterpolatedGainCurve(ApmDataDumper* apm_data_dumper, - std::string histogram_name_prefix) +InterpolatedGainCurve::InterpolatedGainCurve( + ApmDataDumper* apm_data_dumper, + const std::string& histogram_name_prefix) : region_logger_("WebRTC.Audio." + histogram_name_prefix + ".FixedDigitalGainCurveRegion.Identity", "WebRTC.Audio." + histogram_name_prefix + @@ -56,10 +57,10 @@ InterpolatedGainCurve::~InterpolatedGainCurve() { } InterpolatedGainCurve::RegionLogger::RegionLogger( - std::string identity_histogram_name, - std::string knee_histogram_name, - std::string limiter_histogram_name, - std::string saturation_histogram_name) + const std::string& identity_histogram_name, + const std::string& knee_histogram_name, + const std::string& limiter_histogram_name, + const std::string& saturation_histogram_name) : identity_histogram( metrics::HistogramFactoryGetCounts(identity_histogram_name, 1, diff --git a/modules/audio_processing/agc2/interpolated_gain_curve.h b/modules/audio_processing/agc2/interpolated_gain_curve.h index ef1c027cf0..69652c5a72 100644 --- a/modules/audio_processing/agc2/interpolated_gain_curve.h +++ b/modules/audio_processing/agc2/interpolated_gain_curve.h @@ -61,7 +61,7 @@ class InterpolatedGainCurve { }; InterpolatedGainCurve(ApmDataDumper* apm_data_dumper, - std::string histogram_name_prefix); + const std::string& histogram_name_prefix); ~InterpolatedGainCurve(); Stats get_stats() const { return stats_; } @@ -84,10 +84,10 @@ class InterpolatedGainCurve { metrics::Histogram* limiter_histogram; metrics::Histogram* saturation_histogram; - RegionLogger(std::string identity_histogram_name, - std::string knee_histogram_name, - std::string limiter_histogram_name, - std::string saturation_histogram_name); + RegionLogger(const std::string& identity_histogram_name, + const std::string& knee_histogram_name, + const std::string& limiter_histogram_name, + const std::string& saturation_histogram_name); ~RegionLogger(); diff --git a/modules/audio_processing/agc2/limiter.cc b/modules/audio_processing/agc2/limiter.cc index 1589f07404..11473326e1 100644 --- a/modules/audio_processing/agc2/limiter.cc +++ b/modules/audio_processing/agc2/limiter.cc @@ -94,7 +94,7 @@ void CheckLimiterSampleRate(size_t sample_rate_hz) { Limiter::Limiter(size_t sample_rate_hz, ApmDataDumper* apm_data_dumper, - std::string histogram_name) + const std::string& histogram_name) : interp_gain_curve_(apm_data_dumper, histogram_name), level_estimator_(sample_rate_hz, apm_data_dumper), apm_data_dumper_(apm_data_dumper) { diff --git a/modules/audio_processing/agc2/limiter.h b/modules/audio_processing/agc2/limiter.h index 599fd0f4bb..df7b540b70 100644 --- a/modules/audio_processing/agc2/limiter.h +++ b/modules/audio_processing/agc2/limiter.h @@ -26,7 +26,7 @@ class Limiter { public: Limiter(size_t sample_rate_hz, ApmDataDumper* apm_data_dumper, - std::string histogram_name_prefix); + const std::string& histogram_name_prefix); Limiter(const Limiter& limiter) = delete; Limiter& operator=(const Limiter& limiter) = delete; ~Limiter();