blob: 33e26c1e0a1134f47bee9b8329a730079e049e9f [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
11#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_LEVEL_CONTROLLER_GAIN_APPLIER_H_
12#define WEBRTC_MODULES_AUDIO_PROCESSING_LEVEL_CONTROLLER_GAIN_APPLIER_H_
13
Edward Lemurc20978e2017-07-06 19:44:34 +020014#include "webrtc/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
42#endif // WEBRTC_MODULES_AUDIO_PROCESSING_LEVEL_CONTROLLER_GAIN_APPLIER_H_