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_OUTPUT_MIXER_H_
     12 #define WEBRTC_VOICE_ENGINE_OUTPUT_MIXER_H_
     13 
     14 #include "webrtc/common_audio/resampler/include/push_resampler.h"
     15 #include "webrtc/common_types.h"
     16 #include "webrtc/modules/audio_conference_mixer/include/audio_conference_mixer.h"
     17 #include "webrtc/modules/audio_conference_mixer/include/audio_conference_mixer_defines.h"
     18 #include "webrtc/modules/utility/include/file_recorder.h"
     19 #include "webrtc/voice_engine/dtmf_inband.h"
     20 #include "webrtc/voice_engine/level_indicator.h"
     21 #include "webrtc/voice_engine/voice_engine_defines.h"
     22 
     23 namespace webrtc {
     24 
     25 class AudioProcessing;
     26 class CriticalSectionWrapper;
     27 class FileWrapper;
     28 class VoEMediaProcess;
     29 
     30 namespace voe {
     31 
     32 class Statistics;
     33 
     34 class OutputMixer : public AudioMixerOutputReceiver,
     35                     public FileCallback
     36 {
     37 public:
     38     static int32_t Create(OutputMixer*& mixer, uint32_t instanceId);
     39 
     40     static void Destroy(OutputMixer*& mixer);
     41 
     42     int32_t SetEngineInformation(Statistics& engineStatistics);
     43 
     44     int32_t SetAudioProcessingModule(
     45         AudioProcessing* audioProcessingModule);
     46 
     47     // VoEExternalMedia
     48     int RegisterExternalMediaProcessing(
     49         VoEMediaProcess& proccess_object);
     50 
     51     int DeRegisterExternalMediaProcessing();
     52 
     53     // VoEDtmf
     54     int PlayDtmfTone(uint8_t eventCode, int lengthMs, int attenuationDb);
     55 
     56     int32_t MixActiveChannels();
     57 
     58     int32_t DoOperationsOnCombinedSignal(bool feed_data_to_apm);
     59 
     60     int32_t SetMixabilityStatus(MixerParticipant& participant,
     61                                 bool mixable);
     62 
     63     int32_t SetAnonymousMixabilityStatus(MixerParticipant& participant,
     64                                          bool mixable);
     65 
     66     int GetMixedAudio(int sample_rate_hz, size_t num_channels,
     67                       AudioFrame* audioFrame);
     68 
     69     // VoEVolumeControl
     70     int GetSpeechOutputLevel(uint32_t& level);
     71 
     72     int GetSpeechOutputLevelFullRange(uint32_t& level);
     73 
     74     int SetOutputVolumePan(float left, float right);
     75 
     76     int GetOutputVolumePan(float& left, float& right);
     77 
     78     // VoEFile
     79     int StartRecordingPlayout(const char* fileName,
     80                               const CodecInst* codecInst);
     81 
     82     int StartRecordingPlayout(OutStream* stream,
     83                               const CodecInst* codecInst);
     84     int StopRecordingPlayout();
     85 
     86     virtual ~OutputMixer();
     87 
     88     // from AudioMixerOutputReceiver
     89     virtual void NewMixedAudio(
     90         int32_t id,
     91         const AudioFrame& generalAudioFrame,
     92         const AudioFrame** uniqueAudioFrames,
     93         uint32_t size);
     94 
     95     // For file recording
     96     void PlayNotification(int32_t id, uint32_t durationMs);
     97 
     98     void RecordNotification(int32_t id, uint32_t durationMs);
     99 
    100     void PlayFileEnded(int32_t id);
    101     void RecordFileEnded(int32_t id);
    102 
    103 private:
    104     OutputMixer(uint32_t instanceId);
    105     int InsertInbandDtmfTone();
    106 
    107     // uses
    108     Statistics* _engineStatisticsPtr;
    109     AudioProcessing* _audioProcessingModulePtr;
    110 
    111     // owns
    112     CriticalSectionWrapper& _callbackCritSect;
    113     // protect the _outputFileRecorderPtr and _outputFileRecording
    114     CriticalSectionWrapper& _fileCritSect;
    115     AudioConferenceMixer& _mixerModule;
    116     AudioFrame _audioFrame;
    117     // Converts mixed audio to the audio device output rate.
    118     PushResampler<int16_t> resampler_;
    119     // Converts mixed audio to the audio processing rate.
    120     PushResampler<int16_t> audioproc_resampler_;
    121     AudioLevel _audioLevel;    // measures audio level for the combined signal
    122     DtmfInband _dtmfGenerator;
    123     int _instanceId;
    124     VoEMediaProcess* _externalMediaCallbackPtr;
    125     bool _externalMedia;
    126     float _panLeft;
    127     float _panRight;
    128     int _mixingFrequencyHz;
    129     FileRecorder* _outputFileRecorderPtr;
    130     bool _outputFileRecording;
    131 };
    132 
    133 }  // namespace voe
    134 
    135 }  // namespace werbtc
    136 
    137 #endif  // VOICE_ENGINE_OUTPUT_MIXER_H_
    138