mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +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);
|
||||
}
|
||||
InitializeTransientSuppressor();
|
||||
InitializeHighPassFilter();
|
||||
InitializeHighPassFilter(true);
|
||||
InitializeVoiceDetector();
|
||||
InitializeResidualEchoDetector();
|
||||
InitializeEchoController();
|
||||
|
@ -665,6 +665,11 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
|||
const bool ts_config_changed = 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;
|
||||
|
||||
if (aec_config_changed) {
|
||||
|
@ -679,7 +684,7 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
|||
InitializeTransientSuppressor();
|
||||
}
|
||||
|
||||
InitializeHighPassFilter();
|
||||
InitializeHighPassFilter(false);
|
||||
|
||||
if (agc1_config_changed) {
|
||||
ApplyAgc1Config(config_.gain_controller1);
|
||||
|
@ -693,10 +698,14 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
|||
<< "\nReverting to default parameter set";
|
||||
config_.gain_controller2 = AudioProcessing::Config::GainController2();
|
||||
}
|
||||
|
||||
if (agc2_config_changed) {
|
||||
InitializeGainController2();
|
||||
}
|
||||
InitializePreAmplifier();
|
||||
|
||||
if (pre_amplifier_config_changed) {
|
||||
InitializePreAmplifier();
|
||||
}
|
||||
|
||||
if (config_.level_estimation.enabled && !submodules_.output_level_estimator) {
|
||||
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 =
|
||||
config_.echo_canceller.enabled &&
|
||||
config_.echo_canceller.enforce_high_pass_filtering &&
|
||||
|
@ -1794,7 +1803,13 @@ void AudioProcessingImpl::InitializeHighPassFilter() {
|
|||
size_t num_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 {
|
||||
submodules_.high_pass_filter.reset();
|
||||
}
|
||||
|
|
|
@ -236,7 +236,8 @@ class AudioProcessingImpl : public AudioProcessing {
|
|||
|
||||
// Initializations of capture-only submodules, requiring the capture lock
|
||||
// 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 InitializeTransientSuppressor()
|
||||
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||
|
|
|
@ -33,6 +33,9 @@ class HighPassFilter {
|
|||
void Reset();
|
||||
void Reset(size_t num_channels);
|
||||
|
||||
int sample_rate_hz() const { return sample_rate_hz_; }
|
||||
size_t num_channels() const { return filters_.size(); }
|
||||
|
||||
private:
|
||||
const int sample_rate_hz_;
|
||||
std::vector<std::unique_ptr<CascadedBiQuadFilter>> filters_;
|
||||
|
|
Loading…
Reference in a new issue