Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: webrtc/modules/audio_device/linux/audio_mixer_manager_alsa_linux.cc

Issue 2685783014: Replace NULL with nullptr in all C++ files. (Closed)
Patch Set: Fixing android. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include <assert.h> 11 #include <assert.h>
12 12
13 #include "webrtc/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h" 13 #include "webrtc/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h"
14 #include "webrtc/system_wrappers/include/trace.h" 14 #include "webrtc/system_wrappers/include/trace.h"
15 15
16 extern webrtc_adm_linux_alsa::AlsaSymbolTable AlsaSymbolTable; 16 extern webrtc_adm_linux_alsa::AlsaSymbolTable AlsaSymbolTable;
17 17
18 // Accesses ALSA functions through our late-binding symbol table instead of 18 // Accesses ALSA functions through our late-binding symbol table instead of
19 // directly. This way we don't have to link to libalsa, which means our binary 19 // directly. This way we don't have to link to libalsa, which means our binary
20 // will work on systems that don't have it. 20 // will work on systems that don't have it.
21 #define LATE(sym) \ 21 #define LATE(sym) \
22 LATESYM_GET(webrtc_adm_linux_alsa::AlsaSymbolTable, &AlsaSymbolTable, sym) 22 LATESYM_GET(webrtc_adm_linux_alsa::AlsaSymbolTable, &AlsaSymbolTable, sym)
23 23
24 namespace webrtc 24 namespace webrtc
25 { 25 {
26 26
27 AudioMixerManagerLinuxALSA::AudioMixerManagerLinuxALSA(const int32_t id) : 27 AudioMixerManagerLinuxALSA::AudioMixerManagerLinuxALSA(const int32_t id)
28 _critSect(*CriticalSectionWrapper::CreateCriticalSection()), 28 : _critSect(*CriticalSectionWrapper::CreateCriticalSection()),
29 _id(id), 29 _id(id),
30 _outputMixerHandle(NULL), 30 _outputMixerHandle(nullptr),
31 _inputMixerHandle(NULL), 31 _inputMixerHandle(nullptr),
32 _outputMixerElement(NULL), 32 _outputMixerElement(nullptr),
33 _inputMixerElement(NULL) 33 _inputMixerElement(nullptr) {
34 { 34 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s constructed",
35 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, 35 __FUNCTION__);
36 "%s constructed", __FUNCTION__);
37 36
38 memset(_outputMixerStr, 0, kAdmMaxDeviceNameSize); 37 memset(_outputMixerStr, 0, kAdmMaxDeviceNameSize);
39 memset(_inputMixerStr, 0, kAdmMaxDeviceNameSize); 38 memset(_inputMixerStr, 0, kAdmMaxDeviceNameSize);
40 } 39 }
41 40
42 AudioMixerManagerLinuxALSA::~AudioMixerManagerLinuxALSA() 41 AudioMixerManagerLinuxALSA::~AudioMixerManagerLinuxALSA()
43 { 42 {
44 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, 43 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id,
45 "%s destructed", __FUNCTION__); 44 "%s destructed", __FUNCTION__);
46 45
47 Close(); 46 Close();
48 47
49 delete &_critSect; 48 delete &_critSect;
(...skipping 19 matching lines...) Expand all
69 68
70 int32_t AudioMixerManagerLinuxALSA::CloseSpeaker() 69 int32_t AudioMixerManagerLinuxALSA::CloseSpeaker()
71 { 70 {
72 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "%s", 71 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "%s",
73 __FUNCTION__); 72 __FUNCTION__);
74 73
75 CriticalSectionScoped lock(&_critSect); 74 CriticalSectionScoped lock(&_critSect);
76 75
77 int errVal = 0; 76 int errVal = 0;
78 77
79 if (_outputMixerHandle != NULL) 78 if (_outputMixerHandle != nullptr) {
80 { 79 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Closing playout mixer");
81 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 80 LATE(snd_mixer_free)(_outputMixerHandle);
82 "Closing playout mixer"); 81 if (errVal < 0) {
83 LATE(snd_mixer_free)(_outputMixerHandle); 82 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
84 if (errVal < 0) 83 " Error freeing playout mixer: %s",
85 { 84 LATE(snd_strerror)(errVal));
86 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 85 }
87 " Error freeing playout mixer: %s", 86 errVal = LATE(snd_mixer_detach)(_outputMixerHandle, _outputMixerStr);
88 LATE(snd_strerror)(errVal)); 87 if (errVal < 0) {
89 } 88 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
90 errVal = LATE(snd_mixer_detach)(_outputMixerHandle, _outputMixerStr); 89 " Error detachinging playout mixer: %s",
91 if (errVal < 0) 90 LATE(snd_strerror)(errVal));
92 { 91 }
93 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 92 errVal = LATE(snd_mixer_close)(_outputMixerHandle);
94 " Error detachinging playout mixer: %s", 93 if (errVal < 0) {
95 LATE(snd_strerror)(errVal)); 94 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
96 } 95 " Error snd_mixer_close(handleMixer) errVal=%d",
97 errVal = LATE(snd_mixer_close)(_outputMixerHandle); 96 errVal);
98 if (errVal < 0) 97 }
99 { 98 _outputMixerHandle = nullptr;
100 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 99 _outputMixerElement = nullptr;
101 " Error snd_mixer_close(handleMixer) errVal=%d",
102 errVal);
103 }
104 _outputMixerHandle = NULL;
105 _outputMixerElement = NULL;
106 } 100 }
107 memset(_outputMixerStr, 0, kAdmMaxDeviceNameSize); 101 memset(_outputMixerStr, 0, kAdmMaxDeviceNameSize);
108 102
109 return 0; 103 return 0;
110 } 104 }
111 105
112 int32_t AudioMixerManagerLinuxALSA::CloseMicrophone() 106 int32_t AudioMixerManagerLinuxALSA::CloseMicrophone()
113 { 107 {
114 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "%s", __FUNCTION__); 108 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "%s", __FUNCTION__);
115 109
116 CriticalSectionScoped lock(&_critSect); 110 CriticalSectionScoped lock(&_critSect);
117 111
118 int errVal = 0; 112 int errVal = 0;
119 113
120 if (_inputMixerHandle != NULL) 114 if (_inputMixerHandle != nullptr) {
121 { 115 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Closing record mixer");
122 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
123 "Closing record mixer");
124 116
125 LATE(snd_mixer_free)(_inputMixerHandle); 117 LATE(snd_mixer_free)(_inputMixerHandle);
126 if (errVal < 0) 118 if (errVal < 0) {
127 { 119 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
128 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 120 " Error freeing record mixer: %s",
129 " Error freeing record mixer: %s", 121 LATE(snd_strerror)(errVal));
130 LATE(snd_strerror)(errVal)); 122 }
131 } 123 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
132 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 124 "Closing record mixer 2");
133 "Closing record mixer 2");
134 125
135 errVal = LATE(snd_mixer_detach)(_inputMixerHandle, _inputMixerStr); 126 errVal = LATE(snd_mixer_detach)(_inputMixerHandle, _inputMixerStr);
136 if (errVal < 0) 127 if (errVal < 0) {
137 { 128 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
138 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 129 " Error detachinging record mixer: %s",
139 " Error detachinging record mixer: %s", 130 LATE(snd_strerror)(errVal));
140 LATE(snd_strerror)(errVal)); 131 }
141 } 132 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
142 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 133 "Closing record mixer 3");
143 "Closing record mixer 3");
144 134
145 errVal = LATE(snd_mixer_close)(_inputMixerHandle); 135 errVal = LATE(snd_mixer_close)(_inputMixerHandle);
146 if (errVal < 0) 136 if (errVal < 0) {
147 { 137 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
148 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 138 " Error snd_mixer_close(handleMixer) errVal=%d",
149 " Error snd_mixer_close(handleMixer) errVal=%d", 139 errVal);
150 errVal); 140 }
151 }
152 141
153 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 142 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
154 "Closing record mixer 4"); 143 "Closing record mixer 4");
155 _inputMixerHandle = NULL; 144 _inputMixerHandle = nullptr;
156 _inputMixerElement = NULL; 145 _inputMixerElement = nullptr;
157 } 146 }
158 memset(_inputMixerStr, 0, kAdmMaxDeviceNameSize); 147 memset(_inputMixerStr, 0, kAdmMaxDeviceNameSize);
159 148
160 return 0; 149 return 0;
161 } 150 }
162 151
163 int32_t AudioMixerManagerLinuxALSA::OpenSpeaker(char* deviceName) 152 int32_t AudioMixerManagerLinuxALSA::OpenSpeaker(char* deviceName)
164 { 153 {
165 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 154 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
166 "AudioMixerManagerLinuxALSA::OpenSpeaker(name=%s)", deviceName) ; 155 "AudioMixerManagerLinuxALSA::OpenSpeaker(name=%s)", deviceName) ;
167 156
168 CriticalSectionScoped lock(&_critSect); 157 CriticalSectionScoped lock(&_critSect);
169 158
170 int errVal = 0; 159 int errVal = 0;
171 160
172 // Close any existing output mixer handle 161 // Close any existing output mixer handle
173 // 162 //
174 if (_outputMixerHandle != NULL) 163 if (_outputMixerHandle != nullptr) {
175 { 164 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Closing playout mixer");
176 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
177 "Closing playout mixer");
178 165
179 LATE(snd_mixer_free)(_outputMixerHandle); 166 LATE(snd_mixer_free)(_outputMixerHandle);
180 if (errVal < 0) 167 if (errVal < 0) {
181 { 168 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
182 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 169 " Error freeing playout mixer: %s",
183 " Error freeing playout mixer: %s", 170 LATE(snd_strerror)(errVal));
184 LATE(snd_strerror)(errVal)); 171 }
185 } 172 errVal = LATE(snd_mixer_detach)(_outputMixerHandle, _outputMixerStr);
186 errVal = LATE(snd_mixer_detach)(_outputMixerHandle, _outputMixerStr); 173 if (errVal < 0) {
187 if (errVal < 0) 174 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
188 { 175 " Error detachinging playout mixer: %s",
189 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 176 LATE(snd_strerror)(errVal));
190 " Error detachinging playout mixer: %s", 177 }
191 LATE(snd_strerror)(errVal)); 178 errVal = LATE(snd_mixer_close)(_outputMixerHandle);
192 } 179 if (errVal < 0) {
193 errVal = LATE(snd_mixer_close)(_outputMixerHandle); 180 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
194 if (errVal < 0) 181 " Error snd_mixer_close(handleMixer) errVal=%d",
195 { 182 errVal);
196 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 183 }
197 " Error snd_mixer_close(handleMixer) errVal=%d",
198 errVal);
199 }
200 } 184 }
201 _outputMixerHandle = NULL; 185 _outputMixerHandle = nullptr;
202 _outputMixerElement = NULL; 186 _outputMixerElement = nullptr;
203 187
204 errVal = LATE(snd_mixer_open)(&_outputMixerHandle, 0); 188 errVal = LATE(snd_mixer_open)(&_outputMixerHandle, 0);
205 if (errVal < 0) 189 if (errVal < 0)
206 { 190 {
207 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 191 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
208 "snd_mixer_open(&_outputMixerHandle, 0) - error"); 192 "snd_mixer_open(&_outputMixerHandle, 0) - error");
209 return -1; 193 return -1;
210 } 194 }
211 195
212 char controlName[kAdmMaxDeviceNameSize] = { 0 }; 196 char controlName[kAdmMaxDeviceNameSize] = { 0 };
213 GetControlName(controlName, deviceName); 197 GetControlName(controlName, deviceName);
214 198
215 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 199 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
216 " snd_mixer_attach(_outputMixerHandle, %s)", controlName); 200 " snd_mixer_attach(_outputMixerHandle, %s)", controlName);
217 201
218 errVal = LATE(snd_mixer_attach)(_outputMixerHandle, controlName); 202 errVal = LATE(snd_mixer_attach)(_outputMixerHandle, controlName);
219 if (errVal < 0) 203 if (errVal < 0)
220 { 204 {
221 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 205 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
222 " snd_mixer_attach(_outputMixerHandle, %s) error: %s", 206 " snd_mixer_attach(_outputMixerHandle, %s) error: %s",
223 controlName, LATE(snd_strerror)(errVal)); 207 controlName, LATE(snd_strerror)(errVal));
224 _outputMixerHandle = NULL; 208 _outputMixerHandle = nullptr;
225 return -1; 209 return -1;
226 } 210 }
227 strcpy(_outputMixerStr, controlName); 211 strcpy(_outputMixerStr, controlName);
228 212
229 errVal = LATE(snd_mixer_selem_register)(_outputMixerHandle, NULL, NULL); 213 errVal =
214 LATE(snd_mixer_selem_register)(_outputMixerHandle, nullptr, nullptr);
230 if (errVal < 0) 215 if (errVal < 0)
231 { 216 {
232 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 217 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
233 " snd_mixer_selem_register(_outputMixerHandle," 218 " snd_mixer_selem_register(_outputMixerHandle,"
234 " NULL, NULL), error: %s", 219 " null, null), error: %s",
235 LATE(snd_strerror)(errVal)); 220 LATE(snd_strerror)(errVal));
236 _outputMixerHandle = NULL; 221 _outputMixerHandle = nullptr;
237 return -1; 222 return -1;
238 } 223 }
239 224
240 // Load and find the proper mixer element 225 // Load and find the proper mixer element
241 if (LoadSpeakerMixerElement() < 0) 226 if (LoadSpeakerMixerElement() < 0)
242 { 227 {
243 return -1; 228 return -1;
244 } 229 }
245 230
246 if (_outputMixerHandle != NULL) 231 if (_outputMixerHandle != nullptr) {
247 { 232 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
248 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 233 " the output mixer device is now open (0x%x)",
249 " the output mixer device is now open (0x%x)", 234 _outputMixerHandle);
250 _outputMixerHandle);
251 } 235 }
252 236
253 return 0; 237 return 0;
254 } 238 }
255 239
256 int32_t AudioMixerManagerLinuxALSA::OpenMicrophone(char *deviceName) 240 int32_t AudioMixerManagerLinuxALSA::OpenMicrophone(char *deviceName)
257 { 241 {
258 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 242 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
259 "AudioMixerManagerLinuxALSA::OpenMicrophone(name=%s)", 243 "AudioMixerManagerLinuxALSA::OpenMicrophone(name=%s)",
260 deviceName); 244 deviceName);
261 245
262 CriticalSectionScoped lock(&_critSect); 246 CriticalSectionScoped lock(&_critSect);
263 247
264 int errVal = 0; 248 int errVal = 0;
265 249
266 // Close any existing input mixer handle 250 // Close any existing input mixer handle
267 // 251 //
268 if (_inputMixerHandle != NULL) 252 if (_inputMixerHandle != nullptr) {
269 { 253 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Closing record mixer");
270 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
271 "Closing record mixer");
272 254
273 LATE(snd_mixer_free)(_inputMixerHandle); 255 LATE(snd_mixer_free)(_inputMixerHandle);
274 if (errVal < 0) 256 if (errVal < 0) {
275 { 257 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
276 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 258 " Error freeing record mixer: %s",
277 " Error freeing record mixer: %s", 259 LATE(snd_strerror)(errVal));
278 LATE(snd_strerror)(errVal)); 260 }
279 } 261 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Closing record mixer");
280 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
281 "Closing record mixer");
282 262
283 errVal = LATE(snd_mixer_detach)(_inputMixerHandle, _inputMixerStr); 263 errVal = LATE(snd_mixer_detach)(_inputMixerHandle, _inputMixerStr);
284 if (errVal < 0) 264 if (errVal < 0) {
285 { 265 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
286 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 266 " Error detachinging record mixer: %s",
287 " Error detachinging record mixer: %s", 267 LATE(snd_strerror)(errVal));
288 LATE(snd_strerror)(errVal)); 268 }
289 } 269 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Closing record mixer");
290 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
291 "Closing record mixer");
292 270
293 errVal = LATE(snd_mixer_close)(_inputMixerHandle); 271 errVal = LATE(snd_mixer_close)(_inputMixerHandle);
294 if (errVal < 0) 272 if (errVal < 0) {
295 { 273 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
296 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 274 " Error snd_mixer_close(handleMixer) errVal=%d",
297 " Error snd_mixer_close(handleMixer) errVal=%d", 275 errVal);
298 errVal); 276 }
299 } 277 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Closing record mixer");
300 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
301 "Closing record mixer");
302 } 278 }
303 _inputMixerHandle = NULL; 279 _inputMixerHandle = nullptr;
304 _inputMixerElement = NULL; 280 _inputMixerElement = nullptr;
305 281
306 errVal = LATE(snd_mixer_open)(&_inputMixerHandle, 0); 282 errVal = LATE(snd_mixer_open)(&_inputMixerHandle, 0);
307 if (errVal < 0) 283 if (errVal < 0)
308 { 284 {
309 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 285 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
310 " snd_mixer_open(&_inputMixerHandle, 0) - error"); 286 " snd_mixer_open(&_inputMixerHandle, 0) - error");
311 return -1; 287 return -1;
312 } 288 }
313 289
314 char controlName[kAdmMaxDeviceNameSize] = { 0 }; 290 char controlName[kAdmMaxDeviceNameSize] = { 0 };
315 GetControlName(controlName, deviceName); 291 GetControlName(controlName, deviceName);
316 292
317 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 293 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
318 " snd_mixer_attach(_inputMixerHandle, %s)", controlName); 294 " snd_mixer_attach(_inputMixerHandle, %s)", controlName);
319 295
320 errVal = LATE(snd_mixer_attach)(_inputMixerHandle, controlName); 296 errVal = LATE(snd_mixer_attach)(_inputMixerHandle, controlName);
321 if (errVal < 0) 297 if (errVal < 0)
322 { 298 {
323 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 299 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
324 " snd_mixer_attach(_inputMixerHandle, %s) error: %s", 300 " snd_mixer_attach(_inputMixerHandle, %s) error: %s",
325 controlName, LATE(snd_strerror)(errVal)); 301 controlName, LATE(snd_strerror)(errVal));
326 302
327 _inputMixerHandle = NULL; 303 _inputMixerHandle = nullptr;
328 return -1; 304 return -1;
329 } 305 }
330 strcpy(_inputMixerStr, controlName); 306 strcpy(_inputMixerStr, controlName);
331 307
332 errVal = LATE(snd_mixer_selem_register)(_inputMixerHandle, NULL, NULL); 308 errVal =
309 LATE(snd_mixer_selem_register)(_inputMixerHandle, nullptr, nullptr);
333 if (errVal < 0) 310 if (errVal < 0)
334 { 311 {
335 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 312 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
336 " snd_mixer_selem_register(_inputMixerHandle," 313 " snd_mixer_selem_register(_inputMixerHandle,"
337 " NULL, NULL), error: %s", 314 " null, null), error: %s",
338 LATE(snd_strerror)(errVal)); 315 LATE(snd_strerror)(errVal));
339 316
340 _inputMixerHandle = NULL; 317 _inputMixerHandle = nullptr;
341 return -1; 318 return -1;
342 } 319 }
343 // Load and find the proper mixer element 320 // Load and find the proper mixer element
344 if (LoadMicMixerElement() < 0) 321 if (LoadMicMixerElement() < 0)
345 { 322 {
346 return -1; 323 return -1;
347 } 324 }
348 325
349 if (_inputMixerHandle != NULL) 326 if (_inputMixerHandle != nullptr) {
350 { 327 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
351 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 328 " the input mixer device is now open (0x%x)",
352 " the input mixer device is now open (0x%x)", 329 _inputMixerHandle);
353 _inputMixerHandle);
354 } 330 }
355 331
356 return 0; 332 return 0;
357 } 333 }
358 334
359 bool AudioMixerManagerLinuxALSA::SpeakerIsInitialized() const 335 bool AudioMixerManagerLinuxALSA::SpeakerIsInitialized() const
360 { 336 {
361 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__); 337 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
362 338
363 return (_outputMixerHandle != NULL); 339 return (_outputMixerHandle != nullptr);
364 } 340 }
365 341
366 bool AudioMixerManagerLinuxALSA::MicrophoneIsInitialized() const 342 bool AudioMixerManagerLinuxALSA::MicrophoneIsInitialized() const
367 { 343 {
368 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", 344 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s",
369 __FUNCTION__); 345 __FUNCTION__);
370 346
371 return (_inputMixerHandle != NULL); 347 return (_inputMixerHandle != nullptr);
372 } 348 }
373 349
374 int32_t AudioMixerManagerLinuxALSA::SetSpeakerVolume( 350 int32_t AudioMixerManagerLinuxALSA::SetSpeakerVolume(
375 uint32_t volume) 351 uint32_t volume)
376 { 352 {
377 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 353 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
378 "AudioMixerManagerLinuxALSA::SetSpeakerVolume(volume=%u)", 354 "AudioMixerManagerLinuxALSA::SetSpeakerVolume(volume=%u)",
379 volume); 355 volume);
380 356
381 CriticalSectionScoped lock(&_critSect); 357 CriticalSectionScoped lock(&_critSect);
382 358
383 if (_outputMixerElement == NULL) 359 if (_outputMixerElement == nullptr) {
384 { 360 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
385 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 361 " no avaliable output mixer element exists");
386 " no avaliable output mixer element exists"); 362 return -1;
387 return -1;
388 } 363 }
389 364
390 int errVal = 365 int errVal =
391 LATE(snd_mixer_selem_set_playback_volume_all)(_outputMixerElement, 366 LATE(snd_mixer_selem_set_playback_volume_all)(_outputMixerElement,
392 volume); 367 volume);
393 if (errVal < 0) 368 if (errVal < 0)
394 { 369 {
395 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 370 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
396 " Error changing master volume: %s", 371 " Error changing master volume: %s",
397 LATE(snd_strerror)(errVal)); 372 LATE(snd_strerror)(errVal));
398 return -1; 373 return -1;
399 } 374 }
400 375
401 return (0); 376 return (0);
402 } 377 }
403 378
404 int32_t AudioMixerManagerLinuxALSA::SpeakerVolume( 379 int32_t AudioMixerManagerLinuxALSA::SpeakerVolume(
405 uint32_t& volume) const 380 uint32_t& volume) const
406 { 381 {
407 382 if (_outputMixerElement == nullptr) {
408 if (_outputMixerElement == NULL) 383 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
409 { 384 " no avaliable output mixer element exists");
410 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 385 return -1;
411 " no avaliable output mixer element exists");
412 return -1;
413 } 386 }
414 387
415 long int vol(0); 388 long int vol(0);
416 389
417 int 390 int
418 errVal = LATE(snd_mixer_selem_get_playback_volume)( 391 errVal = LATE(snd_mixer_selem_get_playback_volume)(
419 _outputMixerElement, 392 _outputMixerElement,
420 (snd_mixer_selem_channel_id_t) 0, 393 (snd_mixer_selem_channel_id_t) 0,
421 &vol); 394 &vol);
422 if (errVal < 0) 395 if (errVal < 0)
423 { 396 {
424 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 397 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
425 "Error getting outputvolume: %s", 398 "Error getting outputvolume: %s",
426 LATE(snd_strerror)(errVal)); 399 LATE(snd_strerror)(errVal));
427 return -1; 400 return -1;
428 } 401 }
429 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 402 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
430 " AudioMixerManagerLinuxALSA::SpeakerVolume() => vol=%i", 403 " AudioMixerManagerLinuxALSA::SpeakerVolume() => vol=%i",
431 vol); 404 vol);
432 405
433 volume = static_cast<uint32_t> (vol); 406 volume = static_cast<uint32_t> (vol);
434 407
435 return 0; 408 return 0;
436 } 409 }
437 410
438 int32_t AudioMixerManagerLinuxALSA::MaxSpeakerVolume( 411 int32_t AudioMixerManagerLinuxALSA::MaxSpeakerVolume(
439 uint32_t& maxVolume) const 412 uint32_t& maxVolume) const
440 { 413 {
441 414 if (_outputMixerElement == nullptr) {
442 if (_outputMixerElement == NULL) 415 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
443 { 416 " no avilable output mixer element exists");
444 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 417 return -1;
445 " no avilable output mixer element exists");
446 return -1;
447 } 418 }
448 419
449 long int minVol(0); 420 long int minVol(0);
450 long int maxVol(0); 421 long int maxVol(0);
451 422
452 int errVal = 423 int errVal =
453 LATE(snd_mixer_selem_get_playback_volume_range)(_outputMixerElement, 424 LATE(snd_mixer_selem_get_playback_volume_range)(_outputMixerElement,
454 &minVol, &maxVol); 425 &minVol, &maxVol);
455 426
456 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 427 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
457 " Playout hardware volume range, min: %d, max: %d", 428 " Playout hardware volume range, min: %d, max: %d",
458 minVol, maxVol); 429 minVol, maxVol);
459 430
460 if (maxVol <= minVol) 431 if (maxVol <= minVol)
461 { 432 {
462 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 433 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
463 " Error getting get_playback_volume_range: %s", 434 " Error getting get_playback_volume_range: %s",
464 LATE(snd_strerror)(errVal)); 435 LATE(snd_strerror)(errVal));
465 } 436 }
466 437
467 maxVolume = static_cast<uint32_t> (maxVol); 438 maxVolume = static_cast<uint32_t> (maxVol);
468 439
469 return 0; 440 return 0;
470 } 441 }
471 442
472 int32_t AudioMixerManagerLinuxALSA::MinSpeakerVolume( 443 int32_t AudioMixerManagerLinuxALSA::MinSpeakerVolume(
473 uint32_t& minVolume) const 444 uint32_t& minVolume) const
474 { 445 {
475 446 if (_outputMixerElement == nullptr) {
476 if (_outputMixerElement == NULL) 447 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
477 { 448 " no avaliable output mixer element exists");
478 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 449 return -1;
479 " no avaliable output mixer element exists");
480 return -1;
481 } 450 }
482 451
483 long int minVol(0); 452 long int minVol(0);
484 long int maxVol(0); 453 long int maxVol(0);
485 454
486 int errVal = 455 int errVal =
487 LATE(snd_mixer_selem_get_playback_volume_range)(_outputMixerElement, 456 LATE(snd_mixer_selem_get_playback_volume_range)(_outputMixerElement,
488 &minVol, &maxVol); 457 &minVol, &maxVol);
489 458
490 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 459 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
(...skipping 16 matching lines...) Expand all
507 // they were therefore not added 476 // they were therefore not added
508 /* 477 /*
509 // ---------------------------------------------------------------------------- 478 // ----------------------------------------------------------------------------
510 // SetMaxSpeakerVolume 479 // SetMaxSpeakerVolume
511 // ---------------------------------------------------------------------------- 480 // ----------------------------------------------------------------------------
512 481
513 int32_t AudioMixerManagerLinuxALSA::SetMaxSpeakerVolume( 482 int32_t AudioMixerManagerLinuxALSA::SetMaxSpeakerVolume(
514 uint32_t maxVolume) 483 uint32_t maxVolume)
515 { 484 {
516 485
517 if (_outputMixerElement == NULL) 486 if (_outputMixerElement == nullptr)
518 { 487 {
519 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 488 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
520 " no avaliable output mixer element exists"); 489 " no avaliable output mixer element exists");
521 return -1; 490 return -1;
522 } 491 }
523 492
524 long int minVol(0); 493 long int minVol(0);
525 long int maxVol(0); 494 long int maxVol(0);
526 495
527 int errVal = snd_mixer_selem_get_playback_volume_range( 496 int errVal = snd_mixer_selem_get_playback_volume_range(
(...skipping 20 matching lines...) Expand all
548 } 517 }
549 518
550 // ---------------------------------------------------------------------------- 519 // ----------------------------------------------------------------------------
551 // SetMinSpeakerVolume 520 // SetMinSpeakerVolume
552 // ---------------------------------------------------------------------------- 521 // ----------------------------------------------------------------------------
553 522
554 int32_t AudioMixerManagerLinuxALSA::SetMinSpeakerVolume( 523 int32_t AudioMixerManagerLinuxALSA::SetMinSpeakerVolume(
555 uint32_t minVolume) 524 uint32_t minVolume)
556 { 525 {
557 526
558 if (_outputMixerElement == NULL) 527 if (_outputMixerElement == nullptr)
559 { 528 {
560 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 529 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
561 " no avaliable output mixer element exists"); 530 " no avaliable output mixer element exists");
562 return -1; 531 return -1;
563 } 532 }
564 533
565 long int minVol(0); 534 long int minVol(0);
566 long int maxVol(0); 535 long int maxVol(0);
567 536
568 int errVal = snd_mixer_selem_get_playback_volume_range( 537 int errVal = snd_mixer_selem_get_playback_volume_range(
(...skipping 16 matching lines...) Expand all
585 return -1; 554 return -1;
586 } 555 }
587 556
588 return 0; 557 return 0;
589 } 558 }
590 */ 559 */
591 560
592 int32_t AudioMixerManagerLinuxALSA::SpeakerVolumeStepSize( 561 int32_t AudioMixerManagerLinuxALSA::SpeakerVolumeStepSize(
593 uint16_t& stepSize) const 562 uint16_t& stepSize) const
594 { 563 {
595 564 if (_outputMixerHandle == nullptr) {
596 if (_outputMixerHandle == NULL) 565 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
597 { 566 " no avaliable output mixer exists");
598 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 567 return -1;
599 " no avaliable output mixer exists");
600 return -1;
601 } 568 }
602 569
603 // The step size is always 1 for ALSA 570 // The step size is always 1 for ALSA
604 stepSize = 1; 571 stepSize = 1;
605 572
606 return 0; 573 return 0;
607 } 574 }
608 575
609 int32_t AudioMixerManagerLinuxALSA::SpeakerVolumeIsAvailable( 576 int32_t AudioMixerManagerLinuxALSA::SpeakerVolumeIsAvailable(
610 bool& available) 577 bool& available)
611 { 578 {
612 if (_outputMixerElement == NULL) 579 if (_outputMixerElement == nullptr) {
613 { 580 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
614 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 581 " no avaliable output mixer element exists");
615 " no avaliable output mixer element exists"); 582 return -1;
616 return -1;
617 } 583 }
618 584
619 available = LATE(snd_mixer_selem_has_playback_volume)(_outputMixerElement); 585 available = LATE(snd_mixer_selem_has_playback_volume)(_outputMixerElement);
620 586
621 return 0; 587 return 0;
622 } 588 }
623 589
624 int32_t AudioMixerManagerLinuxALSA::SpeakerMuteIsAvailable( 590 int32_t AudioMixerManagerLinuxALSA::SpeakerMuteIsAvailable(
625 bool& available) 591 bool& available)
626 { 592 {
627 if (_outputMixerElement == NULL) 593 if (_outputMixerElement == nullptr) {
628 { 594 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
629 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 595 " no avaliable output mixer element exists");
630 " no avaliable output mixer element exists"); 596 return -1;
631 return -1;
632 } 597 }
633 598
634 available = LATE(snd_mixer_selem_has_playback_switch)(_outputMixerElement); 599 available = LATE(snd_mixer_selem_has_playback_switch)(_outputMixerElement);
635 600
636 return 0; 601 return 0;
637 } 602 }
638 603
639 int32_t AudioMixerManagerLinuxALSA::SetSpeakerMute(bool enable) 604 int32_t AudioMixerManagerLinuxALSA::SetSpeakerMute(bool enable)
640 { 605 {
641 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 606 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
642 "AudioMixerManagerLinuxALSA::SetSpeakerMute(enable=%u)", 607 "AudioMixerManagerLinuxALSA::SetSpeakerMute(enable=%u)",
643 enable); 608 enable);
644 609
645 CriticalSectionScoped lock(&_critSect); 610 CriticalSectionScoped lock(&_critSect);
646 611
647 if (_outputMixerElement == NULL) 612 if (_outputMixerElement == nullptr) {
648 { 613 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
649 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 614 " no avaliable output mixer element exists");
650 " no avaliable output mixer element exists"); 615 return -1;
651 return -1;
652 } 616 }
653 617
654 // Ensure that the selected speaker destination has a valid mute control. 618 // Ensure that the selected speaker destination has a valid mute control.
655 bool available(false); 619 bool available(false);
656 SpeakerMuteIsAvailable(available); 620 SpeakerMuteIsAvailable(available);
657 if (!available) 621 if (!available)
658 { 622 {
659 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 623 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
660 " it is not possible to mute the speaker"); 624 " it is not possible to mute the speaker");
661 return -1; 625 return -1;
662 } 626 }
663 627
664 // Note value = 0 (off) means muted 628 // Note value = 0 (off) means muted
665 int errVal = 629 int errVal =
666 LATE(snd_mixer_selem_set_playback_switch_all)(_outputMixerElement, 630 LATE(snd_mixer_selem_set_playback_switch_all)(_outputMixerElement,
667 !enable); 631 !enable);
668 if (errVal < 0) 632 if (errVal < 0)
669 { 633 {
670 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 634 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
671 " Error setting playback switch: %s", 635 " Error setting playback switch: %s",
672 LATE(snd_strerror)(errVal)); 636 LATE(snd_strerror)(errVal));
673 return -1; 637 return -1;
674 } 638 }
675 639
676 return (0); 640 return (0);
677 } 641 }
678 642
679 int32_t AudioMixerManagerLinuxALSA::SpeakerMute(bool& enabled) const 643 int32_t AudioMixerManagerLinuxALSA::SpeakerMute(bool& enabled) const
680 { 644 {
681 645 if (_outputMixerElement == nullptr) {
682 if (_outputMixerElement == NULL) 646 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
683 { 647 " no avaliable output mixer exists");
684 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 648 return -1;
685 " no avaliable output mixer exists");
686 return -1;
687 } 649 }
688 650
689 // Ensure that the selected speaker destination has a valid mute control. 651 // Ensure that the selected speaker destination has a valid mute control.
690 bool available = 652 bool available =
691 LATE(snd_mixer_selem_has_playback_switch)(_outputMixerElement); 653 LATE(snd_mixer_selem_has_playback_switch)(_outputMixerElement);
692 if (!available) 654 if (!available)
693 { 655 {
694 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 656 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
695 " it is not possible to mute the speaker"); 657 " it is not possible to mute the speaker");
696 return -1; 658 return -1;
(...skipping 18 matching lines...) Expand all
715 677
716 // Note value = 0 (off) means muted 678 // Note value = 0 (off) means muted
717 enabled = (bool) !value; 679 enabled = (bool) !value;
718 680
719 return 0; 681 return 0;
720 } 682 }
721 683
722 int32_t AudioMixerManagerLinuxALSA::MicrophoneMuteIsAvailable( 684 int32_t AudioMixerManagerLinuxALSA::MicrophoneMuteIsAvailable(
723 bool& available) 685 bool& available)
724 { 686 {
725 if (_inputMixerElement == NULL) 687 if (_inputMixerElement == nullptr) {
726 { 688 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
727 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 689 " no avaliable input mixer element exists");
728 " no avaliable input mixer element exists"); 690 return -1;
729 return -1;
730 } 691 }
731 692
732 available = LATE(snd_mixer_selem_has_capture_switch)(_inputMixerElement); 693 available = LATE(snd_mixer_selem_has_capture_switch)(_inputMixerElement);
733 return 0; 694 return 0;
734 } 695 }
735 696
736 int32_t AudioMixerManagerLinuxALSA::SetMicrophoneMute(bool enable) 697 int32_t AudioMixerManagerLinuxALSA::SetMicrophoneMute(bool enable)
737 { 698 {
738 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 699 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
739 "AudioMixerManagerLinuxALSA::SetMicrophoneMute(enable=%u)", 700 "AudioMixerManagerLinuxALSA::SetMicrophoneMute(enable=%u)",
740 enable); 701 enable);
741 702
742 CriticalSectionScoped lock(&_critSect); 703 CriticalSectionScoped lock(&_critSect);
743 704
744 if (_inputMixerElement == NULL) 705 if (_inputMixerElement == nullptr) {
745 { 706 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
746 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 707 " no avaliable input mixer element exists");
747 " no avaliable input mixer element exists"); 708 return -1;
748 return -1;
749 } 709 }
750 710
751 // Ensure that the selected microphone destination has a valid mute control. 711 // Ensure that the selected microphone destination has a valid mute control.
752 bool available(false); 712 bool available(false);
753 MicrophoneMuteIsAvailable(available); 713 MicrophoneMuteIsAvailable(available);
754 if (!available) 714 if (!available)
755 { 715 {
756 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 716 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
757 " it is not possible to mute the microphone"); 717 " it is not possible to mute the microphone");
758 return -1; 718 return -1;
759 } 719 }
760 720
761 // Note value = 0 (off) means muted 721 // Note value = 0 (off) means muted
762 int errVal = 722 int errVal =
763 LATE(snd_mixer_selem_set_capture_switch_all)(_inputMixerElement, 723 LATE(snd_mixer_selem_set_capture_switch_all)(_inputMixerElement,
764 !enable); 724 !enable);
765 if (errVal < 0) 725 if (errVal < 0)
766 { 726 {
767 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 727 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
768 " Error setting capture switch: %s", 728 " Error setting capture switch: %s",
769 LATE(snd_strerror)(errVal)); 729 LATE(snd_strerror)(errVal));
770 return -1; 730 return -1;
771 } 731 }
772 732
773 return (0); 733 return (0);
774 } 734 }
775 735
776 int32_t AudioMixerManagerLinuxALSA::MicrophoneMute(bool& enabled) const 736 int32_t AudioMixerManagerLinuxALSA::MicrophoneMute(bool& enabled) const
777 { 737 {
778 738 if (_inputMixerElement == nullptr) {
779 if (_inputMixerElement == NULL) 739 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
780 { 740 " no avaliable input mixer exists");
781 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 741 return -1;
782 " no avaliable input mixer exists");
783 return -1;
784 } 742 }
785 743
786 // Ensure that the selected microphone destination has a valid mute control. 744 // Ensure that the selected microphone destination has a valid mute control.
787 bool available = 745 bool available =
788 LATE(snd_mixer_selem_has_capture_switch)(_inputMixerElement); 746 LATE(snd_mixer_selem_has_capture_switch)(_inputMixerElement);
789 if (!available) 747 if (!available)
790 { 748 {
791 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 749 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
792 " it is not possible to mute the microphone"); 750 " it is not possible to mute the microphone");
793 return -1; 751 return -1;
(...skipping 18 matching lines...) Expand all
812 770
813 // Note value = 0 (off) means muted 771 // Note value = 0 (off) means muted
814 enabled = (bool) !value; 772 enabled = (bool) !value;
815 773
816 return 0; 774 return 0;
817 } 775 }
818 776
819 int32_t AudioMixerManagerLinuxALSA::MicrophoneBoostIsAvailable( 777 int32_t AudioMixerManagerLinuxALSA::MicrophoneBoostIsAvailable(
820 bool& available) 778 bool& available)
821 { 779 {
822 if (_inputMixerHandle == NULL) 780 if (_inputMixerHandle == nullptr) {
823 { 781 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
824 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 782 " no avaliable input mixer exists");
825 " no avaliable input mixer exists"); 783 return -1;
826 return -1;
827 } 784 }
828 785
829 // Microphone boost cannot be enabled through ALSA Simple Mixer Interface 786 // Microphone boost cannot be enabled through ALSA Simple Mixer Interface
830 available = false; 787 available = false;
831 788
832 return 0; 789 return 0;
833 } 790 }
834 791
835 int32_t AudioMixerManagerLinuxALSA::SetMicrophoneBoost(bool enable) 792 int32_t AudioMixerManagerLinuxALSA::SetMicrophoneBoost(bool enable)
836 { 793 {
837 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 794 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
838 "AudioMixerManagerLinuxALSA::SetMicrophoneBoost(enable=%u)", 795 "AudioMixerManagerLinuxALSA::SetMicrophoneBoost(enable=%u)",
839 enable); 796 enable);
840 797
841 CriticalSectionScoped lock(&_critSect); 798 CriticalSectionScoped lock(&_critSect);
842 799
843 if (_inputMixerHandle == NULL) 800 if (_inputMixerHandle == nullptr) {
844 { 801 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
845 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 802 " no avaliable input mixer exists");
846 " no avaliable input mixer exists"); 803 return -1;
847 return -1;
848 } 804 }
849 805
850 // Ensure that the selected microphone destination has a valid mute control. 806 // Ensure that the selected microphone destination has a valid mute control.
851 bool available(false); 807 bool available(false);
852 MicrophoneMuteIsAvailable(available); 808 MicrophoneMuteIsAvailable(available);
853 if (!available) 809 if (!available)
854 { 810 {
855 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 811 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
856 " it is not possible to enable microphone boost"); 812 " it is not possible to enable microphone boost");
857 return -1; 813 return -1;
858 } 814 }
859 815
860 // It is assumed that the call above fails! 816 // It is assumed that the call above fails!
861 817
862 return (0); 818 return (0);
863 } 819 }
864 820
865 int32_t AudioMixerManagerLinuxALSA::MicrophoneBoost(bool& enabled) const 821 int32_t AudioMixerManagerLinuxALSA::MicrophoneBoost(bool& enabled) const
866 { 822 {
867 823 if (_inputMixerHandle == nullptr) {
868 if (_inputMixerHandle == NULL) 824 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
869 { 825 " no avaliable input mixer exists");
870 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 826 return -1;
871 " no avaliable input mixer exists");
872 return -1;
873 } 827 }
874 828
875 // Microphone boost cannot be enabled on this platform! 829 // Microphone boost cannot be enabled on this platform!
876 enabled = false; 830 enabled = false;
877 831
878 return 0; 832 return 0;
879 } 833 }
880 834
881 int32_t AudioMixerManagerLinuxALSA::MicrophoneVolumeIsAvailable( 835 int32_t AudioMixerManagerLinuxALSA::MicrophoneVolumeIsAvailable(
882 bool& available) 836 bool& available)
883 { 837 {
884 if (_inputMixerElement == NULL) 838 if (_inputMixerElement == nullptr) {
885 { 839 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
886 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 840 " no avaliable input mixer element exists");
887 " no avaliable input mixer element exists"); 841 return -1;
888 return -1;
889 } 842 }
890 843
891 available = LATE(snd_mixer_selem_has_capture_volume)(_inputMixerElement); 844 available = LATE(snd_mixer_selem_has_capture_volume)(_inputMixerElement);
892 845
893 return 0; 846 return 0;
894 } 847 }
895 848
896 int32_t AudioMixerManagerLinuxALSA::SetMicrophoneVolume( 849 int32_t AudioMixerManagerLinuxALSA::SetMicrophoneVolume(
897 uint32_t volume) 850 uint32_t volume)
898 { 851 {
899 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 852 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
900 "AudioMixerManagerLinuxALSA::SetMicrophoneVolume(volume=%u)", 853 "AudioMixerManagerLinuxALSA::SetMicrophoneVolume(volume=%u)",
901 volume); 854 volume);
902 855
903 CriticalSectionScoped lock(&_critSect); 856 CriticalSectionScoped lock(&_critSect);
904 857
905 if (_inputMixerElement == NULL) 858 if (_inputMixerElement == nullptr) {
906 { 859 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
907 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 860 " no avaliable input mixer element exists");
908 " no avaliable input mixer element exists"); 861 return -1;
909 return -1;
910 } 862 }
911 863
912 int 864 int
913 errVal = 865 errVal =
914 LATE(snd_mixer_selem_set_capture_volume_all)(_inputMixerElement, 866 LATE(snd_mixer_selem_set_capture_volume_all)(_inputMixerElement,
915 volume); 867 volume);
916 if (errVal < 0) 868 if (errVal < 0)
917 { 869 {
918 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 870 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
919 " Error changing microphone volume: %s", 871 " Error changing microphone volume: %s",
920 LATE(snd_strerror)(errVal)); 872 LATE(snd_strerror)(errVal));
921 return -1; 873 return -1;
922 } 874 }
923 875
924 return (0); 876 return (0);
925 } 877 }
926 878
927 // TL: Have done testnig with these but they don't seem reliable and 879 // TL: Have done testnig with these but they don't seem reliable and
928 // they were therefore not added 880 // they were therefore not added
929 /* 881 /*
930 // ---------------------------------------------------------------------------- 882 // ----------------------------------------------------------------------------
931 // SetMaxMicrophoneVolume 883 // SetMaxMicrophoneVolume
932 // ---------------------------------------------------------------------------- 884 // ----------------------------------------------------------------------------
933 885
934 int32_t AudioMixerManagerLinuxALSA::SetMaxMicrophoneVolume( 886 int32_t AudioMixerManagerLinuxALSA::SetMaxMicrophoneVolume(
935 uint32_t maxVolume) 887 uint32_t maxVolume)
936 { 888 {
937 889
938 if (_inputMixerElement == NULL) 890 if (_inputMixerElement == nullptr)
939 { 891 {
940 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 892 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
941 " no avaliable output mixer element exists"); 893 " no avaliable output mixer element exists");
942 return -1; 894 return -1;
943 } 895 }
944 896
945 long int minVol(0); 897 long int minVol(0);
946 long int maxVol(0); 898 long int maxVol(0);
947 899
948 int errVal = snd_mixer_selem_get_capture_volume_range(_inputMixerElement, 900 int errVal = snd_mixer_selem_get_capture_volume_range(_inputMixerElement,
949 &minVol, &maxVol); 901 &minVol, &maxVol);
950 if ((maxVol <= minVol) || (errVal != 0)) 902 if ((maxVol <= minVol) || (errVal != 0))
951 { 903 {
952 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 904 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
953 " Error getting capture volume range: %s", snd_strerror(errVal)); 905 " Error getting capture volume range: %s", snd_strerror(errVal));
954 } 906 }
955 907
956 maxVol = (long int)maxVolume; 908 maxVol = (long int)maxVolume;
957 printf("min %d max %d", minVol, maxVol); 909 printf("min %d max %d", minVol, maxVol);
958 errVal = snd_mixer_selem_set_capture_volume_range(_inputMixerElement, minVol, m axVol); 910 errVal = snd_mixer_selem_set_capture_volume_range(_inputMixerElement, minVol,
911 maxVol);
959 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 912 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
960 " Capture hardware volume range, min: %d, max: %d", minVol, maxVol); 913 " Capture hardware volume range, min: %d, max: %d", minVol, maxVol);
961 if (errVal != 0) 914 if (errVal != 0)
962 { 915 {
963 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 916 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
964 " Error setting capture volume range: %s", snd_strerror(errVal)); 917 " Error setting capture volume range: %s", snd_strerror(errVal));
965 return -1; 918 return -1;
966 } 919 }
967 920
968 return 0; 921 return 0;
969 } 922 }
970 923
971 // ---------------------------------------------------------------------------- 924 // ----------------------------------------------------------------------------
972 // SetMinMicrophoneVolume 925 // SetMinMicrophoneVolume
973 // ---------------------------------------------------------------------------- 926 // ----------------------------------------------------------------------------
974 927
975 int32_t AudioMixerManagerLinuxALSA::SetMinMicrophoneVolume( 928 int32_t AudioMixerManagerLinuxALSA::SetMinMicrophoneVolume(
976 uint32_t minVolume) 929 uint32_t minVolume)
977 { 930 {
978 931
979 if (_inputMixerElement == NULL) 932 if (_inputMixerElement == nullptr)
980 { 933 {
981 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 934 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
982 " no avaliable output mixer element exists"); 935 " no avaliable output mixer element exists");
983 return -1; 936 return -1;
984 } 937 }
985 938
986 long int minVol(0); 939 long int minVol(0);
987 long int maxVol(0); 940 long int maxVol(0);
988 941
989 int errVal = snd_mixer_selem_get_capture_volume_range( 942 int errVal = snd_mixer_selem_get_capture_volume_range(
(...skipping 18 matching lines...) Expand all
1008 return -1; 961 return -1;
1009 } 962 }
1010 963
1011 return 0; 964 return 0;
1012 } 965 }
1013 */ 966 */
1014 967
1015 int32_t AudioMixerManagerLinuxALSA::MicrophoneVolume( 968 int32_t AudioMixerManagerLinuxALSA::MicrophoneVolume(
1016 uint32_t& volume) const 969 uint32_t& volume) const
1017 { 970 {
1018 971 if (_inputMixerElement == nullptr) {
1019 if (_inputMixerElement == NULL) 972 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
1020 { 973 " no avaliable input mixer element exists");
1021 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 974 return -1;
1022 " no avaliable input mixer element exists");
1023 return -1;
1024 } 975 }
1025 976
1026 long int vol(0); 977 long int vol(0);
1027 978
1028 int 979 int
1029 errVal = 980 errVal =
1030 LATE(snd_mixer_selem_get_capture_volume)( 981 LATE(snd_mixer_selem_get_capture_volume)(
1031 _inputMixerElement, 982 _inputMixerElement,
1032 (snd_mixer_selem_channel_id_t) 0, 983 (snd_mixer_selem_channel_id_t) 0,
1033 &vol); 984 &vol);
1034 if (errVal < 0) 985 if (errVal < 0)
1035 { 986 {
1036 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 987 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1037 "Error getting inputvolume: %s", 988 "Error getting inputvolume: %s",
1038 LATE(snd_strerror)(errVal)); 989 LATE(snd_strerror)(errVal));
1039 return -1; 990 return -1;
1040 } 991 }
1041 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 992 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
1042 " AudioMixerManagerLinuxALSA::MicrophoneVolume() => vol=%i" , 993 " AudioMixerManagerLinuxALSA::MicrophoneVolume() => vol=%i" ,
1043 vol); 994 vol);
1044 995
1045 volume = static_cast<uint32_t> (vol); 996 volume = static_cast<uint32_t> (vol);
1046 997
1047 return 0; 998 return 0;
1048 } 999 }
1049 1000
1050 int32_t AudioMixerManagerLinuxALSA::MaxMicrophoneVolume( 1001 int32_t AudioMixerManagerLinuxALSA::MaxMicrophoneVolume(
1051 uint32_t& maxVolume) const 1002 uint32_t& maxVolume) const
1052 { 1003 {
1053 1004 if (_inputMixerElement == nullptr) {
1054 if (_inputMixerElement == NULL) 1005 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
1055 { 1006 " no avaliable input mixer element exists");
1056 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 1007 return -1;
1057 " no avaliable input mixer element exists");
1058 return -1;
1059 } 1008 }
1060 1009
1061 long int minVol(0); 1010 long int minVol(0);
1062 long int maxVol(0); 1011 long int maxVol(0);
1063 1012
1064 // check if we have mic volume at all 1013 // check if we have mic volume at all
1065 if (!LATE(snd_mixer_selem_has_capture_volume)(_inputMixerElement)) 1014 if (!LATE(snd_mixer_selem_has_capture_volume)(_inputMixerElement))
1066 { 1015 {
1067 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 1016 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1068 " No microphone volume available"); 1017 " No microphone volume available");
(...skipping 15 matching lines...) Expand all
1084 } 1033 }
1085 1034
1086 maxVolume = static_cast<uint32_t> (maxVol); 1035 maxVolume = static_cast<uint32_t> (maxVol);
1087 1036
1088 return 0; 1037 return 0;
1089 } 1038 }
1090 1039
1091 int32_t AudioMixerManagerLinuxALSA::MinMicrophoneVolume( 1040 int32_t AudioMixerManagerLinuxALSA::MinMicrophoneVolume(
1092 uint32_t& minVolume) const 1041 uint32_t& minVolume) const
1093 { 1042 {
1094 1043 if (_inputMixerElement == nullptr) {
1095 if (_inputMixerElement == NULL) 1044 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
1096 { 1045 " no avaliable input mixer element exists");
1097 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 1046 return -1;
1098 " no avaliable input mixer element exists");
1099 return -1;
1100 } 1047 }
1101 1048
1102 long int minVol(0); 1049 long int minVol(0);
1103 long int maxVol(0); 1050 long int maxVol(0);
1104 1051
1105 int errVal = 1052 int errVal =
1106 LATE(snd_mixer_selem_get_capture_volume_range)(_inputMixerElement, 1053 LATE(snd_mixer_selem_get_capture_volume_range)(_inputMixerElement,
1107 &minVol, &maxVol); 1054 &minVol, &maxVol);
1108 1055
1109 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 1056 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
1110 " Microphone hardware volume range, min: %d, max: %d", 1057 " Microphone hardware volume range, min: %d, max: %d",
1111 minVol, maxVol); 1058 minVol, maxVol);
1112 if (maxVol <= minVol) 1059 if (maxVol <= minVol)
1113 { 1060 {
1114 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 1061 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1115 " Error getting microphone volume range: %s", 1062 " Error getting microphone volume range: %s",
1116 LATE(snd_strerror)(errVal)); 1063 LATE(snd_strerror)(errVal));
1117 } 1064 }
1118 1065
1119 minVolume = static_cast<uint32_t> (minVol); 1066 minVolume = static_cast<uint32_t> (minVol);
1120 1067
1121 return 0; 1068 return 0;
1122 } 1069 }
1123 1070
1124 int32_t AudioMixerManagerLinuxALSA::MicrophoneVolumeStepSize( 1071 int32_t AudioMixerManagerLinuxALSA::MicrophoneVolumeStepSize(
1125 uint16_t& stepSize) const 1072 uint16_t& stepSize) const
1126 { 1073 {
1127 1074 if (_inputMixerHandle == nullptr) {
1128 if (_inputMixerHandle == NULL) 1075 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
1129 { 1076 " no avaliable input mixer exists");
1130 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 1077 return -1;
1131 " no avaliable input mixer exists");
1132 return -1;
1133 } 1078 }
1134 1079
1135 // The step size is always 1 for ALSA 1080 // The step size is always 1 for ALSA
1136 stepSize = 1; 1081 stepSize = 1;
1137 1082
1138 return 0; 1083 return 0;
1139 } 1084 }
1140 1085
1141 // ============================================================================ 1086 // ============================================================================
1142 // Private Methods 1087 // Private Methods
1143 // ============================================================================ 1088 // ============================================================================
1144 1089
1145 int32_t AudioMixerManagerLinuxALSA::LoadMicMixerElement() const 1090 int32_t AudioMixerManagerLinuxALSA::LoadMicMixerElement() const
1146 { 1091 {
1147 int errVal = LATE(snd_mixer_load)(_inputMixerHandle); 1092 int errVal = LATE(snd_mixer_load)(_inputMixerHandle);
1148 if (errVal < 0) 1093 if (errVal < 0)
1149 { 1094 {
1150 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 1095 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1151 "snd_mixer_load(_inputMixerHandle), error: %s", 1096 "snd_mixer_load(_inputMixerHandle), error: %s",
1152 LATE(snd_strerror)(errVal)); 1097 LATE(snd_strerror)(errVal));
1153 _inputMixerHandle = NULL; 1098 _inputMixerHandle = nullptr;
1154 return -1; 1099 return -1;
1155 } 1100 }
1156 1101
1157 snd_mixer_elem_t *elem = NULL; 1102 snd_mixer_elem_t* elem = nullptr;
1158 snd_mixer_elem_t *micElem = NULL; 1103 snd_mixer_elem_t* micElem = nullptr;
1159 unsigned mixerIdx = 0; 1104 unsigned mixerIdx = 0;
1160 const char *selemName = NULL; 1105 const char* selemName = nullptr;
1161 1106
1162 // Find and store handles to the right mixer elements 1107 // Find and store handles to the right mixer elements
1163 for (elem = LATE(snd_mixer_first_elem)(_inputMixerHandle); elem; elem 1108 for (elem = LATE(snd_mixer_first_elem)(_inputMixerHandle); elem; elem
1164 = LATE(snd_mixer_elem_next)(elem), mixerIdx++) 1109 = LATE(snd_mixer_elem_next)(elem), mixerIdx++)
1165 { 1110 {
1166 if (LATE(snd_mixer_selem_is_active)(elem)) 1111 if (LATE(snd_mixer_selem_is_active)(elem))
1167 { 1112 {
1168 selemName = LATE(snd_mixer_selem_get_name)(elem); 1113 selemName = LATE(snd_mixer_selem_get_name)(elem);
1169 if (strcmp(selemName, "Capture") == 0) // "Capture", "Mic" 1114 if (strcmp(selemName, "Capture") == 0) // "Capture", "Mic"
1170 { 1115 {
1171 _inputMixerElement = elem; 1116 _inputMixerElement = elem;
1172 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, 1117 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice,
1173 _id, " Capture element set"); 1118 _id, " Capture element set");
1174 } else if (strcmp(selemName, "Mic") == 0) 1119 } else if (strcmp(selemName, "Mic") == 0)
1175 { 1120 {
1176 micElem = elem; 1121 micElem = elem;
1177 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, 1122 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice,
1178 _id, " Mic element found"); 1123 _id, " Mic element found");
1179 } 1124 }
1180 } 1125 }
1181 1126
1182 if (_inputMixerElement) 1127 if (_inputMixerElement)
1183 { 1128 {
1184 // Use the first Capture element that is found 1129 // Use the first Capture element that is found
1185 // The second one may not work 1130 // The second one may not work
1186 break; 1131 break;
1187 } 1132 }
1188 } 1133 }
1189 1134
1190 if (_inputMixerElement == NULL) 1135 if (_inputMixerElement == nullptr) {
1191 { 1136 // We didn't find a Capture handle, use Mic.
1192 // We didn't find a Capture handle, use Mic. 1137 if (micElem != nullptr) {
1193 if (micElem != NULL) 1138 _inputMixerElement = micElem;
1194 { 1139 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
1195 _inputMixerElement = micElem; 1140 " Using Mic as capture volume.");
1196 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 1141 } else {
1197 " Using Mic as capture volume."); 1142 _inputMixerElement = nullptr;
1198 } else 1143 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1199 { 1144 "Could not find capture volume on the mixer.");
1200 _inputMixerElement = NULL;
1201 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1202 "Could not find capture volume on the mixer.");
1203 1145
1204 return -1; 1146 return -1;
1205 } 1147 }
1206 } 1148 }
1207 1149
1208 return 0; 1150 return 0;
1209 } 1151 }
1210 1152
1211 int32_t AudioMixerManagerLinuxALSA::LoadSpeakerMixerElement() const 1153 int32_t AudioMixerManagerLinuxALSA::LoadSpeakerMixerElement() const
1212 { 1154 {
1213 int errVal = LATE(snd_mixer_load)(_outputMixerHandle); 1155 int errVal = LATE(snd_mixer_load)(_outputMixerHandle);
1214 if (errVal < 0) 1156 if (errVal < 0)
1215 { 1157 {
1216 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, 1158 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1217 " snd_mixer_load(_outputMixerHandle), error: %s", 1159 " snd_mixer_load(_outputMixerHandle), error: %s",
1218 LATE(snd_strerror)(errVal)); 1160 LATE(snd_strerror)(errVal));
1219 _outputMixerHandle = NULL; 1161 _outputMixerHandle = nullptr;
1220 return -1; 1162 return -1;
1221 } 1163 }
1222 1164
1223 snd_mixer_elem_t *elem = NULL; 1165 snd_mixer_elem_t* elem = nullptr;
1224 snd_mixer_elem_t *masterElem = NULL; 1166 snd_mixer_elem_t* masterElem = nullptr;
1225 snd_mixer_elem_t *speakerElem = NULL; 1167 snd_mixer_elem_t* speakerElem = nullptr;
1226 unsigned mixerIdx = 0; 1168 unsigned mixerIdx = 0;
1227 const char *selemName = NULL; 1169 const char* selemName = nullptr;
1228 1170
1229 // Find and store handles to the right mixer elements 1171 // Find and store handles to the right mixer elements
1230 for (elem = LATE(snd_mixer_first_elem)(_outputMixerHandle); elem; elem 1172 for (elem = LATE(snd_mixer_first_elem)(_outputMixerHandle); elem; elem
1231 = LATE(snd_mixer_elem_next)(elem), mixerIdx++) 1173 = LATE(snd_mixer_elem_next)(elem), mixerIdx++)
1232 { 1174 {
1233 if (LATE(snd_mixer_selem_is_active)(elem)) 1175 if (LATE(snd_mixer_selem_is_active)(elem))
1234 { 1176 {
1235 selemName = LATE(snd_mixer_selem_get_name)(elem); 1177 selemName = LATE(snd_mixer_selem_get_name)(elem);
1236 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 1178 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
1237 "snd_mixer_selem_get_name %d: %s =%x", mixerIdx, 1179 "snd_mixer_selem_get_name %d: %s =%x", mixerIdx,
(...skipping 19 matching lines...) Expand all
1257 } 1199 }
1258 1200
1259 if (_outputMixerElement) 1201 if (_outputMixerElement)
1260 { 1202 {
1261 // We have found the element we want 1203 // We have found the element we want
1262 break; 1204 break;
1263 } 1205 }
1264 } 1206 }
1265 1207
1266 // If we didn't find a PCM Handle, use Master or Speaker 1208 // If we didn't find a PCM Handle, use Master or Speaker
1267 if (_outputMixerElement == NULL) 1209 if (_outputMixerElement == nullptr) {
1268 { 1210 if (masterElem != nullptr) {
1269 if (masterElem != NULL) 1211 _outputMixerElement = masterElem;
1270 { 1212 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
1271 _outputMixerElement = masterElem; 1213 " Using Master as output volume.");
1272 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 1214 } else if (speakerElem != nullptr) {
1273 " Using Master as output volume."); 1215 _outputMixerElement = speakerElem;
1274 } else if (speakerElem != NULL) 1216 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
1275 { 1217 " Using Speaker as output volume.");
1276 _outputMixerElement = speakerElem; 1218 } else {
1277 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 1219 _outputMixerElement = nullptr;
1278 " Using Speaker as output volume."); 1220 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1279 } else 1221 "Could not find output volume in the mixer.");
1280 { 1222 return -1;
1281 _outputMixerElement = NULL; 1223 }
1282 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
1283 "Could not find output volume in the mixer.");
1284 return -1;
1285 }
1286 } 1224 }
1287 1225
1288 return 0; 1226 return 0;
1289 } 1227 }
1290 1228
1291 void AudioMixerManagerLinuxALSA::GetControlName(char* controlName, 1229 void AudioMixerManagerLinuxALSA::GetControlName(char* controlName,
1292 char* deviceName) const 1230 char* deviceName) const
1293 { 1231 {
1294 // Example 1232 // Example
1295 // deviceName: "front:CARD=Intel,DEV=0" 1233 // deviceName: "front:CARD=Intel,DEV=0"
(...skipping 12 matching lines...) Expand all
1308 strncpy(&controlName[2], pos1, nChar); 1246 strncpy(&controlName[2], pos1, nChar);
1309 controlName[2 + nChar] = '\0'; 1247 controlName[2 + nChar] = '\0';
1310 } else 1248 } else
1311 { 1249 {
1312 strcpy(controlName, deviceName); 1250 strcpy(controlName, deviceName);
1313 } 1251 }
1314 1252
1315 } 1253 }
1316 1254
1317 } 1255 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698