blob: 50409501e73ed5f6c8e32a6a52b152fd865c5e86 [file] [log] [blame]
henrik.lundin92a7a182017-03-07 09:58:551/*
2 * Copyright (c) 2011 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_VOICE_ENGINE_AUDIO_LEVEL_H_
12#define WEBRTC_VOICE_ENGINE_AUDIO_LEVEL_H_
13
14#include "webrtc/base/criticalsection.h"
15#include "webrtc/typedefs.h"
16
17namespace webrtc {
18
19class AudioFrame;
20namespace voe {
21
22class AudioLevel {
23 public:
24 AudioLevel();
25 ~AudioLevel();
26
27 // Called on "API thread(s)" from APIs like VoEBase::CreateChannel(),
28 // VoEBase::StopSend(), VoEVolumeControl::GetSpeechOutputLevel().
29 int8_t Level() const;
30 int16_t LevelFullRange() const;
31 void Clear();
32
33 // Called on a native capture audio thread (platform dependent) from the
34 // AudioTransport::RecordedDataIsAvailable() callback.
35 // In Chrome, this method is called on the AudioInputDevice thread.
36 void ComputeLevel(const AudioFrame& audioFrame);
37
38 private:
39 enum { kUpdateFrequency = 10 };
40
41 rtc::CriticalSection crit_sect_;
42
43 int16_t abs_max_;
44 int16_t count_;
45 int8_t current_level_;
46 int16_t current_level_full_range_;
47};
48
49} // namespace voe
50} // namespace webrtc
51
52#endif // WEBRTC_VOICE_ENGINE_AUDIO_LEVEL_H_