diff --git a/modules/audio_processing/agc/agc_manager_direct.cc b/modules/audio_processing/agc/agc_manager_direct.cc index f385438249..73bf183a2b 100644 --- a/modules/audio_processing/agc/agc_manager_direct.cc +++ b/modules/audio_processing/agc/agc_manager_direct.cc @@ -62,23 +62,12 @@ bool UseMaxAnalogChannelLevel() { return field_trial::IsEnabled("WebRTC-UseMaxAnalogAgcChannelLevel"); } -// Minimum mic level override. -// `kMinMicLevelOverride`: if specified, the override replaces `kMinMicLevel` -// and it is applied even when clipping is detected. -// `EnforceMinMicLevelOverrideOnZeroLevel()`: returns true if the analog -// controller must enforce the minimum mic level override even when the mic -// level has manually been set to zero. +// Minimum mic level override. If specified, the override replaces +// `kMinMicLevel` and it is applied even when clipping is detected. #if defined(WEBRTC_MAC) constexpr absl::optional kMinMicLevelOverride = 20; -bool EnforceMinMicLevelOverrideOnZeroLevel() { - return field_trial::IsEnabled( - "WebRTC-Audio-AgcAnalogFixZeroMicLevelBugKillSwitch"); -} #else constexpr absl::optional kMinMicLevelOverride = absl::nullopt; -constexpr bool EnforceMinMicLevelOverrideOnZeroLevel() { - return false; -} #endif int ClampLevel(int mic_level, int min_mic_level) { @@ -466,8 +455,6 @@ AgcManagerDirect::AgcManagerDirect( int clipped_wait_frames, const ClippingPredictorConfig& clipping_config) : min_mic_level_override_(kMinMicLevelOverride), - enforce_min_mic_level_override_on_zero_level_( - EnforceMinMicLevelOverrideOnZeroLevel()), data_dumper_(new ApmDataDumper(instance_counter_.fetch_add(1) + 1)), use_min_channel_level_(!UseMaxAnalogChannelLevel()), num_capture_channels_(num_capture_channels), @@ -719,10 +706,9 @@ void AgcManagerDirect::AggregateChannelLevels() { } } } - - if (min_mic_level_override_.has_value() && - (enforce_min_mic_level_override_on_zero_level_ || - stream_analog_level_ > 0)) { + // TODO(crbug.com/1275566): Do not enforce minimum if the user has manually + // set the mic level to zero. + if (min_mic_level_override_.has_value()) { stream_analog_level_ = std::max(stream_analog_level_, *min_mic_level_override_); } diff --git a/modules/audio_processing/agc/agc_manager_direct.h b/modules/audio_processing/agc/agc_manager_direct.h index a437206ceb..86abeecb91 100644 --- a/modules/audio_processing/agc/agc_manager_direct.h +++ b/modules/audio_processing/agc/agc_manager_direct.h @@ -128,7 +128,6 @@ class AgcManagerDirect final { void AggregateChannelLevels(); const absl::optional min_mic_level_override_; - const bool enforce_min_mic_level_override_on_zero_level_; std::unique_ptr data_dumper_; static std::atomic instance_counter_; const bool use_min_channel_level_; diff --git a/modules/audio_processing/agc/agc_manager_direct_unittest.cc b/modules/audio_processing/agc/agc_manager_direct_unittest.cc index adbb2f272c..dce6aaa675 100644 --- a/modules/audio_processing/agc/agc_manager_direct_unittest.cc +++ b/modules/audio_processing/agc/agc_manager_direct_unittest.cc @@ -838,6 +838,19 @@ TEST_F(AgcManagerDirectTest, ClippingDoesNotPullLowVolumeBackUp) { EXPECT_EQ(initial_volume, manager_.stream_analog_level()); } +#if defined(WEBRTC_MAC) +// TODO(crbug.com/1275566): Fix AGC, remove test below. +TEST_F(AgcManagerDirectTest, BumpsToMinLevelOnZeroMicVolume) { + FirstProcess(); + + EXPECT_CALL(*agc_, GetRmsErrorDb(_)) + .WillRepeatedly(DoAll(SetArgPointee<0>(30), Return(true))); + manager_.set_stream_analog_level(0); + CallProcess(10); + EXPECT_EQ(20, manager_.stream_analog_level()); +} +#else +// TODO(crbug.com/1275566): Fix AGC, reenable test below on Mac. TEST_F(AgcManagerDirectTest, TakesNoActionOnZeroMicVolume) { FirstProcess(); @@ -847,6 +860,7 @@ TEST_F(AgcManagerDirectTest, TakesNoActionOnZeroMicVolume) { CallProcess(10); EXPECT_EQ(0, manager_.stream_analog_level()); } +#endif TEST_F(AgcManagerDirectTest, ClippingDetectionLowersVolume) { SetVolumeAndProcess(255);