APM audioproc_f: flag for AGC2 adaptive level estimator.

Bug: webrtc:7494
Change-Id: I603211570a0a46d8884749dab887cd572827cca6
Reviewed-on: https://webrtc-review.googlesource.com/c/110250
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25708}
This commit is contained in:
Alessio Bazzica 2018-11-20 12:27:20 +01:00 committed by Commit Bot
parent 44974e143c
commit 68170388f4
4 changed files with 41 additions and 0 deletions

View File

@ -589,6 +589,7 @@ if (rtc_include_tests) {
"aec_dump:aec_dump_impl",
"//testing/gtest",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
} # audioproc_f_impl

View File

@ -357,6 +357,8 @@ void AudioProcessingSimulator::CreateAudioProcessor() {
if (settings_.agc2_use_adaptive_gain) {
apm_config.gain_controller2.adaptive_digital.enabled =
*settings_.agc2_use_adaptive_gain;
apm_config.gain_controller2.adaptive_digital.level_estimator =
settings_.agc2_adaptive_level_estimator;
}
}
if (settings_.use_pre_amplifier) {

View File

@ -75,6 +75,8 @@ struct SimulationSettings {
absl::optional<int> agc_compression_gain;
absl::optional<bool> agc2_use_adaptive_gain;
float agc2_fixed_gain_db;
AudioProcessing::Config::GainController2::LevelEstimator
agc2_adaptive_level_estimator;
float pre_amplifier_gain_factor;
absl::optional<int> vad_likelihood;
absl::optional<int> ns_level;

View File

@ -14,13 +14,17 @@
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "absl/strings/string_view.h"
#include "modules/audio_processing/include/audio_processing.h"
#include "modules/audio_processing/test/aec_dump_based_simulator.h"
#include "modules/audio_processing/test/audio_processing_simulator.h"
#include "modules/audio_processing/test/audioproc_float_impl.h"
#include "modules/audio_processing/test/wav_based_simulator.h"
#include "rtc_base/checks.h"
#include "rtc_base/flags.h"
#include "rtc_base/strings/string_builder.h"
namespace webrtc {
namespace test {
@ -150,6 +154,15 @@ WEBRTC_DEFINE_float(agc2_enable_adaptive_gain,
kParameterNotSpecifiedValue,
"Activate (1) or deactivate(0) the AGC2 adaptive gain");
WEBRTC_DEFINE_float(agc2_fixed_gain_db, 0.f, "AGC2 fixed gain (dB) to apply");
std::vector<std::string> GetAgc2AdaptiveLevelEstimatorNames() {
return {"RMS", "peak"};
}
WEBRTC_DEFINE_string(
agc2_adaptive_level_estimator,
"RMS",
"AGC2 adaptive digital level estimator to use [RMS, peak]");
WEBRTC_DEFINE_float(pre_amplifier_gain_factor,
1.f,
"Pre-amplifier gain factor (linear) to apply");
@ -226,6 +239,27 @@ void SetSettingIfFlagSet(int32_t flag, absl::optional<bool>* parameter) {
}
}
AudioProcessing::Config::GainController2::LevelEstimator
MapAgc2AdaptiveLevelEstimator(absl::string_view name) {
if (name.compare("RMS") == 0) {
return AudioProcessing::Config::GainController2::LevelEstimator::kRms;
}
if (name.compare("peak") == 0) {
return AudioProcessing::Config::GainController2::LevelEstimator::kPeak;
}
auto concat_strings =
[](const std::vector<std::string>& strings) -> std::string {
rtc::StringBuilder ss;
for (const auto& s : strings) {
ss << " " << s;
}
return ss.Release();
};
RTC_CHECK(false)
<< "Invalid value for agc2_adaptive_level_estimator, valid options:"
<< concat_strings(GetAgc2AdaptiveLevelEstimatorNames()) << ".";
}
SimulationSettings CreateSettings() {
SimulationSettings settings;
if (FLAG_all_default) {
@ -293,6 +327,8 @@ SimulationSettings CreateSettings() {
SetSettingIfFlagSet(FLAG_agc2_enable_adaptive_gain,
&settings.agc2_use_adaptive_gain);
settings.agc2_fixed_gain_db = FLAG_agc2_fixed_gain_db;
settings.agc2_adaptive_level_estimator =
MapAgc2AdaptiveLevelEstimator(FLAG_agc2_adaptive_level_estimator);
settings.pre_amplifier_gain_factor = FLAG_pre_amplifier_gain_factor;
SetSettingIfSpecified(FLAG_vad_likelihood, &settings.vad_likelihood);
SetSettingIfSpecified(FLAG_ns_level, &settings.ns_level);