Home | History | Annotate | Download | only in voice_engine
      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:
     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   }
    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