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
17namespace webrtc {
18
19class 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
176  virtual ~AudioDeviceGeneric() {}
177};
178
179}  // namespace webrtc
180
181#endif  // WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_GENERIC_H
182