Revert "AgcManagerDirect: stop enforcing min mic level override with 0 level"

This reverts commit e76daab8b36f8c2a16d59a116425a3a2f98022f6.

Reason for revert: revert required to revert the parent CL

Original change's description:
> `AgcManagerDirect`: stop enforcing min mic level override with 0 level
>
> https://webrtc-review.googlesource.com/c/src/+/250141 introduced a bug
> due to which the min mic level override is always enforced, if specified
> even if the user manually adjusts the mic level to zero.
>
> This CL fixes that bug, the changes run behind a kill switch.
>
> TESTED=Test video call on Chromium on Mac; input volume not adjusted after zeroing it from the system preferences UI
>
> Bug: chromium:1275566
> Change-Id: I18ce2e5970d3002b301f51f84544583c64982d57
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/267844
> Reviewed-by: Hanna Silen <silen@webrtc.org>
> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#37460}

Bug: chromium:1275566
Change-Id: I6d22d8f3fafdc7da3814827b9b69146a506595db
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/268468
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37515}
This commit is contained in:
Alessio Bazzica 2022-07-13 18:57:34 +00:00 committed by WebRTC LUCI CQ
parent 94d259c7af
commit d0a6fd239c
3 changed files with 19 additions and 20 deletions

View File

@ -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<int> kMinMicLevelOverride = 20;
bool EnforceMinMicLevelOverrideOnZeroLevel() {
return field_trial::IsEnabled(
"WebRTC-Audio-AgcAnalogFixZeroMicLevelBugKillSwitch");
}
#else
constexpr absl::optional<int> 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_);
}

View File

@ -128,7 +128,6 @@ class AgcManagerDirect final {
void AggregateChannelLevels();
const absl::optional<int> min_mic_level_override_;
const bool enforce_min_mic_level_override_on_zero_level_;
std::unique_ptr<ApmDataDumper> data_dumper_;
static std::atomic<int> instance_counter_;
const bool use_min_channel_level_;

View File

@ -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);