blob: c096a8398cd7a115fabeda0827bf7f8cc44a474b [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
henrike@webrtc.org70efc322012-02-23 17:45:33 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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
xians@webrtc.org597b4472012-10-11 15:41:55 +000011#ifndef MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_
12#define MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "modules/audio_device/include/audio_device_defines.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "rtc_base/scoped_ref_ptr.h"
Fredrik Solenberga32dd012017-10-04 13:27:21 +020016#include "rtc_base/refcount.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000017
18namespace webrtc {
19
Fredrik Solenberga32dd012017-10-04 13:27:21 +020020class AudioDeviceModule : public rtc::RefCountInterface {
henrika@google.com73d65512011-09-07 15:11:18 +000021 public:
henrika6592f2c2017-10-17 14:47:44 +020022 // Deprecated.
23 // TODO(henrika): to be removed.
henrika@google.com73d65512011-09-07 15:11:18 +000024 enum ErrorCode {
25 kAdmErrNone = 0,
26 kAdmErrArgument = 1
27 };
niklase@google.com470e71d2011-07-07 08:21:25 +000028
henrika@google.com73d65512011-09-07 15:11:18 +000029 enum AudioLayer {
30 kPlatformDefaultAudio = 0,
henrika@google.com73d65512011-09-07 15:11:18 +000031 kWindowsCoreAudio = 2,
32 kLinuxAlsaAudio = 3,
33 kLinuxPulseAudio = 4,
henrika@webrtc.org474d1eb2015-03-09 12:39:53 +000034 kAndroidJavaAudio = 5,
henrika521f7a82016-05-31 07:03:17 -070035 kAndroidOpenSLESAudio = 6,
36 kAndroidJavaInputAndOpenSLESOutputAudio = 7,
henrikab2619892015-05-18 16:49:16 +020037 kDummyAudio = 8
henrika@google.com73d65512011-09-07 15:11:18 +000038 };
niklase@google.com470e71d2011-07-07 08:21:25 +000039
henrika@google.com73d65512011-09-07 15:11:18 +000040 enum WindowsDeviceType {
41 kDefaultCommunicationDevice = -1,
42 kDefaultDevice = -2
43 };
niklase@google.com470e71d2011-07-07 08:21:25 +000044
henrika8962b542017-11-13 16:57:58 +010045 // TODO(bugs.webrtc.org/7306): deprecated.
henrika@google.com73d65512011-09-07 15:11:18 +000046 enum ChannelType {
47 kChannelLeft = 0,
48 kChannelRight = 1,
49 kChannelBoth = 2
50 };
niklase@google.com470e71d2011-07-07 08:21:25 +000051
henrika@google.com73d65512011-09-07 15:11:18 +000052 public:
henrika32026c32017-11-16 16:15:49 +010053 // Creates an ADM.
henrika616e3132017-11-13 12:47:59 +010054 static rtc::scoped_refptr<AudioDeviceModule> Create(
55 const AudioLayer audio_layer);
henrika32026c32017-11-16 16:15:49 +010056 // TODO(bugs.webrtc.org/7306): deprecated (to be removed).
Peter Boström4adbbcf2016-05-03 15:51:26 -040057 static rtc::scoped_refptr<AudioDeviceModule> Create(
58 const int32_t id,
59 const AudioLayer audio_layer);
60
henrika@google.com73d65512011-09-07 15:11:18 +000061 // Retrieve the currently utilized audio layer
62 virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000063
henrika@google.com73d65512011-09-07 15:11:18 +000064 // Full-duplex transportation of PCM audio
65 virtual int32_t RegisterAudioCallback(AudioTransport* audioCallback) = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000066
henrika@google.com73d65512011-09-07 15:11:18 +000067 // Main initialization and termination
68 virtual int32_t Init() = 0;
69 virtual int32_t Terminate() = 0;
70 virtual bool Initialized() const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000071
henrika@google.com73d65512011-09-07 15:11:18 +000072 // Device enumeration
73 virtual int16_t PlayoutDevices() = 0;
74 virtual int16_t RecordingDevices() = 0;
75 virtual int32_t PlayoutDeviceName(uint16_t index,
76 char name[kAdmMaxDeviceNameSize],
77 char guid[kAdmMaxGuidSize]) = 0;
78 virtual int32_t RecordingDeviceName(uint16_t index,
niklase@google.com470e71d2011-07-07 08:21:25 +000079 char name[kAdmMaxDeviceNameSize],
80 char guid[kAdmMaxGuidSize]) = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000081
henrika@google.com73d65512011-09-07 15:11:18 +000082 // Device selection
83 virtual int32_t SetPlayoutDevice(uint16_t index) = 0;
84 virtual int32_t SetPlayoutDevice(WindowsDeviceType device) = 0;
85 virtual int32_t SetRecordingDevice(uint16_t index) = 0;
86 virtual int32_t SetRecordingDevice(WindowsDeviceType device) = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000087
henrika@google.com73d65512011-09-07 15:11:18 +000088 // Audio transport initialization
89 virtual int32_t PlayoutIsAvailable(bool* available) = 0;
90 virtual int32_t InitPlayout() = 0;
91 virtual bool PlayoutIsInitialized() const = 0;
92 virtual int32_t RecordingIsAvailable(bool* available) = 0;
93 virtual int32_t InitRecording() = 0;
94 virtual bool RecordingIsInitialized() const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000095
henrika@google.com73d65512011-09-07 15:11:18 +000096 // Audio transport control
97 virtual int32_t StartPlayout() = 0;
98 virtual int32_t StopPlayout() = 0;
99 virtual bool Playing() const = 0;
100 virtual int32_t StartRecording() = 0;
101 virtual int32_t StopRecording() = 0;
102 virtual bool Recording() const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000103
henrika@google.com73d65512011-09-07 15:11:18 +0000104 // Microphone Automatic Gain Control (AGC)
105 virtual int32_t SetAGC(bool enable) = 0;
106 virtual bool AGC() const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000107
henrika@google.com73d65512011-09-07 15:11:18 +0000108 // Audio mixer initialization
henrika@google.com73d65512011-09-07 15:11:18 +0000109 virtual int32_t InitSpeaker() = 0;
110 virtual bool SpeakerIsInitialized() const = 0;
henrika@google.com73d65512011-09-07 15:11:18 +0000111 virtual int32_t InitMicrophone() = 0;
112 virtual bool MicrophoneIsInitialized() const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000113
henrika@google.com73d65512011-09-07 15:11:18 +0000114 // Speaker volume controls
115 virtual int32_t SpeakerVolumeIsAvailable(bool* available) = 0;
116 virtual int32_t SetSpeakerVolume(uint32_t volume) = 0;
117 virtual int32_t SpeakerVolume(uint32_t* volume) const = 0;
118 virtual int32_t MaxSpeakerVolume(uint32_t* maxVolume) const = 0;
119 virtual int32_t MinSpeakerVolume(uint32_t* minVolume) const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000120
henrika@google.com73d65512011-09-07 15:11:18 +0000121 // Microphone volume controls
122 virtual int32_t MicrophoneVolumeIsAvailable(bool* available) = 0;
123 virtual int32_t SetMicrophoneVolume(uint32_t volume) = 0;
124 virtual int32_t MicrophoneVolume(uint32_t* volume) const = 0;
125 virtual int32_t MaxMicrophoneVolume(uint32_t* maxVolume) const = 0;
126 virtual int32_t MinMicrophoneVolume(uint32_t* minVolume) const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000127
henrika@google.com73d65512011-09-07 15:11:18 +0000128 // Speaker mute control
129 virtual int32_t SpeakerMuteIsAvailable(bool* available) = 0;
130 virtual int32_t SetSpeakerMute(bool enable) = 0;
131 virtual int32_t SpeakerMute(bool* enabled) const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000132
henrika@google.com73d65512011-09-07 15:11:18 +0000133 // Microphone mute control
134 virtual int32_t MicrophoneMuteIsAvailable(bool* available) = 0;
135 virtual int32_t SetMicrophoneMute(bool enable) = 0;
136 virtual int32_t MicrophoneMute(bool* enabled) const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000137
henrika@google.com73d65512011-09-07 15:11:18 +0000138 // Stereo support
139 virtual int32_t StereoPlayoutIsAvailable(bool* available) const = 0;
140 virtual int32_t SetStereoPlayout(bool enable) = 0;
141 virtual int32_t StereoPlayout(bool* enabled) const = 0;
142 virtual int32_t StereoRecordingIsAvailable(bool* available) const = 0;
143 virtual int32_t SetStereoRecording(bool enable) = 0;
144 virtual int32_t StereoRecording(bool* enabled) const = 0;
Zhi Huang2efe87f2017-11-22 18:40:05 +0000145 // TODO(bugs.webrtc.org/7306): deprecated.
146 virtual int32_t SetRecordingChannel(const ChannelType channel) { return -1; }
147 virtual int32_t RecordingChannel(ChannelType* channel) const { return -1; }
niklase@google.com470e71d2011-07-07 08:21:25 +0000148
henrika6592f2c2017-10-17 14:47:44 +0200149 // Playout delay
henrika@google.com73d65512011-09-07 15:11:18 +0000150 virtual int32_t PlayoutDelay(uint16_t* delayMS) const = 0;
henrika6592f2c2017-10-17 14:47:44 +0200151
Zhi Huang2efe87f2017-11-22 18:40:05 +0000152 // TODO(bugs.webrtc.org/7306): deprecated (to be removed).
153 virtual int32_t SetRecordingSampleRate(const uint32_t samplesPerSec) {
154 return -1;
155 }
156 virtual int32_t RecordingSampleRate(uint32_t* samplesPerSec) const {
157 return -1;
158 }
159 virtual int32_t SetPlayoutSampleRate(const uint32_t samplesPerSec) {
160 return -1;
161 }
162 virtual int32_t PlayoutSampleRate(uint32_t* samplesPerSec) const {
163 return -1;
164 }
165
166 // TODO(bugs.webrtc.org/7306): deprecated (to be removed).
167 virtual int32_t SetLoudspeakerStatus(bool enable) { return -1; }
168 virtual int32_t GetLoudspeakerStatus(bool* enabled) const { return -1; }
169
henrika@webrtc.orga954c072014-12-09 16:22:09 +0000170 // Only supported on Android.
maxmorin88e31a32016-08-16 00:56:09 -0700171 virtual bool BuiltInAECIsAvailable() const = 0;
172 virtual bool BuiltInAGCIsAvailable() const = 0;
173 virtual bool BuiltInNSIsAvailable() const = 0;
henrika@webrtc.orga954c072014-12-09 16:22:09 +0000174
henrikac14f5ff2015-09-23 14:08:33 +0200175 // Enables the built-in audio effects. Only supported on Android.
maxmorin88e31a32016-08-16 00:56:09 -0700176 virtual int32_t EnableBuiltInAEC(bool enable) = 0;
177 virtual int32_t EnableBuiltInAGC(bool enable) = 0;
178 virtual int32_t EnableBuiltInNS(bool enable) = 0;
andrew@webrtc.orga3c6d612011-09-13 17:17:49 +0000179
maxmorin88e31a32016-08-16 00:56:09 -0700180// Only supported on iOS.
181#if defined(WEBRTC_IOS)
182 virtual int GetPlayoutAudioParameters(AudioParameters* params) const = 0;
183 virtual int GetRecordAudioParameters(AudioParameters* params) const = 0;
184#endif // WEBRTC_IOS
henrikaba35d052015-07-14 17:04:08 +0200185
henrika@google.com73d65512011-09-07 15:11:18 +0000186 protected:
maxmorin88e31a32016-08-16 00:56:09 -0700187 ~AudioDeviceModule() override {}
niklase@google.com470e71d2011-07-07 08:21:25 +0000188};
189
190} // namespace webrtc
191
xians@webrtc.org597b4472012-10-11 15:41:55 +0000192#endif // MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_