webrtc/modules/audio_processing/aec3/suppression_gain_limiter.h
Jesús de Vicente Peña dd09287514 AEC3: Gain limiter: Improving the behavior of the gain limiter.
In this work, we change the behavior of the gain limiter so it also looks at the energy
 on farend around the default delay for deciding the suppression gain
that should be applied at the initial portion of the call.

Bug: webrtc:9311,chromium:846724
Change-Id: I0b777cedbbd7fd689e72070f72237296ce120d3c
Reviewed-on: https://webrtc-review.googlesource.com/78960
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23400}
2018-05-25 15:49:38 +00:00

52 lines
1.7 KiB
C++

/*
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MODULES_AUDIO_PROCESSING_AEC3_SUPPRESSION_GAIN_LIMITER_H_
#define MODULES_AUDIO_PROCESSING_AEC3_SUPPRESSION_GAIN_LIMITER_H_
#include "api/array_view.h"
#include "api/audio/echo_canceller3_config.h"
#include "rtc_base/constructormagic.h"
namespace webrtc {
// Class for applying a smoothly increasing limit for the suppression gain
// during call startup and after in-call resets.
class SuppressionGainUpperLimiter {
public:
explicit SuppressionGainUpperLimiter(const EchoCanceller3Config& config);
// Reset the limiting behavior.
void Reset();
// Updates the limiting behavior for the current capture bloc.
void Update(bool render_activity, bool transparent_mode);
// Returns the current suppressor gain limit.
float Limit() const { return suppressor_gain_limit_; }
// Return whether the suppressor gain limit is active.
bool IsActive() const { return (realignment_counter_ > 0); }
private:
const EchoCanceller3Config::EchoRemovalControl::GainRampup rampup_config_;
const float gain_rampup_increase_;
bool call_startup_phase_ = true;
int realignment_counter_ = 0;
bool active_render_seen_ = false;
float suppressor_gain_limit_ = 1.f;
bool recent_reset_ = false;
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(SuppressionGainUpperLimiter);
};
} // namespace webrtc
#endif // MODULES_AUDIO_PROCESSING_AEC3_SUPPRESSION_GAIN_LIMITER_H_