AGC2 config change detection fixed
AGC2 is correctly (re)initialized when its config changes. This CL also improves the `AudioProcessingImpl::ApplyConfig` readability by defining operator!= also for the AGC1 config. Bug: webrtc:7494 Change-Id: I62068de32c941e6b18d4618c656f569647042345 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187120 Commit-Queue: Alessio Bazzica <alessiob@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32402}
This commit is contained in:
committed by
Commit Bot
parent
44f749dac6
commit
3438a9383c
@ -2417,6 +2417,10 @@ void RunApmRateAndChannelTest(
|
||||
}
|
||||
}
|
||||
|
||||
constexpr void Toggle(bool& b) {
|
||||
b ^= true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST(RuntimeSettingTest, TestDefaultCtor) {
|
||||
@ -2879,4 +2883,246 @@ TEST(ApmConfiguration, SelfAssignment) {
|
||||
SUCCEED(); // Real success is absence of defects from asan/msan/ubsan.
|
||||
}
|
||||
|
||||
TEST(AudioProcessing, GainController1ConfigEqual) {
|
||||
AudioProcessing::Config::GainController1 a;
|
||||
AudioProcessing::Config::GainController1 b;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
Toggle(a.enabled);
|
||||
b.enabled = a.enabled;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a.mode = AudioProcessing::Config::GainController1::Mode::kAdaptiveDigital;
|
||||
b.mode = a.mode;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a.target_level_dbfs++;
|
||||
b.target_level_dbfs = a.target_level_dbfs;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a.compression_gain_db++;
|
||||
b.compression_gain_db = a.compression_gain_db;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
Toggle(a.enable_limiter);
|
||||
b.enable_limiter = a.enable_limiter;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a.analog_level_minimum++;
|
||||
b.analog_level_minimum = a.analog_level_minimum;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a.analog_level_maximum--;
|
||||
b.analog_level_maximum = a.analog_level_maximum;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
auto& a_analog = a.analog_gain_controller;
|
||||
auto& b_analog = b.analog_gain_controller;
|
||||
|
||||
Toggle(a_analog.enabled);
|
||||
b_analog.enabled = a_analog.enabled;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_analog.startup_min_volume++;
|
||||
b_analog.startup_min_volume = a_analog.startup_min_volume;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_analog.clipped_level_min++;
|
||||
b_analog.clipped_level_min = a_analog.clipped_level_min;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
Toggle(a_analog.enable_agc2_level_estimator);
|
||||
b_analog.enable_agc2_level_estimator = a_analog.enable_agc2_level_estimator;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
Toggle(a_analog.enable_digital_adaptive);
|
||||
b_analog.enable_digital_adaptive = a_analog.enable_digital_adaptive;
|
||||
EXPECT_EQ(a, b);
|
||||
}
|
||||
|
||||
// Checks that one differing parameter is sufficient to make two configs
|
||||
// different.
|
||||
TEST(AudioProcessing, GainController1ConfigNotEqual) {
|
||||
AudioProcessing::Config::GainController1 a;
|
||||
const AudioProcessing::Config::GainController1 b;
|
||||
|
||||
Toggle(a.enabled);
|
||||
EXPECT_NE(a, b);
|
||||
a.enabled = b.enabled;
|
||||
|
||||
a.mode = AudioProcessing::Config::GainController1::Mode::kAdaptiveDigital;
|
||||
EXPECT_NE(a, b);
|
||||
a.mode = b.mode;
|
||||
|
||||
a.target_level_dbfs++;
|
||||
EXPECT_NE(a, b);
|
||||
a.target_level_dbfs = b.target_level_dbfs;
|
||||
|
||||
a.compression_gain_db++;
|
||||
EXPECT_NE(a, b);
|
||||
a.compression_gain_db = b.compression_gain_db;
|
||||
|
||||
Toggle(a.enable_limiter);
|
||||
EXPECT_NE(a, b);
|
||||
a.enable_limiter = b.enable_limiter;
|
||||
|
||||
a.analog_level_minimum++;
|
||||
EXPECT_NE(a, b);
|
||||
a.analog_level_minimum = b.analog_level_minimum;
|
||||
|
||||
a.analog_level_maximum--;
|
||||
EXPECT_NE(a, b);
|
||||
a.analog_level_maximum = b.analog_level_maximum;
|
||||
|
||||
auto& a_analog = a.analog_gain_controller;
|
||||
const auto& b_analog = b.analog_gain_controller;
|
||||
|
||||
Toggle(a_analog.enabled);
|
||||
EXPECT_NE(a, b);
|
||||
a_analog.enabled = b_analog.enabled;
|
||||
|
||||
a_analog.startup_min_volume++;
|
||||
EXPECT_NE(a, b);
|
||||
a_analog.startup_min_volume = b_analog.startup_min_volume;
|
||||
|
||||
a_analog.clipped_level_min++;
|
||||
EXPECT_NE(a, b);
|
||||
a_analog.clipped_level_min = b_analog.clipped_level_min;
|
||||
|
||||
Toggle(a_analog.enable_agc2_level_estimator);
|
||||
EXPECT_NE(a, b);
|
||||
a_analog.enable_agc2_level_estimator = b_analog.enable_agc2_level_estimator;
|
||||
|
||||
Toggle(a_analog.enable_digital_adaptive);
|
||||
EXPECT_NE(a, b);
|
||||
a_analog.enable_digital_adaptive = b_analog.enable_digital_adaptive;
|
||||
}
|
||||
|
||||
TEST(AudioProcessing, GainController2ConfigEqual) {
|
||||
AudioProcessing::Config::GainController2 a;
|
||||
AudioProcessing::Config::GainController2 b;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
Toggle(a.enabled);
|
||||
b.enabled = a.enabled;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a.fixed_digital.gain_db += 1.f;
|
||||
b.fixed_digital.gain_db = a.fixed_digital.gain_db;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
auto& a_adaptive = a.adaptive_digital;
|
||||
auto& b_adaptive = b.adaptive_digital;
|
||||
|
||||
Toggle(a_adaptive.enabled);
|
||||
b_adaptive.enabled = a_adaptive.enabled;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_adaptive.vad_probability_attack += 1.f;
|
||||
b_adaptive.vad_probability_attack = a_adaptive.vad_probability_attack;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_adaptive.level_estimator =
|
||||
AudioProcessing::Config::GainController2::LevelEstimator::kPeak;
|
||||
b_adaptive.level_estimator = a_adaptive.level_estimator;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_adaptive.level_estimator_adjacent_speech_frames_threshold++;
|
||||
b_adaptive.level_estimator_adjacent_speech_frames_threshold =
|
||||
a_adaptive.level_estimator_adjacent_speech_frames_threshold;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
Toggle(a_adaptive.use_saturation_protector);
|
||||
b_adaptive.use_saturation_protector = a_adaptive.use_saturation_protector;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_adaptive.initial_saturation_margin_db += 1.f;
|
||||
b_adaptive.initial_saturation_margin_db =
|
||||
a_adaptive.initial_saturation_margin_db;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_adaptive.extra_saturation_margin_db += 1.f;
|
||||
b_adaptive.extra_saturation_margin_db = a_adaptive.extra_saturation_margin_db;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_adaptive.gain_applier_adjacent_speech_frames_threshold++;
|
||||
b_adaptive.gain_applier_adjacent_speech_frames_threshold =
|
||||
a_adaptive.gain_applier_adjacent_speech_frames_threshold;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_adaptive.max_gain_change_db_per_second += 1.f;
|
||||
b_adaptive.max_gain_change_db_per_second =
|
||||
a_adaptive.max_gain_change_db_per_second;
|
||||
EXPECT_EQ(a, b);
|
||||
|
||||
a_adaptive.max_output_noise_level_dbfs -= 1.f;
|
||||
b_adaptive.max_output_noise_level_dbfs =
|
||||
a_adaptive.max_output_noise_level_dbfs;
|
||||
EXPECT_EQ(a, b);
|
||||
}
|
||||
|
||||
// Checks that one differing parameter is sufficient to make two configs
|
||||
// different.
|
||||
TEST(AudioProcessing, GainController2ConfigNotEqual) {
|
||||
AudioProcessing::Config::GainController2 a;
|
||||
const AudioProcessing::Config::GainController2 b;
|
||||
|
||||
Toggle(a.enabled);
|
||||
EXPECT_NE(a, b);
|
||||
a.enabled = b.enabled;
|
||||
|
||||
a.fixed_digital.gain_db += 1.f;
|
||||
EXPECT_NE(a, b);
|
||||
a.fixed_digital.gain_db = b.fixed_digital.gain_db;
|
||||
|
||||
auto& a_adaptive = a.adaptive_digital;
|
||||
const auto& b_adaptive = b.adaptive_digital;
|
||||
|
||||
Toggle(a_adaptive.enabled);
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.enabled = b_adaptive.enabled;
|
||||
|
||||
a_adaptive.vad_probability_attack += 1.f;
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.vad_probability_attack = b_adaptive.vad_probability_attack;
|
||||
|
||||
a_adaptive.level_estimator =
|
||||
AudioProcessing::Config::GainController2::LevelEstimator::kPeak;
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.level_estimator = b_adaptive.level_estimator;
|
||||
|
||||
a_adaptive.level_estimator_adjacent_speech_frames_threshold++;
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.level_estimator_adjacent_speech_frames_threshold =
|
||||
b_adaptive.level_estimator_adjacent_speech_frames_threshold;
|
||||
|
||||
Toggle(a_adaptive.use_saturation_protector);
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.use_saturation_protector = b_adaptive.use_saturation_protector;
|
||||
|
||||
a_adaptive.initial_saturation_margin_db += 1.f;
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.initial_saturation_margin_db =
|
||||
b_adaptive.initial_saturation_margin_db;
|
||||
|
||||
a_adaptive.extra_saturation_margin_db += 1.f;
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.extra_saturation_margin_db = b_adaptive.extra_saturation_margin_db;
|
||||
|
||||
a_adaptive.gain_applier_adjacent_speech_frames_threshold++;
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.gain_applier_adjacent_speech_frames_threshold =
|
||||
b_adaptive.gain_applier_adjacent_speech_frames_threshold;
|
||||
|
||||
a_adaptive.max_gain_change_db_per_second += 1.f;
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.max_gain_change_db_per_second =
|
||||
b_adaptive.max_gain_change_db_per_second;
|
||||
|
||||
a_adaptive.max_output_noise_level_dbfs -= 1.f;
|
||||
EXPECT_NE(a, b);
|
||||
a_adaptive.max_output_noise_level_dbfs =
|
||||
b_adaptive.max_output_noise_level_dbfs;
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user