mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Reduce for reallocations the pre-amplifier and high-pass filter
This CL ensures that the pre-amplifier and the high-pass filter submodules are not reallocated more than needed. Bug: webrtc:5298 Change-Id: I7ed23807d4d2d9fef0eda2e7dca9de9b0b1a4649 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/163988 Commit-Queue: Per Åhgren <peah@webrtc.org> Reviewed-by: Sam Zackrisson <saza@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30143}
This commit is contained in:
parent
df344bb8de
commit
0f14db22de
3 changed files with 25 additions and 6 deletions
|
@ -509,7 +509,7 @@ int AudioProcessingImpl::InitializeLocked() {
|
||||||
submodules_.agc_manager->SetCaptureMuted(capture_.output_will_be_muted);
|
submodules_.agc_manager->SetCaptureMuted(capture_.output_will_be_muted);
|
||||||
}
|
}
|
||||||
InitializeTransientSuppressor();
|
InitializeTransientSuppressor();
|
||||||
InitializeHighPassFilter();
|
InitializeHighPassFilter(true);
|
||||||
InitializeVoiceDetector();
|
InitializeVoiceDetector();
|
||||||
InitializeResidualEchoDetector();
|
InitializeResidualEchoDetector();
|
||||||
InitializeEchoController();
|
InitializeEchoController();
|
||||||
|
@ -665,6 +665,11 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
||||||
const bool ts_config_changed = config_.transient_suppression.enabled !=
|
const bool ts_config_changed = config_.transient_suppression.enabled !=
|
||||||
config.transient_suppression.enabled;
|
config.transient_suppression.enabled;
|
||||||
|
|
||||||
|
const bool pre_amplifier_config_changed =
|
||||||
|
config_.pre_amplifier.enabled != config.pre_amplifier.enabled ||
|
||||||
|
config_.pre_amplifier.fixed_gain_factor !=
|
||||||
|
config.pre_amplifier.fixed_gain_factor;
|
||||||
|
|
||||||
config_ = config;
|
config_ = config;
|
||||||
|
|
||||||
if (aec_config_changed) {
|
if (aec_config_changed) {
|
||||||
|
@ -679,7 +684,7 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
||||||
InitializeTransientSuppressor();
|
InitializeTransientSuppressor();
|
||||||
}
|
}
|
||||||
|
|
||||||
InitializeHighPassFilter();
|
InitializeHighPassFilter(false);
|
||||||
|
|
||||||
if (agc1_config_changed) {
|
if (agc1_config_changed) {
|
||||||
ApplyAgc1Config(config_.gain_controller1);
|
ApplyAgc1Config(config_.gain_controller1);
|
||||||
|
@ -693,10 +698,14 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
||||||
<< "\nReverting to default parameter set";
|
<< "\nReverting to default parameter set";
|
||||||
config_.gain_controller2 = AudioProcessing::Config::GainController2();
|
config_.gain_controller2 = AudioProcessing::Config::GainController2();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (agc2_config_changed) {
|
if (agc2_config_changed) {
|
||||||
InitializeGainController2();
|
InitializeGainController2();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pre_amplifier_config_changed) {
|
||||||
InitializePreAmplifier();
|
InitializePreAmplifier();
|
||||||
|
}
|
||||||
|
|
||||||
if (config_.level_estimation.enabled && !submodules_.output_level_estimator) {
|
if (config_.level_estimation.enabled && !submodules_.output_level_estimator) {
|
||||||
submodules_.output_level_estimator = std::make_unique<LevelEstimator>();
|
submodules_.output_level_estimator = std::make_unique<LevelEstimator>();
|
||||||
|
@ -1780,7 +1789,7 @@ void AudioProcessingImpl::InitializeTransientSuppressor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioProcessingImpl::InitializeHighPassFilter() {
|
void AudioProcessingImpl::InitializeHighPassFilter(bool forced_reset) {
|
||||||
bool high_pass_filter_needed_by_aec =
|
bool high_pass_filter_needed_by_aec =
|
||||||
config_.echo_canceller.enabled &&
|
config_.echo_canceller.enabled &&
|
||||||
config_.echo_canceller.enforce_high_pass_filtering &&
|
config_.echo_canceller.enforce_high_pass_filtering &&
|
||||||
|
@ -1794,7 +1803,13 @@ void AudioProcessingImpl::InitializeHighPassFilter() {
|
||||||
size_t num_channels =
|
size_t num_channels =
|
||||||
use_full_band ? num_output_channels() : num_proc_channels();
|
use_full_band ? num_output_channels() : num_proc_channels();
|
||||||
|
|
||||||
submodules_.high_pass_filter.reset(new HighPassFilter(rate, num_channels));
|
if (!submodules_.high_pass_filter ||
|
||||||
|
rate != submodules_.high_pass_filter->sample_rate_hz() ||
|
||||||
|
forced_reset ||
|
||||||
|
num_channels != submodules_.high_pass_filter->num_channels()) {
|
||||||
|
submodules_.high_pass_filter.reset(
|
||||||
|
new HighPassFilter(rate, num_channels));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
submodules_.high_pass_filter.reset();
|
submodules_.high_pass_filter.reset();
|
||||||
}
|
}
|
||||||
|
|
|
@ -236,7 +236,8 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||||
|
|
||||||
// Initializations of capture-only submodules, requiring the capture lock
|
// Initializations of capture-only submodules, requiring the capture lock
|
||||||
// already acquired.
|
// already acquired.
|
||||||
void InitializeHighPassFilter() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
void InitializeHighPassFilter(bool forced_reset)
|
||||||
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||||
void InitializeVoiceDetector() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
void InitializeVoiceDetector() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||||
void InitializeTransientSuppressor()
|
void InitializeTransientSuppressor()
|
||||||
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||||
|
|
|
@ -33,6 +33,9 @@ class HighPassFilter {
|
||||||
void Reset();
|
void Reset();
|
||||||
void Reset(size_t num_channels);
|
void Reset(size_t num_channels);
|
||||||
|
|
||||||
|
int sample_rate_hz() const { return sample_rate_hz_; }
|
||||||
|
size_t num_channels() const { return filters_.size(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const int sample_rate_hz_;
|
const int sample_rate_hz_;
|
||||||
std::vector<std::unique_ptr<CascadedBiQuadFilter>> filters_;
|
std::vector<std::unique_ptr<CascadedBiQuadFilter>> filters_;
|
||||||
|
|
Loading…
Reference in a new issue