1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VOICE_ENGINE_TRANSMIT_MIXER_H 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VOICE_ENGINE_TRANSMIT_MIXER_H 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 144a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/common_audio/resampler/include/push_resampler.h" 154a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/common_types.h" 16c13a5372fe8e8ef925b6867e7e0fb5a14254ea66henrikg@webrtc.org#include "webrtc/modules/audio_processing/typing_detection.h" 174a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/modules/interface/module_common_types.h" 184a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/modules/utility/interface/file_player.h" 194a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/modules/utility/interface/file_recorder.h" 20f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 214a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/voice_engine/include/voe_base.h" 224a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/voice_engine/level_indicator.h" 234a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/voice_engine/monitor_module.h" 244a68e95e2b6b6da1def731fa5f96559ee6f76c23andrew@webrtc.org#include "webrtc/voice_engine/voice_engine_defines.h" 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioProcessing; 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ProcessThread; 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VoEExternalMedia; 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VoEMediaProcess; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace voe { 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ChannelManager; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass MixedAudio; 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass Statistics; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass TransmitMixer : public MonitorObserver, 40f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org public FileCallback { 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 42ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org static int32_t Create(TransmitMixer*& mixer, uint32_t instanceId); 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static void Destroy(TransmitMixer*& mixer); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 4654f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t SetEngineInformation(ProcessThread& processThread, 4754f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org Statistics& engineStatistics, 4854f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org ChannelManager& channelManager); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 5054f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t SetAudioProcessingModule( 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioProcessing* audioProcessingModule); 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 5354f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t PrepareDemux(const void* audioSamples, 54ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org uint32_t nSamples, 55ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org uint8_t nChannels, 56ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org uint32_t samplesPerSec, 57ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org uint16_t totalDelayMS, 58ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int32_t clockDrift, 59ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org uint16_t currentMicLevel, 60ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org bool keyPressed); 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 6354f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t DemuxAndMix(); 6444f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org // Used by the Chrome to pass the recording data to the specific VoE 6544f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org // channels for demux. 660e6fa8c05cde2587e30dcf5e405132193d60dd42xians@webrtc.org void DemuxAndMix(const int voe_channels[], int number_of_voe_channels); 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 6854f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t EncodeAndSend(); 6944f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org // Used by the Chrome to pass the recording data to the specific VoE 7044f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org // channels for encoding and sending to the network. 710e6fa8c05cde2587e30dcf5e405132193d60dd42xians@webrtc.org void EncodeAndSend(const int voe_channels[], int number_of_voe_channels); 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 7322470b5ee6298ed0fe8209563758ec171a1c4397andrew@webrtc.org // Must be called on the same thread as PrepareDemux(). 7454f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org uint32_t CaptureLevel() const; 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 7654f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t StopSend(); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // VoEDtmf 79ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org void UpdateMuteMicrophoneTime(uint32_t lengthMs); 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // VoEExternalMedia 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int RegisterExternalMediaProcessing(VoEMediaProcess* object, 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessingTypes type); 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int DeRegisterExternalMediaProcessing(ProcessingTypes type); 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int GetMixingFrequency(); 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // VoEVolumeControl 89ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int SetMute(bool enable); 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool Mute() const; 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 9354f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int8_t AudioLevel() const; 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 9554f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int16_t AudioLevelFullRange() const; 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool IsRecordingCall(); 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool IsRecordingMic(); 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StartPlayingFileAsMicrophone(const char* fileName, 102ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org bool loop, 103ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org FileFormats format, 104ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int startPosition, 105ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org float volumeScaling, 106ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int stopPosition, 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const CodecInst* codecInst); 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StartPlayingFileAsMicrophone(InStream* stream, 110ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org FileFormats format, 111ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int startPosition, 112ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org float volumeScaling, 113ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int stopPosition, 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const CodecInst* codecInst); 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StopPlayingFileAsMicrophone(); 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int IsPlayingFileAsMicrophone() const; 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StartRecordingMicrophone(const char* fileName, 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const CodecInst* codecInst); 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StartRecordingMicrophone(OutStream* stream, 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const CodecInst* codecInst); 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StopRecordingMicrophone(); 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StartRecordingCall(const char* fileName, const CodecInst* codecInst); 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StartRecordingCall(OutStream* stream, const CodecInst* codecInst); 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StopRecordingCall(); 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetMixWithMicStatus(bool mix); 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13654f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t RegisterVoiceEngineObserver(VoiceEngineObserver& observer); 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~TransmitMixer(); 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // MonitorObserver 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void OnPeriodicProcess(); 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // FileCallback 145ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org void PlayNotification(int32_t id, 146ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org uint32_t durationMs); 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 148ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org void RecordNotification(int32_t id, 149ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org uint32_t durationMs); 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 151ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org void PlayFileEnded(int32_t id); 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 153ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org void RecordFileEnded(int32_t id); 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Typing detection 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int TimeSinceLastTyping(int &seconds); 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int SetTypingDetectionParameters(int timeWindow, 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int costPerTyping, 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int reportingThreshold, 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int penaltyDecay, 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int typeEventDelay); 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void EnableStereoChannelSwapping(bool enable); 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool IsStereoChannelSwappingEnabled(); 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 169ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org TransmitMixer(uint32_t instanceId); 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1714de0a10f66298f8c3d19b7984c97c3f4ada8c494andrew@webrtc.org // Gets the maximum sample rate and number of channels over all currently 1724de0a10f66298f8c3d19b7984c97c3f4ada8c494andrew@webrtc.org // sending codecs. 1734de0a10f66298f8c3d19b7984c97c3f4ada8c494andrew@webrtc.org void GetSendCodecInfo(int* max_sample_rate, int* max_channels); 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 175f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org void GenerateAudioFrame(const int16_t audioSamples[], 176f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org int nSamples, 177f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org int nChannels, 178f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org int samplesPerSec); 179ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int32_t RecordAudioToFile(uint32_t mixingFrequency); 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18154f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t MixOrReplaceAudioWithFile( 182ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int mixingFrequency); 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18422c954a731bc7d153f18d2d893284f1ad34b53d4andrew@webrtc.org void ProcessAudio(int delay_ms, int clock_drift, int current_mic_level, 18522c954a731bc7d153f18d2d893284f1ad34b53d4andrew@webrtc.org bool key_pressed); 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION 188c13a5372fe8e8ef925b6867e7e0fb5a14254ea66henrikg@webrtc.org void TypingDetection(bool keyPressed); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // uses 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Statistics* _engineStatisticsPtr; 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ChannelManager* _channelManagerPtr; 194b563e5e8b34fd7f0c6c02fa4176e9be83c2bf795andrew@webrtc.org AudioProcessing* audioproc_; 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoiceEngineObserver* _voiceEngineObserverPtr; 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessThread* _processThreadPtr; 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // owns 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MonitorModule _monitorModule; 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioFrame _audioFrame; 201708ff4d93770d863cdea26fd496ae71414eb8a53andrew@webrtc.org PushResampler<int16_t> resampler_; // ADM sample rate -> mixing rate 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FilePlayer* _filePlayerPtr; 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FileRecorder* _fileRecorderPtr; 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FileRecorder* _fileCallRecorderPtr; 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _filePlayerId; 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _fileRecorderId; 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _fileCallRecorderId; 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _filePlaying; 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _fileRecording; 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _fileCallRecording; 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe::AudioLevel _audioLevel; 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // protect file instances and their variables in MixedParticipants() 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper& _critSect; 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper& _callbackCritSect; 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION 217c13a5372fe8e8ef925b6867e7e0fb5a14254ea66henrikg@webrtc.org webrtc::TypingDetection _typingDetection; 21839e22a1ac2ba2fc23a7d03c67a3ef6cd5e93b597jiayl@webrtc.org bool _typingNoiseWarningPending; 21939e22a1ac2ba2fc23a7d03c67a3ef6cd5e93b597jiayl@webrtc.org bool _typingNoiseDetected; 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 221b563e5e8b34fd7f0c6c02fa4176e9be83c2bf795andrew@webrtc.org bool _saturationWarning; 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _instanceId; 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _mixFileWithMicrophone; 22554f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org uint32_t _captureLevel; 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEMediaProcess* external_postproc_ptr_; 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEMediaProcess* external_preproc_ptr_; 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _mute; 22954f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t _remainingMuteMicTimeMs; 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool stereo_codec_; 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool swap_stereo_channels_; 232f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org scoped_ptr<int16_t[]> mono_buffer_; 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2353b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace voe 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 2385d7992fd0ee5dc6ae590dfa080a31b088512198abraveyao@webrtc.org 2391a6b2746438d832aa0d5f80ac6c90e5aec5883e0braveyao@webrtc.org#endif // WEBRTC_VOICE_ENGINE_TRANSMIT_MIXER_H 240