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 MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/include/audio_device_defines.h" 15bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/interface/module.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioDeviceModule : public RefCountedModule { 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum ErrorCode { 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kAdmErrNone = 0, 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kAdmErrArgument = 1 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum AudioLayer { 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kPlatformDefaultAudio = 0, 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWindowsWaveAudio = 1, 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWindowsCoreAudio = 2, 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kLinuxAlsaAudio = 3, 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kLinuxPulseAudio = 4, 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kDummyAudio = 5 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum WindowsDeviceType { 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kDefaultCommunicationDevice = -1, 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kDefaultDevice = -2 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum BufferType { 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kFixedBufferSize = 0, 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kAdaptiveBufferSize = 1 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum ChannelType { 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kChannelLeft = 0, 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kChannelRight = 1, 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kChannelBoth = 2 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Retrieve the currently utilized audio layer 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const = 0; 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Error handling 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ErrorCode LastError() const = 0; 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t RegisterEventObserver(AudioDeviceObserver* eventCallback) = 0; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Full-duplex transportation of PCM audio 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t RegisterAudioCallback(AudioTransport* audioCallback) = 0; 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Main initialization and termination 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t Init() = 0; 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t Terminate() = 0; 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool Initialized() const = 0; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Device enumeration 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int16_t PlayoutDevices() = 0; 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int16_t RecordingDevices() = 0; 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t PlayoutDeviceName(uint16_t index, 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize], 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]) = 0; 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t RecordingDeviceName(uint16_t index, 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize], 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]) = 0; 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Device selection 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetPlayoutDevice(uint16_t index) = 0; 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetPlayoutDevice(WindowsDeviceType device) = 0; 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetRecordingDevice(uint16_t index) = 0; 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetRecordingDevice(WindowsDeviceType device) = 0; 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Audio transport initialization 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t PlayoutIsAvailable(bool* available) = 0; 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t InitPlayout() = 0; 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool PlayoutIsInitialized() const = 0; 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t RecordingIsAvailable(bool* available) = 0; 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t InitRecording() = 0; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool RecordingIsInitialized() const = 0; 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Audio transport control 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StartPlayout() = 0; 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StopPlayout() = 0; 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool Playing() const = 0; 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StartRecording() = 0; 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StopRecording() = 0; 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool Recording() const = 0; 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Microphone Automatic Gain Control (AGC) 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetAGC(bool enable) = 0; 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool AGC() const = 0; 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Volume control based on the Windows Wave API (Windows only) 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetWaveOutVolume(uint16_t volumeLeft, 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint16_t volumeRight) = 0; 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t WaveOutVolume(uint16_t* volumeLeft, 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint16_t* volumeRight) const = 0; 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Audio mixer initialization 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t InitSpeaker() = 0; 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool SpeakerIsInitialized() const = 0; 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t InitMicrophone() = 0; 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool MicrophoneIsInitialized() const = 0; 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Speaker volume controls 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SpeakerVolumeIsAvailable(bool* available) = 0; 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetSpeakerVolume(uint32_t volume) = 0; 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SpeakerVolume(uint32_t* volume) const = 0; 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MaxSpeakerVolume(uint32_t* maxVolume) const = 0; 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MinSpeakerVolume(uint32_t* minVolume) const = 0; 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SpeakerVolumeStepSize(uint16_t* stepSize) const = 0; 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Microphone volume controls 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MicrophoneVolumeIsAvailable(bool* available) = 0; 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetMicrophoneVolume(uint32_t volume) = 0; 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MicrophoneVolume(uint32_t* volume) const = 0; 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MaxMicrophoneVolume(uint32_t* maxVolume) const = 0; 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MinMicrophoneVolume(uint32_t* minVolume) const = 0; 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MicrophoneVolumeStepSize(uint16_t* stepSize) const = 0; 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Speaker mute control 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SpeakerMuteIsAvailable(bool* available) = 0; 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetSpeakerMute(bool enable) = 0; 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SpeakerMute(bool* enabled) const = 0; 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Microphone mute control 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MicrophoneMuteIsAvailable(bool* available) = 0; 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetMicrophoneMute(bool enable) = 0; 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MicrophoneMute(bool* enabled) const = 0; 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Microphone boost control 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MicrophoneBoostIsAvailable(bool* available) = 0; 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetMicrophoneBoost(bool enable) = 0; 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t MicrophoneBoost(bool* enabled) const = 0; 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Stereo support 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StereoPlayoutIsAvailable(bool* available) const = 0; 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetStereoPlayout(bool enable) = 0; 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StereoPlayout(bool* enabled) const = 0; 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StereoRecordingIsAvailable(bool* available) const = 0; 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetStereoRecording(bool enable) = 0; 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StereoRecording(bool* enabled) const = 0; 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetRecordingChannel(const ChannelType channel) = 0; 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t RecordingChannel(ChannelType* channel) const = 0; 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Delay information and control 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetPlayoutBuffer(const BufferType type, 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint16_t sizeMS = 0) = 0; 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t PlayoutBuffer(BufferType* type, uint16_t* sizeMS) const = 0; 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t PlayoutDelay(uint16_t* delayMS) const = 0; 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t RecordingDelay(uint16_t* delayMS) const = 0; 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // CPU load 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t CPULoad(uint16_t* load) const = 0; 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Recording of raw PCM data 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StartRawOutputFileRecording( 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char pcmFileNameUTF8[kAdmMaxFileNameSize]) = 0; 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StopRawOutputFileRecording() = 0; 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StartRawInputFileRecording( 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char pcmFileNameUTF8[kAdmMaxFileNameSize]) = 0; 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t StopRawInputFileRecording() = 0; 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Native sample rate controls (samples/sec) 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetRecordingSampleRate(const uint32_t samplesPerSec) = 0; 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t RecordingSampleRate(uint32_t* samplesPerSec) const = 0; 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetPlayoutSampleRate(const uint32_t samplesPerSec) = 0; 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t PlayoutSampleRate(uint32_t* samplesPerSec) const = 0; 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Mobile device specific functions 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t ResetAudioDevice() = 0; 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t SetLoudspeakerStatus(bool enable) = 0; 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t GetLoudspeakerStatus(bool* enabled) const = 0; 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // *Experimental - not recommended for use.* 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Enables the Windows Core Audio built-in AEC. Fails on other platforms. 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Must be called before InitRecording(). When enabled: 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 1. StartPlayout() must be called before StartRecording(). 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 2. StopRecording() should be called before StopPlayout(). 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // The reverse order may cause garbage audio to be rendered or the 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // capture side to halt until StopRecording() is called. 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int32_t EnableBuiltInAEC(bool enable) { return -1; } 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool BuiltInAECIsEnabled() const { return false; } 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected: 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~AudioDeviceModule() {}; 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioDeviceModule* CreateAudioDeviceModule( 20164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t id, AudioDeviceModule::AudioLayer audioLayer); 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_ 206