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