InputVolumeController: Hardcode some digital gain parameters
In InputVolumeController/MonoInputVolumeController, set min_digital_gain_db_ and disable_digital_adaptive_ to fixed values ahead of replacing speech level target as well as digital gain minimum and maximum with target range parameters. In InputVolumeController, remove digital_adaptive_follows and min_digital_gain_db from the config as they are no longer needed. Bug: webrtc:7494 Change-Id: I1378b6e182224c41038c6d8c649e7a28961f73d4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/280962 Reviewed-by: Alessio Bazzica <alessiob@webrtc.org> Commit-Queue: Hanna Silen <silen@webrtc.org> Cr-Commit-Position: refs/heads/main@{#38554}
This commit is contained in:
parent
49a6097e95
commit
dd34a482d9
@ -163,17 +163,12 @@ int GetSpeechLevelErrorDb(float speech_level_dbfs, float speech_probability) {
|
||||
|
||||
} // namespace
|
||||
|
||||
MonoInputVolumeController::MonoInputVolumeController(
|
||||
int startup_min_level,
|
||||
MonoInputVolumeController::MonoInputVolumeController(int startup_min_level,
|
||||
int clipped_level_min,
|
||||
bool disable_digital_adaptive,
|
||||
int min_mic_level,
|
||||
int max_digital_gain_db,
|
||||
int min_digital_gain_db)
|
||||
int max_digital_gain_db)
|
||||
: min_mic_level_(min_mic_level),
|
||||
disable_digital_adaptive_(disable_digital_adaptive),
|
||||
max_digital_gain_db_(max_digital_gain_db),
|
||||
min_digital_gain_db_(min_digital_gain_db),
|
||||
max_level_(kMaxMicLevel),
|
||||
startup_min_level_(ClampLevel(startup_min_level, min_mic_level_)),
|
||||
clipped_level_min_(clipped_level_min) {}
|
||||
@ -337,12 +332,7 @@ void MonoInputVolumeController::UpdateGain(int rms_error_db) {
|
||||
frames_since_update_gain_ = 0;
|
||||
|
||||
int raw_digital_gain = 0;
|
||||
if (!disable_digital_adaptive_) {
|
||||
rms_error += min_digital_gain_db_;
|
||||
|
||||
raw_digital_gain =
|
||||
rtc::SafeClamp(rms_error, min_digital_gain_db_, max_digital_gain_db_);
|
||||
}
|
||||
raw_digital_gain = rtc::SafeClamp(rms_error, 0, max_digital_gain_db_);
|
||||
|
||||
const int residual_gain =
|
||||
rtc::SafeClamp(rms_error - raw_digital_gain, -kMaxResidualGainChange,
|
||||
@ -366,7 +356,6 @@ InputVolumeController::InputVolumeController(int num_capture_channels,
|
||||
min_mic_level_override_(GetMinMicLevelOverride()),
|
||||
use_min_channel_level_(!UseMaxAnalogChannelLevel()),
|
||||
num_capture_channels_(num_capture_channels),
|
||||
disable_digital_adaptive_(!config.digital_adaptive_follows),
|
||||
frames_since_clipped_(config.clipped_wait_frames),
|
||||
capture_output_used_(true),
|
||||
clipped_level_step_(config.clipped_level_step),
|
||||
@ -393,9 +382,8 @@ InputVolumeController::InputVolumeController(int num_capture_channels,
|
||||
|
||||
for (auto& controller : channel_controllers_) {
|
||||
controller = std::make_unique<MonoInputVolumeController>(
|
||||
config.startup_min_volume, config.clipped_level_min,
|
||||
disable_digital_adaptive_, min_mic_level, config.max_digital_gain_db,
|
||||
config.min_digital_gain_db);
|
||||
config.startup_min_volume, config.clipped_level_min, min_mic_level,
|
||||
config.max_digital_gain_db);
|
||||
}
|
||||
|
||||
RTC_DCHECK(!channel_controllers_.empty());
|
||||
|
||||
@ -43,8 +43,6 @@ class InputVolumeController final {
|
||||
// Lowest analog microphone level that will be applied in response to
|
||||
// clipping.
|
||||
int clipped_level_min = 70;
|
||||
// If true, an adaptive digital gain is applied.
|
||||
bool digital_adaptive_follows = true;
|
||||
// Amount the microphone level is lowered with every clipping event.
|
||||
// Limited to (0, 255].
|
||||
int clipped_level_step = 15;
|
||||
@ -56,10 +54,8 @@ class InputVolumeController final {
|
||||
int clipped_wait_frames = 300;
|
||||
// Enables clipping prediction functionality.
|
||||
bool enable_clipping_predictor = false;
|
||||
// Minimum and maximum digital gain used before input volume is
|
||||
// adjusted.
|
||||
// Maximum digital gain used before input volume is adjusted.
|
||||
int max_digital_gain_db = 30;
|
||||
int min_digital_gain_db = 0;
|
||||
};
|
||||
|
||||
// Ctor. `num_capture_channels` specifies the number of channels for the audio
|
||||
@ -158,9 +154,6 @@ class InputVolumeController final {
|
||||
const bool use_min_channel_level_;
|
||||
const int num_capture_channels_;
|
||||
|
||||
// TODO(webrtc:7494): Replace with `digital_adaptive_follows_`.
|
||||
const bool disable_digital_adaptive_;
|
||||
|
||||
int frames_since_clipped_;
|
||||
|
||||
// TODO(bugs.webrtc.org/7494): Create a separate member for the applied input
|
||||
@ -194,10 +187,8 @@ class MonoInputVolumeController {
|
||||
public:
|
||||
MonoInputVolumeController(int startup_min_level,
|
||||
int clipped_level_min,
|
||||
bool disable_digital_adaptive,
|
||||
int min_mic_level,
|
||||
int max_digital_gain_db,
|
||||
int min_digital_gain_db);
|
||||
int max_digital_gain_db);
|
||||
~MonoInputVolumeController();
|
||||
MonoInputVolumeController(const MonoInputVolumeController&) = delete;
|
||||
MonoInputVolumeController& operator=(const MonoInputVolumeController&) =
|
||||
@ -241,10 +232,7 @@ class MonoInputVolumeController {
|
||||
|
||||
const int min_mic_level_;
|
||||
|
||||
// TODO(webrtc:7494): Replace with `digital_adaptive_follows_`.
|
||||
const bool disable_digital_adaptive_;
|
||||
const int max_digital_gain_db_;
|
||||
const int min_digital_gain_db_;
|
||||
|
||||
int level_ = 0;
|
||||
int max_level_;
|
||||
|
||||
@ -45,7 +45,6 @@ constexpr int kClippedWaitFrames = 300;
|
||||
constexpr float kHighSpeechProbability = 0.7f;
|
||||
constexpr float kSpeechLevel = -25.0f;
|
||||
constexpr int kMaxDigitalGainDb = 12;
|
||||
constexpr int kMinDigitalGainDb = 0;
|
||||
|
||||
constexpr float kMinSample = std::numeric_limits<int16_t>::min();
|
||||
constexpr float kMaxSample = std::numeric_limits<int16_t>::max();
|
||||
@ -68,13 +67,11 @@ std::unique_ptr<InputVolumeController> CreateInputVolumeController(
|
||||
.enabled = true,
|
||||
.startup_min_volume = startup_min_volume,
|
||||
.clipped_level_min = kClippedMin,
|
||||
.digital_adaptive_follows = true,
|
||||
.clipped_level_step = clipped_level_step,
|
||||
.clipped_ratio_threshold = clipped_ratio_threshold,
|
||||
.clipped_wait_frames = clipped_wait_frames,
|
||||
.enable_clipping_predictor = enable_clipping_predictor,
|
||||
.max_digital_gain_db = kMaxDigitalGainDb,
|
||||
.min_digital_gain_db = kMinDigitalGainDb,
|
||||
};
|
||||
|
||||
return std::make_unique<InputVolumeController>(/*num_capture_channels=*/1,
|
||||
@ -261,13 +258,11 @@ constexpr InputVolumeControllerConfig GetInputVolumeControllerTestConfig() {
|
||||
.enabled = true,
|
||||
.startup_min_volume = kInitialInputVolume,
|
||||
.clipped_level_min = kClippedMin,
|
||||
.digital_adaptive_follows = true,
|
||||
.clipped_level_step = kClippedLevelStep,
|
||||
.clipped_ratio_threshold = kClippedRatioThreshold,
|
||||
.clipped_wait_frames = kClippedWaitFrames,
|
||||
.enable_clipping_predictor = kDefaultClippingPredictorConfig.enabled,
|
||||
.max_digital_gain_db = kMaxDigitalGainDb,
|
||||
.min_digital_gain_db = kMinDigitalGainDb,
|
||||
};
|
||||
return config;
|
||||
}
|
||||
@ -1139,7 +1134,6 @@ TEST(InputVolumeControllerTest,
|
||||
InputVolumeControllerConfig config = kDefaultInputVolumeControllerConfig;
|
||||
config.enabled = true;
|
||||
config.startup_min_volume = kInitialInputVolume;
|
||||
config.digital_adaptive_follows = true;
|
||||
config.clipped_level_step = 64;
|
||||
config.clipped_ratio_threshold = kClippedRatioThreshold;
|
||||
config.clipped_wait_frames = kClippedWaitFrames;
|
||||
@ -1206,7 +1200,6 @@ TEST(InputVolumeControllerTest,
|
||||
InputVolumeControllerConfig config = kDefaultInputVolumeControllerConfig;
|
||||
config.enabled = true;
|
||||
config.startup_min_volume = kInitialInputVolume;
|
||||
config.digital_adaptive_follows = true;
|
||||
config.clipped_level_step = 64;
|
||||
config.clipped_ratio_threshold = kClippedRatioThreshold;
|
||||
config.clipped_wait_frames = kClippedWaitFrames;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user