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 WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_GENERIC_H 12 #define WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_GENERIC_H 13 14 #include "webrtc/modules/audio_device/audio_device_buffer.h" 15 #include "webrtc/modules/audio_device/include/audio_device.h" 16 17 namespace webrtc { 18 19 class AudioDeviceGeneric { 20 public: 21 // Retrieve the currently utilized audio layer 22 virtual int32_t ActiveAudioLayer( 23 AudioDeviceModule::AudioLayer& audioLayer) const = 0; 24 25 // Main initializaton and termination 26 virtual int32_t Init() = 0; 27 virtual int32_t Terminate() = 0; 28 virtual bool Initialized() const = 0; 29 30 // Device enumeration 31 virtual int16_t PlayoutDevices() = 0; 32 virtual int16_t RecordingDevices() = 0; 33 virtual int32_t PlayoutDeviceName(uint16_t index, 34 char name[kAdmMaxDeviceNameSize], 35 char guid[kAdmMaxGuidSize]) = 0; 36 virtual int32_t RecordingDeviceName(uint16_t index, 37 char name[kAdmMaxDeviceNameSize], 38 char guid[kAdmMaxGuidSize]) = 0; 39 40 // Device selection 41 virtual int32_t SetPlayoutDevice(uint16_t index) = 0; 42 virtual int32_t SetPlayoutDevice( 43 AudioDeviceModule::WindowsDeviceType device) = 0; 44 virtual int32_t SetRecordingDevice(uint16_t index) = 0; 45 virtual int32_t SetRecordingDevice( 46 AudioDeviceModule::WindowsDeviceType device) = 0; 47 48 // Audio transport initialization 49 virtual int32_t PlayoutIsAvailable(bool& available) = 0; 50 virtual int32_t InitPlayout() = 0; 51 virtual bool PlayoutIsInitialized() const = 0; 52 virtual int32_t RecordingIsAvailable(bool& available) = 0; 53 virtual int32_t InitRecording() = 0; 54 virtual bool RecordingIsInitialized() const = 0; 55 56 // Audio transport control 57 virtual int32_t StartPlayout() = 0; 58 virtual int32_t StopPlayout() = 0; 59 virtual bool Playing() const = 0; 60 virtual int32_t StartRecording() = 0; 61 virtual int32_t StopRecording() = 0; 62 virtual bool Recording() const = 0; 63 64 // Microphone Automatic Gain Control (AGC) 65 virtual int32_t SetAGC(bool enable) = 0; 66 virtual bool AGC() const = 0; 67 68 // Volume control based on the Windows Wave API (Windows only) 69 virtual int32_t SetWaveOutVolume(uint16_t volumeLeft, 70 uint16_t volumeRight) = 0; 71 virtual int32_t WaveOutVolume(uint16_t& volumeLeft, 72 uint16_t& volumeRight) const = 0; 73 74 // Audio mixer initialization 75 virtual int32_t InitSpeaker() = 0; 76 virtual bool SpeakerIsInitialized() const = 0; 77 virtual int32_t InitMicrophone() = 0; 78 virtual bool MicrophoneIsInitialized() const = 0; 79 80 // Speaker volume controls 81 virtual int32_t SpeakerVolumeIsAvailable(bool& available) = 0; 82 virtual int32_t SetSpeakerVolume(uint32_t volume) = 0; 83 virtual int32_t SpeakerVolume(uint32_t& volume) const = 0; 84 virtual int32_t MaxSpeakerVolume(uint32_t& maxVolume) const = 0; 85 virtual int32_t MinSpeakerVolume(uint32_t& minVolume) const = 0; 86 virtual int32_t SpeakerVolumeStepSize(uint16_t& stepSize) const = 0; 87 88 // Microphone volume controls 89 virtual int32_t MicrophoneVolumeIsAvailable(bool& available) = 0; 90 virtual int32_t SetMicrophoneVolume(uint32_t volume) = 0; 91 virtual int32_t MicrophoneVolume(uint32_t& volume) const = 0; 92 virtual int32_t MaxMicrophoneVolume(uint32_t& maxVolume) const = 0; 93 virtual int32_t MinMicrophoneVolume(uint32_t& minVolume) const = 0; 94 virtual int32_t MicrophoneVolumeStepSize(uint16_t& stepSize) const = 0; 95 96 // Speaker mute control 97 virtual int32_t SpeakerMuteIsAvailable(bool& available) = 0; 98 virtual int32_t SetSpeakerMute(bool enable) = 0; 99 virtual int32_t SpeakerMute(bool& enabled) const = 0; 100 101 // Microphone mute control 102 virtual int32_t MicrophoneMuteIsAvailable(bool& available) = 0; 103 virtual int32_t SetMicrophoneMute(bool enable) = 0; 104 virtual int32_t MicrophoneMute(bool& enabled) const = 0; 105 106 // Microphone boost control 107 virtual int32_t MicrophoneBoostIsAvailable(bool& available) = 0; 108 virtual int32_t SetMicrophoneBoost(bool enable) = 0; 109 virtual int32_t MicrophoneBoost(bool& enabled) const = 0; 110 111 // Stereo support 112 virtual int32_t StereoPlayoutIsAvailable(bool& available) = 0; 113 virtual int32_t SetStereoPlayout(bool enable) = 0; 114 virtual int32_t StereoPlayout(bool& enabled) const = 0; 115 virtual int32_t StereoRecordingIsAvailable(bool& available) = 0; 116 virtual int32_t SetStereoRecording(bool enable) = 0; 117 virtual int32_t StereoRecording(bool& enabled) const = 0; 118 119 // Delay information and control 120 virtual int32_t SetPlayoutBuffer(const AudioDeviceModule::BufferType type, 121 uint16_t sizeMS = 0) = 0; 122 virtual int32_t PlayoutBuffer(AudioDeviceModule::BufferType& type, 123 uint16_t& sizeMS) const = 0; 124 virtual int32_t PlayoutDelay(uint16_t& delayMS) const = 0; 125 virtual int32_t RecordingDelay(uint16_t& delayMS) const = 0; 126 127 // CPU load 128 virtual int32_t CPULoad(uint16_t& load) const = 0; 129 130 // Native sample rate controls (samples/sec) 131 virtual int32_t SetRecordingSampleRate(const uint32_t samplesPerSec); 132 virtual int32_t SetPlayoutSampleRate(const uint32_t samplesPerSec); 133 134 // Speaker audio routing (for mobile devices) 135 virtual int32_t SetLoudspeakerStatus(bool enable); 136 virtual int32_t GetLoudspeakerStatus(bool& enable) const; 137 138 // Reset Audio Device (for mobile devices) 139 virtual int32_t ResetAudioDevice(); 140 141 // Sound Audio Device control (for WinCE only) 142 virtual int32_t SoundDeviceControl(unsigned int par1 = 0, 143 unsigned int par2 = 0, 144 unsigned int par3 = 0, 145 unsigned int par4 = 0); 146 147 // Android only 148 virtual bool BuiltInAECIsAvailable() const; 149 virtual bool BuiltInAGCIsAvailable() const; 150 virtual bool BuiltInNSIsAvailable() const; 151 152 // Windows Core Audio and Android only. 153 virtual int32_t EnableBuiltInAEC(bool enable); 154 virtual int32_t EnableBuiltInAGC(bool enable); 155 virtual int32_t EnableBuiltInNS(bool enable); 156 157 // Windows Core Audio only. 158 virtual bool BuiltInAECIsEnabled() const; 159 160 // iOS only. 161 // TODO(henrika): add Android support. 162 virtual int GetPlayoutAudioParameters(AudioParameters* params) const; 163 virtual int GetRecordAudioParameters(AudioParameters* params) const; 164 165 virtual bool PlayoutWarning() const = 0; 166 virtual bool PlayoutError() const = 0; 167 virtual bool RecordingWarning() const = 0; 168 virtual bool RecordingError() const = 0; 169 virtual void ClearPlayoutWarning() = 0; 170 virtual void ClearPlayoutError() = 0; 171 virtual void ClearRecordingWarning() = 0; 172 virtual void ClearRecordingError() = 0; 173 174 virtual void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) = 0; 175 ~AudioDeviceGeneric()176 virtual ~AudioDeviceGeneric() {} 177 }; 178 179 } // namespace webrtc 180 181 #endif // WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_GENERIC_H 182