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