1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 113f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <math.h> 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 15bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/test/audio_device_test_defines.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 18bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 20bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_config.h" 21bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_impl.h" 22bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_utility.h" 23bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/system_wrappers/interface/sleep.h" 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Helper functions 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(ANDROID) 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgchar filenameStr[2][256] = 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ {0}, 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org {0}, 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; // Allow two buffers for those API calls taking two filenames 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint currentStr = 0; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* GetFilename(const char* filename) 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org currentStr = !currentStr; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sprintf(filenameStr[currentStr], "/sdcard/admtest/%s", filename); 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return filenameStr[currentStr]; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif !defined(WEBRTC_IOS) 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* GetFilename(const char* filename) { 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string full_path_filename = webrtc::test::OutputPath() + filename; 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return full_path_filename.c_str(); 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing namespace webrtc; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioEventObserverAPI: public AudioDeviceObserver { 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioEventObserverAPI(AudioDeviceModule* audioDevice) 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org : error_(kRecordingError), 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org warning_(kRecordingWarning), 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_(audioDevice) { 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~AudioEventObserverAPI() {} 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnErrorIsReported(const ErrorCode error) { 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n[*** ERROR ***] => OnErrorIsReported(%d)\n\n", error); 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org error_ = error; 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnWarningIsReported(const WarningCode warning) { 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n[*** WARNING ***] => OnWarningIsReported(%d)\n\n", warning); 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org warning_ = warning; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ErrorCode error_; 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WarningCode warning_; 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private: 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audio_device_; 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioTransportAPI: public AudioTransport { 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioTransportAPI(AudioDeviceModule* audioDevice) 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org : rec_count_(0), 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org play_count_(0) { 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~AudioTransportAPI() {} 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 8664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org virtual int32_t RecordedDataIsAvailable( 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const void* audioSamples, 8864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t nSamples, 8964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nBytesPerSample, 9064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nChannels, 9164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t sampleRate, 9264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t totalDelay, 9364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const int32_t clockSkew, 9464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t currentMicLevel, 9528832e1965ca0c22ca6a26bbd3387db4db640bedniklas.enbom@webrtc.org const bool keyPressed, 9664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t& newMicLevel) { 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org rec_count_++; 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (rec_count_ % 100 == 0) { 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nChannels == 1) { 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // mono 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("-"); 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if ((nChannels == 2) && (nBytesPerSample == 2)) { 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // stereo but only using one channel 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("-|"); 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // stereo 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("--"); 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org virtual int32_t NeedMorePlayData( 11464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t nSamples, 11564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nBytesPerSample, 11664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nChannels, 11764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t sampleRate, 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void* audioSamples, 11922f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org uint32_t& nSamplesOut, 12081f8df9af96c6b4bf43234f2a0162146a5da6112wu@webrtc.org int64_t* elapsed_time_ms, 12122f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org int64_t* ntp_time_ms) { 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org play_count_++; 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (play_count_ % 100 == 0) { 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nChannels == 1) { 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("+"); 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("++"); 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nSamplesOut = 480; 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1340e6fa8c05cde2587e30dcf5e405132193d60dd42xians@webrtc.org virtual int OnDataAvailable(const int voe_channels[], 13544f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int number_of_voe_channels, 13644f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org const int16_t* audio_data, 13744f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int sample_rate, 13844f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int number_of_channels, 13944f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int number_of_frames, 14044f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int audio_delay_milliseconds, 14144f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int current_volume, 14244f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org bool key_pressed, 14344f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org bool need_audio_processing) { 14444f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org return 0; 14544f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org } 14644f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org 14791d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org virtual void PushCaptureData(int voe_channel, const void* audio_data, 14891d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int bits_per_sample, int sample_rate, 14991d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int number_of_channels, 15091d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int number_of_frames) {} 15191d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org 15291d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org virtual void PullRenderData(int bits_per_sample, int sample_rate, 15391d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int number_of_channels, int number_of_frames, 15422f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org void* audio_data, 15581f8df9af96c6b4bf43234f2a0162146a5da6112wu@webrtc.org int64_t* elapsed_time_ms, 15622f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org int64_t* ntp_time_ms) {} 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private: 15864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t rec_count_; 15964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t play_count_; 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioDeviceAPITest: public testing::Test { 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected: 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceAPITest() {} 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~AudioDeviceAPITest() {} 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static void SetUpTestCase() { 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org process_thread_ = ProcessThread::CreateProcessThread(); 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org process_thread_->Start(); 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Windows: 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // if (WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // user can select between default (Core) or Wave 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // else 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // user can select between default (Wave) or Wave 17764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const int32_t kId = 444; 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is defined!\n\n"); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create default implementation (=Core Audio) instance 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->AddRef(); 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Release()); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create non-default (=Wave Audio) instance 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsWaveAudio)) != NULL); 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->AddRef(); 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Release()); 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // explicitly specify usage of Core Audio (same as default) 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsCoreAudio)) != NULL); 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is *not* defined!\n"); 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create default implementation (=Wave Audio) instance 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->AddRef(); 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Release()); 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // explicitly specify usage of Wave Audio (same as default) 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsWaveAudio)) != NULL); 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(ANDROID) 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Fails tests 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kLinuxPulseAudio)) == NULL); 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create default implementation instance 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_LINUX) 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create default implementation instance 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->AddRef(); 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Terminate()); 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Release()); 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // explicitly specify usage of Pulse Audio (same as default) 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kLinuxPulseAudio)) != NULL); 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_MAC) 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Fails tests 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kLinuxPulseAudio)) == NULL); 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create default implementation instance 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audio_device_ == NULL) { 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FAIL() << "Failed creating audio device object!"; 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // The ADM is reference counted. 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->AddRef(); 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org process_thread_->RegisterModule(audio_device_); 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::AudioLayer audio_layer = 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kPlatformDefaultAudio; 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->ActiveAudioLayer(&audio_layer)); 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audio_layer == AudioDeviceModule::kLinuxAlsaAudio) { 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org linux_alsa_ = true; 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static void TearDownTestCase() { 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (process_thread_) { 275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org process_thread_->DeRegisterModule(audio_device_); 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org process_thread_->Stop(); 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessThread::DestroyProcessThread(process_thread_); 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (event_observer_) { 280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete event_observer_; 281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org event_observer_ = NULL; 282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audio_transport_) { 284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete audio_transport_; 285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_transport_ = NULL; 286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audio_device_) { 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Release()); 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetUp() { 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (linux_alsa_) { 295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FAIL() << "API Test is not available on ALSA on Linux!"; 296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Init()); 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Initialized()); 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void TearDown() { 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Terminate()); 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org void CheckVolume(uint32_t expected, uint32_t actual) { 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Mac and Windows have lower resolution on the volume settings. 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_MAC) || defined(_WIN32) 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int diff = abs(static_cast<int>(expected - actual)); 309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_LE(diff, 5); 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((actual == expected) || (actual == expected-1)); 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void CheckInitialPlayoutStates() { 316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Playing()); 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->SpeakerIsInitialized()); 319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void CheckInitialRecordingStates() { 322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Recording()); 324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static bool linux_alsa_; 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static ProcessThread* process_thread_; 329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static AudioDeviceModule* audio_device_; 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static AudioTransportAPI* audio_transport_; 331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static AudioEventObserverAPI* event_observer_; 332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Must be initialized like this to handle static SetUpTestCase() above. 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceAPITest::linux_alsa_ = false; 336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgProcessThread* AudioDeviceAPITest::process_thread_ = NULL; 337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioDeviceModule* AudioDeviceAPITest::audio_device_ = NULL; 338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioTransportAPI* AudioDeviceAPITest::audio_transport_ = NULL; 339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioEventObserverAPI* AudioDeviceAPITest::event_observer_ = NULL; 340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, RegisterEventObserver) { 342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org event_observer_ = new AudioEventObserverAPI(audio_device_); 343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterEventObserver(NULL)); 344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterEventObserver(event_observer_)); 345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterEventObserver(NULL)); 346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, RegisterAudioCallback) { 349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_transport_ = new AudioTransportAPI(audio_device_); 350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL)); 351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_)); 352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL)); 353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, Init) { 356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Initialized()); 357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Init()); 358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Initialized()); 359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Terminate()); 360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Initialized()); 361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Init()); 362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Initialized()); 363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Terminate()); 364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Initialized()); 365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, Terminate) { 368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Initialized()); 369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Terminate()); 370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Initialized()); 371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Terminate()); 372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Initialized()); 373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Init()); 374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Initialized()); 375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Terminate()); 376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Initialized()); 377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, PlayoutDevices) { 380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_GT(audio_device_->PlayoutDevices(), 0); 381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_GT(audio_device_->PlayoutDevices(), 0); 382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, RecordingDevices) { 385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_GT(audio_device_->RecordingDevices(), 0); 386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_GT(audio_device_->RecordingDevices(), 0); 387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 38922c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org// TODO(henrika): uncomment when you have decided what to do with issue 3675. 39022c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org#if 0 391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, PlayoutDeviceName) { 392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize]; 393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]; 39464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->PlayoutDeviceName(-2, name, guid)); 398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->PlayoutDeviceName(no_devices, name, guid)); 399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->PlayoutDeviceName(0, NULL, guid)); 400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutDeviceName(0, name, NULL)); 403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // shall be mapped to 0. 405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutDeviceName(-1, name, NULL)); 406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->PlayoutDeviceName(-1, name, NULL)); 408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutDeviceName(i, name, guid)); 411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutDeviceName(i, name, NULL)); 412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, RecordingDeviceName) { 416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize]; 417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]; 41864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->RecordingDeviceName(-2, name, guid)); 422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->RecordingDeviceName(no_devices, name, guid)); 423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->RecordingDeviceName(0, NULL, guid)); 424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingDeviceName(0, name, NULL)); 427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // shall me mapped to 0 429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingDeviceName(-1, name, NULL)); 430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->RecordingDeviceName(-1, name, NULL)); 432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingDeviceName(i, name, guid)); 435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingDeviceName(i, name, NULL)); 436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, SetPlayoutDevice) { 44064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetPlayoutDevice(-1)); 444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetPlayoutDevice(no_devices)); 445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice)); 450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultDevice)); 452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetPlayoutDevice( 454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice)); 455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetPlayoutDevice( 456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultDevice)); 457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i)); 460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, SetRecordingDevice) { 464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->Init()); 46564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetRecordingDevice(-1)); 469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetRecordingDevice(no_devices)); 470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 475b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice( 476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultDevice)); 477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == -1); 480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultDevice) == -1); 482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 48722c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org#endif // 0 488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, PlayoutIsAvailable) { 490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetPlayoutDevice( 493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Availability check should not initialize. 496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, 499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice)); 500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i)); 507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, RecordingIsAvailable) { 513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice( 516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice)); 517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice( 521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultDevice)); 522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 52664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, InitPlayout) { 535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check initial state 536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensure that device must be set before we can initialize 539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->InitPlayout()); 540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->PlayoutIsInitialized()); 543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->PlayoutIsInitialized()); 550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetPlayoutDevice( 552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 557b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 559b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 561b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Sleep is needed for e.g. iPhone since we after stopping then starting may 563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // have a hangover time of a couple of ms before initialized. 564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(50); 565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->PlayoutIsInitialized()); 566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 56864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i)); 575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->PlayoutIsInitialized()); 579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, InitRecording) { 586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check initial state 587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensure that device must be set before we can initialize 590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->InitRecording()); 591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->RecordingIsInitialized()); 594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->RecordingIsInitialized()); 601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, 603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE)); 604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, 609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE)); 610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(50); 614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->RecordingIsInitialized()); 615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 622b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->RecordingIsInitialized()); 628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, StartAndStopPlayout) { 635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL)); 637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->StartPlayout()); 641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kDefaultCommunicationDevice 645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetPlayoutDevice( 646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Playing()); 654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_)); 655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Playing()); 657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL)); 658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // repeat test but for kDefaultDevice 662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Playing()); 669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_)); 670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Playing()); 672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // repeat test for all devices 67564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i)); 678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Playing()); 684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_)); 685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Playing()); 687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, StartAndStopRecording) { 692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL)); 694b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->StartRecording()); 698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 701b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kDefaultCommunicationDevice 702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 704b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 705b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRecording()); 710b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Recording()); 711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_)); 712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 713b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Recording()); 714b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(NULL)); 715b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 716b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 718b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // repeat test but for kDefaultDevice 719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 722b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRecording()); 725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Recording()); 726b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_)); 727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Recording()); 729b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 730b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 731b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // repeat test for all devices 73264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 733b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 734b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 735b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 736b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 737b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 738b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 739b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRecording()); 740b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Recording()); 741b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RegisterAudioCallback(audio_transport_)); 742b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 743b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Recording()); 744b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 745b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 746b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 747b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 748b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 749b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, SetAndGetWaveOutVolume) { 75064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t vol(0); 751b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE 1: Windows Wave only! 752b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE 2: It seems like the waveOutSetVolume API returns 753b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // MMSYSERR_NOTSUPPORTED on some Vista machines! 75464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint16_t maxVol(0xFFFF); 75564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t volL, volR; 756b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 757b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 758b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 759b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // make dummy test to see if this API is supported 76064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t works = audio_device_->SetWaveOutVolume(vol, vol); 761b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WARNING(works == 0); 762b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 763b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (works == 0) 764b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 765b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // set volume without open playout device 766b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = 0; vol <= maxVol; vol += (maxVol/5)) 767b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 768b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetWaveOutVolume(vol, vol)); 769b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->WaveOutVolume(volL, volR)); 770b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((volL == vol) && (volR == vol)); 771b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 772b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 773b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // repeat test but this time with an open (default) output device 774b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 775b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultDevice)); 776b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 777b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->PlayoutIsInitialized()); 778b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = 0; vol <= maxVol; vol += (maxVol/5)) 779b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 780b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetWaveOutVolume(vol, vol)); 781b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->WaveOutVolume(volL, volR)); 782b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((volL == vol) && (volR == vol)); 783b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 784b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 785b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // as above but while playout is active 786b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 787b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->Playing()); 788b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = 0; vol <= maxVol; vol += (maxVol/5)) 789b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 790b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetWaveOutVolume(vol, vol)); 791b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->WaveOutVolume(volL, volR)); 792b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((volL == vol) && (volR == vol)); 793b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 794b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 795b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 796b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 797b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Playing()); 798b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 799b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 800b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 801b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, InitSpeaker) { 802b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE: By calling Terminate (in TearDown) followed by Init (in SetUp) we 803b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensure that any existing output mixer handle is set to NULL. 804b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // The mixer handle is closed and reopened again for each call to 805b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // SetPlayoutDevice. 806b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 807b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 808b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kDefaultCommunicationDevice 809b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 810b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 811cceb392c510580dbdf1cec2eec17e9c9ccb268abandrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 812b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 813b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 814cceb392c510580dbdf1cec2eec17e9c9ccb268abandrew@webrtc.org bool available; 815b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutIsAvailable(&available)); 816b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 817b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 818b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 819b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->InitSpeaker()); 820b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 821b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 822b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 823b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kDefaultDevice 824b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 825cceb392c510580dbdf1cec2eec17e9c9ccb268abandrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 826b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 827b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // repeat test for all devices 82864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 829b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 830b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i)); 831cceb392c510580dbdf1cec2eec17e9c9ccb268abandrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 832b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 833b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 834b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 835b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, InitMicrophone) { 836b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE: By calling Terminate (in TearDown) followed by Init (in SetUp) we 837b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensure that any existing output mixer handle is set to NULL. 838b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // The mixer handle is closed and reopened again for each call to 839b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // SetRecordingDevice. 840b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 841b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 842b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kDefaultCommunicationDevice 843b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, 844b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE)); 845cceb392c510580dbdf1cec2eec17e9c9ccb268abandrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 846b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 847b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 848cceb392c510580dbdf1cec2eec17e9c9ccb268abandrew@webrtc.org bool available; 849b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingIsAvailable(&available)); 850b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 851b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 852b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRecording()); 853b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->InitMicrophone()); 854b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 855b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 856b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 857b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kDefaultDevice 858b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 859cceb392c510580dbdf1cec2eec17e9c9ccb268abandrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 860b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 861b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // repeat test for all devices 86264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 863b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 864b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 865cceb392c510580dbdf1cec2eec17e9c9ccb268abandrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 866b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 867b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 868b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 869b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, SpeakerVolumeIsAvailable) { 870b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 871b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 872b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 873b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 874b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultCommunicationDevice 875b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetPlayoutDevice( 876b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 877b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available)); 878b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check for availability should not lead to initialization 879b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->SpeakerIsInitialized()); 880b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 881b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 882b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultDevice 883b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 884b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available)); 885b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->SpeakerIsInitialized()); 886b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 887b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check all availiable devices 88864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 889b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 890b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i)); 891b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available)); 892b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->SpeakerIsInitialized()); 893b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 894b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 895b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 896b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Tests the following methods: 897b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetSpeakerVolume 898b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SpeakerVolume 899b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MaxSpeakerVolume 900b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MinSpeakerVolume 901b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// NOTE: Disabled on mac due to issue 257. 902b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MAC 903b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, SpeakerVolumeTests) { 90464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t vol(0); 90564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t volume(0); 90664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 90764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t minVolume(0); 90864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t stepSize(0); 909b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 910b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 911b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 912b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 913b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetSpeakerVolume(0)); 914b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // speaker must be initialized first 915b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SpeakerVolume(&volume)); 916b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->MaxSpeakerVolume(&maxVolume)); 917b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->MinSpeakerVolume(&minVolume)); 918b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SpeakerVolumeStepSize(&stepSize)); 919b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 920b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 921b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // test for warning (can e.g. happen on Vista with Wave API) 922b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, 923b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice)); 924b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available)); 925b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 926b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 927b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerVolume(19001)); 928b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolume(&volume)); 929b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WARNING(volume == 19001); 930b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 931b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 932b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 933b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 934b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // use kDefaultCommunicationDevice and modify/retrieve the volume 935b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetPlayoutDevice( 936b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 937b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available)); 938b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 939b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 940b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MaxSpeakerVolume(&maxVolume)); 941b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MinSpeakerVolume(&minVolume)); 942b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeStepSize(&stepSize)); 943b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = minVolume; vol < (int)maxVolume; vol += 20*stepSize) { 944b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerVolume(vol)); 945b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolume(&volume)); 946b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckVolume(volume, vol); 947b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 948b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 949b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 950b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 951b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // use kDefaultDevice and modify/retrieve the volume 952b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 953b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available)); 954b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 955b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 956b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MaxSpeakerVolume(&maxVolume)); 957b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MinSpeakerVolume(&minVolume)); 958b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeStepSize(&stepSize)); 95964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t step = (maxVolume - minVolume) / 10; 960b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org step = (step < stepSize ? stepSize : step); 961b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = minVolume; vol <= maxVolume; vol += step) { 962b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerVolume(vol)); 963b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolume(&volume)); 964b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckVolume(volume, vol); 965b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 966b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 967b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 968b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // use all (indexed) devices and modify/retrieve the volume 96964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 970b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 971b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i)); 972b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available)); 973b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 974b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 975b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MaxSpeakerVolume(&maxVolume)); 976b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MinSpeakerVolume(&minVolume)); 977b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeStepSize(&stepSize)); 97864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t step = (maxVolume - minVolume) / 10; 979b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org step = (step < stepSize ? stepSize : step); 980b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = minVolume; vol <= maxVolume; vol += step) { 981b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerVolume(vol)); 982b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolume(&volume)); 983b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckVolume(volume, vol); 984b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 985b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 986b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 987b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 988b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore reasonable level 989b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 990b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerVolumeIsAvailable(&available)); 991b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 992b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 993b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MaxSpeakerVolume(&maxVolume)); 994b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetSpeakerVolume(maxVolume < 10 ? 995b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org maxVolume/3 : maxVolume/10) == 0); 996b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 997b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 998b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // !WEBRTC_MAC 999b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1000b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, AGC) { 1001b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE: The AGC API only enables/disables the AGC. To ensure that it will 1002b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // have an effect, use it in combination with MicrophoneVolumeIsAvailable. 1003b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1004b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->AGC()); 1005b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1006b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // set/get tests 1007b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetAGC(true)); 1008b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->AGC()); 1009b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetAGC(false)); 1010b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->AGC()); 1011b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1012b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1013b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, MicrophoneVolumeIsAvailable) { 1014b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1015b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1016b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1017b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1018b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultCommunicationDevice 1019b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 1020b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1021b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available)); 1022b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check for availability should not lead to initialization 1023b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1024b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1025b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1026b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultDevice 1027b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1028b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available)); 1029b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1030b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1031b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check all availiable devices 103264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 1033b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 1034b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 1035b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available)); 1036b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1037b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1038b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1039b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1040b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Tests the methods: 1041b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetMicrophoneVolume 1042b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneVolume 1043b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MaxMicrophoneVolume 1044b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MinMicrophoneVolume 1045b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// NOTE: Disabled on mac due to issue 257. 1046b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MAC 1047b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, MicrophoneVolumeTests) { 104864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t vol(0); 104964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t volume(0); 105064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 105164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t minVolume(0); 105264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t stepSize(0); 1053b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1054b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1055b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1056b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1057b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetMicrophoneVolume(0)); 1058b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // must be initialized first 1059b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->MicrophoneVolume(&volume)); 1060b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->MaxMicrophoneVolume(&maxVolume)); 1061b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->MinMicrophoneVolume(&minVolume)); 1062b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->MicrophoneVolumeStepSize(&stepSize)); 1063b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1064b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 1065b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // test for warning (can e.g. happen on Vista with Wave API) 1066b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice( 1067b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultDevice)); 1068b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available)); 1069b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1070b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1071b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1072b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(19001)); 1073b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolume(&volume)); 1074b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WARNING(volume == 19001); 1075b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1076b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1077b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1078b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1079b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultCommunicationDevice and modify/retrieve the volume 1080b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 1081b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1082b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available)); 1083b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1084b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1085b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1086b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MaxMicrophoneVolume(&maxVolume)); 1087b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MinMicrophoneVolume(&minVolume)); 1088b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeStepSize(&stepSize)); 1089b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = minVolume; vol < (int)maxVolume; vol += 10*stepSize) 1090b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1091b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(vol)); 1092b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolume(&volume)); 1093b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckVolume(volume, vol); 1094b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1095b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1096b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1097b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1098b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reinitialize kDefaultDevice and modify/retrieve the volume 1099b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available)); 1101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MaxMicrophoneVolume(&maxVolume)); 1104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MinMicrophoneVolume(&minVolume)); 1105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeStepSize(&stepSize)); 1106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = minVolume; vol < maxVolume; vol += 10 * stepSize) { 1107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(vol)); 1108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolume(&volume)); 1109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckVolume(volume, vol); 1110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // use all (indexed) devices and modify/retrieve the volume 111464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 1115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 1116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 1117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available)); 1118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MaxMicrophoneVolume(&maxVolume)); 1121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MinMicrophoneVolume(&minVolume)); 1122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeStepSize(&stepSize)); 1123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (vol = minVolume; vol < maxVolume; vol += 20 * stepSize) { 1124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(vol)); 1125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolume(&volume)); 1126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckVolume(volume, vol); 1127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore reasonable level 1132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneVolumeIsAvailable(&available)); 1134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MaxMicrophoneVolume(&maxVolume)); 1137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneVolume(maxVolume/10)); 1138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // !WEBRTC_MAC 1141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, SpeakerMuteIsAvailable) { 1143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 1145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultCommunicationDevice 1147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetPlayoutDevice( 1148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available)); 1150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check for availability should not lead to initialization 1151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->SpeakerIsInitialized()); 1152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultDevice 1155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 1156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available)); 1157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->SpeakerIsInitialized()); 1158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check all availiable devices 116064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->PlayoutDevices(); 1161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 1162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(i)); 1163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available)); 1164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->SpeakerIsInitialized()); 1165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, MicrophoneMuteIsAvailable) { 1169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultCommunicationDevice 1173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 1174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available)); 1176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check for availability should not lead to initialization 1177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultDevice 1181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available)); 1183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check all availiable devices 118664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 1187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 1188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 1189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available)); 1190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, MicrophoneBoostIsAvailable) { 1195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultCommunicationDevice 1199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 1200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available)); 1202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check for availability should not lead to initialization 1203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check the kDefaultDevice 1207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available)); 1209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // check all availiable devices 121264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t no_devices = audio_device_->RecordingDevices(); 1213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < no_devices; i++) { 1214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(i)); 1215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available)); 1216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); 1217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, SpeakerMuteTests) { 1221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled; 1223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 1224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetSpeakerMute(true)); 1226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // requires initialization 1227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SpeakerMute(&enabled)); 1228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultCommunicationDevice and modify/retrieve the mute state 1231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 1232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice)); 1233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available)); 1234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 1237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerMute(true)); 1238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled)); 1239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerMute(false)); 1241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled)); 1242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reinitialize kDefaultDevice and modify/retrieve the mute state 1247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 1248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available)); 1249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 1251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerMute(true)); 1252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled)); 1253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerMute(false)); 1255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled)); 1256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reinitialize the default device (0) and modify/retrieve the mute state 1260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(0)); 1261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMuteIsAvailable(&available)); 1262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitSpeaker()); 1264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerMute(true)); 1265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled)); 1266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetSpeakerMute(false)); 1268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SpeakerMute(&enabled)); 1269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, MicrophoneMuteTests) { 1274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetMicrophoneMute(true)); 1278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // requires initialization 1279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled; 1281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->MicrophoneMute(&enabled)); 1282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultCommunicationDevice and modify/retrieve the mute 1285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 1286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available)); 1288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneMute(true)); 1292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled)); 1293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneMute(false)); 1295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled)); 1296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reinitialize kDefaultDevice and modify/retrieve the mute 1301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available)); 1303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneMute(true)); 1306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled)); 1307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneMute(false)); 1309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled)); 1310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reinitialize the default device (0) and modify/retrieve the Mute 1314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(0)); 1315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMuteIsAvailable(&available)); 1316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneMute(true)); 1319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled)); 1320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneMute(false)); 1322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneMute(&enabled)); 1323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, MicrophoneBoostTests) { 1328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled; 1330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetMicrophoneBoost(true)); 1334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // requires initialization 1335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->MicrophoneBoost(&enabled)); 1336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultCommunicationDevice and modify/retrieve the boost 1339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetRecordingDevice( 1340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available)); 1342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(true)); 1346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled)); 1347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(false)); 1349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled)); 1350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reinitialize kDefaultDevice and modify/retrieve the boost 1355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available)); 1357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(true)); 1360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled)); 1361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(false)); 1363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled)); 1364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reinitialize the default device (0) and modify/retrieve the boost 1368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(0)); 1369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoostIsAvailable(&available)); 1370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitMicrophone()); 1372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(true)); 1373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled)); 1374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetMicrophoneBoost(false)); 1376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->MicrophoneBoost(&enabled)); 1377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, StereoPlayoutTests) { 1382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 1383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->InitPlayout()); 1386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 1387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 1388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(kjellander): Fix so these tests pass on Mac. 1390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_MAC) 1391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 1392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->PlayoutIsInitialized()); 1393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // must be performed before initialization 1394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetStereoPlayout(true)); 1395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensure that we can set the stereo mode for playout 1398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 1399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 1400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultCommunicationDevice and modify/retrieve stereo support 1402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 1403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 1404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled; 1406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayoutIsAvailable(&available)); 1407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(true)); 1409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(false)); 1412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(true)); 1415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultDevice and modify/retrieve stereo support 1420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 1421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayoutIsAvailable(&available)); 1422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(true)); 1424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(false)); 1427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(true)); 1430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize default device (0) and modify/retrieve stereo support 1435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(0)); 1436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayoutIsAvailable(&available)); 1437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(true)); 1439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(false)); 1442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoPlayout(true)); 1445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoPlayout(&enabled)); 1446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, StereoRecordingTests) { 1451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Playing()); 1453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->InitRecording()); 1456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice( 1457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 1458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(kjellander): Fix so these tests pass on Mac. 1460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_MAC) 1461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 1462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->RecordingIsInitialized()); 1463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // must be performed before initialization 1464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetStereoRecording(true)); 1465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensures that we can set the stereo mode for recording 1467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 1468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->RecordingIsInitialized()); 1469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultCommunicationDevice and modify/retrieve stereo support 1471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice( 1472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 1473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled; 1475b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecordingIsAvailable(&available)); 1476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoRecording(true)); 1478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecording(&enabled)); 1479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoRecording(false)); 1481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecording(&enabled)); 1482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultDevice and modify/retrieve stereo support 1486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecordingIsAvailable(&available)); 1488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoRecording(true)); 1490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecording(&enabled)); 1491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoRecording(false)); 1493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecording(&enabled)); 1494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize default device (0) and modify/retrieve stereo support 1498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(0)); 1499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecordingIsAvailable(&available)); 1500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoRecording(true)); 1502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecording(&enabled)); 1503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(enabled); 1504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoRecording(false)); 1505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecording(&enabled)); 1506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(enabled); 1507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, RecordingChannelTests) { 1511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // the user in Win Core Audio 1512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::ChannelType channelType(AudioDeviceModule::kChannelBoth); 1513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Playing()); 1515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoRecording(false)); 1518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetRecordingChannel( 1519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kChannelBoth)); 1520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // initialize kDefaultCommunicationDevice and modify/retrieve stereo support 1522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice( 1523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 1524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available; 1525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StereoRecordingIsAvailable(&available)); 1526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) { 1527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetStereoRecording(true)); 1528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingChannel( 1529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kChannelBoth)); 1530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingChannel(&channelType)); 1531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kChannelBoth, channelType); 1532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingChannel( 1533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kChannelLeft)); 1534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingChannel(&channelType)); 1535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kChannelLeft, channelType); 1536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingChannel( 1537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kChannelRight)); 1538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingChannel(&channelType)); 1539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kChannelRight, channelType); 1540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, PlayoutBufferTests) { 1544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::BufferType bufferType; 154564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t sizeMS(0); 1546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 1548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS)); 1549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) || defined(ANDROID) || defined(WEBRTC_IOS) 1550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kAdaptiveBufferSize, bufferType); 1551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 1552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kFixedBufferSize, bufferType); 1553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->InitPlayout()); 1557b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // must set device first 1558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 1559b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 1560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1561b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(kjellander): Fix so these tests pass on Mac. 1562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_MAC) 1563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 1564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->PlayoutIsInitialized()); 1565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetPlayoutBuffer( 1567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kAdaptiveBufferSize, 100) == -1); 1568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 1569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetPlayoutBuffer( 1570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kFixedBufferSize, kAdmMinPlayoutBufferSizeMs-1) == -1); 1571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audio_device_->SetPlayoutBuffer( 1572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kFixedBufferSize, kAdmMaxPlayoutBufferSizeMs+1) == -1); 1573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests (all should be successful) 1575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->PlayoutIsInitialized()); 1576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutBuffer( 1578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kAdaptiveBufferSize, 0)); 1579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS)); 1580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kAdaptiveBufferSize, bufferType); 1581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutBuffer( 1582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kAdaptiveBufferSize, 10000)); 1583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS)); 1584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kAdaptiveBufferSize, bufferType); 1585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(ANDROID) || defined(WEBRTC_IOS) 1587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, 1588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio_device_->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize, 1589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kAdmMinPlayoutBufferSizeMs)); 1590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 1591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutBuffer( 1592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kFixedBufferSize, kAdmMinPlayoutBufferSizeMs)); 1593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS)); 1594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kFixedBufferSize, bufferType); 1595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(kAdmMinPlayoutBufferSizeMs, sizeMS); 1596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutBuffer( 1597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kFixedBufferSize, kAdmMaxPlayoutBufferSizeMs)); 1598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS)); 1599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kFixedBufferSize, bufferType); 1600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(kAdmMaxPlayoutBufferSizeMs, sizeMS); 1601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutBuffer( 1602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kFixedBufferSize, 100)); 1603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS)); 1604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(AudioDeviceModule::kFixedBufferSize, bufferType); 1605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(100, sizeMS); 1606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore default 1610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutBuffer( 1611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kAdaptiveBufferSize, 0)); 1612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutBuffer(&bufferType, &sizeMS)); 1613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, PlayoutDelay) { 1617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE: this API is better tested in a functional test 161864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t sizeMS(0); 1619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 1620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 1621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutDelay(&sizeMS)); 1622b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutDelay(&sizeMS)); 1623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, RecordingDelay) { 1626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE: this API is better tested in a functional test 162764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t sizeMS(0); 1628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 1631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingDelay(&sizeMS)); 1632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingDelay(&sizeMS)); 1633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, CPULoad) { 1636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE: this API is better tested in a functional test 163764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t load(0); 1638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 1640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->CPULoad(&load)); 1642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, load); 1643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 1644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->CPULoad(&load)); 1645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// TODO(kjellander): Fix flakiness causing failures on Windows. 1649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// TODO(phoglund): Fix flakiness causing failures on Linux. 1650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(_WIN32) && !defined(WEBRTC_LINUX) 1651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, StartAndStopRawOutputFileRecording) { 1652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE: this API is better tested in a functional test 1653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 1654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->StartRawOutputFileRecording(NULL)); 1657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 1659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRawOutputFileRecording( 1660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetFilename("raw_output_not_playing.pcm"))); 1661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRawOutputFileRecording()); 1662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice( 1663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MACRO_DEFAULT_COMMUNICATION_DEVICE)); 1664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(kjellander): Fix so these tests pass on Mac. 1666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_MAC) 1667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 1668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 1669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRawOutputFileRecording( 1672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetFilename("raw_output_playing.pcm"))); 1673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(100); 1674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRawOutputFileRecording()); 1675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 1676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRawOutputFileRecording( 1677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetFilename("raw_output_not_playing.pcm"))); 1678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRawOutputFileRecording()); 1679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // results after this test: 1681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 1682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // - size of raw_output_not_playing.pcm shall be 0 1683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // - size of raw_output_playing.pcm shall be > 0 1684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, StartAndStopRawInputFileRecording) { 1687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // NOTE: this API is better tested in a functional test 1688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audio_device_->Playing()); 1690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // fail tests 1692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->StartRawInputFileRecording(NULL)); 1693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1694b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 1695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRawInputFileRecording( 1696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetFilename("raw_input_not_recording.pcm"))); 1697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRawInputFileRecording()); 1698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(kjellander): Fix so these tests pass on Mac. 1701b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_MAC) 1702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 1703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRecording()); 1704b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1705b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRawInputFileRecording( 1706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetFilename("raw_input_recording.pcm"))); 1707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(100); 1708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRawInputFileRecording()); 1709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 1710b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRawInputFileRecording( 1711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetFilename("raw_input_not_recording.pcm"))); 1712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRawInputFileRecording()); 1713b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1714b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // results after this test: 1715b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 1716b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // - size of raw_input_not_recording.pcm shall be 0 1717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // - size of raw_input_not_recording.pcm shall be > 0 1718b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // !WIN32 && !WEBRTC_LINUX 1720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, RecordingSampleRate) { 172264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t sampleRate(0); 1723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 1725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->RecordingSampleRate(&sampleRate)); 1726b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 1727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(48000, sampleRate); 1728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(ANDROID) 1729b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Recording sample rate is %u\n\n", sampleRate); 1730b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((sampleRate == 44000) || (sampleRate == 16000)); 1731b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_IOS) 1732b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Recording sample rate is %u\n\n", sampleRate); 1733b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((sampleRate == 44000) || (sampleRate == 16000) || 1734b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (sampleRate == 8000)); 1735b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1736b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1737b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // @TODO(xians) - add tests for all platforms here... 1738b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1739b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1740b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, PlayoutSampleRate) { 174164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t sampleRate(0); 1742b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1743b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // bulk tests 1744b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->PlayoutSampleRate(&sampleRate)); 1745b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 1746b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(48000, sampleRate); 1747b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(ANDROID) 1748b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Playout sample rate is %u\n\n", sampleRate); 1749b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((sampleRate == 44000) || (sampleRate == 16000)); 1750b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_IOS) 1751b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Playout sample rate is %u\n\n", sampleRate); 1752b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((sampleRate == 44000) || (sampleRate == 16000) || 1753b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (sampleRate == 8000)); 1754b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1755b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1756b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1757b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, ResetAudioDevice) { 1758b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 1759b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialRecordingStates(); 1760b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 1761b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetRecordingDevice(MACRO_DEFAULT_DEVICE)); 1762b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1763b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_IOS) 1764b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Not playing or recording, should just return 0 1765b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->ResetAudioDevice()); 1766b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1767b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 1768b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRecording()); 1769b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 1770b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 1771b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int l=0; l<20; ++l) 1772b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1773b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Resetting sound device several time with pause %d ms\n", l); 1774b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->ResetAudioDevice()); 1775b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(l); 1776b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1777b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 1778b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Fail tests 1779b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->ResetAudioDevice()); 1780b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1781b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(kjellander): Fix so these tests pass on Mac. 1782b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_MAC) 1783b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitRecording()); 1784b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartRecording()); 1785b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 1786b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 1787b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1788b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->ResetAudioDevice()); 1789b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1790b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopRecording()); 1791b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 1792b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1793b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1794b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(AudioDeviceAPITest, SetPlayoutSpeaker) { 1795b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CheckInitialPlayoutStates(); 1796b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetPlayoutDevice(MACRO_DEFAULT_DEVICE)); 1797b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1798b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool loudspeakerOn(false); 1799b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_IOS) 1800b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Not playing or recording, should just return a success 1801b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetLoudspeakerStatus(true)); 18028fb9156f2f33aee3680554d19a9ab25e5de3af0efischman@webrtc.org EXPECT_EQ(0, audio_device_->GetLoudspeakerStatus(&loudspeakerOn)); 1803b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(loudspeakerOn); 1804b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetLoudspeakerStatus(false)); 18058fb9156f2f33aee3680554d19a9ab25e5de3af0efischman@webrtc.org EXPECT_EQ(0, audio_device_->GetLoudspeakerStatus(&loudspeakerOn)); 1806b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(loudspeakerOn); 1807b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1808b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 1809b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 1810b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetLoudspeakerStatus(true)); 18118fb9156f2f33aee3680554d19a9ab25e5de3af0efischman@webrtc.org EXPECT_EQ(0, audio_device_->GetLoudspeakerStatus(&loudspeakerOn)); 1812b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(loudspeakerOn); 1813b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->SetLoudspeakerStatus(false)); 18148fb9156f2f33aee3680554d19a9ab25e5de3af0efischman@webrtc.org EXPECT_EQ(0, audio_device_->GetLoudspeakerStatus(&loudspeakerOn)); 1815b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(loudspeakerOn); 1816b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1817b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 1818b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Fail tests 1819b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetLoudspeakerStatus(true)); 1820b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetLoudspeakerStatus(false)); 1821b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetLoudspeakerStatus(true)); 1822b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->SetLoudspeakerStatus(false)); 1823b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1824b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(kjellander): Fix so these tests pass on Mac. 1825b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_MAC) 1826b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->InitPlayout()); 1827b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StartPlayout()); 1828b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1829b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1830b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audio_device_->GetLoudspeakerStatus(&loudspeakerOn)); 1831b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1832b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audio_device_->StopPlayout()); 1833b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1834