Optionally disable digital adaptive AGC2.
The AGC2 is enabled by flipping AudioProcessing::Config::GainController2::enabled. The flag enables both AdaptiveAgc and FixedGainController. Before this CL, there was no way(*) to only enable the FixedGainController. After this CL, it's also possible to flip the setting |AudioProcessing::Config::GainController2::adaptive_digital_mode|. The default is |true|, which is the previous behavior. * Except for instantiating and setting it up outside of the APM like it's done in the AudioMixer. Bug: webrtc:7494 Change-Id: I506e93b6687221ac467f083fa8db3d45c98c1b83 Reviewed-on: https://webrtc-review.googlesource.com/95426 Commit-Queue: Alex Loiko <aleloi@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24432}
This commit is contained in:
parent
5c2de6b3ce
commit
e583174d1e
@ -41,12 +41,14 @@ void GainController2::Initialize(int sample_rate_hz) {
|
||||
void GainController2::Process(AudioBuffer* audio) {
|
||||
AudioFrameView<float> float_frame(audio->channels_f(), audio->num_channels(),
|
||||
audio->num_frames());
|
||||
adaptive_agc_.Process(float_frame);
|
||||
if (adaptive_digital_mode_) {
|
||||
adaptive_agc_.Process(float_frame);
|
||||
}
|
||||
fixed_gain_controller_.Process(float_frame);
|
||||
}
|
||||
|
||||
void GainController2::NotifyAnalogLevel(int level) {
|
||||
if (analog_level_ != level) {
|
||||
if (analog_level_ != level && adaptive_digital_mode_) {
|
||||
adaptive_agc_.Reset();
|
||||
}
|
||||
analog_level_ = level;
|
||||
@ -57,6 +59,7 @@ void GainController2::ApplyConfig(
|
||||
RTC_DCHECK(Validate(config));
|
||||
config_ = config;
|
||||
fixed_gain_controller_.SetGain(config_.fixed_gain_db);
|
||||
adaptive_digital_mode_ = config_.adaptive_digital_mode;
|
||||
}
|
||||
|
||||
bool GainController2::Validate(
|
||||
|
||||
@ -47,6 +47,7 @@ class GainController2 {
|
||||
AudioProcessing::Config::GainController2 config_;
|
||||
AdaptiveAgc adaptive_agc_;
|
||||
int analog_level_ = -1;
|
||||
bool adaptive_digital_mode_ = true;
|
||||
|
||||
RTC_DISALLOW_COPY_AND_ASSIGN(GainController2);
|
||||
};
|
||||
|
||||
@ -273,12 +273,15 @@ class AudioProcessing : public rtc::RefCountInterface {
|
||||
float fixed_gain_factor = 1.f;
|
||||
} pre_amplifier;
|
||||
|
||||
// Enables the next generation AGC functionality. This feature
|
||||
// replaces the standard methods of gain control in the previous
|
||||
// AGC. This functionality is currently only partially
|
||||
// implemented.
|
||||
// Enables the next generation AGC functionality. This feature replaces the
|
||||
// standard methods of gain control in the previous AGC. Enabling this
|
||||
// submodule enables an adaptive digital AGC followed by a limiter. By
|
||||
// setting |fixed_gain_db|, the limiter can be turned into a compressor that
|
||||
// first applies a fixed gain. The adaptive digital AGC can be turned off by
|
||||
// setting |adaptive_digital_mode=false|.
|
||||
struct GainController2 {
|
||||
bool enabled = false;
|
||||
bool adaptive_digital_mode = true;
|
||||
float fixed_gain_db = 0.f;
|
||||
} gain_controller2;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user