audio_processing/agc: Adds config to set minimum microphone volume at startup

The AGC is currently bumping up the mic volume to 33% at startup if it is below that level. This is to avoid getting stuck in a poor state from which the AGC can not move, simply a too low input audio level. For some users, 33% is instead too loud.

This CL gives the user the possibility to set that level at create time.
- Extends the Config ExperimentalAgc with a startup_mic_volume for the user to set if desired. Note that the bump up does not apply to the legacy AGC and the "regular" AGC is controlled by ExperimentalAgc.
- Without any actions, the same default value as previously is used.
- In addition I removed a return value from InitializeExperimentalAgc() and InitializeTransient()

This has been tested by building Chromium on Mac and verify through apprtc that
1) startup_mic_volume = 128 bumps up to 50%.
2) startup_mic_volume = 500 (out of range) bumps up to 100%.
3) startup_mic_volume = 0 bumps up to 4%, the AGC min level.

BUG=4529
TESTED=locally
R=andrew@webrtc.org, kwiberg@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/43109004

Cr-Commit-Position: refs/heads/master@{#9004}
This commit is contained in:
Bjorn Volcker
2015-04-15 11:42:40 +02:00
parent 19a3807b36
commit adc46c4cf7
6 changed files with 53 additions and 33 deletions

View File

@ -72,12 +72,21 @@ struct ReportedDelay {
bool enabled;
};
// Must be provided through AudioProcessing::Create(Confg&). It will have no
// impact if used with AudioProcessing::SetExtraOptions().
// Use to enable experimental gain control (AGC). At startup the experimental
// AGC moves the microphone volume up to |startup_min_volume| if the current
// microphone volume is set too low. The value is clamped to its operating range
// [12, 255]. Here, 255 maps to 100%.
//
// Must be provided through AudioProcessing::Create(Confg&).
static const int kAgcStartupMinVolume = 85;
struct ExperimentalAgc {
ExperimentalAgc() : enabled(true) {}
explicit ExperimentalAgc(bool enabled) : enabled(enabled) {}
ExperimentalAgc() : enabled(true), startup_min_volume(kAgcStartupMinVolume) {}
ExperimentalAgc(bool enabled)
: enabled(enabled), startup_min_volume(kAgcStartupMinVolume) {}
ExperimentalAgc(bool enabled, int startup_min_volume)
: enabled(enabled), startup_min_volume(startup_min_volume) {}
bool enabled;
int startup_min_volume;
};
// Use to enable experimental noise suppression. It can be set in the