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