• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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