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_VOE_BASE_IMPL_H
     12 #define WEBRTC_VOICE_ENGINE_VOE_BASE_IMPL_H
     13 
     14 #include "webrtc/voice_engine/include/voe_base.h"
     15 
     16 #include "webrtc/modules/include/module_common_types.h"
     17 #include "webrtc/voice_engine/shared_data.h"
     18 
     19 namespace webrtc {
     20 
     21 class ProcessThread;
     22 
     23 class VoEBaseImpl : public VoEBase,
     24                     public AudioTransport,
     25                     public AudioDeviceObserver {
     26  public:
     27   int RegisterVoiceEngineObserver(VoiceEngineObserver& observer) override;
     28   int DeRegisterVoiceEngineObserver() override;
     29 
     30   int Init(AudioDeviceModule* external_adm = nullptr,
     31            AudioProcessing* audioproc = nullptr) override;
     32   AudioProcessing* audio_processing() override {
     33     return shared_->audio_processing();
     34   }
     35   int Terminate() override;
     36 
     37   int CreateChannel() override;
     38   int CreateChannel(const Config& config) override;
     39   int DeleteChannel(int channel) override;
     40 
     41   int StartReceive(int channel) override;
     42   int StartPlayout(int channel) override;
     43   int StartSend(int channel) override;
     44   int StopReceive(int channel) override;
     45   int StopPlayout(int channel) override;
     46   int StopSend(int channel) override;
     47 
     48   int GetVersion(char version[1024]) override;
     49 
     50   int LastError() override;
     51 
     52   AudioTransport* audio_transport() override { return this; }
     53 
     54   int AssociateSendChannel(int channel, int accociate_send_channel) override;
     55 
     56   // AudioTransport
     57   int32_t RecordedDataIsAvailable(const void* audioSamples,
     58                                   const size_t nSamples,
     59                                   const size_t nBytesPerSample,
     60                                   const size_t nChannels,
     61                                   const uint32_t samplesPerSec,
     62                                   const uint32_t totalDelayMS,
     63                                   const int32_t clockDrift,
     64                                   const uint32_t currentMicLevel,
     65                                   const bool keyPressed,
     66                                   uint32_t& newMicLevel) override;
     67   int32_t NeedMorePlayData(const size_t nSamples,
     68                            const size_t nBytesPerSample,
     69                            const size_t nChannels,
     70                            const uint32_t samplesPerSec,
     71                            void* audioSamples,
     72                            size_t& nSamplesOut,
     73                            int64_t* elapsed_time_ms,
     74                            int64_t* ntp_time_ms) override;
     75   int OnDataAvailable(const int voe_channels[],
     76                       size_t number_of_voe_channels,
     77                       const int16_t* audio_data,
     78                       int sample_rate,
     79                       size_t number_of_channels,
     80                       size_t number_of_frames,
     81                       int audio_delay_milliseconds,
     82                       int current_volume,
     83                       bool key_pressed,
     84                       bool need_audio_processing) override;
     85   void OnData(int voe_channel,
     86               const void* audio_data,
     87               int bits_per_sample,
     88               int sample_rate,
     89               size_t number_of_channels,
     90               size_t number_of_frames) override;
     91   void PushCaptureData(int voe_channel,
     92                        const void* audio_data,
     93                        int bits_per_sample,
     94                        int sample_rate,
     95                        size_t number_of_channels,
     96                        size_t number_of_frames) override;
     97   void PullRenderData(int bits_per_sample,
     98                       int sample_rate,
     99                       size_t number_of_channels,
    100                       size_t number_of_frames,
    101                       void* audio_data,
    102                       int64_t* elapsed_time_ms,
    103                       int64_t* ntp_time_ms) override;
    104 
    105   // AudioDeviceObserver
    106   void OnErrorIsReported(const ErrorCode error) override;
    107   void OnWarningIsReported(const WarningCode warning) override;
    108 
    109  protected:
    110   VoEBaseImpl(voe::SharedData* shared);
    111   ~VoEBaseImpl() override;
    112 
    113  private:
    114   int32_t StartPlayout();
    115   int32_t StopPlayout();
    116   int32_t StartSend();
    117   int32_t StopSend();
    118   int32_t TerminateInternal();
    119 
    120   // Helper function to process the recorded data with AudioProcessing Module,
    121   // demultiplex the data to specific voe channels, encode and send to the
    122   // network. When |number_of_VoE_channels| is 0, it will demultiplex the
    123   // data to all the existing VoE channels.
    124   // It returns new AGC microphone volume or 0 if no volume changes
    125   // should be done.
    126   int ProcessRecordedDataWithAPM(
    127       const int voe_channels[], size_t number_of_voe_channels,
    128       const void* audio_data, uint32_t sample_rate, size_t number_of_channels,
    129       size_t number_of_frames, uint32_t audio_delay_milliseconds,
    130       int32_t clock_drift, uint32_t volume, bool key_pressed);
    131 
    132   void GetPlayoutData(int sample_rate, size_t number_of_channels,
    133                       size_t number_of_frames, bool feed_data_to_apm,
    134                       void* audio_data, int64_t* elapsed_time_ms,
    135                       int64_t* ntp_time_ms);
    136 
    137   // Initialize channel by setting Engine Information then initializing
    138   // channel.
    139   int InitializeChannel(voe::ChannelOwner* channel_owner);
    140   VoiceEngineObserver* voiceEngineObserverPtr_;
    141   CriticalSectionWrapper& callbackCritSect_;
    142 
    143   AudioFrame audioFrame_;
    144   voe::SharedData* shared_;
    145 };
    146 
    147 }  // namespace webrtc
    148 
    149 #endif  // WEBRTC_VOICE_ENGINE_VOE_BASE_IMPL_H
    150