2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
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.
15 #include "webrtc/modules/audio_device/test/audio_device_test_defines.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "webrtc/test/testsupport/fileutils.h"
20 #include "webrtc/modules/audio_device/audio_device_config.h"
21 #include "webrtc/modules/audio_device/audio_device_impl.h"
22 #include "webrtc/modules/audio_device/audio_device_utility.h"
23 #include "webrtc/system_wrappers/interface/sleep.h"
27 char filenameStr[2][256] =
30 }; // Allow two buffers for those API calls taking two filenames
33 const char* GetFilename(const char* filename)
35 currentStr = !currentStr;
36 sprintf(filenameStr[currentStr], "/sdcard/admtest/%s", filename);
37 return filenameStr[currentStr];
39 #elif !defined(WEBRTC_IOS)
40 const char* GetFilename(const char* filename) {
41 std::string full_path_filename = webrtc::test::OutputPath() + filename;
42 return full_path_filename.c_str();
46 using namespace webrtc;
48 class AudioEventObserverAPI: public AudioDeviceObserver {
50 AudioEventObserverAPI(AudioDeviceModule* audioDevice)
51 : error_(kRecordingError),
52 warning_(kRecordingWarning),
53 audio_device_(audioDevice) {
56 ~AudioEventObserverAPI() {}
58 virtual void OnErrorIsReported(const ErrorCode error) {
59 TEST_LOG("\n[*** ERROR ***] => OnErrorIsReported(%d)\n\n", error);
63 virtual void OnWarningIsReported(const WarningCode warning) {
64 TEST_LOG("\n[*** WARNING ***] => OnWarningIsReported(%d)\n\n", warning);
66 EXPECT_EQ(0, audio_device_->StopRecording());
67 EXPECT_EQ(0, audio_device_->StopPlayout());
74 AudioDeviceModule* audio_device_;
77 class AudioTransportAPI: public AudioTransport {
79 AudioTransportAPI(AudioDeviceModule* audioDevice)
84 ~AudioTransportAPI() {}
86 virtual int32_t RecordedDataIsAvailable(
87 const void* audioSamples,
88 const uint32_t nSamples,
89 const uint8_t nBytesPerSample,
90 const uint8_t nChannels,
91 const uint32_t sampleRate,
92 const uint32_t totalDelay,
93 const int32_t clockSkew,
94 const uint32_t currentMicLevel,
95 const bool keyPressed,
96 uint32_t& newMicLevel) {
98 if (rec_count_ % 100 == 0) {
102 } else if ((nChannels == 2) && (nBytesPerSample == 2)) {
103 // stereo but only using one channel
113 virtual int32_t NeedMorePlayData(
114 const uint32_t nSamples,
115 const uint8_t nBytesPerSample,
116 const uint8_t nChannels,
117 const uint32_t sampleRate,
119 uint32_t& nSamplesOut,
120 int64_t* elapsed_time_ms,
121 int64_t* ntp_time_ms) {
123 if (play_count_ % 100 == 0) {
124 if (nChannels == 1) {
134 virtual int OnDataAvailable(const int voe_channels[],
135 int number_of_voe_channels,
136 const int16_t* audio_data,
138 int number_of_channels,
139 int number_of_frames,
140 int audio_delay_milliseconds,
143 bool need_audio_processing) {
147 virtual void PushCaptureData(int voe_channel, const void* audio_data,
148 int bits_per_sample, int sample_rate,
149 int number_of_channels,
150 int number_of_frames) {}
152 virtual void PullRenderData(int bits_per_sample, int sample_rate,
153 int number_of_channels, int number_of_frames,
155 int64_t* elapsed_time_ms,
156 int64_t* ntp_time_ms) {}
159 uint32_t play_count_;
162 class AudioDeviceAPITest: public testing::Test {
164 AudioDeviceAPITest() {}
166 virtual ~AudioDeviceAPITest() {}
168 static void SetUpTestCase() {
169 process_thread_ = ProcessThread::CreateProcessThread();
170 process_thread_->Start();
173 // if (WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
174 // user can select between default (Core) or Wave
176 // user can select between default (Wave) or Wave
177 const int32_t kId = 444;
180 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
181 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL);
182 #if defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
183 TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is defined!\n\n");
184 // create default implementation (=Core Audio) instance
185 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
186 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
187 audio_device_->AddRef();
188 EXPECT_EQ(0, audio_device_->Release());
189 // create non-default (=Wave Audio) instance
190 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
191 kId, AudioDeviceModule::kWindowsWaveAudio)) != NULL);
192 audio_device_->AddRef();
193 EXPECT_EQ(0, audio_device_->Release());
194 // explicitly specify usage of Core Audio (same as default)
195 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
196 kId, AudioDeviceModule::kWindowsCoreAudio)) != NULL);
198 TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is *not* defined!\n");
199 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
200 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL);
201 // create default implementation (=Wave Audio) instance
202 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
203 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
204 audio_device_->AddRef();
205 EXPECT_EQ(0, audio_device_->Release());
206 // explicitly specify usage of Wave Audio (same as default)
207 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
208 kId, AudioDeviceModule::kWindowsWaveAudio)) != NULL);
214 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
215 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL);
216 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
217 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL);
218 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
219 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL);
220 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
221 kId, AudioDeviceModule::kLinuxPulseAudio)) == NULL);
222 // Create default implementation instance
223 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
224 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
225 #elif defined(WEBRTC_LINUX)
226 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
227 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL);
228 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
229 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL);
230 // create default implementation instance
231 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
232 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
233 audio_device_->AddRef();
234 EXPECT_EQ(0, audio_device_->Terminate());
235 EXPECT_EQ(0, audio_device_->Release());
236 // explicitly specify usage of Pulse Audio (same as default)
237 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
238 kId, AudioDeviceModule::kLinuxPulseAudio)) != NULL);
241 #if defined(WEBRTC_MAC)
243 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
244 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL);
245 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
246 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL);
247 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
248 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL);
249 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
250 kId, AudioDeviceModule::kLinuxPulseAudio)) == NULL);
251 // Create default implementation instance
252 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
253 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
256 if (audio_device_ == NULL) {
257 FAIL() << "Failed creating audio device object!";
260 // The ADM is reference counted.
261 audio_device_->AddRef();
263 process_thread_->RegisterModule(audio_device_);
265 AudioDeviceModule::AudioLayer audio_layer =
266 AudioDeviceModule::kPlatformDefaultAudio;
267 EXPECT_EQ(0, audio_device_->ActiveAudioLayer(&audio_layer));
268 if (audio_layer == AudioDeviceModule::kLinuxAlsaAudio) {
273 static void TearDownTestCase() {
274 if (process_thread_) {
275 process_thread_->DeRegisterModule(audio_device_);
276 process_thread_->Stop();
277 ProcessThread::DestroyProcessThread(process_thread_);
279 if (event_observer_) {
280 delete event_observer_;
281 event_observer_ = NULL;
283 if (audio_transport_) {
284 delete audio_transport_;
285 audio_transport_ = NULL;
288 EXPECT_EQ(0, audio_device_->Release());
295 FAIL() << "API Test is not available on ALSA on Linux!";
297 EXPECT_EQ(0, audio_device_->Init());
298 EXPECT_TRUE(audio_device_->Initialized());
302 EXPECT_EQ(0, audio_device_->Terminate());
305 void CheckVolume(uint32_t expected, uint32_t actual) {
306 // Mac and Windows have lower resolution on the volume settings.
307 #if defined(WEBRTC_MAC) || defined(_WIN32)
308 int diff = abs(static_cast<int>(expected - actual));
311 EXPECT_TRUE((actual == expected) || (actual == expected-1));
315 void CheckInitialPlayoutStates() {
316 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
317 EXPECT_FALSE(audio_device_->Playing());
318 EXPECT_FALSE(audio_device_->SpeakerIsInitialized());
321 void CheckInitialRecordingStates() {
322 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
323 EXPECT_FALSE(audio_device_->Recording());
324 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
327 static bool linux_alsa_;
328 static ProcessThread* process_thread_;
329 static AudioDeviceModule* audio_device_;
330 static AudioTransportAPI* audio_transport_;
331 static AudioEventObserverAPI* event_observer_;
334 // Must be initialized like this to handle static SetUpTestCase() above.
335 bool AudioDeviceAPITest::linux_alsa_ = false;
336 ProcessThread* AudioDeviceAPITest::process_thread_ = NULL;
337 AudioDeviceModule* AudioDeviceAPITest::audio_device_ = NULL;
338 AudioTransportAPI* AudioDeviceAPITest::audio_transport_ = NULL;
339 AudioEventObserverAPI* AudioDeviceAPITest::event_observer_ = NULL;
341 TEST_F(AudioDeviceAPITest, RegisterEventObserver) {
342 event_observer_ = new AudioEventObserverAPI(audio_device_);
343 EXPECT_EQ(0, audio_device_->RegisterEventObserver(NULL));
344 EXPECT_EQ(0, audio_device_->RegisterEventObserver(event_observer_));
345 EXPECT_EQ(0, audio_device_->RegisterEventObserver(NULL));
348 TEST_F(AudioDeviceAPITest, RegisterAudioCallback) {
349 audio_transport_ = new AudioTransportAPI(audio_device_);
350 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL));
351 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_));
352 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL));
355 TEST_F(AudioDeviceAPITest, Init) {
356 EXPECT_TRUE(audio_device_->Initialized());
357 EXPECT_EQ(0, audio_device_->Init());
358 EXPECT_TRUE(audio_device_->Initialized());
359 EXPECT_EQ(0, audio_device_->Terminate());
360 EXPECT_FALSE(audio_device_->Initialized());
361 EXPECT_EQ(0, audio_device_->Init());
362 EXPECT_TRUE(audio_device_->Initialized());
363 EXPECT_EQ(0, audio_device_->Terminate());
364 EXPECT_FALSE(audio_device_->Initialized());
367 TEST_F(AudioDeviceAPITest, Terminate) {
368 EXPECT_TRUE(audio_device_->Initialized());
369 EXPECT_EQ(0, audio_device_->Terminate());
370 EXPECT_FALSE(audio_device_->Initialized());
371 EXPECT_EQ(0, audio_device_->Terminate());
372 EXPECT_FALSE(audio_device_->Initialized());
373 EXPECT_EQ(0, audio_device_->Init());
374 EXPECT_TRUE(audio_device_->Initialized());
375 EXPECT_EQ(0, audio_device_->Terminate());
376 EXPECT_FALSE(audio_device_->Initialized());
379 TEST_F(AudioDeviceAPITest, PlayoutDevices) {
380 EXPECT_GT(audio_device_->PlayoutDevices(), 0);
381 EXPECT_GT(audio_device_->PlayoutDevices(), 0);
384 TEST_F(AudioDeviceAPITest, RecordingDevices) {
385 EXPECT_GT(audio_device_->RecordingDevices(), 0);
386 EXPECT_GT(audio_device_->RecordingDevices(), 0);
389 // TODO(henrika): uncomment when you have decided what to do with issue 3675.
391 TEST_F(AudioDeviceAPITest, PlayoutDeviceName) {
392 char name[kAdmMaxDeviceNameSize];
393 char guid[kAdmMaxGuidSize];
394 int16_t no_devices = audio_device_->PlayoutDevices();
397 EXPECT_EQ(-1, audio_device_->PlayoutDeviceName(-2, name, guid));
398 EXPECT_EQ(-1, audio_device_->PlayoutDeviceName(no_devices, name, guid));
399 EXPECT_EQ(-1, audio_device_->PlayoutDeviceName(0, NULL, guid));
402 EXPECT_EQ(0, audio_device_->PlayoutDeviceName(0, name, NULL));
404 // shall be mapped to 0.
405 EXPECT_EQ(0, audio_device_->PlayoutDeviceName(-1, name, NULL));
407 EXPECT_EQ(-1, audio_device_->PlayoutDeviceName(-1, name, NULL));
409 for (int i = 0; i < no_devices; i++) {
410 EXPECT_EQ(0, audio_device_->PlayoutDeviceName(i, name, guid));
411 EXPECT_EQ(0, audio_device_->PlayoutDeviceName(i, name, NULL));
415 TEST_F(AudioDeviceAPITest, RecordingDeviceName) {
416 char name[kAdmMaxDeviceNameSize];
417 char guid[kAdmMaxGuidSize];
418 int16_t no_devices = audio_device_->RecordingDevices();
421 EXPECT_EQ(-1, audio_device_->RecordingDeviceName(-2, name, guid));
422 EXPECT_EQ(-1, audio_device_->RecordingDeviceName(no_devices, name, guid));
423 EXPECT_EQ(-1, audio_device_->RecordingDeviceName(0, NULL, guid));
426 EXPECT_EQ(0, audio_device_->RecordingDeviceName(0, name, NULL));
428 // shall me mapped to 0
429 EXPECT_EQ(0, audio_device_->RecordingDeviceName(-1, name, NULL));
431 EXPECT_EQ(-1, audio_device_->RecordingDeviceName(-1, name, NULL));
433 for (int i = 0; i < no_devices; i++) {
434 EXPECT_EQ(0, audio_device_->RecordingDeviceName(i, name, guid));
435 EXPECT_EQ(0, audio_device_->RecordingDeviceName(i, name, NULL));
439 TEST_F(AudioDeviceAPITest, SetPlayoutDevice) {
440 int16_t no_devices = audio_device_->PlayoutDevices();
443 EXPECT_EQ(-1, audio_device_->SetPlayoutDevice(-1));
444 EXPECT_EQ(-1, audio_device_->SetPlayoutDevice(no_devices));
448 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
449 AudioDeviceModule::kDefaultCommunicationDevice));
450 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
451 AudioDeviceModule::kDefaultDevice));
453 EXPECT_EQ(-1, audio_device_->SetPlayoutDevice(
454 AudioDeviceModule::kDefaultCommunicationDevice));
455 EXPECT_EQ(-1, audio_device_->SetPlayoutDevice(
456 AudioDeviceModule::kDefaultDevice));
458 for (int i = 0; i < no_devices; i++) {
459 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i));
463 TEST_F(AudioDeviceAPITest, SetRecordingDevice) {
464 EXPECT_EQ(0, audio_device_->Init());
465 int16_t no_devices = audio_device_->RecordingDevices();
468 EXPECT_EQ(-1, audio_device_->SetRecordingDevice(-1));
469 EXPECT_EQ(-1, audio_device_->SetRecordingDevice(no_devices));
473 EXPECT_TRUE(audio_device_->SetRecordingDevice(
474 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
475 EXPECT_EQ(0, audio_device_->SetRecordingDevice(
476 AudioDeviceModule::kDefaultDevice));
478 EXPECT_TRUE(audio_device_->SetRecordingDevice(
479 AudioDeviceModule::kDefaultCommunicationDevice) == -1);
480 EXPECT_TRUE(audio_device_->SetRecordingDevice(
481 AudioDeviceModule::kDefaultDevice) == -1);
483 for (int i = 0; i < no_devices; i++) {
484 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
489 TEST_F(AudioDeviceAPITest, PlayoutIsAvailable) {
492 EXPECT_TRUE(audio_device_->SetPlayoutDevice(
493 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
494 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
495 // Availability check should not initialize.
496 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
499 audio_device_->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice));
500 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
501 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
504 int16_t no_devices = audio_device_->PlayoutDevices();
505 for (int i = 0; i < no_devices; i++) {
506 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i));
507 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
508 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
512 TEST_F(AudioDeviceAPITest, RecordingIsAvailable) {
515 EXPECT_EQ(0, audio_device_->SetRecordingDevice(
516 AudioDeviceModule::kDefaultCommunicationDevice));
517 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
518 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
520 EXPECT_EQ(0, audio_device_->SetRecordingDevice(
521 AudioDeviceModule::kDefaultDevice));
522 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
523 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
526 int16_t no_devices = audio_device_->RecordingDevices();
527 for (int i = 0; i < no_devices; i++) {
528 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
529 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
530 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
534 TEST_F(AudioDeviceAPITest, InitPlayout) {
535 // check initial state
536 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
538 // ensure that device must be set before we can initialize
539 EXPECT_EQ(-1, audio_device_->InitPlayout());
540 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
541 EXPECT_EQ(0, audio_device_->InitPlayout());
542 EXPECT_TRUE(audio_device_->PlayoutIsInitialized());
546 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
548 EXPECT_EQ(0, audio_device_->InitPlayout());
549 EXPECT_TRUE(audio_device_->PlayoutIsInitialized());
550 EXPECT_EQ(0, audio_device_->InitPlayout());
551 EXPECT_EQ(-1, audio_device_->SetPlayoutDevice(
552 MACRO_DEFAULT_COMMUNICATION_DEVICE));
553 EXPECT_EQ(0, audio_device_->StopPlayout());
554 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
557 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
558 MACRO_DEFAULT_COMMUNICATION_DEVICE));
559 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
561 EXPECT_EQ(0, audio_device_->InitPlayout());
562 // Sleep is needed for e.g. iPhone since we after stopping then starting may
563 // have a hangover time of a couple of ms before initialized.
565 EXPECT_TRUE(audio_device_->PlayoutIsInitialized());
568 int16_t no_devices = audio_device_->PlayoutDevices();
569 for (int i = 0; i < no_devices; i++) {
570 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
572 EXPECT_EQ(0, audio_device_->StopPlayout());
573 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
574 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i));
575 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
577 EXPECT_EQ(0, audio_device_->InitPlayout());
578 EXPECT_TRUE(audio_device_->PlayoutIsInitialized());
582 EXPECT_EQ(0, audio_device_->StopPlayout());
585 TEST_F(AudioDeviceAPITest, InitRecording) {
586 // check initial state
587 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
589 // ensure that device must be set before we can initialize
590 EXPECT_EQ(-1, audio_device_->InitRecording());
591 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
592 EXPECT_EQ(0, audio_device_->InitRecording());
593 EXPECT_TRUE(audio_device_->RecordingIsInitialized());
597 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
599 EXPECT_EQ(0, audio_device_->InitRecording());
600 EXPECT_TRUE(audio_device_->RecordingIsInitialized());
601 EXPECT_EQ(0, audio_device_->InitRecording());
603 audio_device_->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE));
604 EXPECT_EQ(0, audio_device_->StopRecording());
605 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
609 audio_device_->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE));
610 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
612 EXPECT_EQ(0, audio_device_->InitRecording());
614 EXPECT_TRUE(audio_device_->RecordingIsInitialized());
617 int16_t no_devices = audio_device_->RecordingDevices();
618 for (int i = 0; i < no_devices; i++) {
619 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
621 EXPECT_EQ(0, audio_device_->StopRecording());
622 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
623 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
624 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
626 EXPECT_EQ(0, audio_device_->InitRecording());
627 EXPECT_TRUE(audio_device_->RecordingIsInitialized());
631 EXPECT_EQ(0, audio_device_->StopRecording());
634 TEST_F(AudioDeviceAPITest, StartAndStopPlayout) {
636 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL));
638 CheckInitialPlayoutStates();
640 EXPECT_EQ(-1, audio_device_->StartPlayout());
641 EXPECT_EQ(0, audio_device_->StopPlayout());
644 // kDefaultCommunicationDevice
645 EXPECT_TRUE(audio_device_->SetPlayoutDevice(
646 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
647 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
650 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
651 EXPECT_EQ(0, audio_device_->InitPlayout());
652 EXPECT_EQ(0, audio_device_->StartPlayout());
653 EXPECT_TRUE(audio_device_->Playing());
654 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_));
655 EXPECT_EQ(0, audio_device_->StopPlayout());
656 EXPECT_FALSE(audio_device_->Playing());
657 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL));
661 // repeat test but for kDefaultDevice
662 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
663 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
665 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
666 EXPECT_EQ(0, audio_device_->InitPlayout());
667 EXPECT_EQ(0, audio_device_->StartPlayout());
668 EXPECT_TRUE(audio_device_->Playing());
669 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_));
670 EXPECT_EQ(0, audio_device_->StopPlayout());
671 EXPECT_FALSE(audio_device_->Playing());
674 // repeat test for all devices
675 int16_t no_devices = audio_device_->PlayoutDevices();
676 for (int i = 0; i < no_devices; i++) {
677 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i));
678 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
680 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
681 EXPECT_EQ(0, audio_device_->InitPlayout());
682 EXPECT_EQ(0, audio_device_->StartPlayout());
683 EXPECT_TRUE(audio_device_->Playing());
684 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_));
685 EXPECT_EQ(0, audio_device_->StopPlayout());
686 EXPECT_FALSE(audio_device_->Playing());
691 TEST_F(AudioDeviceAPITest, StartAndStopRecording) {
693 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL));
695 CheckInitialRecordingStates();
697 EXPECT_EQ(-1, audio_device_->StartRecording());
698 EXPECT_EQ(0, audio_device_->StopRecording());
701 // kDefaultCommunicationDevice
702 EXPECT_TRUE(audio_device_->SetRecordingDevice(
703 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
704 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
707 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
708 EXPECT_EQ(0, audio_device_->InitRecording());
709 EXPECT_EQ(0, audio_device_->StartRecording());
710 EXPECT_TRUE(audio_device_->Recording());
711 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_));
712 EXPECT_EQ(0, audio_device_->StopRecording());
713 EXPECT_FALSE(audio_device_->Recording());
714 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL));
718 // repeat test but for kDefaultDevice
719 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
720 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
722 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
723 EXPECT_EQ(0, audio_device_->InitRecording());
724 EXPECT_EQ(0, audio_device_->StartRecording());
725 EXPECT_TRUE(audio_device_->Recording());
726 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_));
727 EXPECT_EQ(0, audio_device_->StopRecording());
728 EXPECT_FALSE(audio_device_->Recording());
731 // repeat test for all devices
732 int16_t no_devices = audio_device_->RecordingDevices();
733 for (int i = 0; i < no_devices; i++) {
734 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
735 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
737 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
738 EXPECT_EQ(0, audio_device_->InitRecording());
739 EXPECT_EQ(0, audio_device_->StartRecording());
740 EXPECT_TRUE(audio_device_->Recording());
741 EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_));
742 EXPECT_EQ(0, audio_device_->StopRecording());
743 EXPECT_FALSE(audio_device_->Recording());
748 #if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
749 TEST_F(AudioDeviceAPITest, SetAndGetWaveOutVolume) {
751 // NOTE 1: Windows Wave only!
752 // NOTE 2: It seems like the waveOutSetVolume API returns
753 // MMSYSERR_NOTSUPPORTED on some Vista machines!
754 const uint16_t maxVol(0xFFFF);
757 CheckInitialPlayoutStates();
759 // make dummy test to see if this API is supported
760 int32_t works = audio_device_->SetWaveOutVolume(vol, vol);
765 // set volume without open playout device
766 for (vol = 0; vol <= maxVol; vol += (maxVol/5))
768 EXPECT_EQ(0, audio_device_->SetWaveOutVolume(vol, vol));
769 EXPECT_EQ(0, audio_device_->WaveOutVolume(volL, volR));
770 EXPECT_TRUE((volL == vol) && (volR == vol));
773 // repeat test but this time with an open (default) output device
774 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
775 AudioDeviceModule::kDefaultDevice));
776 EXPECT_EQ(0, audio_device_->InitPlayout());
777 EXPECT_TRUE(audio_device_->PlayoutIsInitialized());
778 for (vol = 0; vol <= maxVol; vol += (maxVol/5))
780 EXPECT_EQ(0, audio_device_->SetWaveOutVolume(vol, vol));
781 EXPECT_EQ(0, audio_device_->WaveOutVolume(volL, volR));
782 EXPECT_TRUE((volL == vol) && (volR == vol));
785 // as above but while playout is active
786 EXPECT_EQ(0, audio_device_->StartPlayout());
787 EXPECT_TRUE(audio_device_->Playing());
788 for (vol = 0; vol <= maxVol; vol += (maxVol/5))
790 EXPECT_EQ(0, audio_device_->SetWaveOutVolume(vol, vol));
791 EXPECT_EQ(0, audio_device_->WaveOutVolume(volL, volR));
792 EXPECT_TRUE((volL == vol) && (volR == vol));
796 EXPECT_EQ(0, audio_device_->StopPlayout());
797 EXPECT_FALSE(audio_device_->Playing());
799 #endif // defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
801 TEST_F(AudioDeviceAPITest, InitSpeaker) {
802 // NOTE: By calling Terminate (in TearDown) followed by Init (in SetUp) we
803 // ensure that any existing output mixer handle is set to NULL.
804 // The mixer handle is closed and reopened again for each call to
806 CheckInitialPlayoutStates();
808 // kDefaultCommunicationDevice
809 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
810 MACRO_DEFAULT_COMMUNICATION_DEVICE));
811 EXPECT_EQ(0, audio_device_->InitSpeaker());
815 EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available));
817 EXPECT_EQ(0, audio_device_->InitPlayout());
818 EXPECT_EQ(0, audio_device_->StartPlayout());
819 EXPECT_EQ(-1, audio_device_->InitSpeaker());
820 EXPECT_EQ(0, audio_device_->StopPlayout());
824 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
825 EXPECT_EQ(0, audio_device_->InitSpeaker());
827 // repeat test for all devices
828 int16_t no_devices = audio_device_->PlayoutDevices();
829 for (int i = 0; i < no_devices; i++) {
830 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i));
831 EXPECT_EQ(0, audio_device_->InitSpeaker());
835 TEST_F(AudioDeviceAPITest, InitMicrophone) {
836 // NOTE: By calling Terminate (in TearDown) followed by Init (in SetUp) we
837 // ensure that any existing output mixer handle is set to NULL.
838 // The mixer handle is closed and reopened again for each call to
839 // SetRecordingDevice.
840 CheckInitialRecordingStates();
842 // kDefaultCommunicationDevice
844 audio_device_->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE));
845 EXPECT_EQ(0, audio_device_->InitMicrophone());
849 EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available));
851 EXPECT_EQ(0, audio_device_->InitRecording());
852 EXPECT_EQ(0, audio_device_->StartRecording());
853 EXPECT_EQ(-1, audio_device_->InitMicrophone());
854 EXPECT_EQ(0, audio_device_->StopRecording());
858 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
859 EXPECT_EQ(0, audio_device_->InitMicrophone());
861 // repeat test for all devices
862 int16_t no_devices = audio_device_->RecordingDevices();
863 for (int i = 0; i < no_devices; i++) {
864 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
865 EXPECT_EQ(0, audio_device_->InitMicrophone());
869 TEST_F(AudioDeviceAPITest, SpeakerVolumeIsAvailable) {
870 CheckInitialPlayoutStates();
874 // check the kDefaultCommunicationDevice
875 EXPECT_TRUE(audio_device_->SetPlayoutDevice(
876 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
877 EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available));
878 // check for availability should not lead to initialization
879 EXPECT_FALSE(audio_device_->SpeakerIsInitialized());
882 // check the kDefaultDevice
883 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
884 EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available));
885 EXPECT_FALSE(audio_device_->SpeakerIsInitialized());
887 // check all availiable devices
888 int16_t no_devices = audio_device_->PlayoutDevices();
889 for (int i = 0; i < no_devices; i++) {
890 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i));
891 EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available));
892 EXPECT_FALSE(audio_device_->SpeakerIsInitialized());
896 // Tests the following methods:
901 // NOTE: Disabled on mac due to issue 257.
903 TEST_F(AudioDeviceAPITest, SpeakerVolumeTests) {
906 uint32_t maxVolume(0);
907 uint32_t minVolume(0);
908 uint16_t stepSize(0);
910 CheckInitialPlayoutStates();
913 EXPECT_EQ(-1, audio_device_->SetSpeakerVolume(0));
914 // speaker must be initialized first
915 EXPECT_EQ(-1, audio_device_->SpeakerVolume(&volume));
916 EXPECT_EQ(-1, audio_device_->MaxSpeakerVolume(&maxVolume));
917 EXPECT_EQ(-1, audio_device_->MinSpeakerVolume(&minVolume));
918 EXPECT_EQ(-1, audio_device_->SpeakerVolumeStepSize(&stepSize));
920 #if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
921 // test for warning (can e.g. happen on Vista with Wave API)
923 audio_device_->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice));
924 EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available));
926 EXPECT_EQ(0, audio_device_->InitSpeaker());
927 EXPECT_EQ(0, audio_device_->SetSpeakerVolume(19001));
928 EXPECT_EQ(0, audio_device_->SpeakerVolume(&volume));
929 WARNING(volume == 19001);
934 // use kDefaultCommunicationDevice and modify/retrieve the volume
935 EXPECT_TRUE(audio_device_->SetPlayoutDevice(
936 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
937 EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available));
939 EXPECT_EQ(0, audio_device_->InitSpeaker());
940 EXPECT_EQ(0, audio_device_->MaxSpeakerVolume(&maxVolume));
941 EXPECT_EQ(0, audio_device_->MinSpeakerVolume(&minVolume));
942 EXPECT_EQ(0, audio_device_->SpeakerVolumeStepSize(&stepSize));
943 for (vol = minVolume; vol < (int)maxVolume; vol += 20*stepSize) {
944 EXPECT_EQ(0, audio_device_->SetSpeakerVolume(vol));
945 EXPECT_EQ(0, audio_device_->SpeakerVolume(&volume));
946 CheckVolume(volume, vol);
951 // use kDefaultDevice and modify/retrieve the volume
952 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
953 EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available));
955 EXPECT_EQ(0, audio_device_->InitSpeaker());
956 EXPECT_EQ(0, audio_device_->MaxSpeakerVolume(&maxVolume));
957 EXPECT_EQ(0, audio_device_->MinSpeakerVolume(&minVolume));
958 EXPECT_EQ(0, audio_device_->SpeakerVolumeStepSize(&stepSize));
959 uint32_t step = (maxVolume - minVolume) / 10;
960 step = (step < stepSize ? stepSize : step);
961 for (vol = minVolume; vol <= maxVolume; vol += step) {
962 EXPECT_EQ(0, audio_device_->SetSpeakerVolume(vol));
963 EXPECT_EQ(0, audio_device_->SpeakerVolume(&volume));
964 CheckVolume(volume, vol);
968 // use all (indexed) devices and modify/retrieve the volume
969 int16_t no_devices = audio_device_->PlayoutDevices();
970 for (int i = 0; i < no_devices; i++) {
971 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i));
972 EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available));
974 EXPECT_EQ(0, audio_device_->InitSpeaker());
975 EXPECT_EQ(0, audio_device_->MaxSpeakerVolume(&maxVolume));
976 EXPECT_EQ(0, audio_device_->MinSpeakerVolume(&minVolume));
977 EXPECT_EQ(0, audio_device_->SpeakerVolumeStepSize(&stepSize));
978 uint32_t step = (maxVolume - minVolume) / 10;
979 step = (step < stepSize ? stepSize : step);
980 for (vol = minVolume; vol <= maxVolume; vol += step) {
981 EXPECT_EQ(0, audio_device_->SetSpeakerVolume(vol));
982 EXPECT_EQ(0, audio_device_->SpeakerVolume(&volume));
983 CheckVolume(volume, vol);
988 // restore reasonable level
989 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
990 EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available));
992 EXPECT_EQ(0, audio_device_->InitSpeaker());
993 EXPECT_EQ(0, audio_device_->MaxSpeakerVolume(&maxVolume));
994 EXPECT_TRUE(audio_device_->SetSpeakerVolume(maxVolume < 10 ?
995 maxVolume/3 : maxVolume/10) == 0);
998 #endif // !WEBRTC_MAC
1000 TEST_F(AudioDeviceAPITest, AGC) {
1001 // NOTE: The AGC API only enables/disables the AGC. To ensure that it will
1002 // have an effect, use it in combination with MicrophoneVolumeIsAvailable.
1003 CheckInitialRecordingStates();
1004 EXPECT_FALSE(audio_device_->AGC());
1007 EXPECT_EQ(0, audio_device_->SetAGC(true));
1008 EXPECT_TRUE(audio_device_->AGC());
1009 EXPECT_EQ(0, audio_device_->SetAGC(false));
1010 EXPECT_FALSE(audio_device_->AGC());
1013 TEST_F(AudioDeviceAPITest, MicrophoneVolumeIsAvailable) {
1014 CheckInitialRecordingStates();
1018 // check the kDefaultCommunicationDevice
1019 EXPECT_TRUE(audio_device_->SetRecordingDevice(
1020 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
1021 EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available));
1022 // check for availability should not lead to initialization
1023 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1026 // check the kDefaultDevice
1027 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1028 EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available));
1029 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1031 // check all availiable devices
1032 int16_t no_devices = audio_device_->RecordingDevices();
1033 for (int i = 0; i < no_devices; i++) {
1034 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
1035 EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available));
1036 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1040 // Tests the methods:
1041 // SetMicrophoneVolume
1043 // MaxMicrophoneVolume
1044 // MinMicrophoneVolume
1045 // NOTE: Disabled on mac due to issue 257.
1047 TEST_F(AudioDeviceAPITest, MicrophoneVolumeTests) {
1050 uint32_t maxVolume(0);
1051 uint32_t minVolume(0);
1052 uint16_t stepSize(0);
1054 CheckInitialRecordingStates();
1057 EXPECT_EQ(-1, audio_device_->SetMicrophoneVolume(0));
1058 // must be initialized first
1059 EXPECT_EQ(-1, audio_device_->MicrophoneVolume(&volume));
1060 EXPECT_EQ(-1, audio_device_->MaxMicrophoneVolume(&maxVolume));
1061 EXPECT_EQ(-1, audio_device_->MinMicrophoneVolume(&minVolume));
1062 EXPECT_EQ(-1, audio_device_->MicrophoneVolumeStepSize(&stepSize));
1064 #if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
1065 // test for warning (can e.g. happen on Vista with Wave API)
1066 EXPECT_EQ(0, audio_device_->SetRecordingDevice(
1067 AudioDeviceModule::kDefaultDevice));
1068 EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available));
1071 EXPECT_EQ(0, audio_device_->InitMicrophone());
1072 EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(19001));
1073 EXPECT_EQ(0, audio_device_->MicrophoneVolume(&volume));
1074 WARNING(volume == 19001);
1079 // initialize kDefaultCommunicationDevice and modify/retrieve the volume
1080 EXPECT_TRUE(audio_device_->SetRecordingDevice(
1081 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
1082 EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available));
1085 EXPECT_EQ(0, audio_device_->InitMicrophone());
1086 EXPECT_EQ(0, audio_device_->MaxMicrophoneVolume(&maxVolume));
1087 EXPECT_EQ(0, audio_device_->MinMicrophoneVolume(&minVolume));
1088 EXPECT_EQ(0, audio_device_->MicrophoneVolumeStepSize(&stepSize));
1089 for (vol = minVolume; vol < (int)maxVolume; vol += 10*stepSize)
1091 EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(vol));
1092 EXPECT_EQ(0, audio_device_->MicrophoneVolume(&volume));
1093 CheckVolume(volume, vol);
1098 // reinitialize kDefaultDevice and modify/retrieve the volume
1099 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1100 EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available));
1102 EXPECT_EQ(0, audio_device_->InitMicrophone());
1103 EXPECT_EQ(0, audio_device_->MaxMicrophoneVolume(&maxVolume));
1104 EXPECT_EQ(0, audio_device_->MinMicrophoneVolume(&minVolume));
1105 EXPECT_EQ(0, audio_device_->MicrophoneVolumeStepSize(&stepSize));
1106 for (vol = minVolume; vol < maxVolume; vol += 10 * stepSize) {
1107 EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(vol));
1108 EXPECT_EQ(0, audio_device_->MicrophoneVolume(&volume));
1109 CheckVolume(volume, vol);
1113 // use all (indexed) devices and modify/retrieve the volume
1114 int16_t no_devices = audio_device_->RecordingDevices();
1115 for (int i = 0; i < no_devices; i++) {
1116 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
1117 EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available));
1119 EXPECT_EQ(0, audio_device_->InitMicrophone());
1120 EXPECT_EQ(0, audio_device_->MaxMicrophoneVolume(&maxVolume));
1121 EXPECT_EQ(0, audio_device_->MinMicrophoneVolume(&minVolume));
1122 EXPECT_EQ(0, audio_device_->MicrophoneVolumeStepSize(&stepSize));
1123 for (vol = minVolume; vol < maxVolume; vol += 20 * stepSize) {
1124 EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(vol));
1125 EXPECT_EQ(0, audio_device_->MicrophoneVolume(&volume));
1126 CheckVolume(volume, vol);
1131 // restore reasonable level
1132 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1133 EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available));
1135 EXPECT_EQ(0, audio_device_->InitMicrophone());
1136 EXPECT_EQ(0, audio_device_->MaxMicrophoneVolume(&maxVolume));
1137 EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(maxVolume/10));
1140 #endif // !WEBRTC_MAC
1142 TEST_F(AudioDeviceAPITest, SpeakerMuteIsAvailable) {
1144 CheckInitialPlayoutStates();
1146 // check the kDefaultCommunicationDevice
1147 EXPECT_TRUE(audio_device_->SetPlayoutDevice(
1148 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
1149 EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available));
1150 // check for availability should not lead to initialization
1151 EXPECT_FALSE(audio_device_->SpeakerIsInitialized());
1154 // check the kDefaultDevice
1155 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
1156 EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available));
1157 EXPECT_FALSE(audio_device_->SpeakerIsInitialized());
1159 // check all availiable devices
1160 int16_t no_devices = audio_device_->PlayoutDevices();
1161 for (int i = 0; i < no_devices; i++) {
1162 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i));
1163 EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available));
1164 EXPECT_FALSE(audio_device_->SpeakerIsInitialized());
1168 TEST_F(AudioDeviceAPITest, MicrophoneMuteIsAvailable) {
1170 CheckInitialRecordingStates();
1172 // check the kDefaultCommunicationDevice
1173 EXPECT_TRUE(audio_device_->SetRecordingDevice(
1174 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
1175 EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available));
1176 // check for availability should not lead to initialization
1178 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1180 // check the kDefaultDevice
1181 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1182 EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available));
1183 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1185 // check all availiable devices
1186 int16_t no_devices = audio_device_->RecordingDevices();
1187 for (int i = 0; i < no_devices; i++) {
1188 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
1189 EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available));
1190 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1194 TEST_F(AudioDeviceAPITest, MicrophoneBoostIsAvailable) {
1196 CheckInitialRecordingStates();
1198 // check the kDefaultCommunicationDevice
1199 EXPECT_TRUE(audio_device_->SetRecordingDevice(
1200 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
1201 EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available));
1202 // check for availability should not lead to initialization
1203 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1206 // check the kDefaultDevice
1207 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1208 EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available));
1209 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1211 // check all availiable devices
1212 int16_t no_devices = audio_device_->RecordingDevices();
1213 for (int i = 0; i < no_devices; i++) {
1214 EXPECT_EQ(0, audio_device_->SetRecordingDevice(i));
1215 EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available));
1216 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized());
1220 TEST_F(AudioDeviceAPITest, SpeakerMuteTests) {
1223 CheckInitialPlayoutStates();
1225 EXPECT_EQ(-1, audio_device_->SetSpeakerMute(true));
1226 // requires initialization
1227 EXPECT_EQ(-1, audio_device_->SpeakerMute(&enabled));
1230 // initialize kDefaultCommunicationDevice and modify/retrieve the mute state
1231 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
1232 AudioDeviceModule::kDefaultCommunicationDevice));
1233 EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available));
1236 EXPECT_EQ(0, audio_device_->InitSpeaker());
1237 EXPECT_EQ(0, audio_device_->SetSpeakerMute(true));
1238 EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled));
1239 EXPECT_TRUE(enabled);
1240 EXPECT_EQ(0, audio_device_->SetSpeakerMute(false));
1241 EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled));
1242 EXPECT_FALSE(enabled);
1246 // reinitialize kDefaultDevice and modify/retrieve the mute state
1247 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
1248 EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available));
1250 EXPECT_EQ(0, audio_device_->InitSpeaker());
1251 EXPECT_EQ(0, audio_device_->SetSpeakerMute(true));
1252 EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled));
1253 EXPECT_TRUE(enabled);
1254 EXPECT_EQ(0, audio_device_->SetSpeakerMute(false));
1255 EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled));
1256 EXPECT_FALSE(enabled);
1259 // reinitialize the default device (0) and modify/retrieve the mute state
1260 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(0));
1261 EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available));
1263 EXPECT_EQ(0, audio_device_->InitSpeaker());
1264 EXPECT_EQ(0, audio_device_->SetSpeakerMute(true));
1265 EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled));
1266 EXPECT_TRUE(enabled);
1267 EXPECT_EQ(0, audio_device_->SetSpeakerMute(false));
1268 EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled));
1269 EXPECT_FALSE(enabled);
1273 TEST_F(AudioDeviceAPITest, MicrophoneMuteTests) {
1274 CheckInitialRecordingStates();
1277 EXPECT_EQ(-1, audio_device_->SetMicrophoneMute(true));
1278 // requires initialization
1281 EXPECT_EQ(-1, audio_device_->MicrophoneMute(&enabled));
1284 // initialize kDefaultCommunicationDevice and modify/retrieve the mute
1285 EXPECT_TRUE(audio_device_->SetRecordingDevice(
1286 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
1287 EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available));
1290 EXPECT_EQ(0, audio_device_->InitMicrophone());
1291 EXPECT_EQ(0, audio_device_->SetMicrophoneMute(true));
1292 EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled));
1293 EXPECT_TRUE(enabled);
1294 EXPECT_EQ(0, audio_device_->SetMicrophoneMute(false));
1295 EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled));
1296 EXPECT_FALSE(enabled);
1300 // reinitialize kDefaultDevice and modify/retrieve the mute
1301 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1302 EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available));
1304 EXPECT_EQ(0, audio_device_->InitMicrophone());
1305 EXPECT_EQ(0, audio_device_->SetMicrophoneMute(true));
1306 EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled));
1307 EXPECT_TRUE(enabled);
1308 EXPECT_EQ(0, audio_device_->SetMicrophoneMute(false));
1309 EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled));
1310 EXPECT_FALSE(enabled);
1313 // reinitialize the default device (0) and modify/retrieve the Mute
1314 EXPECT_EQ(0, audio_device_->SetRecordingDevice(0));
1315 EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available));
1317 EXPECT_EQ(0, audio_device_->InitMicrophone());
1318 EXPECT_EQ(0, audio_device_->SetMicrophoneMute(true));
1319 EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled));
1320 EXPECT_TRUE(enabled);
1321 EXPECT_EQ(0, audio_device_->SetMicrophoneMute(false));
1322 EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled));
1323 EXPECT_FALSE(enabled);
1327 TEST_F(AudioDeviceAPITest, MicrophoneBoostTests) {
1330 CheckInitialRecordingStates();
1333 EXPECT_EQ(-1, audio_device_->SetMicrophoneBoost(true));
1334 // requires initialization
1335 EXPECT_EQ(-1, audio_device_->MicrophoneBoost(&enabled));
1338 // initialize kDefaultCommunicationDevice and modify/retrieve the boost
1339 EXPECT_TRUE(audio_device_->SetRecordingDevice(
1340 AudioDeviceModule::kDefaultCommunicationDevice) == 0);
1341 EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available));
1344 EXPECT_EQ(0, audio_device_->InitMicrophone());
1345 EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(true));
1346 EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled));
1347 EXPECT_TRUE(enabled);
1348 EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(false));
1349 EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled));
1350 EXPECT_FALSE(enabled);
1354 // reinitialize kDefaultDevice and modify/retrieve the boost
1355 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1356 EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available));
1358 EXPECT_EQ(0, audio_device_->InitMicrophone());
1359 EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(true));
1360 EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled));
1361 EXPECT_TRUE(enabled);
1362 EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(false));
1363 EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled));
1364 EXPECT_FALSE(enabled);
1367 // reinitialize the default device (0) and modify/retrieve the boost
1368 EXPECT_EQ(0, audio_device_->SetRecordingDevice(0));
1369 EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available));
1371 EXPECT_EQ(0, audio_device_->InitMicrophone());
1372 EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(true));
1373 EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled));
1374 EXPECT_TRUE(enabled);
1375 EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(false));
1376 EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled));
1377 EXPECT_FALSE(enabled);
1381 TEST_F(AudioDeviceAPITest, StereoPlayoutTests) {
1382 CheckInitialPlayoutStates();
1385 EXPECT_EQ(-1, audio_device_->InitPlayout());
1386 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
1387 MACRO_DEFAULT_COMMUNICATION_DEVICE));
1389 // TODO(kjellander): Fix so these tests pass on Mac.
1390 #if !defined(WEBRTC_MAC)
1391 EXPECT_EQ(0, audio_device_->InitPlayout());
1392 EXPECT_TRUE(audio_device_->PlayoutIsInitialized());
1393 // must be performed before initialization
1394 EXPECT_EQ(-1, audio_device_->SetStereoPlayout(true));
1397 // ensure that we can set the stereo mode for playout
1398 EXPECT_EQ(0, audio_device_->StopPlayout());
1399 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
1401 // initialize kDefaultCommunicationDevice and modify/retrieve stereo support
1402 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
1403 MACRO_DEFAULT_COMMUNICATION_DEVICE));
1406 EXPECT_EQ(0, audio_device_->StereoPlayoutIsAvailable(&available));
1408 EXPECT_EQ(0, audio_device_->SetStereoPlayout(true));
1409 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1410 EXPECT_TRUE(enabled);
1411 EXPECT_EQ(0, audio_device_->SetStereoPlayout(false));
1412 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1413 EXPECT_FALSE(enabled);
1414 EXPECT_EQ(0, audio_device_->SetStereoPlayout(true));
1415 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1416 EXPECT_TRUE(enabled);
1419 // initialize kDefaultDevice and modify/retrieve stereo support
1420 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
1421 EXPECT_EQ(0, audio_device_->StereoPlayoutIsAvailable(&available));
1423 EXPECT_EQ(0, audio_device_->SetStereoPlayout(true));
1424 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1425 EXPECT_TRUE(enabled);
1426 EXPECT_EQ(0, audio_device_->SetStereoPlayout(false));
1427 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1428 EXPECT_FALSE(enabled);
1429 EXPECT_EQ(0, audio_device_->SetStereoPlayout(true));
1430 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1431 EXPECT_TRUE(enabled);
1434 // initialize default device (0) and modify/retrieve stereo support
1435 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(0));
1436 EXPECT_EQ(0, audio_device_->StereoPlayoutIsAvailable(&available));
1438 EXPECT_EQ(0, audio_device_->SetStereoPlayout(true));
1439 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1440 EXPECT_TRUE(enabled);
1441 EXPECT_EQ(0, audio_device_->SetStereoPlayout(false));
1442 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1443 EXPECT_FALSE(enabled);
1444 EXPECT_EQ(0, audio_device_->SetStereoPlayout(true));
1445 EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled));
1446 EXPECT_TRUE(enabled);
1450 TEST_F(AudioDeviceAPITest, StereoRecordingTests) {
1451 CheckInitialRecordingStates();
1452 EXPECT_FALSE(audio_device_->Playing());
1455 EXPECT_EQ(-1, audio_device_->InitRecording());
1456 EXPECT_EQ(0, audio_device_->SetRecordingDevice(
1457 MACRO_DEFAULT_COMMUNICATION_DEVICE));
1459 // TODO(kjellander): Fix so these tests pass on Mac.
1460 #if !defined(WEBRTC_MAC)
1461 EXPECT_EQ(0, audio_device_->InitRecording());
1462 EXPECT_TRUE(audio_device_->RecordingIsInitialized());
1463 // must be performed before initialization
1464 EXPECT_EQ(-1, audio_device_->SetStereoRecording(true));
1466 // ensures that we can set the stereo mode for recording
1467 EXPECT_EQ(0, audio_device_->StopRecording());
1468 EXPECT_FALSE(audio_device_->RecordingIsInitialized());
1470 // initialize kDefaultCommunicationDevice and modify/retrieve stereo support
1471 EXPECT_EQ(0, audio_device_->SetRecordingDevice(
1472 MACRO_DEFAULT_COMMUNICATION_DEVICE));
1475 EXPECT_EQ(0, audio_device_->StereoRecordingIsAvailable(&available));
1477 EXPECT_EQ(0, audio_device_->SetStereoRecording(true));
1478 EXPECT_EQ(0, audio_device_->StereoRecording(&enabled));
1479 EXPECT_TRUE(enabled);
1480 EXPECT_EQ(0, audio_device_->SetStereoRecording(false));
1481 EXPECT_EQ(0, audio_device_->StereoRecording(&enabled));
1482 EXPECT_FALSE(enabled);
1485 // initialize kDefaultDevice and modify/retrieve stereo support
1486 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1487 EXPECT_EQ(0, audio_device_->StereoRecordingIsAvailable(&available));
1489 EXPECT_EQ(0, audio_device_->SetStereoRecording(true));
1490 EXPECT_EQ(0, audio_device_->StereoRecording(&enabled));
1491 EXPECT_TRUE(enabled);
1492 EXPECT_EQ(0, audio_device_->SetStereoRecording(false));
1493 EXPECT_EQ(0, audio_device_->StereoRecording(&enabled));
1494 EXPECT_FALSE(enabled);
1497 // initialize default device (0) and modify/retrieve stereo support
1498 EXPECT_EQ(0, audio_device_->SetRecordingDevice(0));
1499 EXPECT_EQ(0, audio_device_->StereoRecordingIsAvailable(&available));
1501 EXPECT_EQ(0, audio_device_->SetStereoRecording(true));
1502 EXPECT_EQ(0, audio_device_->StereoRecording(&enabled));
1503 EXPECT_TRUE(enabled);
1504 EXPECT_EQ(0, audio_device_->SetStereoRecording(false));
1505 EXPECT_EQ(0, audio_device_->StereoRecording(&enabled));
1506 EXPECT_FALSE(enabled);
1510 TEST_F(AudioDeviceAPITest, RecordingChannelTests) {
1511 // the user in Win Core Audio
1512 AudioDeviceModule::ChannelType channelType(AudioDeviceModule::kChannelBoth);
1513 CheckInitialRecordingStates();
1514 EXPECT_FALSE(audio_device_->Playing());
1517 EXPECT_EQ(0, audio_device_->SetStereoRecording(false));
1518 EXPECT_EQ(-1, audio_device_->SetRecordingChannel(
1519 AudioDeviceModule::kChannelBoth));
1521 // initialize kDefaultCommunicationDevice and modify/retrieve stereo support
1522 EXPECT_EQ(0, audio_device_->SetRecordingDevice(
1523 MACRO_DEFAULT_COMMUNICATION_DEVICE));
1525 EXPECT_EQ(0, audio_device_->StereoRecordingIsAvailable(&available));
1527 EXPECT_EQ(0, audio_device_->SetStereoRecording(true));
1528 EXPECT_EQ(0, audio_device_->SetRecordingChannel(
1529 AudioDeviceModule::kChannelBoth));
1530 EXPECT_EQ(0, audio_device_->RecordingChannel(&channelType));
1531 EXPECT_EQ(AudioDeviceModule::kChannelBoth, channelType);
1532 EXPECT_EQ(0, audio_device_->SetRecordingChannel(
1533 AudioDeviceModule::kChannelLeft));
1534 EXPECT_EQ(0, audio_device_->RecordingChannel(&channelType));
1535 EXPECT_EQ(AudioDeviceModule::kChannelLeft, channelType);
1536 EXPECT_EQ(0, audio_device_->SetRecordingChannel(
1537 AudioDeviceModule::kChannelRight));
1538 EXPECT_EQ(0, audio_device_->RecordingChannel(&channelType));
1539 EXPECT_EQ(AudioDeviceModule::kChannelRight, channelType);
1543 TEST_F(AudioDeviceAPITest, PlayoutBufferTests) {
1544 AudioDeviceModule::BufferType bufferType;
1547 CheckInitialPlayoutStates();
1548 EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS));
1549 #if defined(_WIN32) || defined(ANDROID) || defined(WEBRTC_IOS)
1550 EXPECT_EQ(AudioDeviceModule::kAdaptiveBufferSize, bufferType);
1552 EXPECT_EQ(AudioDeviceModule::kFixedBufferSize, bufferType);
1556 EXPECT_EQ(-1, audio_device_->InitPlayout());
1557 // must set device first
1558 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
1559 MACRO_DEFAULT_COMMUNICATION_DEVICE));
1561 // TODO(kjellander): Fix so these tests pass on Mac.
1562 #if !defined(WEBRTC_MAC)
1563 EXPECT_EQ(0, audio_device_->InitPlayout());
1564 EXPECT_TRUE(audio_device_->PlayoutIsInitialized());
1566 EXPECT_TRUE(audio_device_->SetPlayoutBuffer(
1567 AudioDeviceModule::kAdaptiveBufferSize, 100) == -1);
1568 EXPECT_EQ(0, audio_device_->StopPlayout());
1569 EXPECT_TRUE(audio_device_->SetPlayoutBuffer(
1570 AudioDeviceModule::kFixedBufferSize, kAdmMinPlayoutBufferSizeMs-1) == -1);
1571 EXPECT_TRUE(audio_device_->SetPlayoutBuffer(
1572 AudioDeviceModule::kFixedBufferSize, kAdmMaxPlayoutBufferSizeMs+1) == -1);
1574 // bulk tests (all should be successful)
1575 EXPECT_FALSE(audio_device_->PlayoutIsInitialized());
1577 EXPECT_EQ(0, audio_device_->SetPlayoutBuffer(
1578 AudioDeviceModule::kAdaptiveBufferSize, 0));
1579 EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS));
1580 EXPECT_EQ(AudioDeviceModule::kAdaptiveBufferSize, bufferType);
1581 EXPECT_EQ(0, audio_device_->SetPlayoutBuffer(
1582 AudioDeviceModule::kAdaptiveBufferSize, 10000));
1583 EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS));
1584 EXPECT_EQ(AudioDeviceModule::kAdaptiveBufferSize, bufferType);
1586 #if defined(ANDROID) || defined(WEBRTC_IOS)
1588 audio_device_->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize,
1589 kAdmMinPlayoutBufferSizeMs));
1591 EXPECT_EQ(0, audio_device_->SetPlayoutBuffer(
1592 AudioDeviceModule::kFixedBufferSize, kAdmMinPlayoutBufferSizeMs));
1593 EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS));
1594 EXPECT_EQ(AudioDeviceModule::kFixedBufferSize, bufferType);
1595 EXPECT_EQ(kAdmMinPlayoutBufferSizeMs, sizeMS);
1596 EXPECT_EQ(0, audio_device_->SetPlayoutBuffer(
1597 AudioDeviceModule::kFixedBufferSize, kAdmMaxPlayoutBufferSizeMs));
1598 EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS));
1599 EXPECT_EQ(AudioDeviceModule::kFixedBufferSize, bufferType);
1600 EXPECT_EQ(kAdmMaxPlayoutBufferSizeMs, sizeMS);
1601 EXPECT_EQ(0, audio_device_->SetPlayoutBuffer(
1602 AudioDeviceModule::kFixedBufferSize, 100));
1603 EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS));
1604 EXPECT_EQ(AudioDeviceModule::kFixedBufferSize, bufferType);
1605 EXPECT_EQ(100, sizeMS);
1610 EXPECT_EQ(0, audio_device_->SetPlayoutBuffer(
1611 AudioDeviceModule::kAdaptiveBufferSize, 0));
1612 EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS));
1616 TEST_F(AudioDeviceAPITest, PlayoutDelay) {
1617 // NOTE: this API is better tested in a functional test
1619 CheckInitialPlayoutStates();
1621 EXPECT_EQ(0, audio_device_->PlayoutDelay(&sizeMS));
1622 EXPECT_EQ(0, audio_device_->PlayoutDelay(&sizeMS));
1625 TEST_F(AudioDeviceAPITest, RecordingDelay) {
1626 // NOTE: this API is better tested in a functional test
1628 CheckInitialRecordingStates();
1631 EXPECT_EQ(0, audio_device_->RecordingDelay(&sizeMS));
1632 EXPECT_EQ(0, audio_device_->RecordingDelay(&sizeMS));
1635 TEST_F(AudioDeviceAPITest, CPULoad) {
1636 // NOTE: this API is better tested in a functional test
1641 EXPECT_EQ(0, audio_device_->CPULoad(&load));
1644 EXPECT_EQ(-1, audio_device_->CPULoad(&load));
1648 // TODO(kjellander): Fix flakiness causing failures on Windows.
1649 // TODO(phoglund): Fix flakiness causing failures on Linux.
1650 #if !defined(_WIN32) && !defined(WEBRTC_LINUX)
1651 TEST_F(AudioDeviceAPITest, StartAndStopRawOutputFileRecording) {
1652 // NOTE: this API is better tested in a functional test
1653 CheckInitialPlayoutStates();
1656 EXPECT_EQ(-1, audio_device_->StartRawOutputFileRecording(NULL));
1659 EXPECT_EQ(0, audio_device_->StartRawOutputFileRecording(
1660 GetFilename("raw_output_not_playing.pcm")));
1661 EXPECT_EQ(0, audio_device_->StopRawOutputFileRecording());
1662 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(
1663 MACRO_DEFAULT_COMMUNICATION_DEVICE));
1665 // TODO(kjellander): Fix so these tests pass on Mac.
1666 #if !defined(WEBRTC_MAC)
1667 EXPECT_EQ(0, audio_device_->InitPlayout());
1668 EXPECT_EQ(0, audio_device_->StartPlayout());
1671 EXPECT_EQ(0, audio_device_->StartRawOutputFileRecording(
1672 GetFilename("raw_output_playing.pcm")));
1674 EXPECT_EQ(0, audio_device_->StopRawOutputFileRecording());
1675 EXPECT_EQ(0, audio_device_->StopPlayout());
1676 EXPECT_EQ(0, audio_device_->StartRawOutputFileRecording(
1677 GetFilename("raw_output_not_playing.pcm")));
1678 EXPECT_EQ(0, audio_device_->StopRawOutputFileRecording());
1680 // results after this test:
1682 // - size of raw_output_not_playing.pcm shall be 0
1683 // - size of raw_output_playing.pcm shall be > 0
1686 TEST_F(AudioDeviceAPITest, StartAndStopRawInputFileRecording) {
1687 // NOTE: this API is better tested in a functional test
1688 CheckInitialRecordingStates();
1689 EXPECT_FALSE(audio_device_->Playing());
1692 EXPECT_EQ(-1, audio_device_->StartRawInputFileRecording(NULL));
1695 EXPECT_EQ(0, audio_device_->StartRawInputFileRecording(
1696 GetFilename("raw_input_not_recording.pcm")));
1697 EXPECT_EQ(0, audio_device_->StopRawInputFileRecording());
1698 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1700 // TODO(kjellander): Fix so these tests pass on Mac.
1701 #if !defined(WEBRTC_MAC)
1702 EXPECT_EQ(0, audio_device_->InitRecording());
1703 EXPECT_EQ(0, audio_device_->StartRecording());
1705 EXPECT_EQ(0, audio_device_->StartRawInputFileRecording(
1706 GetFilename("raw_input_recording.pcm")));
1708 EXPECT_EQ(0, audio_device_->StopRawInputFileRecording());
1709 EXPECT_EQ(0, audio_device_->StopRecording());
1710 EXPECT_EQ(0, audio_device_->StartRawInputFileRecording(
1711 GetFilename("raw_input_not_recording.pcm")));
1712 EXPECT_EQ(0, audio_device_->StopRawInputFileRecording());
1714 // results after this test:
1716 // - size of raw_input_not_recording.pcm shall be 0
1717 // - size of raw_input_not_recording.pcm shall be > 0
1719 #endif // !WIN32 && !WEBRTC_LINUX
1721 TEST_F(AudioDeviceAPITest, RecordingSampleRate) {
1722 uint32_t sampleRate(0);
1725 EXPECT_EQ(0, audio_device_->RecordingSampleRate(&sampleRate));
1726 #if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
1727 EXPECT_EQ(48000, sampleRate);
1728 #elif defined(ANDROID)
1729 TEST_LOG("Recording sample rate is %u\n\n", sampleRate);
1730 EXPECT_TRUE((sampleRate == 44000) || (sampleRate == 16000));
1731 #elif defined(WEBRTC_IOS)
1732 TEST_LOG("Recording sample rate is %u\n\n", sampleRate);
1733 EXPECT_TRUE((sampleRate == 44000) || (sampleRate == 16000) ||
1734 (sampleRate == 8000));
1737 // @TODO(xians) - add tests for all platforms here...
1740 TEST_F(AudioDeviceAPITest, PlayoutSampleRate) {
1741 uint32_t sampleRate(0);
1744 EXPECT_EQ(0, audio_device_->PlayoutSampleRate(&sampleRate));
1745 #if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
1746 EXPECT_EQ(48000, sampleRate);
1747 #elif defined(ANDROID)
1748 TEST_LOG("Playout sample rate is %u\n\n", sampleRate);
1749 EXPECT_TRUE((sampleRate == 44000) || (sampleRate == 16000));
1750 #elif defined(WEBRTC_IOS)
1751 TEST_LOG("Playout sample rate is %u\n\n", sampleRate);
1752 EXPECT_TRUE((sampleRate == 44000) || (sampleRate == 16000) ||
1753 (sampleRate == 8000));
1757 TEST_F(AudioDeviceAPITest, ResetAudioDevice) {
1758 CheckInitialPlayoutStates();
1759 CheckInitialRecordingStates();
1760 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
1761 EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE));
1763 #if defined(WEBRTC_IOS)
1764 // Not playing or recording, should just return 0
1765 EXPECT_EQ(0, audio_device_->ResetAudioDevice());
1767 EXPECT_EQ(0, audio_device_->InitRecording());
1768 EXPECT_EQ(0, audio_device_->StartRecording());
1769 EXPECT_EQ(0, audio_device_->InitPlayout());
1770 EXPECT_EQ(0, audio_device_->StartPlayout());
1771 for (int l=0; l<20; ++l)
1773 TEST_LOG("Resetting sound device several time with pause %d ms\n", l);
1774 EXPECT_EQ(0, audio_device_->ResetAudioDevice());
1779 EXPECT_EQ(-1, audio_device_->ResetAudioDevice());
1781 // TODO(kjellander): Fix so these tests pass on Mac.
1782 #if !defined(WEBRTC_MAC)
1783 EXPECT_EQ(0, audio_device_->InitRecording());
1784 EXPECT_EQ(0, audio_device_->StartRecording());
1785 EXPECT_EQ(0, audio_device_->InitPlayout());
1786 EXPECT_EQ(0, audio_device_->StartPlayout());
1788 EXPECT_EQ(-1, audio_device_->ResetAudioDevice());
1790 EXPECT_EQ(0, audio_device_->StopRecording());
1791 EXPECT_EQ(0, audio_device_->StopPlayout());
1794 TEST_F(AudioDeviceAPITest, SetPlayoutSpeaker) {
1795 CheckInitialPlayoutStates();
1796 EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE));
1798 bool loudspeakerOn(false);
1799 #if defined(WEBRTC_IOS)
1800 // Not playing or recording, should just return a success
1801 EXPECT_EQ(0, audio_device_->SetLoudspeakerStatus(true));
1802 EXPECT_EQ(0, audio_device_->GetLoudspeakerStatus(&loudspeakerOn));
1803 EXPECT_TRUE(loudspeakerOn);
1804 EXPECT_EQ(0, audio_device_->SetLoudspeakerStatus(false));
1805 EXPECT_EQ(0, audio_device_->GetLoudspeakerStatus(&loudspeakerOn));
1806 EXPECT_FALSE(loudspeakerOn);
1808 EXPECT_EQ(0, audio_device_->InitPlayout());
1809 EXPECT_EQ(0, audio_device_->StartPlayout());
1810 EXPECT_EQ(0, audio_device_->SetLoudspeakerStatus(true));
1811 EXPECT_EQ(0, audio_device_->GetLoudspeakerStatus(&loudspeakerOn));
1812 EXPECT_TRUE(loudspeakerOn);
1813 EXPECT_EQ(0, audio_device_->SetLoudspeakerStatus(false));
1814 EXPECT_EQ(0, audio_device_->GetLoudspeakerStatus(&loudspeakerOn));
1815 EXPECT_FALSE(loudspeakerOn);
1819 EXPECT_EQ(-1, audio_device_->SetLoudspeakerStatus(true));
1820 EXPECT_EQ(-1, audio_device_->SetLoudspeakerStatus(false));
1821 EXPECT_EQ(-1, audio_device_->SetLoudspeakerStatus(true));
1822 EXPECT_EQ(-1, audio_device_->SetLoudspeakerStatus(false));
1824 // TODO(kjellander): Fix so these tests pass on Mac.
1825 #if !defined(WEBRTC_MAC)
1826 EXPECT_EQ(0, audio_device_->InitPlayout());
1827 EXPECT_EQ(0, audio_device_->StartPlayout());
1830 EXPECT_EQ(-1, audio_device_->GetLoudspeakerStatus(&loudspeakerOn));
1832 EXPECT_EQ(0, audio_device_->StopPlayout());