1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
2470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Use of this source code is governed by a BSD-style license
5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  that can be found in the LICENSE file in the root of the source
6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  tree. An additional intellectual property rights grant can be found
7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  in the file PATENTS.  All contributing project authors may
8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  be found in the AUTHORS file in the root of the source tree.
9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
11470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifndef WEBRTC_VOICE_ENGINE_LEVEL_INDICATOR_H
12470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WEBRTC_VOICE_ENGINE_LEVEL_INDICATOR_H
13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
14956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include "webrtc/typedefs.h"
15956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include "webrtc/voice_engine/voice_engine_defines.h"
16470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
17470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnamespace webrtc {
18470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
19470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass AudioFrame;
20d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.orgclass CriticalSectionWrapper;
21470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnamespace voe {
22470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
23470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass AudioLevel
24470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
25470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.compublic:
26470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    AudioLevel();
27470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    virtual ~AudioLevel();
28470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
29d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org    // Called on "API thread(s)" from APIs like VoEBase::CreateChannel(),
30d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org    // VoEBase::StopSend(), VoEVolumeControl::GetSpeechOutputLevel().
316141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org    int8_t Level() const;
326141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org    int16_t LevelFullRange() const;
33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    void Clear();
34470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
35d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org    // Called on a native capture audio thread (platform dependent) from the
36d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org    // AudioTransport::RecordedDataIsAvailable() callback.
37d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org    // In Chrome, this method is called on the AudioInputDevice thread.
38d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org    void ComputeLevel(const AudioFrame& audioFrame);
39d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org
40470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comprivate:
41470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    enum { kUpdateFrequency = 10};
42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
43d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org    CriticalSectionWrapper& _critSect;
44d108a46206b66d7427ed11dc1de5b99faad1a824henrika@webrtc.org
456141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org    int16_t _absMax;
466141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org    int16_t _count;
476141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org    int8_t _currentLevel;
486141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org    int16_t _currentLevelFullRange;
49470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
51470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}  // namespace voe
52470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
53470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}  // namespace webrtc
54470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
55470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif // WEBRTC_VOICE_ENGINE_LEVEL_INDICATOR_H
56