blob: 5669f45bf7a3e03e73cb8e4daef01a131156ed68 [file] [log] [blame]
peahca4cac72016-06-29 15:26:12 -07001/*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_AUDIO_PROCESSING_LEVEL_CONTROLLER_GAIN_APPLIER_H_
12#define MODULES_AUDIO_PROCESSING_LEVEL_CONTROLLER_GAIN_APPLIER_H_
peahca4cac72016-06-29 15:26:12 -070013
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "rtc_base/constructormagic.h"
peahca4cac72016-06-29 15:26:12 -070015
16namespace webrtc {
17
18class ApmDataDumper;
19class AudioBuffer;
20
21class GainApplier {
22 public:
23 explicit GainApplier(ApmDataDumper* data_dumper);
24 void Initialize(int sample_rate_hz);
25
26 // Applies the specified gain to the audio frame and returns the resulting
27 // number of saturated sample values.
28 int Process(float new_gain, AudioBuffer* audio);
29
30 private:
31 ApmDataDumper* const data_dumper_;
32 float old_gain_ = 1.f;
peahb59ff892016-06-30 09:19:32 -070033 float gain_increase_step_size_ = 0.f;
34 float gain_normal_decrease_step_size_ = 0.f;
35 float gain_saturated_decrease_step_size_ = 0.f;
36 bool last_frame_was_saturated_;
peahca4cac72016-06-29 15:26:12 -070037 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(GainApplier);
38};
39
40} // namespace webrtc
41
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020042#endif // MODULES_AUDIO_PROCESSING_LEVEL_CONTROLLER_GAIN_APPLIER_H_