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