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