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_SHARED_DATA_H 12 #define WEBRTC_VOICE_ENGINE_SHARED_DATA_H 13 14 #include "webrtc/base/scoped_ptr.h" 15 #include "webrtc/modules/audio_device/include/audio_device.h" 16 #include "webrtc/modules/audio_processing/include/audio_processing.h" 17 #include "webrtc/modules/utility/include/process_thread.h" 18 #include "webrtc/voice_engine/channel_manager.h" 19 #include "webrtc/voice_engine/statistics.h" 20 #include "webrtc/voice_engine/voice_engine_defines.h" 21 22 class ProcessThread; 23 24 namespace webrtc { 25 class Config; 26 class CriticalSectionWrapper; 27 28 namespace voe { 29 30 class TransmitMixer; 31 class OutputMixer; 32 33 class SharedData 34 { 35 public: 36 // Public accessors. instance_id()37 uint32_t instance_id() const { return _instanceId; } statistics()38 Statistics& statistics() { return _engineStatistics; } channel_manager()39 ChannelManager& channel_manager() { return _channelManager; } audio_device()40 AudioDeviceModule* audio_device() { return _audioDevicePtr; } 41 void set_audio_device(AudioDeviceModule* audio_device); audio_processing()42 AudioProcessing* audio_processing() { return audioproc_.get(); } 43 void set_audio_processing(AudioProcessing* audio_processing); transmit_mixer()44 TransmitMixer* transmit_mixer() { return _transmitMixerPtr; } output_mixer()45 OutputMixer* output_mixer() { return _outputMixerPtr; } crit_sec()46 CriticalSectionWrapper* crit_sec() { return _apiCritPtr; } process_thread()47 ProcessThread* process_thread() { return _moduleProcessThreadPtr.get(); } audio_device_layer()48 AudioDeviceModule::AudioLayer audio_device_layer() const { 49 return _audioDeviceLayer; 50 } set_audio_device_layer(AudioDeviceModule::AudioLayer layer)51 void set_audio_device_layer(AudioDeviceModule::AudioLayer layer) { 52 _audioDeviceLayer = layer; 53 } 54 55 int NumOfSendingChannels(); 56 int NumOfPlayingChannels(); 57 58 // Convenience methods for calling statistics().SetLastError(). 59 void SetLastError(int32_t error) const; 60 void SetLastError(int32_t error, TraceLevel level) const; 61 void SetLastError(int32_t error, TraceLevel level, 62 const char* msg) const; 63 64 protected: 65 const uint32_t _instanceId; 66 CriticalSectionWrapper* _apiCritPtr; 67 ChannelManager _channelManager; 68 Statistics _engineStatistics; 69 AudioDeviceModule* _audioDevicePtr; 70 OutputMixer* _outputMixerPtr; 71 TransmitMixer* _transmitMixerPtr; 72 rtc::scoped_ptr<AudioProcessing> audioproc_; 73 rtc::scoped_ptr<ProcessThread> _moduleProcessThreadPtr; 74 75 AudioDeviceModule::AudioLayer _audioDeviceLayer; 76 77 SharedData(const Config& config); 78 virtual ~SharedData(); 79 }; 80 81 } // namespace voe 82 83 } // namespace webrtc 84 #endif // WEBRTC_VOICE_ENGINE_SHARED_DATA_H 85