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 #include "webrtc/voice_engine/shared_data.h"
     12 
     13 #include "webrtc/modules/audio_processing/include/audio_processing.h"
     14 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
     15 #include "webrtc/system_wrappers/interface/trace.h"
     16 #include "webrtc/voice_engine/channel.h"
     17 #include "webrtc/voice_engine/output_mixer.h"
     18 #include "webrtc/voice_engine/transmit_mixer.h"
     19 
     20 namespace webrtc {
     21 
     22 namespace voe {
     23 
     24 static int32_t _gInstanceCounter = 0;
     25 
     26 SharedData::SharedData(const Config& config) :
     27     _instanceId(++_gInstanceCounter),
     28     _apiCritPtr(CriticalSectionWrapper::CreateCriticalSection()),
     29     _channelManager(_gInstanceCounter, config),
     30     _engineStatistics(_gInstanceCounter),
     31     _audioDevicePtr(NULL),
     32     _moduleProcessThreadPtr(ProcessThread::CreateProcessThread()),
     33     _externalRecording(false),
     34     _externalPlayout(false)
     35 {
     36     Trace::CreateTrace();
     37     if (OutputMixer::Create(_outputMixerPtr, _gInstanceCounter) == 0)
     38     {
     39         _outputMixerPtr->SetEngineInformation(_engineStatistics);
     40     }
     41     if (TransmitMixer::Create(_transmitMixerPtr, _gInstanceCounter) == 0)
     42     {
     43         _transmitMixerPtr->SetEngineInformation(*_moduleProcessThreadPtr,
     44                                                 _engineStatistics,
     45                                                 _channelManager);
     46     }
     47     _audioDeviceLayer = AudioDeviceModule::kPlatformDefaultAudio;
     48 }
     49 
     50 SharedData::~SharedData()
     51 {
     52     OutputMixer::Destroy(_outputMixerPtr);
     53     TransmitMixer::Destroy(_transmitMixerPtr);
     54     if (_audioDevicePtr) {
     55         _audioDevicePtr->Release();
     56     }
     57     delete _apiCritPtr;
     58     ProcessThread::DestroyProcessThread(_moduleProcessThreadPtr);
     59     Trace::ReturnTrace();
     60 }
     61 
     62 void SharedData::set_audio_device(AudioDeviceModule* audio_device)
     63 {
     64     // AddRef first in case the pointers are equal.
     65     if (audio_device)
     66       audio_device->AddRef();
     67     if (_audioDevicePtr)
     68       _audioDevicePtr->Release();
     69     _audioDevicePtr = audio_device;
     70 }
     71 
     72 void SharedData::set_audio_processing(AudioProcessing* audioproc) {
     73   audioproc_.reset(audioproc);
     74   _transmitMixerPtr->SetAudioProcessingModule(audioproc);
     75   _outputMixerPtr->SetAudioProcessingModule(audioproc);
     76 }
     77 
     78 int SharedData::NumOfSendingChannels() {
     79   ChannelManager::Iterator it(&_channelManager);
     80   int sending_channels = 0;
     81 
     82   for (ChannelManager::Iterator it(&_channelManager); it.IsValid();
     83        it.Increment()) {
     84     if (it.GetChannel()->Sending())
     85       ++sending_channels;
     86   }
     87 
     88   return sending_channels;
     89 }
     90 
     91 int SharedData::NumOfPlayingChannels() {
     92   ChannelManager::Iterator it(&_channelManager);
     93   int playout_channels = 0;
     94 
     95   for (ChannelManager::Iterator it(&_channelManager); it.IsValid();
     96        it.Increment()) {
     97     if (it.GetChannel()->Playing())
     98       ++playout_channels;
     99   }
    100 
    101   return playout_channels;
    102 }
    103 
    104 void SharedData::SetLastError(int32_t error) const {
    105   _engineStatistics.SetLastError(error);
    106 }
    107 
    108 void SharedData::SetLastError(int32_t error,
    109                               TraceLevel level) const {
    110   _engineStatistics.SetLastError(error, level);
    111 }
    112 
    113 void SharedData::SetLastError(int32_t error, TraceLevel level,
    114                               const char* msg) const {
    115   _engineStatistics.SetLastError(error, level, msg);
    116 }
    117 
    118 }  // namespace voe
    119 
    120 }  // namespace webrtc
    121