AGC2-fixed-digital: Level Estimator

This CL adds the Level Estimator of the new gain controller. The Level
Estimator divides a 10ms input frame in kSubFramesInFrame=20 sub
frames. We take the maximal sample values in every sub frame. We then
apply attack/decay smoothing. This is the final level estimate.

The results will be used with InterpolatedGainCurve (see this CL
https://webrtc-review.googlesource.com/c/src/+/51920). For every level
estimate value, we look up a gain with
InterpolatedGainCurve::LookUpGainToApply. This gain is then applied to
the signal.

Bug: webrtc:7949
Change-Id: I2b4b3894a3e945d3dd916ce516c79abacb2b18b1
Reviewed-on: https://webrtc-review.googlesource.com/52381
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22054}
This commit is contained in:
Alex Loiko
2018-02-16 12:39:00 +01:00
committed by Commit Bot
parent e551dddf8b
commit 153f11e1b4
10 changed files with 419 additions and 1 deletions

View File

@ -27,6 +27,14 @@ class AudioFrameView {
num_channels_(num_channels),
channel_size_(channel_size) {}
// Implicit cast to allow converting Frame<float> to
// Frame<const float>.
template <class U>
AudioFrameView(AudioFrameView<U> other)
: audio_samples_(other.data()),
num_channels_(other.num_channels()),
channel_size_(other.samples_per_channel()) {}
AudioFrameView() = delete;
size_t num_channels() const { return num_channels_; }
@ -45,6 +53,8 @@ class AudioFrameView {
return rtc::ArrayView<const T>(audio_samples_[idx], channel_size_);
}
T* const* data() { return audio_samples_; }
private:
T* const* audio_samples_;
size_t num_channels_;