blob: 31892d04faaa5141b9e25d9486553da4ce101b11 [file] [log] [blame]
solenberg566ef242015-11-06 15:34:49 -08001/*
2 * Copyright (c) 2015 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_AUDIO_AUDIO_STATE_H_
12#define WEBRTC_AUDIO_AUDIO_STATE_H_
13
kjellandera69d9732016-08-31 07:33:05 -070014#include "webrtc/api/call/audio_state.h"
solenberg566ef242015-11-06 15:34:49 -080015#include "webrtc/audio/scoped_voe_interface.h"
16#include "webrtc/base/constructormagic.h"
17#include "webrtc/base/criticalsection.h"
18#include "webrtc/base/thread_checker.h"
19#include "webrtc/voice_engine/include/voe_base.h"
20
21namespace webrtc {
22namespace internal {
23
24class AudioState final : public webrtc::AudioState,
25 public webrtc::VoiceEngineObserver {
26 public:
27 explicit AudioState(const AudioState::Config& config);
28 ~AudioState() override;
29
30 VoiceEngine* voice_engine();
31 bool typing_noise_detected() const;
32
33 private:
34 // rtc::RefCountInterface implementation.
35 int AddRef() const override;
36 int Release() const override;
37
38 // webrtc::VoiceEngineObserver implementation.
39 void CallbackOnError(int channel_id, int err_code) override;
40
41 rtc::ThreadChecker thread_checker_;
42 rtc::ThreadChecker process_thread_checker_;
43 const webrtc::AudioState::Config config_;
44
45 // We hold one interface pointer to the VoE to make sure it is kept alive.
46 ScopedVoEInterface<VoEBase> voe_base_;
47
48 // The critical section isn't strictly needed in this case, but xSAN bots may
49 // trigger on unprotected cross-thread access.
pbos5ad935c2016-01-25 03:52:44 -080050 rtc::CriticalSection crit_sect_;
solenberg566ef242015-11-06 15:34:49 -080051 bool typing_noise_detected_ GUARDED_BY(crit_sect_) = false;
52
53 // Reference count; implementation copied from rtc::RefCountedObject.
54 mutable volatile int ref_count_ = 0;
55
56 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AudioState);
57};
58} // namespace internal
59} // namespace webrtc
60
61#endif // WEBRTC_AUDIO_AUDIO_STATE_H_