• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2012 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_VOICE_ENGINE_IMPL_H
12 #define WEBRTC_VOICE_ENGINE_VOICE_ENGINE_IMPL_H
13 
14 #include "webrtc/base/scoped_ptr.h"
15 #include "webrtc/engine_configurations.h"
16 #include "webrtc/system_wrappers/include/atomic32.h"
17 #include "webrtc/voice_engine/voe_base_impl.h"
18 
19 #ifdef WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API
20 #include "webrtc/voice_engine/voe_audio_processing_impl.h"
21 #endif
22 #ifdef WEBRTC_VOICE_ENGINE_CODEC_API
23 #include "webrtc/voice_engine/voe_codec_impl.h"
24 #endif
25 #ifdef WEBRTC_VOICE_ENGINE_DTMF_API
26 #include "webrtc/voice_engine/voe_dtmf_impl.h"
27 #endif
28 #ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API
29 #include "webrtc/voice_engine/voe_external_media_impl.h"
30 #endif
31 #ifdef WEBRTC_VOICE_ENGINE_FILE_API
32 #include "webrtc/voice_engine/voe_file_impl.h"
33 #endif
34 #ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API
35 #include "webrtc/voice_engine/voe_hardware_impl.h"
36 #endif
37 #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
38 #include "webrtc/voice_engine/voe_neteq_stats_impl.h"
39 #endif
40 #include "webrtc/voice_engine/voe_network_impl.h"
41 #ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API
42 #include "webrtc/voice_engine/voe_rtp_rtcp_impl.h"
43 #endif
44 #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API
45 #include "webrtc/voice_engine/voe_video_sync_impl.h"
46 #endif
47 #ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API
48 #include "webrtc/voice_engine/voe_volume_control_impl.h"
49 #endif
50 
51 namespace webrtc {
52 namespace voe {
53 class ChannelProxy;
54 }  // namespace voe
55 
56 class VoiceEngineImpl : public voe::SharedData,  // Must be the first base class
57                         public VoiceEngine,
58 #ifdef WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API
59                         public VoEAudioProcessingImpl,
60 #endif
61 #ifdef WEBRTC_VOICE_ENGINE_CODEC_API
62                         public VoECodecImpl,
63 #endif
64 #ifdef WEBRTC_VOICE_ENGINE_DTMF_API
65                         public VoEDtmfImpl,
66 #endif
67 #ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API
68                         public VoEExternalMediaImpl,
69 #endif
70 #ifdef WEBRTC_VOICE_ENGINE_FILE_API
71                         public VoEFileImpl,
72 #endif
73 #ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API
74                         public VoEHardwareImpl,
75 #endif
76 #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
77                         public VoENetEqStatsImpl,
78 #endif
79                         public VoENetworkImpl,
80 #ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API
81                         public VoERTP_RTCPImpl,
82 #endif
83 #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API
84                         public VoEVideoSyncImpl,
85 #endif
86 #ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API
87                         public VoEVolumeControlImpl,
88 #endif
89                         public VoEBaseImpl {
90  public:
VoiceEngineImpl(const Config * config,bool owns_config)91   VoiceEngineImpl(const Config* config, bool owns_config)
92       : SharedData(*config),
93 #ifdef WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API
94         VoEAudioProcessingImpl(this),
95 #endif
96 #ifdef WEBRTC_VOICE_ENGINE_CODEC_API
97         VoECodecImpl(this),
98 #endif
99 #ifdef WEBRTC_VOICE_ENGINE_DTMF_API
100         VoEDtmfImpl(this),
101 #endif
102 #ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API
103         VoEExternalMediaImpl(this),
104 #endif
105 #ifdef WEBRTC_VOICE_ENGINE_FILE_API
106         VoEFileImpl(this),
107 #endif
108 #ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API
109         VoEHardwareImpl(this),
110 #endif
111 #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
112         VoENetEqStatsImpl(this),
113 #endif
114         VoENetworkImpl(this),
115 #ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API
116         VoERTP_RTCPImpl(this),
117 #endif
118 #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API
119         VoEVideoSyncImpl(this),
120 #endif
121 #ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API
122         VoEVolumeControlImpl(this),
123 #endif
124         VoEBaseImpl(this),
125         _ref_count(0),
126         own_config_(owns_config ? config : NULL) {
127   }
~VoiceEngineImpl()128   ~VoiceEngineImpl() override { assert(_ref_count.Value() == 0); }
129 
130   int AddRef();
131 
132   // This implements the Release() method for all the inherited interfaces.
133   int Release() override;
134 
135   // Backdoor to access a voe::Channel object without a channel ID. This is only
136   // to be used while refactoring the VoE API!
137   virtual rtc::scoped_ptr<voe::ChannelProxy> GetChannelProxy(int channel_id);
138 
139  // This is *protected* so that FakeVoiceEngine can inherit from the class and
140  // manipulate the reference count. See: fake_voice_engine.h.
141  protected:
142   Atomic32 _ref_count;
143  private:
144   rtc::scoped_ptr<const Config> own_config_;
145 };
146 
147 }  // namespace webrtc
148 
149 #endif  // WEBRTC_VOICE_ENGINE_VOICE_ENGINE_IMPL_H
150