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