Switch to injected field trials in GainController2
Bug: webrtc:369904700 Change-Id: I28dc43ffe4f1edaf55a5be05371618cbb76d0709 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/371660 Reviewed-by: Sam Zackrisson <saza@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#43596}
This commit is contained in:
parent
ac40185001
commit
8da0652263
@ -108,13 +108,14 @@ rtc_library("gain_controller2") {
|
||||
":apm_logging",
|
||||
":audio_buffer",
|
||||
":audio_frame_view",
|
||||
"../../api:field_trials_view",
|
||||
"../../api/audio:audio_frame_api",
|
||||
"../../api/audio:audio_processing",
|
||||
"../../api/environment",
|
||||
"../../common_audio",
|
||||
"../../rtc_base:checks",
|
||||
"../../rtc_base:logging",
|
||||
"../../rtc_base:stringutils",
|
||||
"../../system_wrappers:field_trial",
|
||||
"agc2:adaptive_digital_gain_controller",
|
||||
"agc2:common",
|
||||
"agc2:cpu_features",
|
||||
|
||||
@ -431,7 +431,8 @@ AudioProcessingImpl::AudioProcessingImpl(
|
||||
std::unique_ptr<EchoControlFactory> echo_control_factory,
|
||||
rtc::scoped_refptr<EchoDetector> echo_detector,
|
||||
std::unique_ptr<CustomAudioAnalyzer> capture_analyzer)
|
||||
: data_dumper_(new ApmDataDumper(instance_count_.fetch_add(1) + 1)),
|
||||
: env_(env),
|
||||
data_dumper_(new ApmDataDumper(instance_count_.fetch_add(1) + 1)),
|
||||
use_setup_specific_default_aec3_config_(
|
||||
UseSetupSpecificDefaultAec3Congfig(env.field_trials())),
|
||||
capture_runtime_settings_(RuntimeSettingQueueSize()),
|
||||
@ -2038,7 +2039,7 @@ void AudioProcessingImpl::InitializeGainController2() {
|
||||
const InputVolumeController::Config input_volume_controller_config =
|
||||
InputVolumeController::Config{};
|
||||
submodules_.gain_controller2 = std::make_unique<GainController2>(
|
||||
config_.gain_controller2, input_volume_controller_config,
|
||||
env_, config_.gain_controller2, input_volume_controller_config,
|
||||
proc_fullband_sample_rate_hz(), num_output_channels(),
|
||||
/*use_internal_vad=*/true);
|
||||
submodules_.gain_controller2->SetCaptureOutputUsed(
|
||||
|
||||
@ -178,6 +178,7 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
SwapQueue<RuntimeSetting>& runtime_settings_;
|
||||
};
|
||||
|
||||
const Environment env_;
|
||||
const std::unique_ptr<ApmDataDumper> data_dumper_;
|
||||
static std::atomic<int> instance_count_;
|
||||
const bool use_setup_specific_default_aec3_config_;
|
||||
|
||||
@ -14,6 +14,8 @@
|
||||
#include <utility>
|
||||
|
||||
#include "api/audio/audio_frame.h"
|
||||
#include "api/environment/environment.h"
|
||||
#include "api/field_trials_view.h"
|
||||
#include "common_audio/include/audio_util.h"
|
||||
#include "modules/audio_processing/agc2/agc2_common.h"
|
||||
#include "modules/audio_processing/agc2/cpu_features.h"
|
||||
@ -23,7 +25,6 @@
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/strings/string_builder.h"
|
||||
#include "system_wrappers/include/field_trial.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
@ -37,15 +38,16 @@ constexpr int kLogLimiterStatsPeriodNumFrames =
|
||||
kLogLimiterStatsPeriodMs / kFrameLengthMs;
|
||||
|
||||
// Detects the available CPU features and applies any kill-switches.
|
||||
AvailableCpuFeatures GetAllowedCpuFeatures() {
|
||||
AvailableCpuFeatures GetAllowedCpuFeatures(
|
||||
const FieldTrialsView& field_trials) {
|
||||
AvailableCpuFeatures features = GetAvailableCpuFeatures();
|
||||
if (field_trial::IsEnabled("WebRTC-Agc2SimdSse2KillSwitch")) {
|
||||
if (field_trials.IsEnabled("WebRTC-Agc2SimdSse2KillSwitch")) {
|
||||
features.sse2 = false;
|
||||
}
|
||||
if (field_trial::IsEnabled("WebRTC-Agc2SimdAvx2KillSwitch")) {
|
||||
if (field_trials.IsEnabled("WebRTC-Agc2SimdAvx2KillSwitch")) {
|
||||
features.avx2 = false;
|
||||
}
|
||||
if (field_trial::IsEnabled("WebRTC-Agc2SimdNeonKillSwitch")) {
|
||||
if (field_trials.IsEnabled("WebRTC-Agc2SimdNeonKillSwitch")) {
|
||||
features.neon = false;
|
||||
}
|
||||
return features;
|
||||
@ -85,12 +87,13 @@ AudioLevels ComputeAudioLevels(DeinterleavedView<float> frame,
|
||||
std::atomic<int> GainController2::instance_count_(0);
|
||||
|
||||
GainController2::GainController2(
|
||||
const Environment& env,
|
||||
const Agc2Config& config,
|
||||
const InputVolumeControllerConfig& input_volume_controller_config,
|
||||
int sample_rate_hz,
|
||||
int num_channels,
|
||||
bool use_internal_vad)
|
||||
: cpu_features_(GetAllowedCpuFeatures()),
|
||||
: cpu_features_(GetAllowedCpuFeatures(env.field_trials())),
|
||||
data_dumper_(instance_count_.fetch_add(1) + 1),
|
||||
fixed_gain_applier_(
|
||||
/*hard_clip_samples=*/false,
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "api/audio/audio_processing.h"
|
||||
#include "api/environment/environment.h"
|
||||
#include "modules/audio_processing/agc2/adaptive_digital_gain_controller.h"
|
||||
#include "modules/audio_processing/agc2/cpu_features.h"
|
||||
#include "modules/audio_processing/agc2/gain_applier.h"
|
||||
@ -38,6 +39,7 @@ class GainController2 {
|
||||
// Ctor. If `use_internal_vad` is true, an internal voice activity
|
||||
// detector is used for digital adaptive gain.
|
||||
GainController2(
|
||||
const Environment& env,
|
||||
const AudioProcessing::Config::GainController2& config,
|
||||
const InputVolumeController::Config& input_volume_controller_config,
|
||||
int sample_rate_hz,
|
||||
|
||||
@ -16,6 +16,8 @@
|
||||
#include <numeric>
|
||||
#include <tuple>
|
||||
|
||||
#include "api/environment/environment.h"
|
||||
#include "api/environment/environment_factory.h"
|
||||
#include "modules/audio_processing/agc2/agc2_testing_common.h"
|
||||
#include "modules/audio_processing/audio_buffer.h"
|
||||
#include "modules/audio_processing/test/audio_buffer_tools.h"
|
||||
@ -72,10 +74,11 @@ std::unique_ptr<GainController2> CreateAgc2FixedDigitalMode(
|
||||
config.adaptive_digital.enabled = false;
|
||||
config.fixed_digital.gain_db = fixed_gain_db;
|
||||
EXPECT_TRUE(GainController2::Validate(config));
|
||||
return std::make_unique<GainController2>(
|
||||
config, InputVolumeControllerConfig{}, sample_rate_hz,
|
||||
/*num_channels=*/1,
|
||||
/*use_internal_vad=*/true);
|
||||
return std::make_unique<GainController2>(CreateEnvironment(), config,
|
||||
InputVolumeControllerConfig{},
|
||||
sample_rate_hz,
|
||||
/*num_channels=*/1,
|
||||
/*use_internal_vad=*/true);
|
||||
}
|
||||
|
||||
constexpr InputVolumeControllerConfig kTestInputVolumeControllerConfig{
|
||||
@ -174,7 +177,8 @@ TEST(GainController2,
|
||||
config.input_volume_controller.enabled = false;
|
||||
|
||||
auto gain_controller = std::make_unique<GainController2>(
|
||||
config, InputVolumeControllerConfig{}, kSampleRateHz, kNumChannels,
|
||||
CreateEnvironment(), config, InputVolumeControllerConfig{}, kSampleRateHz,
|
||||
kNumChannels,
|
||||
/*use_internal_vad=*/true);
|
||||
|
||||
EXPECT_FALSE(gain_controller->recommended_input_volume().has_value());
|
||||
@ -206,7 +210,8 @@ TEST(
|
||||
config.input_volume_controller.enabled = false;
|
||||
|
||||
auto gain_controller = std::make_unique<GainController2>(
|
||||
config, kTestInputVolumeControllerConfig, kSampleRateHz, kNumChannels,
|
||||
CreateEnvironment(), config, kTestInputVolumeControllerConfig,
|
||||
kSampleRateHz, kNumChannels,
|
||||
/*use_internal_vad=*/true);
|
||||
|
||||
EXPECT_FALSE(gain_controller->recommended_input_volume().has_value());
|
||||
@ -238,7 +243,8 @@ TEST(GainController2,
|
||||
config.adaptive_digital.enabled = true;
|
||||
|
||||
auto gain_controller = std::make_unique<GainController2>(
|
||||
config, InputVolumeControllerConfig{}, kSampleRateHz, kNumChannels,
|
||||
CreateEnvironment(), config, InputVolumeControllerConfig{}, kSampleRateHz,
|
||||
kNumChannels,
|
||||
/*use_internal_vad=*/true);
|
||||
|
||||
EXPECT_FALSE(gain_controller->recommended_input_volume().has_value());
|
||||
@ -271,7 +277,8 @@ TEST(
|
||||
config.adaptive_digital.enabled = true;
|
||||
|
||||
auto gain_controller = std::make_unique<GainController2>(
|
||||
config, kTestInputVolumeControllerConfig, kSampleRateHz, kNumChannels,
|
||||
CreateEnvironment(), config, kTestInputVolumeControllerConfig,
|
||||
kSampleRateHz, kNumChannels,
|
||||
/*use_internal_vad=*/true);
|
||||
|
||||
EXPECT_FALSE(gain_controller->recommended_input_volume().has_value());
|
||||
@ -292,7 +299,7 @@ TEST(
|
||||
// Checks that the default config is applied.
|
||||
TEST(GainController2, ApplyDefaultConfig) {
|
||||
auto gain_controller2 = std::make_unique<GainController2>(
|
||||
Agc2Config{}, InputVolumeControllerConfig{},
|
||||
CreateEnvironment(), Agc2Config{}, InputVolumeControllerConfig{},
|
||||
/*sample_rate_hz=*/16000, /*num_channels=*/2,
|
||||
/*use_internal_vad=*/true);
|
||||
EXPECT_TRUE(gain_controller2.get());
|
||||
@ -409,8 +416,9 @@ TEST(GainController2, CheckFinalGainWithAdaptiveDigitalController) {
|
||||
Agc2Config config;
|
||||
config.fixed_digital.gain_db = 0.0f;
|
||||
config.adaptive_digital.enabled = true;
|
||||
GainController2 agc2(config, /*input_volume_controller_config=*/{},
|
||||
kSampleRateHz, kStereo,
|
||||
GainController2 agc2(CreateEnvironment(), config,
|
||||
/*input_volume_controller_config=*/{}, kSampleRateHz,
|
||||
kStereo,
|
||||
/*use_internal_vad=*/true);
|
||||
|
||||
test::InputAudioFile input_file(
|
||||
@ -464,10 +472,10 @@ TEST(GainController2DeathTest,
|
||||
AudioBuffer audio_buffer(kSampleRateHz, kStereo, kSampleRateHz, kStereo,
|
||||
kSampleRateHz, kStereo);
|
||||
// Create AGC2 so that the interval VAD is also created.
|
||||
GainController2 agc2(/*config=*/{.adaptive_digital = {.enabled = true}},
|
||||
/*input_volume_controller_config=*/{}, kSampleRateHz,
|
||||
kStereo,
|
||||
/*use_internal_vad=*/true);
|
||||
GainController2 agc2(
|
||||
CreateEnvironment(), /*config=*/{.adaptive_digital = {.enabled = true}},
|
||||
/*input_volume_controller_config=*/{}, kSampleRateHz, kStereo,
|
||||
/*use_internal_vad=*/true);
|
||||
|
||||
EXPECT_DEATH(agc2.Process(/*speech_probability=*/0.123f,
|
||||
/*input_volume_changed=*/false, &audio_buffer),
|
||||
@ -483,13 +491,15 @@ TEST(GainController2,
|
||||
constexpr int kStereo = 2;
|
||||
|
||||
// Create AGC2 enabling only the adaptive digital controller.
|
||||
const Environment env = CreateEnvironment();
|
||||
Agc2Config config;
|
||||
config.fixed_digital.gain_db = 0.0f;
|
||||
config.adaptive_digital.enabled = true;
|
||||
GainController2 agc2(config, /*input_volume_controller_config=*/{},
|
||||
GainController2 agc2(env, config, /*input_volume_controller_config=*/{},
|
||||
kSampleRateHz, kStereo,
|
||||
/*use_internal_vad=*/false);
|
||||
GainController2 agc2_reference(config, /*input_volume_controller_config=*/{},
|
||||
GainController2 agc2_reference(env, config,
|
||||
/*input_volume_controller_config=*/{},
|
||||
kSampleRateHz, kStereo,
|
||||
/*use_internal_vad=*/true);
|
||||
|
||||
@ -554,13 +564,15 @@ TEST(GainController2,
|
||||
constexpr int kStereo = 2;
|
||||
|
||||
// Create AGC2 enabling only the adaptive digital controller.
|
||||
const Environment env = CreateEnvironment();
|
||||
Agc2Config config;
|
||||
config.fixed_digital.gain_db = 0.0f;
|
||||
config.adaptive_digital.enabled = true;
|
||||
GainController2 agc2(config, /*input_volume_controller_config=*/{},
|
||||
GainController2 agc2(env, config, /*input_volume_controller_config=*/{},
|
||||
kSampleRateHz, kStereo,
|
||||
/*use_internal_vad=*/false);
|
||||
GainController2 agc2_reference(config, /*input_volume_controller_config=*/{},
|
||||
GainController2 agc2_reference(env, config,
|
||||
/*input_volume_controller_config=*/{},
|
||||
kSampleRateHz, kStereo,
|
||||
/*use_internal_vad=*/true);
|
||||
VoiceActivityDetectorWrapper vad(GetAvailableCpuFeatures(), kSampleRateHz);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user