1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/* 23dc886561c2b6472112e9b5e58d80f7e9b77052bniklas.enbom@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Use of this source code is governed by a BSD-style license 5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * that can be found in the LICENSE file in the root of the source 6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * tree. An additional intellectual property rights grant can be found 7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * in the file PATENTS. All contributing project authors may 8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * be found in the AUTHORS file in the root of the source tree. 9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */ 10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 11470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifndef WEBRTC_VOICE_ENGINE_TRANSMIT_MIXER_H 12470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WEBRTC_VOICE_ENGINE_TRANSMIT_MIXER_H 13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1400b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org#include "webrtc/base/scoped_ptr.h" 1528e82bfec6db40aa9bb9aeeb3248f5d6d72e0b84andrew@webrtc.org#include "webrtc/common_audio/resampler/include/push_resampler.h" 1628e82bfec6db40aa9bb9aeeb3248f5d6d72e0b84andrew@webrtc.org#include "webrtc/common_types.h" 17c693704cc209083ae439c312ff89bec5a2cf23d0henrikg@webrtc.org#include "webrtc/modules/audio_processing/typing_detection.h" 18ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/include/module_common_types.h" 19ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/utility/include/file_player.h" 20ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/utility/include/file_recorder.h" 2128e82bfec6db40aa9bb9aeeb3248f5d6d72e0b84andrew@webrtc.org#include "webrtc/voice_engine/include/voe_base.h" 2228e82bfec6db40aa9bb9aeeb3248f5d6d72e0b84andrew@webrtc.org#include "webrtc/voice_engine/level_indicator.h" 2328e82bfec6db40aa9bb9aeeb3248f5d6d72e0b84andrew@webrtc.org#include "webrtc/voice_engine/monitor_module.h" 2428e82bfec6db40aa9bb9aeeb3248f5d6d72e0b84andrew@webrtc.org#include "webrtc/voice_engine/voice_engine_defines.h" 25470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 26470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnamespace webrtc { 27470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 28470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass AudioProcessing; 29470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ProcessThread; 30470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VoEExternalMedia; 31470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VoEMediaProcess; 32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnamespace voe { 34470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ChannelManager; 36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass MixedAudio; 37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass Statistics; 38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 39470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass TransmitMixer : public MonitorObserver, 4040ee3d07eda24b8e8214429d9885d9ad9a2c04f7andrew@webrtc.org public FileCallback { 41470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.compublic: 429213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org static int32_t Create(TransmitMixer*& mixer, uint32_t instanceId); 43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 44470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com static void Destroy(TransmitMixer*& mixer); 45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 466141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t SetEngineInformation(ProcessThread& processThread, 476141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org Statistics& engineStatistics, 486141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org ChannelManager& channelManager); 49470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 506141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t SetAudioProcessingModule( 51470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com AudioProcessing* audioProcessingModule); 52470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 536141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t PrepareDemux(const void* audioSamples, 54dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting size_t nSamples, 556955870806624479723addfae6dcf5d13968796cPeter Kasting size_t nChannels, 569213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org uint32_t samplesPerSec, 579213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org uint16_t totalDelayMS, 589213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org int32_t clockDrift, 599213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org uint16_t currentMicLevel, 609213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org bool keyPressed); 61470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 62470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 636141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t DemuxAndMix(); 642f84afad30b088ddebb4063bc47ac9a79d735a2bxians@webrtc.org // Used by the Chrome to pass the recording data to the specific VoE 652f84afad30b088ddebb4063bc47ac9a79d735a2bxians@webrtc.org // channels for demux. 666955870806624479723addfae6dcf5d13968796cPeter Kasting void DemuxAndMix(const int voe_channels[], size_t number_of_voe_channels); 67470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 686141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t EncodeAndSend(); 692f84afad30b088ddebb4063bc47ac9a79d735a2bxians@webrtc.org // Used by the Chrome to pass the recording data to the specific VoE 702f84afad30b088ddebb4063bc47ac9a79d735a2bxians@webrtc.org // channels for encoding and sending to the network. 716955870806624479723addfae6dcf5d13968796cPeter Kasting void EncodeAndSend(const int voe_channels[], size_t number_of_voe_channels); 72470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 73023cc5abc7d25fb3133b4d0206b67dcc6204b6e8andrew@webrtc.org // Must be called on the same thread as PrepareDemux(). 746141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org uint32_t CaptureLevel() const; 75470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 766141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t StopSend(); 77470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 78470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com // VoEDtmf 799213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org void UpdateMuteMicrophoneTime(uint32_t lengthMs); 80470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 81470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com // VoEExternalMedia 8221ab3ba8f8fb49c2fae62b09e7ff346ce55a89f3andrew@webrtc.org int RegisterExternalMediaProcessing(VoEMediaProcess* object, 8321ab3ba8f8fb49c2fae62b09e7ff346ce55a89f3andrew@webrtc.org ProcessingTypes type); 8421ab3ba8f8fb49c2fae62b09e7ff346ce55a89f3andrew@webrtc.org int DeRegisterExternalMediaProcessing(ProcessingTypes type); 85470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 860b0665acc1464d68e878f203bbc8772a0e32402dxians@google.com int GetMixingFrequency(); 87470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 88470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com // VoEVolumeControl 899213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org int SetMute(bool enable); 90470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 91470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com bool Mute() const; 92470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 936141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int8_t AudioLevel() const; 94470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 956141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int16_t AudioLevelFullRange() const; 96470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 97470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com bool IsRecordingCall(); 98470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 99470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com bool IsRecordingMic(); 100470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 101470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StartPlayingFileAsMicrophone(const char* fileName, 1029213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org bool loop, 1039213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org FileFormats format, 1049213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org int startPosition, 1059213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org float volumeScaling, 1069213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org int stopPosition, 107470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com const CodecInst* codecInst); 108470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 109470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StartPlayingFileAsMicrophone(InStream* stream, 1109213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org FileFormats format, 1119213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org int startPosition, 1129213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org float volumeScaling, 1139213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org int stopPosition, 114470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com const CodecInst* codecInst); 115470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 116470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StopPlayingFileAsMicrophone(); 117470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 118470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int IsPlayingFileAsMicrophone() const; 119470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 120470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StartRecordingMicrophone(const char* fileName, 121470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com const CodecInst* codecInst); 122470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 123470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StartRecordingMicrophone(OutStream* stream, 124470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com const CodecInst* codecInst); 125470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 126470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StopRecordingMicrophone(); 127470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 128470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StartRecordingCall(const char* fileName, const CodecInst* codecInst); 129470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 130470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StartRecordingCall(OutStream* stream, const CodecInst* codecInst); 131470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 132470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com int StopRecordingCall(); 133470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 134470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com void SetMixWithMicStatus(bool mix); 135470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1366141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t RegisterVoiceEngineObserver(VoiceEngineObserver& observer); 137470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 138470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com virtual ~TransmitMixer(); 139470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 14002d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org // MonitorObserver 141470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com void OnPeriodicProcess(); 142470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 143470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 14402d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org // FileCallback 1459213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org void PlayNotification(int32_t id, 1469213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org uint32_t durationMs); 147470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1489213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org void RecordNotification(int32_t id, 1499213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org uint32_t durationMs); 150470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1519213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org void PlayFileEnded(int32_t id); 152470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1539213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org void RecordFileEnded(int32_t id); 154470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1553dc886561c2b6472112e9b5e58d80f7e9b77052bniklas.enbom@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION 15602d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org // Typing detection 1573dc886561c2b6472112e9b5e58d80f7e9b77052bniklas.enbom@webrtc.org int TimeSinceLastTyping(int &seconds); 15806e722ae77004fdb9f20004ccc0cddc1e4af31ddniklas.enbom@webrtc.org int SetTypingDetectionParameters(int timeWindow, 15906e722ae77004fdb9f20004ccc0cddc1e4af31ddniklas.enbom@webrtc.org int costPerTyping, 16006e722ae77004fdb9f20004ccc0cddc1e4af31ddniklas.enbom@webrtc.org int reportingThreshold, 161f6edfeff63fd41b2caec0f108f2c5788e47d10b8niklas.enbom@webrtc.org int penaltyDecay, 162f6edfeff63fd41b2caec0f108f2c5788e47d10b8niklas.enbom@webrtc.org int typeEventDelay); 1633dc886561c2b6472112e9b5e58d80f7e9b77052bniklas.enbom@webrtc.org#endif 1643dc886561c2b6472112e9b5e58d80f7e9b77052bniklas.enbom@webrtc.org 16502d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org void EnableStereoChannelSwapping(bool enable); 16602d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org bool IsStereoChannelSwappingEnabled(); 16702d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org 168470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comprivate: 1699213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org TransmitMixer(uint32_t instanceId); 170470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1712412085bc1d95bcae2ee6987206b73bd1c2f5080andrew@webrtc.org // Gets the maximum sample rate and number of channels over all currently 1722412085bc1d95bcae2ee6987206b73bd1c2f5080andrew@webrtc.org // sending codecs. 1736955870806624479723addfae6dcf5d13968796cPeter Kasting void GetSendCodecInfo(int* max_sample_rate, size_t* max_channels); 1744ecea3e1057eebf846af9b93abf8faf8571bc576andrew@webrtc.org 17540ee3d07eda24b8e8214429d9885d9ad9a2c04f7andrew@webrtc.org void GenerateAudioFrame(const int16_t audioSamples[], 176dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting size_t nSamples, 1776955870806624479723addfae6dcf5d13968796cPeter Kasting size_t nChannels, 17840ee3d07eda24b8e8214429d9885d9ad9a2c04f7andrew@webrtc.org int samplesPerSec); 1799213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org int32_t RecordAudioToFile(uint32_t mixingFrequency); 180470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1816141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t MixOrReplaceAudioWithFile( 1829213521ea98b0977c7cdabd2853060835af226f3pbos@webrtc.org int mixingFrequency); 183470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 18475dd2885c5e8fe1db6ea4384fe744e0bdecdcaebandrew@webrtc.org void ProcessAudio(int delay_ms, int clock_drift, int current_mic_level, 18575dd2885c5e8fe1db6ea4384fe744e0bdecdcaebandrew@webrtc.org bool key_pressed); 186470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 187470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION 188c693704cc209083ae439c312ff89bec5a2cf23d0henrikg@webrtc.org void TypingDetection(bool keyPressed); 189470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif 190470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 19102d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org // uses 192470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com Statistics* _engineStatisticsPtr; 193470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com ChannelManager* _channelManagerPtr; 1946be1e934ad48ccdac734b5cbd50528235ec93816andrew@webrtc.org AudioProcessing* audioproc_; 195470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com VoiceEngineObserver* _voiceEngineObserverPtr; 196470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com ProcessThread* _processThreadPtr; 197470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 19802d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org // owns 199470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com MonitorModule _monitorModule; 200470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com AudioFrame _audioFrame; 201f5a33f145b74d9c6058c670baf7b6201b78f6e48andrew@webrtc.org PushResampler<int16_t> resampler_; // ADM sample rate -> mixing rate 20221ab3ba8f8fb49c2fae62b09e7ff346ce55a89f3andrew@webrtc.org FilePlayer* _filePlayerPtr; 203470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com FileRecorder* _fileRecorderPtr; 204470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com FileRecorder* _fileCallRecorderPtr; 2050b0665acc1464d68e878f203bbc8772a0e32402dxians@google.com int _filePlayerId; 2060b0665acc1464d68e878f203bbc8772a0e32402dxians@google.com int _fileRecorderId; 2070b0665acc1464d68e878f203bbc8772a0e32402dxians@google.com int _fileCallRecorderId; 208470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com bool _filePlaying; 209470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com bool _fileRecording; 210470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com bool _fileCallRecording; 211470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com voe::AudioLevel _audioLevel; 212470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com // protect file instances and their variables in MixedParticipants() 213470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com CriticalSectionWrapper& _critSect; 214470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com CriticalSectionWrapper& _callbackCritSect; 215470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 216470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION 217c693704cc209083ae439c312ff89bec5a2cf23d0henrikg@webrtc.org webrtc::TypingDetection _typingDetection; 218bf00740c92839865f3656fb4ee02b144f26b2012jiayl@webrtc.org bool _typingNoiseWarningPending; 219bf00740c92839865f3656fb4ee02b144f26b2012jiayl@webrtc.org bool _typingNoiseDetected; 220470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif 2216be1e934ad48ccdac734b5cbd50528235ec93816andrew@webrtc.org bool _saturationWarning; 222470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 2230b0665acc1464d68e878f203bbc8772a0e32402dxians@google.com int _instanceId; 224470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com bool _mixFileWithMicrophone; 2256141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org uint32_t _captureLevel; 22621ab3ba8f8fb49c2fae62b09e7ff346ce55a89f3andrew@webrtc.org VoEMediaProcess* external_postproc_ptr_; 22721ab3ba8f8fb49c2fae62b09e7ff346ce55a89f3andrew@webrtc.org VoEMediaProcess* external_preproc_ptr_; 228470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com bool _mute; 2296141e13873d0fdea626de08dfec2efa2c9171c76pbos@webrtc.org int32_t _remainingMuteMicTimeMs; 2304ecea3e1057eebf846af9b93abf8faf8571bc576andrew@webrtc.org bool stereo_codec_; 23102d7174722cd6155c5c42da92c012ad8bd5e32c7andrew@webrtc.org bool swap_stereo_channels_; 232470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}; 233470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 234d900e8bea84c474696bf0219aed1353ce65ffd8epbos@webrtc.org} // namespace voe 235470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 236470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} // namespace webrtc 237a7cfa6704af8ac20acec4d195088053f7043b66fbraveyao@webrtc.org 2380062a6d0995c24f423504aba83b3f086cabec924braveyao@webrtc.org#endif // WEBRTC_VOICE_ENGINE_TRANSMIT_MIXER_H 239