2239 lines
77 KiB
C++
2239 lines
77 KiB
C++
|
/*
|
||
|
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
||
|
*
|
||
|
* Use of this source code is governed by a BSD-style license
|
||
|
* that can be found in the LICENSE file in the root of the source
|
||
|
* tree. An additional intellectual property rights grant can be found
|
||
|
* in the file PATENTS. All contributing project authors may
|
||
|
* be found in the AUTHORS file in the root of the source tree.
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#include "audio_device_test_defines.h"
|
||
|
|
||
|
#include "../source/audio_device_config.h"
|
||
|
#include "../source/audio_device_utility.h"
|
||
|
|
||
|
// Helper functions
|
||
|
#if defined(ANDROID)
|
||
|
char filenameStr[2][256] =
|
||
|
{ 0}; // Allow two buffers for those API calls taking two filenames
|
||
|
int currentStr = 0;
|
||
|
|
||
|
char* GetFilename(char* filename)
|
||
|
{
|
||
|
currentStr = !currentStr;
|
||
|
sprintf(filenameStr[currentStr], "/sdcard/admtest/%s", filename);
|
||
|
return filenameStr[currentStr];
|
||
|
}
|
||
|
const char* GetFilename(const char* filename)
|
||
|
{
|
||
|
currentStr = !currentStr;
|
||
|
sprintf(filenameStr[currentStr], "/sdcard/admtest/%s", filename);
|
||
|
return filenameStr[currentStr];
|
||
|
}
|
||
|
int GetResource(char* resource, char* dest, int destLen)
|
||
|
{
|
||
|
currentStr = !currentStr;
|
||
|
sprintf(filenameStr[currentStr], "/sdcard/admtest/%s", resource);
|
||
|
strncpy(dest, filenameStr[currentStr], destLen-1);
|
||
|
return 0;
|
||
|
}
|
||
|
char* GetResource(char* resource)
|
||
|
{
|
||
|
currentStr = !currentStr;
|
||
|
sprintf(filenameStr[currentStr], "/sdcard/admtest/%s", resource);
|
||
|
return filenameStr[currentStr];
|
||
|
}
|
||
|
const char* GetResource(const char* resource)
|
||
|
{
|
||
|
currentStr = !currentStr;
|
||
|
sprintf(filenameStr[currentStr], "/sdcard/admtest/%s", resource);
|
||
|
return filenameStr[currentStr];
|
||
|
}
|
||
|
#elif !defined(MAC_IPHONE)
|
||
|
char* GetFilename(char* filename)
|
||
|
{
|
||
|
return filename;
|
||
|
}
|
||
|
const char* GetFilename(const char* filename)
|
||
|
{
|
||
|
return filename;
|
||
|
}
|
||
|
char* GetResource(char* resource)
|
||
|
{
|
||
|
return resource;
|
||
|
}
|
||
|
const char* GetResource(const char* resource)
|
||
|
{
|
||
|
return resource;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
using namespace webrtc;
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// AudioEventObserverAPI
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
class AudioEventObserverAPI: public AudioDeviceObserver
|
||
|
{
|
||
|
public:
|
||
|
AudioEventObserverAPI(AudioDeviceModule* audioDevice) :
|
||
|
_audioDevice(audioDevice)
|
||
|
{
|
||
|
}
|
||
|
;
|
||
|
~AudioEventObserverAPI()
|
||
|
{
|
||
|
}
|
||
|
;
|
||
|
virtual void OnErrorIsReported(const ErrorCode error)
|
||
|
{
|
||
|
TEST_LOG("\n[*** ERROR ***] => OnErrorIsReported(%d)\n\n", error);
|
||
|
_error = error;
|
||
|
// TEST(_audioDevice->StopRecording() == 0);
|
||
|
// TEST(_audioDevice->StopPlayout() == 0);
|
||
|
}
|
||
|
;
|
||
|
virtual void OnWarningIsReported(const WarningCode warning)
|
||
|
{
|
||
|
TEST_LOG("\n[*** WARNING ***] => OnWarningIsReported(%d)\n\n", warning);
|
||
|
_warning = warning;
|
||
|
TEST(_audioDevice->StopRecording() == 0);
|
||
|
TEST(_audioDevice->StopPlayout() == 0);
|
||
|
}
|
||
|
;
|
||
|
public:
|
||
|
ErrorCode _error;
|
||
|
WarningCode _warning;
|
||
|
private:
|
||
|
AudioDeviceModule* _audioDevice;
|
||
|
};
|
||
|
|
||
|
class AudioTransportAPI: public AudioTransport
|
||
|
{
|
||
|
public:
|
||
|
AudioTransportAPI(AudioDeviceModule* audioDevice) :
|
||
|
_audioDevice(audioDevice), _recCount(0), _playCount(0)
|
||
|
{
|
||
|
}
|
||
|
;
|
||
|
|
||
|
~AudioTransportAPI()
|
||
|
{
|
||
|
}
|
||
|
;
|
||
|
|
||
|
virtual WebRtc_Word32 RecordedDataIsAvailable(
|
||
|
const WebRtc_Word8* audioSamples,
|
||
|
const WebRtc_UWord32 nSamples,
|
||
|
const WebRtc_UWord8 nBytesPerSample,
|
||
|
const WebRtc_UWord8 nChannels,
|
||
|
const WebRtc_UWord32 sampleRate,
|
||
|
const WebRtc_UWord32 totalDelay,
|
||
|
const WebRtc_Word32 clockSkew,
|
||
|
const WebRtc_UWord32 currentMicLevel,
|
||
|
WebRtc_UWord32& newMicLevel)
|
||
|
{
|
||
|
_recCount++;
|
||
|
if (_recCount % 100 == 0)
|
||
|
{
|
||
|
if (nChannels == 1)
|
||
|
{
|
||
|
// mono
|
||
|
TEST_LOG("-");
|
||
|
} else if ((nChannels == 2) && (nBytesPerSample == 2))
|
||
|
{
|
||
|
// stereo but only using one channel
|
||
|
TEST_LOG("-|");
|
||
|
} else
|
||
|
{
|
||
|
// stereo
|
||
|
TEST_LOG("--");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
virtual WebRtc_Word32 NeedMorePlayData(const WebRtc_UWord32 nSamples,
|
||
|
const WebRtc_UWord8 nBytesPerSample,
|
||
|
const WebRtc_UWord8 nChannels,
|
||
|
const WebRtc_UWord32 sampleRate,
|
||
|
WebRtc_Word8* audioSamples,
|
||
|
WebRtc_UWord32& nSamplesOut)
|
||
|
{
|
||
|
_playCount++;
|
||
|
if (_playCount % 100 == 0)
|
||
|
{
|
||
|
if (nChannels == 1)
|
||
|
{
|
||
|
TEST_LOG("+");
|
||
|
} else
|
||
|
{
|
||
|
TEST_LOG("++");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
nSamplesOut = 480;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
;
|
||
|
private:
|
||
|
AudioDeviceModule* _audioDevice;
|
||
|
WebRtc_UWord32 _recCount;
|
||
|
WebRtc_UWord32 _playCount;
|
||
|
};
|
||
|
|
||
|
int api_test();
|
||
|
|
||
|
|
||
|
#if !defined(MAC_IPHONE) && !defined(ANDROID)
|
||
|
int api_test();
|
||
|
|
||
|
int main(int /*argc*/, char* /*argv*/[])
|
||
|
{
|
||
|
api_test();
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
int api_test()
|
||
|
{
|
||
|
int i(0);
|
||
|
|
||
|
TEST_LOG("========================================\n");
|
||
|
TEST_LOG("API Test of the WebRtcAudioDevice Module\n");
|
||
|
TEST_LOG("========================================\n\n");
|
||
|
|
||
|
ProcessThread* processThread = ProcessThread::CreateProcessThread();
|
||
|
processThread->Start();
|
||
|
|
||
|
// =======================================================
|
||
|
// AudioDeviceModule::Create
|
||
|
//
|
||
|
// Windows:
|
||
|
// if (WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
|
||
|
// user can select between default (Core) or Wave
|
||
|
// else
|
||
|
// user can select between default (Wave) or Wave
|
||
|
// =======================================================
|
||
|
|
||
|
const WebRtc_Word32 myId = 444;
|
||
|
AudioDeviceModule* audioDevice(NULL);
|
||
|
|
||
|
#if defined(_WIN32)
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL);
|
||
|
#if defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
|
||
|
TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is defined!\n\n");
|
||
|
// create default implementation (=Core Audio) instance
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
|
||
|
AudioDeviceModule::Destroy(audioDevice);
|
||
|
// create non-default (=Wave Audio) instance
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsWaveAudio)) != NULL);
|
||
|
AudioDeviceModule::Destroy(audioDevice);
|
||
|
// explicitly specify usage of Core Audio (same as default)
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsCoreAudio)) != NULL);
|
||
|
#else
|
||
|
// TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is *not* defined!\n");
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsCoreAudio)) == NULL);
|
||
|
// create default implementation (=Wave Audio) instance
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
|
||
|
AudioDeviceModule::Destroy(audioDevice);
|
||
|
// explicitly specify usage of Wave Audio (same as default)
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsWaveAudio)) != NULL);
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if defined(ANDROID)
|
||
|
// Fails tests
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsWaveAudio)) == NULL);
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsCoreAudio)) == NULL);
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL);
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kLinuxPulseAudio)) == NULL);
|
||
|
// Create default implementation instance
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
|
||
|
#elif defined(WEBRTC_LINUX)
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsWaveAudio)) == NULL);
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsCoreAudio)) == NULL);
|
||
|
// create default implementation (=ALSA Audio) instance
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
|
||
|
AudioDeviceModule::Destroy(audioDevice);
|
||
|
// explicitly specify usage of Pulse Audio (same as default)
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kLinuxPulseAudio)) != NULL);
|
||
|
#endif
|
||
|
|
||
|
#if defined(WEBRTC_MAC)
|
||
|
// Fails tests
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsWaveAudio)) == NULL);
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kWindowsCoreAudio)) == NULL);
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL);
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kLinuxPulseAudio)) == NULL);
|
||
|
// Create default implementation instance
|
||
|
TEST((audioDevice = AudioDeviceModule::Create(
|
||
|
myId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
|
||
|
#endif
|
||
|
|
||
|
if (audioDevice == NULL)
|
||
|
{
|
||
|
#ifdef _WIN32
|
||
|
goto Exit;
|
||
|
#else
|
||
|
TEST_LOG("Failed creating audio device object! \n");
|
||
|
return 0;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
processThread->RegisterModule(audioDevice);
|
||
|
|
||
|
// ===============
|
||
|
// Module::Version
|
||
|
// ===============
|
||
|
|
||
|
WebRtc_Word8 version[256];
|
||
|
WebRtc_UWord32 remainingBufferInBytes = 256;
|
||
|
WebRtc_UWord32 tooFewBytes = 10;
|
||
|
WebRtc_UWord32 position = 0;
|
||
|
|
||
|
TEST(audioDevice->Version(version, tooFewBytes, position) == -1);
|
||
|
TEST(audioDevice->Version(NULL, remainingBufferInBytes, position) == -1);
|
||
|
|
||
|
TEST(audioDevice->Version(version, remainingBufferInBytes, position) == 0);
|
||
|
TEST(position == 18); // assumes "AudioDevice x.y.z" + NULL
|
||
|
TEST(remainingBufferInBytes == (256-position));
|
||
|
|
||
|
TEST_LOG("Version: %s\n\n", version);
|
||
|
|
||
|
TEST_LOG("Testing...\n\n");
|
||
|
|
||
|
// =====================
|
||
|
// RegisterEventObserver
|
||
|
// =====================
|
||
|
|
||
|
AudioEventObserverAPI* eventObserver =
|
||
|
new AudioEventObserverAPI(audioDevice);
|
||
|
|
||
|
TEST(audioDevice->RegisterEventObserver(NULL) == 0);
|
||
|
TEST(audioDevice->RegisterEventObserver(eventObserver) == 0);
|
||
|
TEST(audioDevice->RegisterEventObserver(NULL) == 0);
|
||
|
|
||
|
// =====================
|
||
|
// RegisterAudioCallback
|
||
|
// =====================
|
||
|
|
||
|
AudioTransportAPI* audioTransport = new AudioTransportAPI(audioDevice);
|
||
|
|
||
|
TEST(audioDevice->RegisterAudioCallback(NULL) == 0);
|
||
|
TEST(audioDevice->RegisterAudioCallback(audioTransport) == 0);
|
||
|
TEST(audioDevice->RegisterAudioCallback(NULL) == 0);
|
||
|
|
||
|
// ====
|
||
|
// Init
|
||
|
// ====
|
||
|
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Initialized() == false);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Initialized() == false);
|
||
|
|
||
|
// =========
|
||
|
// Terminate
|
||
|
// =========
|
||
|
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Initialized() == false);
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Initialized() == false);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Initialized() == false);
|
||
|
|
||
|
// ------------------------------------------------------------------------
|
||
|
// Ensure that we keep audio device initialized for all API tests:
|
||
|
//
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
// ------------------------------------------------------------------------
|
||
|
|
||
|
// goto SHORTCUT;
|
||
|
|
||
|
WebRtc_Word16 nDevices(0);
|
||
|
|
||
|
// ==============
|
||
|
// PlayoutDevices
|
||
|
// ==============
|
||
|
|
||
|
TEST((nDevices = audioDevice->PlayoutDevices()) > 0);
|
||
|
TEST((nDevices = audioDevice->PlayoutDevices()) > 0);
|
||
|
|
||
|
// ================
|
||
|
// RecordingDevices
|
||
|
// ================
|
||
|
|
||
|
TEST((nDevices = audioDevice->RecordingDevices()) > 0);
|
||
|
TEST((nDevices = audioDevice->RecordingDevices()) > 0);
|
||
|
|
||
|
// =================
|
||
|
// PlayoutDeviceName
|
||
|
// =================
|
||
|
|
||
|
WebRtc_Word8 name[kAdmMaxDeviceNameSize];
|
||
|
WebRtc_Word8 guid[kAdmMaxGuidSize];
|
||
|
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->PlayoutDeviceName(-2, name, guid) == -1);
|
||
|
TEST(audioDevice->PlayoutDeviceName(nDevices, name, guid) == -1);
|
||
|
TEST(audioDevice->PlayoutDeviceName(0, NULL, guid) == -1);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->PlayoutDeviceName(0, name, NULL) == 0);
|
||
|
#ifdef _WIN32
|
||
|
TEST(audioDevice->PlayoutDeviceName(-1, name, NULL) == 0); // shall be mapped to 0
|
||
|
#else
|
||
|
TEST(audioDevice->PlayoutDeviceName(-1, name, NULL) == -1);
|
||
|
#endif
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->PlayoutDeviceName(i, name, guid) == 0);
|
||
|
TEST(audioDevice->PlayoutDeviceName(i, name, NULL) == 0);
|
||
|
}
|
||
|
|
||
|
// ===================
|
||
|
// RecordingDeviceName
|
||
|
// ===================
|
||
|
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->RecordingDeviceName(-2, name, guid) == -1);
|
||
|
TEST(audioDevice->RecordingDeviceName(nDevices, name, guid) == -1);
|
||
|
TEST(audioDevice->RecordingDeviceName(0, NULL, guid) == -1);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->RecordingDeviceName(0, name, NULL) == 0);
|
||
|
#ifdef _WIN32
|
||
|
TEST(audioDevice->RecordingDeviceName(-1, name, NULL) == 0); // shall me mapped to 0
|
||
|
#else
|
||
|
TEST(audioDevice->RecordingDeviceName(-1, name, NULL) == -1);
|
||
|
#endif
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->RecordingDeviceName(i, name, guid) == 0);
|
||
|
TEST(audioDevice->RecordingDeviceName(i, name, NULL) == 0);
|
||
|
}
|
||
|
|
||
|
// ================
|
||
|
// SetPlayoutDevice
|
||
|
// ================
|
||
|
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->SetPlayoutDevice(-1) == -1);
|
||
|
TEST(audioDevice->SetPlayoutDevice(nDevices) == -1);
|
||
|
|
||
|
// bulk tests
|
||
|
#ifdef _WIN32
|
||
|
TEST(audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice) == 0);
|
||
|
#else
|
||
|
TEST(audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultCommunicationDevice) == -1);
|
||
|
TEST(audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice) == -1);
|
||
|
#endif
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
}
|
||
|
|
||
|
// ==================
|
||
|
// SetRecordingDevice
|
||
|
// ==================
|
||
|
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
|
||
|
WebRtc_UWord16 nRecordingDevices(audioDevice->RecordingDevices());
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->SetRecordingDevice(-1) == -1);
|
||
|
TEST(audioDevice->SetRecordingDevice(nDevices) == -1);
|
||
|
|
||
|
// bulk tests
|
||
|
#ifdef _WIN32
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->SetRecordingDevice(AudioDeviceModule::kDefaultDevice) == 0);
|
||
|
#else
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == -1);
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultDevice) == -1);
|
||
|
#endif
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
}
|
||
|
|
||
|
// ==================
|
||
|
// PlayoutIsAvailable
|
||
|
// ==================
|
||
|
|
||
|
bool available(false);
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
TEST(audioDevice->SetPlayoutDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false); // availability check should not initialize
|
||
|
|
||
|
TEST(audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice) == 0);
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
#endif
|
||
|
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// ====================
|
||
|
// RecordingIsAvailable
|
||
|
// ====================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
TEST(audioDevice->SetRecordingDevice(AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
|
||
|
TEST(audioDevice->SetRecordingDevice(AudioDeviceModule::kDefaultDevice) == 0);
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
#endif
|
||
|
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// ===========
|
||
|
// InitPlayout
|
||
|
// ===========
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial state
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
|
||
|
// ensure that device must be set before we can initialize
|
||
|
TEST(audioDevice->InitPlayout() == -1);
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == true);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == true);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == -1);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
// Sleep is needed for e.g. iPhone since we after stopping then starting may
|
||
|
// have a hangover time of a couple of ms before initialized.
|
||
|
AudioDeviceUtility::Sleep(50);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == true);
|
||
|
}
|
||
|
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
|
||
|
// =============
|
||
|
// InitRecording
|
||
|
// =============
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial state
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
|
||
|
// ensure that device must be set before we can initialize
|
||
|
TEST(audioDevice->InitRecording() == -1);
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == true);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == true);
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == -1);
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
AudioDeviceUtility::Sleep(50);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == true);
|
||
|
}
|
||
|
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
|
||
|
// ============
|
||
|
// StartPlayout
|
||
|
// StopPlayout
|
||
|
// ============
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
TEST(audioDevice->RegisterAudioCallback(NULL) == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
TEST(audioDevice->StartPlayout() == -1);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->Playing() == true);
|
||
|
TEST(audioDevice->RegisterAudioCallback(audioTransport) == 0);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->RegisterAudioCallback(NULL) == 0);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// repeat test but for kDefaultDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->Playing() == true);
|
||
|
TEST(audioDevice->RegisterAudioCallback(audioTransport) == 0);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
}
|
||
|
|
||
|
// repeat test for all devices
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->Playing() == true);
|
||
|
TEST(audioDevice->RegisterAudioCallback(audioTransport) == 0);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ==============
|
||
|
// StartRecording
|
||
|
// StopRecording
|
||
|
// ==============
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
TEST(audioDevice->RegisterAudioCallback(NULL) == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
|
||
|
TEST(audioDevice->StartRecording() == -1);
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->StartRecording() == 0);
|
||
|
TEST(audioDevice->Recording() == true);
|
||
|
TEST(audioDevice->RegisterAudioCallback(audioTransport) == 0);
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->RegisterAudioCallback(NULL) == 0);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// repeat test but for kDefaultDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->StartRecording() == 0);
|
||
|
TEST(audioDevice->Recording() == true);
|
||
|
TEST(audioDevice->RegisterAudioCallback(audioTransport) == 0);
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
}
|
||
|
|
||
|
// repeat test for all devices
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->StartRecording() == 0);
|
||
|
TEST(audioDevice->Recording() == true);
|
||
|
TEST(audioDevice->RegisterAudioCallback(audioTransport) == 0);
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int vol(0);
|
||
|
|
||
|
#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
|
||
|
|
||
|
// ================
|
||
|
// SetWaveOutVolume
|
||
|
// GetWaveOutVolume
|
||
|
// ================
|
||
|
|
||
|
// NOTE 1: Windows Wave only!
|
||
|
// NOTE 2: It seems like the waveOutSetVolume API returns
|
||
|
// MMSYSERR_NOTSUPPORTED on some Vista machines!
|
||
|
|
||
|
const WebRtc_UWord16 maxVol(0xFFFF);
|
||
|
WebRtc_UWord16 volL, volR;
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
// make dummy test to see if this API is supported
|
||
|
WebRtc_Word32 works = audioDevice->SetWaveOutVolume(vol, vol);
|
||
|
WARNING(works == 0);
|
||
|
|
||
|
if (works == 0)
|
||
|
{
|
||
|
// set volume without open playout device
|
||
|
for (vol = 0; vol <= maxVol; vol += (maxVol/5))
|
||
|
{
|
||
|
TEST(audioDevice->SetWaveOutVolume(vol, vol) == 0);
|
||
|
TEST(audioDevice->WaveOutVolume(volL, volR) == 0);
|
||
|
TEST((volL==vol) && (volR==vol));
|
||
|
}
|
||
|
|
||
|
// repeat test but this time with an open (default) output device
|
||
|
TEST(audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice) == 0);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == true);
|
||
|
for (vol = 0; vol <= maxVol; vol += (maxVol/5))
|
||
|
{
|
||
|
TEST(audioDevice->SetWaveOutVolume(vol, vol) == 0);
|
||
|
TEST(audioDevice->WaveOutVolume(volL, volR) == 0);
|
||
|
TEST((volL==vol) && (volR==vol));
|
||
|
}
|
||
|
|
||
|
// as above but while playout is active
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->Playing() == true);
|
||
|
for (vol = 0; vol <= maxVol; vol += (maxVol/5))
|
||
|
{
|
||
|
TEST(audioDevice->SetWaveOutVolume(vol, vol) == 0);
|
||
|
TEST(audioDevice->WaveOutVolume(volL, volR) == 0);
|
||
|
TEST((volL==vol) && (volR==vol));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
#endif // defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
|
||
|
// ==================
|
||
|
// SpeakerIsAvailable
|
||
|
// ==================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// check the kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->SpeakerIsAvailable(&available) == 0);
|
||
|
// check for availability should not lead to initialization
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
#endif
|
||
|
|
||
|
// check the kDefaultDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->SpeakerIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
// check all availiable devices
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
TEST(audioDevice->SpeakerIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// ===========
|
||
|
// InitSpeaker
|
||
|
// ===========
|
||
|
|
||
|
// NOTE: we call Terminate followed by Init to ensure that any existing output mixer
|
||
|
// handle is set to NULL. The mixer handle is closed and reopend again for each call to
|
||
|
// SetPlayoutDevice.
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
// kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->SpeakerIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
}
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->PlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->InitSpeaker() == -1);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
}
|
||
|
|
||
|
// kDefaultDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->SpeakerIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
}
|
||
|
|
||
|
// repeat test for all devices
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
TEST(audioDevice->SpeakerIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// =====================
|
||
|
// MicrophoneIsAvailable
|
||
|
// =====================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// check the kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsAvailable(&available) == 0);
|
||
|
// check for availability should not lead to initialization
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
#endif
|
||
|
|
||
|
// check the kDefaultDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// check all availiable devices
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// ==============
|
||
|
// InitMicrophone
|
||
|
// ==============
|
||
|
|
||
|
// NOTE: we call Terminate followed by Init to ensure that any existing input mixer
|
||
|
// handle is set to NULL. The mixer handle is closed and reopend again for each call to
|
||
|
// SetRecordingDevice.
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
}
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->RecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->StartRecording() == 0);
|
||
|
TEST(audioDevice->InitMicrophone() == -1);
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
}
|
||
|
|
||
|
// kDefaultDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
}
|
||
|
|
||
|
// repeat test for all devices
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ========================
|
||
|
// SpeakerVolumeIsAvailable
|
||
|
// ========================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// check the kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeIsAvailable(&available) == 0);
|
||
|
// check for availability should not lead to initialization
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
#endif
|
||
|
|
||
|
// check the kDefaultDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
// check all availiable devices
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// ================
|
||
|
// SetSpeakerVolume
|
||
|
// SpeakerVolume
|
||
|
// MaxSpeakerVolume
|
||
|
// MinSpeakerVolume
|
||
|
// ================
|
||
|
|
||
|
WebRtc_UWord32 volume(0);
|
||
|
WebRtc_UWord32 maxVolume(0);
|
||
|
WebRtc_UWord32 minVolume(0);
|
||
|
WebRtc_UWord16 stepSize(0);
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->SetSpeakerVolume(0) == -1); // speaker must be initialized first
|
||
|
TEST(audioDevice->SpeakerVolume(&volume) == -1);
|
||
|
TEST(audioDevice->MaxSpeakerVolume(&maxVolume) == -1);
|
||
|
TEST(audioDevice->MinSpeakerVolume(&minVolume) == -1);
|
||
|
TEST(audioDevice->SpeakerVolumeStepSize(&stepSize) == -1);
|
||
|
|
||
|
#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
|
||
|
// test for warning (can e.g. happen on Vista with Wave API)
|
||
|
TEST(audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
TEST(audioDevice->SetSpeakerVolume(19001) == 0);
|
||
|
TEST(audioDevice->SpeakerVolume(&volume) == 0);
|
||
|
WARNING(volume == 19001);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// use kDefaultCommunicationDevice and modify/retrieve the volume
|
||
|
TEST(audioDevice->SetPlayoutDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
TEST(audioDevice->MaxSpeakerVolume(&maxVolume) == 0);
|
||
|
TEST(audioDevice->MinSpeakerVolume(&minVolume) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeStepSize(&stepSize) == 0);
|
||
|
for (vol = minVolume; vol < (int)maxVolume; vol += 20*stepSize)
|
||
|
{
|
||
|
TEST(audioDevice->SetSpeakerVolume(vol) == 0);
|
||
|
TEST(audioDevice->SpeakerVolume(&volume) == 0);
|
||
|
TEST((volume == vol) || (volume == vol-1));
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// use kDefaultDevice and modify/retrieve the volume
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
TEST(audioDevice->MaxSpeakerVolume(&maxVolume) == 0);
|
||
|
TEST(audioDevice->MinSpeakerVolume(&minVolume) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeStepSize(&stepSize) == 0);
|
||
|
WebRtc_UWord32 step = (maxVolume - minVolume) / 10;
|
||
|
step = (step < stepSize ? stepSize : step);
|
||
|
for (vol = minVolume; vol <= maxVolume; vol += step)
|
||
|
{
|
||
|
TEST(audioDevice->SetSpeakerVolume(vol) == 0);
|
||
|
TEST(audioDevice->SpeakerVolume(&volume) == 0);
|
||
|
TEST((volume == vol) || (volume == vol-1));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// use all (indexed) devices and modify/retrieve the volume
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
TEST(audioDevice->MaxSpeakerVolume(&maxVolume) == 0);
|
||
|
TEST(audioDevice->MinSpeakerVolume(&minVolume) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeStepSize(&stepSize) == 0);
|
||
|
WebRtc_UWord32 step = (maxVolume - minVolume) / 10;
|
||
|
step = (step < stepSize ? stepSize : step);
|
||
|
for (vol = minVolume; vol <= maxVolume; vol += step)
|
||
|
{
|
||
|
TEST(audioDevice->SetSpeakerVolume(vol) == 0);
|
||
|
TEST(audioDevice->SpeakerVolume(&volume) == 0);
|
||
|
TEST((volume == vol) || (volume == vol-1));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// restore reasonable level
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->SpeakerVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
TEST(audioDevice->MaxSpeakerVolume(&maxVolume) == 0);
|
||
|
TEST(audioDevice->SetSpeakerVolume(maxVolume < 10 ?
|
||
|
maxVolume/3 : maxVolume/10) == 0);
|
||
|
}
|
||
|
|
||
|
// ======
|
||
|
// SetAGC
|
||
|
// AGC
|
||
|
// ======
|
||
|
|
||
|
// NOTE: The AGC API only enables/disables the AGC. To ensure that it will
|
||
|
// have an effect, use it in combination with MicrophoneVolumeIsAvailable.
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
TEST(audioDevice->AGC() == false);
|
||
|
|
||
|
// set/get tests
|
||
|
TEST(audioDevice->SetAGC(true) == 0);
|
||
|
TEST(audioDevice->AGC() == true);
|
||
|
TEST(audioDevice->SetAGC(false) == 0);
|
||
|
TEST(audioDevice->AGC() == false);
|
||
|
|
||
|
// ===========================
|
||
|
// MicrophoneVolumeIsAvailable
|
||
|
// ===========================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// check the kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeIsAvailable(&available) == 0);
|
||
|
// check for availability should not lead to initialization
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
#endif
|
||
|
|
||
|
// check the kDefaultDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// check all availiable devices
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// ===================
|
||
|
// SetMicrophoneVolume
|
||
|
// MicrophoneVolume
|
||
|
// MaxMicrophoneVolume
|
||
|
// MinMicrophoneVolume
|
||
|
// ===================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->SetMicrophoneVolume(0) == -1); // must be initialized first
|
||
|
TEST(audioDevice->MicrophoneVolume(&volume) == -1);
|
||
|
TEST(audioDevice->MaxMicrophoneVolume(&maxVolume) == -1);
|
||
|
TEST(audioDevice->MinMicrophoneVolume(&minVolume) == -1);
|
||
|
TEST(audioDevice->MicrophoneVolumeStepSize(&stepSize) == -1);
|
||
|
|
||
|
#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
|
||
|
// test for warning (can e.g. happen on Vista with Wave API)
|
||
|
TEST(audioDevice->SetRecordingDevice(AudioDeviceModule::kDefaultDevice) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->SetMicrophoneVolume(19001) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolume(&volume) == 0);
|
||
|
WARNING(volume == 19001);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// initialize kDefaultCommunicationDevice and modify/retrieve the volume
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->MaxMicrophoneVolume(&maxVolume) == 0);
|
||
|
TEST(audioDevice->MinMicrophoneVolume(&minVolume) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeStepSize(&stepSize) == 0);
|
||
|
for (vol = minVolume; vol < (int)maxVolume; vol += 10*stepSize)
|
||
|
{
|
||
|
TEST(audioDevice->SetMicrophoneVolume(vol) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolume(&volume) == 0);
|
||
|
TEST((volume == vol) || (volume == vol-1));
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// reinitialize kDefaultDevice and modify/retrieve the volume
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->MaxMicrophoneVolume(&maxVolume) == 0);
|
||
|
TEST(audioDevice->MinMicrophoneVolume(&minVolume) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeStepSize(&stepSize) == 0);
|
||
|
for (vol = minVolume; vol < (int) maxVolume; vol += 10 * stepSize)
|
||
|
{
|
||
|
TEST(audioDevice->SetMicrophoneVolume(vol) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolume(&volume) == 0);
|
||
|
TEST((volume == vol) || (volume == vol-1));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// use all (indexed) devices and modify/retrieve the volume
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->MaxMicrophoneVolume(&maxVolume) == 0);
|
||
|
TEST(audioDevice->MinMicrophoneVolume(&minVolume) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeStepSize(&stepSize) == 0);
|
||
|
for (vol = minVolume; vol < (int) maxVolume; vol += 20 * stepSize)
|
||
|
{
|
||
|
TEST(audioDevice->SetMicrophoneVolume(vol) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolume(&volume) == 0);
|
||
|
TEST((volume == vol) || (volume == vol-1));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// restore reasonable level
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneVolumeIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->MaxMicrophoneVolume(&maxVolume) == 0);
|
||
|
TEST(audioDevice->SetMicrophoneVolume(maxVolume/10) == 0);
|
||
|
}
|
||
|
|
||
|
// ======================
|
||
|
// SpeakerMuteIsAvailable
|
||
|
// ======================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// check the kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->SpeakerMuteIsAvailable(&available) == 0);
|
||
|
// check for availability should not lead to initialization
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
#endif
|
||
|
|
||
|
// check the kDefaultDevice
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->SpeakerMuteIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
// check all availiable devices
|
||
|
nDevices = audioDevice->PlayoutDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetPlayoutDevice(i) == 0);
|
||
|
TEST(audioDevice->SpeakerMuteIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// =========================
|
||
|
// MicrophoneMuteIsAvailable
|
||
|
// =========================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// check the kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->MicrophoneMuteIsAvailable(&available) == 0);
|
||
|
// check for availability should not lead to initialization
|
||
|
#endif
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// check the kDefaultDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneMuteIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// check all availiable devices
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->MicrophoneMuteIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// ==========================
|
||
|
// MicrophoneBoostIsAvailable
|
||
|
// ==========================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// check the kDefaultCommunicationDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoostIsAvailable(&available) == 0);
|
||
|
// check for availability should not lead to initialization
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
#endif
|
||
|
|
||
|
// check the kDefaultDevice
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoostIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// check all availiable devices
|
||
|
nDevices = audioDevice->RecordingDevices();
|
||
|
for (i = 0; i < nDevices; i++)
|
||
|
{
|
||
|
TEST(audioDevice->SetRecordingDevice(i) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoostIsAvailable(&available) == 0);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
}
|
||
|
|
||
|
// ==============
|
||
|
// SetSpeakerMute
|
||
|
// SpeakerMute
|
||
|
// ==============
|
||
|
|
||
|
bool enabled(false);
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->SpeakerIsInitialized() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->SetSpeakerMute(true) == -1); // requires initialization
|
||
|
TEST(audioDevice->SpeakerMute(&enabled) == -1);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// initialize kDefaultCommunicationDevice and modify/retrieve the mute state
|
||
|
TEST(audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->SpeakerMuteIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
TEST(audioDevice->SetSpeakerMute(true) == 0);
|
||
|
TEST(audioDevice->SpeakerMute(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetSpeakerMute(false) == 0);
|
||
|
TEST(audioDevice->SpeakerMute(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// reinitialize kDefaultDevice and modify/retrieve the mute state
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->SpeakerMuteIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
TEST(audioDevice->SetSpeakerMute(true) == 0);
|
||
|
TEST(audioDevice->SpeakerMute(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetSpeakerMute(false) == 0);
|
||
|
TEST(audioDevice->SpeakerMute(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// reinitialize the default device (0) and modify/retrieve the mute state
|
||
|
TEST(audioDevice->SetPlayoutDevice(0) == 0);
|
||
|
TEST(audioDevice->SpeakerMuteIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitSpeaker() == 0);
|
||
|
TEST(audioDevice->SetSpeakerMute(true) == 0);
|
||
|
TEST(audioDevice->SpeakerMute(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetSpeakerMute(false) == 0);
|
||
|
TEST(audioDevice->SpeakerMute(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// ==================
|
||
|
// SetMicrophoneMute
|
||
|
// MicrophoneMute
|
||
|
// ==================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->SetMicrophoneMute(true) == -1); // requires initialization
|
||
|
TEST(audioDevice->MicrophoneMute(&enabled) == -1);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// initialize kDefaultCommunicationDevice and modify/retrieve the mute
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->MicrophoneMuteIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->SetMicrophoneMute(true) == 0);
|
||
|
TEST(audioDevice->MicrophoneMute(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetMicrophoneMute(false) == 0);
|
||
|
TEST(audioDevice->MicrophoneMute(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// reinitialize kDefaultDevice and modify/retrieve the mute
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneMuteIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->SetMicrophoneMute(true) == 0);
|
||
|
TEST(audioDevice->MicrophoneMute(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetMicrophoneMute(false) == 0);
|
||
|
TEST(audioDevice->MicrophoneMute(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// reinitialize the default device (0) and modify/retrieve the Mute
|
||
|
TEST(audioDevice->SetRecordingDevice(0) == 0);
|
||
|
TEST(audioDevice->MicrophoneMuteIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->SetMicrophoneMute(true) == 0);
|
||
|
TEST(audioDevice->MicrophoneMute(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetMicrophoneMute(false) == 0);
|
||
|
TEST(audioDevice->MicrophoneMute(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// ==================
|
||
|
// SetMicrophoneBoost
|
||
|
// MicrophoneBoost
|
||
|
// ==================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
TEST(audioDevice->MicrophoneIsInitialized() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->SetMicrophoneBoost(true) == -1); // requires initialization
|
||
|
TEST(audioDevice->MicrophoneBoost(&enabled) == -1);
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// initialize kDefaultCommunicationDevice and modify/retrieve the boost
|
||
|
TEST(audioDevice->SetRecordingDevice(
|
||
|
AudioDeviceModule::kDefaultCommunicationDevice) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoostIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->SetMicrophoneBoost(true) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoost(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetMicrophoneBoost(false) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoost(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// reinitialize kDefaultDevice and modify/retrieve the boost
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoostIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->SetMicrophoneBoost(true) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoost(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetMicrophoneBoost(false) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoost(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// reinitialize the default device (0) and modify/retrieve the boost
|
||
|
TEST(audioDevice->SetRecordingDevice(0) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoostIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->InitMicrophone() == 0);
|
||
|
TEST(audioDevice->SetMicrophoneBoost(true) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoost(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetMicrophoneBoost(false) == 0);
|
||
|
TEST(audioDevice->MicrophoneBoost(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// ================
|
||
|
// SetStereoPlayout
|
||
|
// StereoPlayout
|
||
|
// ================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->InitPlayout() == -1);
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == true);
|
||
|
// must be performed before initialization
|
||
|
TEST(audioDevice->SetStereoPlayout(true) == -1);
|
||
|
|
||
|
// ensure that we can set the stereo mode for playout
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
|
||
|
// initialize kDefaultCommunicationDevice and modify/retrieve stereo support
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->StereoPlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->SetStereoPlayout(true) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetStereoPlayout(false) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
TEST(audioDevice->SetStereoPlayout(true) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
}
|
||
|
|
||
|
// initialize kDefaultDevice and modify/retrieve stereo support
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->StereoPlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->SetStereoPlayout(true) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetStereoPlayout(false) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
TEST(audioDevice->SetStereoPlayout(true) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
}
|
||
|
|
||
|
// initialize default device (0) and modify/retrieve stereo support
|
||
|
TEST(audioDevice->SetPlayoutDevice(0) == 0);
|
||
|
TEST(audioDevice->StereoPlayoutIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->SetStereoPlayout(true) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetStereoPlayout(false) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
TEST(audioDevice->SetStereoPlayout(true) == 0);
|
||
|
TEST(audioDevice->StereoPlayout(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
}
|
||
|
|
||
|
// ==================
|
||
|
// SetStereoRecording
|
||
|
// StereoRecording
|
||
|
// ==================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->InitRecording() == -1);
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == true);
|
||
|
// must be performed before initialization
|
||
|
TEST(audioDevice->SetStereoRecording(true) == -1);
|
||
|
|
||
|
// ensures that we can set the stereo mode for recording
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
|
||
|
// initialize kDefaultCommunicationDevice and modify/retrieve stereo support
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->StereoRecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->SetStereoRecording(true) == 0);
|
||
|
TEST(audioDevice->StereoRecording(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetStereoRecording(false) == 0);
|
||
|
TEST(audioDevice->StereoRecording(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// initialize kDefaultDevice and modify/retrieve stereo support
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->StereoRecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->SetStereoRecording(true) == 0);
|
||
|
TEST(audioDevice->StereoRecording(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetStereoRecording(false) == 0);
|
||
|
TEST(audioDevice->StereoRecording(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// initialize default device (0) and modify/retrieve stereo support
|
||
|
TEST(audioDevice->SetRecordingDevice(0) == 0);
|
||
|
TEST(audioDevice->StereoRecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->SetStereoRecording(true) == 0);
|
||
|
TEST(audioDevice->StereoRecording(&enabled) == 0);
|
||
|
TEST(enabled == true);
|
||
|
TEST(audioDevice->SetStereoRecording(false) == 0);
|
||
|
TEST(audioDevice->StereoRecording(&enabled) == 0);
|
||
|
TEST(enabled == false);
|
||
|
}
|
||
|
|
||
|
// ===================
|
||
|
// SetRecordingChannel
|
||
|
// RecordingChannel
|
||
|
// ==================
|
||
|
|
||
|
// the user in Win Core Audio
|
||
|
|
||
|
AudioDeviceModule::ChannelType channelType(AudioDeviceModule::kChannelBoth);
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->SetStereoRecording(false) == 0);
|
||
|
TEST(audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelBoth) == -1);
|
||
|
|
||
|
// initialize kDefaultCommunicationDevice and modify/retrieve stereo support
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->StereoRecordingIsAvailable(&available) == 0);
|
||
|
if (available)
|
||
|
{
|
||
|
TEST(audioDevice->SetStereoRecording(true) == 0);
|
||
|
TEST(audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelBoth) == 0);
|
||
|
TEST(audioDevice->RecordingChannel(&channelType) == 0);
|
||
|
TEST(channelType == AudioDeviceModule::kChannelBoth);
|
||
|
TEST(audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelLeft) == 0);
|
||
|
TEST(audioDevice->RecordingChannel(&channelType) == 0);
|
||
|
TEST(channelType == AudioDeviceModule::kChannelLeft);
|
||
|
TEST(audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelRight) == 0);
|
||
|
TEST(audioDevice->RecordingChannel(&channelType) == 0);
|
||
|
TEST(channelType == AudioDeviceModule::kChannelRight);
|
||
|
}
|
||
|
|
||
|
// ================
|
||
|
// SetPlayoutBuffer
|
||
|
// PlayoutBuffer
|
||
|
// ================
|
||
|
|
||
|
AudioDeviceModule::BufferType bufferType;
|
||
|
WebRtc_UWord16 sizeMS(0);
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->PlayoutBuffer(&bufferType, &sizeMS) == 0);
|
||
|
#if defined(_WIN32) || defined(ANDROID) || defined(MAC_IPHONE)
|
||
|
TEST(bufferType == AudioDeviceModule::kAdaptiveBufferSize);
|
||
|
#else
|
||
|
TEST(bufferType == AudioDeviceModule::kFixedBufferSize);
|
||
|
#endif
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->InitPlayout() == -1); // must set device first
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == true);
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kAdaptiveBufferSize,
|
||
|
100) == -1);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize,
|
||
|
kAdmMinPlayoutBufferSizeMs-1) == -1);
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize,
|
||
|
kAdmMaxPlayoutBufferSizeMs+1) == -1);
|
||
|
|
||
|
// bulk tests (all should be successful)
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
#ifdef _WIN32
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kAdaptiveBufferSize,
|
||
|
0) == 0);
|
||
|
TEST(audioDevice->PlayoutBuffer(&bufferType, &sizeMS) == 0);
|
||
|
TEST(bufferType == AudioDeviceModule::kAdaptiveBufferSize);
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kAdaptiveBufferSize,
|
||
|
10000) == 0);
|
||
|
TEST(audioDevice->PlayoutBuffer(&bufferType, &sizeMS) == 0);
|
||
|
TEST(bufferType == AudioDeviceModule::kAdaptiveBufferSize);
|
||
|
#endif
|
||
|
#if defined(ANDROID) || defined(MAC_IPHONE)
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize,
|
||
|
kAdmMinPlayoutBufferSizeMs) == -1);
|
||
|
#else
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize,
|
||
|
kAdmMinPlayoutBufferSizeMs) == 0);
|
||
|
TEST(audioDevice->PlayoutBuffer(&bufferType, &sizeMS) == 0);
|
||
|
TEST(bufferType == AudioDeviceModule::kFixedBufferSize);
|
||
|
TEST(sizeMS == kAdmMinPlayoutBufferSizeMs);
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize,
|
||
|
kAdmMaxPlayoutBufferSizeMs) == 0);
|
||
|
TEST(audioDevice->PlayoutBuffer(&bufferType, &sizeMS) == 0);
|
||
|
TEST(bufferType == AudioDeviceModule::kFixedBufferSize);
|
||
|
TEST(sizeMS == kAdmMaxPlayoutBufferSizeMs);
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize,
|
||
|
100) == 0);
|
||
|
TEST(audioDevice->PlayoutBuffer(&bufferType, &sizeMS) == 0);
|
||
|
TEST(bufferType == AudioDeviceModule::kFixedBufferSize);
|
||
|
TEST(sizeMS == 100);
|
||
|
#endif
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
// restore default
|
||
|
TEST(audioDevice->SetPlayoutBuffer(AudioDeviceModule::kAdaptiveBufferSize,
|
||
|
0) == 0);
|
||
|
TEST(audioDevice->PlayoutBuffer(&bufferType, &sizeMS) == 0);
|
||
|
#endif
|
||
|
|
||
|
// ============
|
||
|
// PlayoutDelay
|
||
|
// ============
|
||
|
|
||
|
// NOTE: this API is better tested in a functional test
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->PlayoutDelay(&sizeMS) == 0);
|
||
|
TEST(audioDevice->PlayoutDelay(&sizeMS) == 0);
|
||
|
|
||
|
// ==============
|
||
|
// RecordingDelay
|
||
|
// ==============
|
||
|
|
||
|
// NOTE: this API is better tested in a functional test
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->RecordingDelay(&sizeMS) == 0);
|
||
|
TEST(audioDevice->RecordingDelay(&sizeMS) == 0);
|
||
|
|
||
|
// =======
|
||
|
// CPULoad
|
||
|
// =======
|
||
|
|
||
|
// NOTE: this API is better tested in a functional test
|
||
|
|
||
|
WebRtc_UWord16 load(0);
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
|
||
|
// bulk tests
|
||
|
#ifdef _WIN32
|
||
|
TEST(audioDevice->CPULoad(&load) == 0);
|
||
|
TEST(load == 0);
|
||
|
#else
|
||
|
TEST(audioDevice->CPULoad(&load) == -1);
|
||
|
#endif
|
||
|
|
||
|
// ===========================
|
||
|
// StartRawOutputFileRecording
|
||
|
// StopRawOutputFileRecording
|
||
|
// ===========================
|
||
|
|
||
|
// NOTE: this API is better tested in a functional test
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->StartRawOutputFileRecording(NULL) == -1);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->StartRawOutputFileRecording(
|
||
|
GetFilename("raw_output_not_playing.pcm")) == 0);
|
||
|
TEST(audioDevice->StopRawOutputFileRecording() == 0);
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_COMMUNICATION_DEVICE) == 0);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->StartRawOutputFileRecording(
|
||
|
GetFilename("raw_output_playing.pcm")) == 0);
|
||
|
AudioDeviceUtility::Sleep(100);
|
||
|
TEST(audioDevice->StopRawOutputFileRecording() == 0);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
TEST(audioDevice->StartRawOutputFileRecording(
|
||
|
GetFilename("raw_output_not_playing.pcm")) == 0);
|
||
|
TEST(audioDevice->StopRawOutputFileRecording() == 0);
|
||
|
|
||
|
// results after this test:
|
||
|
//
|
||
|
// - size of raw_output_not_playing.pcm shall be 0
|
||
|
// - size of raw_output_playing.pcm shall be > 0
|
||
|
|
||
|
// ==========================
|
||
|
// StartRawInputFileRecording
|
||
|
// StopRawInputFileRecording
|
||
|
// ==========================
|
||
|
|
||
|
// NOTE: this API is better tested in a functional test
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
// fail tests
|
||
|
TEST(audioDevice->StartRawInputFileRecording(NULL) == -1);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->StartRawInputFileRecording(
|
||
|
GetFilename("raw_input_not_recording.pcm")) == 0);
|
||
|
TEST(audioDevice->StopRawInputFileRecording() == 0);
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->StartRecording() == 0);
|
||
|
TEST(audioDevice->StartRawInputFileRecording(
|
||
|
GetFilename("raw_input_recording.pcm")) == 0);
|
||
|
AudioDeviceUtility::Sleep(100);
|
||
|
TEST(audioDevice->StopRawInputFileRecording() == 0);
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
TEST(audioDevice->StartRawInputFileRecording(
|
||
|
GetFilename("raw_input_not_recording.pcm")) == 0);
|
||
|
TEST(audioDevice->StopRawInputFileRecording() == 0);
|
||
|
|
||
|
// results after this test:
|
||
|
//
|
||
|
// - size of raw_input_not_recording.pcm shall be 0
|
||
|
// - size of raw_input_not_recording.pcm shall be > 0
|
||
|
|
||
|
// ===================
|
||
|
// RecordingSampleRate
|
||
|
// ===================
|
||
|
|
||
|
WebRtc_UWord32 sampleRate(0);
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->RecordingSampleRate(&sampleRate) == 0);
|
||
|
#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
|
||
|
TEST(sampleRate == 48000);
|
||
|
#elif defined(ANDROID)
|
||
|
TEST_LOG("Recording sample rate is %u\n\n", sampleRate);
|
||
|
TEST((sampleRate == 44000) || (sampleRate == 16000));
|
||
|
#elif defined(MAC_IPHONE)
|
||
|
TEST_LOG("Recording sample rate is %u\n\n", sampleRate);
|
||
|
TEST((sampleRate == 44000) || (sampleRate == 16000) || (sampleRate == 8000));
|
||
|
#endif
|
||
|
|
||
|
// @TODO(xians) - add tests for all platforms here...
|
||
|
|
||
|
// =================
|
||
|
// PlayoutSampleRate
|
||
|
// =================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
|
||
|
// bulk tests
|
||
|
TEST(audioDevice->PlayoutSampleRate(&sampleRate) == 0);
|
||
|
#if defined(_WIN32) && !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
|
||
|
TEST(sampleRate == 48000);
|
||
|
#elif defined(ANDROID)
|
||
|
TEST_LOG("Playout sample rate is %u\n\n", sampleRate);
|
||
|
TEST((sampleRate == 44000) || (sampleRate == 16000));
|
||
|
#elif defined(MAC_IPHONE)
|
||
|
TEST_LOG("Playout sample rate is %u\n\n", sampleRate);
|
||
|
TEST((sampleRate == 44000) || (sampleRate == 16000) || (sampleRate == 8000));
|
||
|
#endif
|
||
|
|
||
|
// ==========================
|
||
|
// ResetAudioDevice
|
||
|
// ==========================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
TEST(audioDevice->RecordingIsInitialized() == false);
|
||
|
TEST(audioDevice->Recording() == false);
|
||
|
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
TEST(audioDevice->SetRecordingDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
|
||
|
#if defined(MAC_IPHONE)
|
||
|
// Not playing or recording, should just return 0
|
||
|
TEST(audioDevice->ResetAudioDevice() == 0);
|
||
|
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->StartRecording() == 0);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
for (int l=0; l<20; ++l)
|
||
|
{
|
||
|
TEST_LOG("Resetting sound device several time with pause %d ms\n", l);
|
||
|
TEST(audioDevice->ResetAudioDevice() == 0);
|
||
|
AudioDeviceUtility::Sleep(l);
|
||
|
}
|
||
|
#else
|
||
|
// Fail tests
|
||
|
TEST(audioDevice->ResetAudioDevice() == -1);
|
||
|
TEST(audioDevice->InitRecording() == 0);
|
||
|
TEST(audioDevice->StartRecording() == 0);
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->ResetAudioDevice() == -1);
|
||
|
#endif
|
||
|
TEST(audioDevice->StopRecording() == 0);
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
|
||
|
// ==========================
|
||
|
// SetPlayoutSpeaker
|
||
|
// ==========================
|
||
|
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
TEST(audioDevice->Init() == 0);
|
||
|
|
||
|
// check initial states
|
||
|
TEST(audioDevice->Initialized() == true);
|
||
|
TEST(audioDevice->PlayoutIsInitialized() == false);
|
||
|
TEST(audioDevice->Playing() == false);
|
||
|
|
||
|
TEST(audioDevice->SetPlayoutDevice(MACRO_DEFAULT_DEVICE) == 0);
|
||
|
|
||
|
bool loudspeakerOn(false);
|
||
|
#if defined(MAC_IPHONE)
|
||
|
// Not playing or recording, should just return a success
|
||
|
TEST(audioDevice->SetLoudspeakerStatus(true) == 0);
|
||
|
TEST(audioDevice->GetLoudspeakerStatus(loudspeakerOn) == 0);
|
||
|
TEST(loudspeakerOn == true);
|
||
|
TEST(audioDevice->SetLoudspeakerStatus(false) == 0);
|
||
|
TEST(audioDevice->GetLoudspeakerStatus(loudspeakerOn) == 0);
|
||
|
TEST(loudspeakerOn == false);
|
||
|
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->SetLoudspeakerStatus(true) == 0);
|
||
|
TEST(audioDevice->GetLoudspeakerStatus(loudspeakerOn) == 0);
|
||
|
TEST(loudspeakerOn == true);
|
||
|
TEST(audioDevice->SetLoudspeakerStatus(false) == 0);
|
||
|
TEST(audioDevice->GetLoudspeakerStatus(loudspeakerOn) == 0);
|
||
|
TEST(loudspeakerOn == false);
|
||
|
|
||
|
#else
|
||
|
// Fail tests
|
||
|
TEST(audioDevice->SetLoudspeakerStatus(true) == -1);
|
||
|
TEST(audioDevice->SetLoudspeakerStatus(false) == -1);
|
||
|
TEST(audioDevice->SetLoudspeakerStatus(true) == -1);
|
||
|
TEST(audioDevice->SetLoudspeakerStatus(false) == -1);
|
||
|
|
||
|
TEST(audioDevice->InitPlayout() == 0);
|
||
|
TEST(audioDevice->StartPlayout() == 0);
|
||
|
TEST(audioDevice->GetLoudspeakerStatus(&loudspeakerOn) == -1);
|
||
|
#endif
|
||
|
TEST(audioDevice->StopPlayout() == 0);
|
||
|
|
||
|
Exit:
|
||
|
|
||
|
// ------------------------------------------------------------------------
|
||
|
// Terminate the module when all tests are done:
|
||
|
//
|
||
|
TEST(audioDevice->Terminate() == 0);
|
||
|
// ------------------------------------------------------------------------
|
||
|
|
||
|
// ===================================================
|
||
|
// AudioDeviceModule::Destroy
|
||
|
// ===================================================
|
||
|
|
||
|
|
||
|
// release the ProcessThread object
|
||
|
if (processThread)
|
||
|
{
|
||
|
processThread->DeRegisterModule(audioDevice);
|
||
|
processThread->Stop();
|
||
|
ProcessThread::DestroyProcessThread(processThread);
|
||
|
}
|
||
|
|
||
|
// delete the event observer
|
||
|
if (eventObserver)
|
||
|
{
|
||
|
delete eventObserver;
|
||
|
eventObserver = NULL;
|
||
|
}
|
||
|
|
||
|
// delete the audio transport
|
||
|
if (audioTransport)
|
||
|
{
|
||
|
delete audioTransport;
|
||
|
audioTransport = NULL;
|
||
|
}
|
||
|
|
||
|
// release the AudioDeviceModule object
|
||
|
if (audioDevice)
|
||
|
AudioDeviceModule::Destroy(audioDevice);
|
||
|
|
||
|
TEST_LOG("\n");
|
||
|
PRINT_TEST_RESULTS;
|
||
|
|
||
|
return 0;
|
||
|
}
|