/* * 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) { } virtual ~VoiceEngineImpl() { assert(_ref_count.Value() == 0); } int AddRef(); // This implements the Release() method for all the inherited interfaces. virtual int Release(); private: Atomic32 _ref_count; scoped_ptr own_config_; }; } // namespace webrtc #endif // WEBRTC_VOICE_ENGINE_VOICE_ENGINE_IMPL_H