| /* | 
 |  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #ifndef WEBRTC_VOICE_ENGINE_VOICE_ENGINE_IMPL_H | 
 | #define WEBRTC_VOICE_ENGINE_VOICE_ENGINE_IMPL_H | 
 |  | 
 | #include "webrtc/engine_configurations.h" | 
 | #include "webrtc/system_wrappers/interface/atomic32.h" | 
 | #include "webrtc/voice_engine/voe_base_impl.h" | 
 |  | 
 | #ifdef WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API | 
 | #include "webrtc/voice_engine/voe_audio_processing_impl.h" | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_CODEC_API | 
 | #include "webrtc/voice_engine/voe_codec_impl.h" | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_DTMF_API | 
 | #include "webrtc/voice_engine/voe_dtmf_impl.h" | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API | 
 | #include "webrtc/voice_engine/voe_external_media_impl.h" | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_FILE_API | 
 | #include "webrtc/voice_engine/voe_file_impl.h" | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API | 
 | #include "webrtc/voice_engine/voe_hardware_impl.h" | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API | 
 | #include "webrtc/voice_engine/voe_neteq_stats_impl.h" | 
 | #endif | 
 | #include "webrtc/voice_engine/voe_network_impl.h" | 
 | #ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API | 
 | #include "webrtc/voice_engine/voe_rtp_rtcp_impl.h" | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API | 
 | #include "webrtc/voice_engine/voe_video_sync_impl.h" | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API | 
 | #include "webrtc/voice_engine/voe_volume_control_impl.h" | 
 | #endif | 
 |  | 
 | namespace webrtc { | 
 |  | 
 | class VoiceEngineImpl : public voe::SharedData,  // Must be the first base class | 
 |                         public VoiceEngine, | 
 | #ifdef WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API | 
 |                         public VoEAudioProcessingImpl, | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_CODEC_API | 
 |                         public VoECodecImpl, | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_DTMF_API | 
 |                         public VoEDtmfImpl, | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API | 
 |                         public VoEExternalMediaImpl, | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_FILE_API | 
 |                         public VoEFileImpl, | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API | 
 |                         public VoEHardwareImpl, | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API | 
 |                         public VoENetEqStatsImpl, | 
 | #endif | 
 |                         public VoENetworkImpl, | 
 | #ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API | 
 |                         public VoERTP_RTCPImpl, | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API | 
 |                         public VoEVideoSyncImpl, | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API | 
 |                         public VoEVolumeControlImpl, | 
 | #endif | 
 |                         public VoEBaseImpl { | 
 |  public: | 
 |   VoiceEngineImpl(const Config* config, bool owns_config) | 
 |       : SharedData(*config), | 
 | #ifdef WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API | 
 |         VoEAudioProcessingImpl(this), | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_CODEC_API | 
 |         VoECodecImpl(this), | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_DTMF_API | 
 |         VoEDtmfImpl(this), | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API | 
 |         VoEExternalMediaImpl(this), | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_FILE_API | 
 |         VoEFileImpl(this), | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API | 
 |         VoEHardwareImpl(this), | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API | 
 |         VoENetEqStatsImpl(this), | 
 | #endif | 
 |         VoENetworkImpl(this), | 
 | #ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API | 
 |         VoERTP_RTCPImpl(this), | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API | 
 |         VoEVideoSyncImpl(this), | 
 | #endif | 
 | #ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API | 
 |         VoEVolumeControlImpl(this), | 
 | #endif | 
 |         VoEBaseImpl(this), | 
 |         _ref_count(0), | 
 |         own_config_(owns_config ? config : NULL) { | 
 |   } | 
 |   ~VoiceEngineImpl() override { assert(_ref_count.Value() == 0); } | 
 |  | 
 |   int AddRef(); | 
 |  | 
 |   // This implements the Release() method for all the inherited interfaces. | 
 |   int Release() override; | 
 |  | 
 |  // This is *protected* so that FakeVoiceEngine can inherit from the class and | 
 |  // manipulate the reference count. See: fake_voice_engine.h. | 
 |  protected: | 
 |   Atomic32 _ref_count; | 
 |  private: | 
 |   rtc::scoped_ptr<const Config> own_config_; | 
 | }; | 
 |  | 
 | }  // namespace webrtc | 
 |  | 
 | #endif  // WEBRTC_VOICE_ENGINE_VOICE_ENGINE_IMPL_H |