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 <assert.h> 12bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include <ctype.h> 13bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include <stdio.h> 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 17bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/test/func_test_manager.h" 18bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/system_wrappers/interface/sleep.h" 19bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_config.h" 22bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_impl.h" 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef __GNUC__ 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Disable warning message ('sprintf': name was marked as #pragma deprecated) 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#pragma warning( disable : 4995 ) 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Disable warning message 4996 ('scanf': This function or variable may be unsafe) 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#pragma warning( disable : 4996 ) 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* RecordedMicrophoneFile = "recorded_microphone_mono_48.pcm"; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* RecordedMicrophoneVolumeFile = 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org"recorded_microphone_volume_mono_48.pcm"; 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* RecordedMicrophoneMuteFile = "recorded_microphone_mute_mono_48.pcm"; 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* RecordedMicrophoneBoostFile = 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org"recorded_microphone_boost_mono_48.pcm"; 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* RecordedMicrophoneAGCFile = "recorded_microphone_AGC_mono_48.pcm"; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* RecordedSpeakerFile = "recorded_speaker_48.pcm"; 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Helper functions 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_IOS) 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgchar* GetFilename(char* filename) 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return filename; 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* GetFilename(const char* filename) 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return filename; 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgchar* GetResource(char* resource) 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return resource; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char* GetResource(const char* resource) 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return resource; 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioEventObserver::AudioEventObserver(AudioDeviceModule* audioDevice) 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioEventObserver::~AudioEventObserver() 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid AudioEventObserver::OnErrorIsReported(const ErrorCode error) 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n[*** ERROR ***] => OnErrorIsReported(%d)\n \n", error); 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _error = error; 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid AudioEventObserver::OnWarningIsReported(const WarningCode warning) 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n[*** WARNING ***] => OnWarningIsReported(%d)\n \n", warning); 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _warning = warning; 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioTransportImpl::AudioTransportImpl(AudioDeviceModule* audioDevice) : 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDevice(audioDevice), 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playFromFile(false), 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _fullDuplex(false), 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _speakerVolume(false), 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _speakerMute(false), 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _microphoneVolume(false), 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _microphoneMute(false), 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _microphoneBoost(false), 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _microphoneAGC(false), 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _loopBackMeasurements(false), 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playFile(*FileWrapper::Create()), 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _recCount(0), 97083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org _playCount(0) 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _resampler.Reset(48000, 48000, kResamplerSynchronousStereo); 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioTransportImpl::~AudioTransportImpl() 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playFile.Flush(); 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playFile.CloseFile(); 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete &_playFile; 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 108083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org for (AudioPacketList::iterator iter = _audioList.begin(); 109083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org iter != _audioList.end(); ++iter) { 110083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org delete *iter; 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// AudioTransportImpl::SetFilePlayout 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioTransportImpl::SetFilePlayout(bool enable, const char* fileName) 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playFromFile = enable; 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enable) 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_playFile.OpenFile(fileName, true, true, false)); 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playFile.Flush(); 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_playFile.CloseFile()); 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org; 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid AudioTransportImpl::SetFullDuplex(bool enable) 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _fullDuplex = enable; 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 136083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org for (AudioPacketList::iterator iter = _audioList.begin(); 137083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org iter != _audioList.end(); ++iter) { 138083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org delete *iter; 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 140083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org _audioList.clear(); 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioTransportImpl::RecordedDataIsAvailable( 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const void* audioSamples, 14564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t nSamples, 14664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nBytesPerSample, 14764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nChannels, 14864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t samplesPerSec, 14964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t totalDelayMS, 15064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const int32_t clockDrift, 15164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t currentMicLevel, 15228832e1965ca0c22ca6a26bbd3387db4db640bedniklas.enbom@webrtc.org const bool keyPressed, 15364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t& newMicLevel) 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 155083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org if (_fullDuplex && _audioList.size() < 15) 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioPacket* packet = new AudioPacket(); 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org memcpy(packet->dataBuffer, audioSamples, nSamples * nBytesPerSample); 15964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org packet->nSamples = (uint16_t) nSamples; 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org packet->nBytesPerSample = nBytesPerSample; 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org packet->nChannels = nChannels; 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org packet->samplesPerSec = samplesPerSec; 163083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org _audioList.push_back(packet); 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _recCount++; 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_recCount % 100 == 0) 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool addMarker(true); 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_loopBackMeasurements) 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_microphoneVolume) 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 17864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 17964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t minVolume(0); 18064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t volume(0); 18164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t stepSize(0); 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MaxMicrophoneVolume(&maxVolume)); 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MinMicrophoneVolume(&minVolume)); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MicrophoneVolumeStepSize(&stepSize)); 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MicrophoneVolume(&volume)); 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (volume == 0) 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[0]"); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int stepScale = (int) ((maxVolume - minVolume) / (stepSize * 10)); 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org volume += (stepScale * stepSize); 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (volume > maxVolume) 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[MAX]"); 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org volume = 0; 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->SetMicrophoneVolume(volume)); 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_microphoneAGC) 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 20464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 20564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t minVolume(0); 20664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t stepSize(0); 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MaxMicrophoneVolume(&maxVolume)); 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MinMicrophoneVolume(&minVolume)); 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MicrophoneVolumeStepSize(&stepSize)); 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // emulate real AGC (min->max->min->max etc.) 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (currentMicLevel <= 1) 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[MIN]"); 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int stepScale = (int) ((maxVolume - minVolume) / (stepSize * 10)); 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org newMicLevel = currentMicLevel + (stepScale * stepSize); 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (newMicLevel > maxVolume) 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[MAX]"); 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org newMicLevel = 1; // set lowest (non-zero) AGC level 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_microphoneMute && (_recCount % 500 == 0)) 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool muted(false); 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MicrophoneMute(&muted)); 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org muted = !muted; 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->SetMicrophoneMute(muted)); 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (muted) 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[MUTE ON]"); 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[MUTE OFF]"); 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_microphoneBoost && (_recCount % 500 == 0)) 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool boosted(false); 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MicrophoneBoost(&boosted)); 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org boosted = !boosted; 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->SetMicrophoneBoost(boosted)); 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (boosted) 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[BOOST ON]"); 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[BOOST OFF]"); 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((nChannels == 1) && addMarker) 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // mono 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("-"); 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if ((nChannels == 2) && (nBytesPerSample == 2) && addMarker) 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::ChannelType 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org chType(AudioDeviceModule::kChannelLeft); 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RecordingChannel(&chType)); 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (chType == AudioDeviceModule::kChannelLeft) 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("-|"); 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("|-"); 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (addMarker) 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // stereo 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("--"); 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nChannels == 2 && nBytesPerSample == 2) 280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TEST_LOG("=> emulated mono (one channel exctracted from stereo input)\n"); 282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 28964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioTransportImpl::NeedMorePlayData( 29064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t nSamples, 29164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nBytesPerSample, 29264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nChannels, 29364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t samplesPerSec, 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void* audioSamples, 29522f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org uint32_t& nSamplesOut, 29681f8df9af96c6b4bf43234f2a0162146a5da6112wu@webrtc.org int64_t* elapsed_time_ms, 29722f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org int64_t* ntp_time_ms) 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_fullDuplex) 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 301083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org if (_audioList.empty()) 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // use zero stuffing when not enough data 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org memset(audioSamples, 0, nBytesPerSample * nSamples); 305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 307083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org AudioPacket* packet = _audioList.front(); 308083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org _audioList.pop_front(); 309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (packet) 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int ret(0); 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int lenOut(0); 31364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t tmpBuf_96kHz[80 * 12]; 31464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t* ptr16In = NULL; 31564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t* ptr16Out = NULL; 31664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org 31764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint16_t nSamplesIn = packet->nSamples; 31864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint8_t nChannelsIn = packet->nChannels; 31964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t samplesPerSecIn = packet->samplesPerSec; 32064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint16_t nBytesPerSampleIn = 321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org packet->nBytesPerSample; 322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 32364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t fsInHz(samplesPerSecIn); 32464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t fsOutHz(samplesPerSec); 325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fsInHz == 44100) 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fsInHz = 44000; 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fsOutHz == 44100) 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fsOutHz = 44000; 331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nChannelsIn == 2 && nBytesPerSampleIn == 4) 333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // input is stereo => we will resample in stereo 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ret = _resampler.ResetIfNeeded(fsInHz, fsOutHz, 336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kResamplerSynchronousStereo); 337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ret == 0) 338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nChannels == 2) 340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _resampler.Push( 34264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org (const int16_t*) packet->dataBuffer, 343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2 * nSamplesIn, 34464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org (int16_t*) audioSamples, 2 345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * nSamples, lenOut); 346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _resampler.Push( 34964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org (const int16_t*) packet->dataBuffer, 350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2 * nSamplesIn, tmpBuf_96kHz, 2 351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * nSamples, lenOut); 352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptr16In = &tmpBuf_96kHz[0]; 35464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org ptr16Out = (int16_t*) audioSamples; 355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // do stereo -> mono 357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (unsigned int i = 0; i < nSamples; i++) 358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *ptr16Out = *ptr16In; // use left channel 360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptr16Out++; 361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptr16In++; 362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptr16In++; 363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 36564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org assert(2*nSamples == (uint32_t)lenOut); 366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_playCount % 100 == 0) 369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG( 370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "ERROR: unable to resample from %d to %d\n", 371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org samplesPerSecIn, samplesPerSec); 372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // input is mono (can be "reduced from stereo" as well) => 376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // we will resample in mono 377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ret = _resampler.ResetIfNeeded(fsInHz, fsOutHz, 378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kResamplerSynchronous); 379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ret == 0) 380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nChannels == 1) 382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _resampler.Push( 38464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org (const int16_t*) packet->dataBuffer, 385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nSamplesIn, 38664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org (int16_t*) audioSamples, 387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nSamples, lenOut); 388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _resampler.Push( 39164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org (const int16_t*) packet->dataBuffer, 392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nSamplesIn, tmpBuf_96kHz, nSamples, 393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org lenOut); 394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptr16In = &tmpBuf_96kHz[0]; 39664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org ptr16Out = (int16_t*) audioSamples; 397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // do mono -> stereo 399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (unsigned int i = 0; i < nSamples; i++) 400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *ptr16Out = *ptr16In; // left 402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptr16Out++; 403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *ptr16Out = *ptr16In; // right (same as left sample) 404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptr16Out++; 405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptr16In++; 406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 40864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org assert(nSamples == (uint32_t)lenOut); 409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_playCount % 100 == 0) 412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("ERROR: unable to resample from %d to %d\n", 413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org samplesPerSecIn, samplesPerSec); 414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nSamplesOut = nSamples; 417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete packet; 418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 4203b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org } // if (_fullDuplex) 421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_playFromFile && _playFile.Open()) 423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 42464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t fileBuf[480]; 425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // read mono-file 42764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t len = _playFile.Read((int8_t*) fileBuf, 2 428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * nSamples); 42964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org if (len != 2 * (int32_t) nSamples) 430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playFile.Rewind(); 43264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org _playFile.Read((int8_t*) fileBuf, 2 * nSamples); 433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // convert to stero if required 436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nChannels == 1) 437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org memcpy(audioSamples, fileBuf, 2 * nSamples); 439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // mono sample from file is duplicated and sent to left and right 442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // channels 44364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t* audio16 = (int16_t*) audioSamples; 444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (unsigned int i = 0; i < nSamples; i++) 445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (*audio16) = fileBuf[i]; // left 447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio16++; 448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (*audio16) = fileBuf[i]; // right 449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org audio16++; 450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 4523b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org } // if (_playFromFile && _playFile.Open()) 453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playCount++; 455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_playCount % 100 == 0) 457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool addMarker(true); 459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_speakerVolume) 461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 46264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 46364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t minVolume(0); 46464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t volume(0); 46564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t stepSize(0); 466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MaxSpeakerVolume(&maxVolume)); 467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->MinSpeakerVolume(&minVolume)); 468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->SpeakerVolumeStepSize(&stepSize)); 469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->SpeakerVolume(&volume)); 470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (volume == 0) 471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[0]"); 473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 47564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t step = (maxVolume - minVolume) / 10; 476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org step = (step < stepSize ? stepSize : step); 477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org volume += step; 478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (volume > maxVolume) 479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[MAX]"); 481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org volume = 0; 482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->SetSpeakerVolume(volume)); 485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_speakerMute && (_playCount % 500 == 0)) 488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool muted(false); 490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->SpeakerMute(&muted)); 491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org muted = !muted; 492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->SetSpeakerMute(muted)); 493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (muted) 494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[MUTE ON]"); 496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("[MUTE OFF]"); 500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_loopBackMeasurements) 505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 50664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t recDelayMS(0); 50764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t playDelayMS(0); 508083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org size_t nItemsInList(0); 509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 510083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org nItemsInList = _audioList.size(); 511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RecordingDelay(&recDelayMS)); 512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->PlayoutDelay(&playDelayMS)); 513083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org TEST_LOG("Delay (rec+play)+buf: %3zu (%3u+%3u)+%3zu [ms]\n", 514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org recDelayMS + playDelayMS + 10 * (nItemsInList + 1), 515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org recDelayMS, playDelayMS, 10 * (nItemsInList + 1)); 516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org addMarker = false; 518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((nChannels == 1) && addMarker) 521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("+"); 523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if ((nChannels == 2) && addMarker) 524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("++"); 526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 5273b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org } // if (_playCount % 100 == 0) 528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nSamplesOut = nSamples; 530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 5340e6fa8c05cde2587e30dcf5e405132193d60dd42xians@webrtc.orgint AudioTransportImpl::OnDataAvailable(const int voe_channels[], 53544f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int number_of_voe_channels, 53644f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org const int16_t* audio_data, 53744f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int sample_rate, 53844f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int number_of_channels, 53944f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int number_of_frames, 54044f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int audio_delay_milliseconds, 54144f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org int current_volume, 54244f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org bool key_pressed, 54344f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org bool need_audio_processing) { 54444f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org return 0; 54544f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org} 54644f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org 54791d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.orgvoid AudioTransportImpl::PushCaptureData(int voe_channel, 54891d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org const void* audio_data, 54991d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int bits_per_sample, int sample_rate, 55091d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int number_of_channels, 55191d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int number_of_frames) {} 55291d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org 55391d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.orgvoid AudioTransportImpl::PullRenderData(int bits_per_sample, int sample_rate, 55491d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int number_of_channels, 55591d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org int number_of_frames, 55622f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org void* audio_data, 55781f8df9af96c6b4bf43234f2a0162146a5da6112wu@webrtc.org int64_t* elapsed_time_ms, 55822f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org int64_t* ntp_time_ms) {} 55987c8b86c9f8a9929a2a564b2833244c6290e4701xians@webrtc.org 560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgFuncTestManager::FuncTestManager() : 561b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread(NULL), 562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDevice(NULL), 563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioEventObserver(NULL), 564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport(NULL) 565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playoutFile48 = webrtc::test::ResourcePath("audio_device\\audio_short48", 567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "pcm"); 568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playoutFile44 = webrtc::test::ResourcePath("audio_device\\audio_short44", 569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "pcm"); 570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playoutFile16 = webrtc::test::ResourcePath("audio_device\\audio_short16", 571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "pcm"); 572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _playoutFile8 = webrtc::test::ResourcePath("audio_device\\audio_short8", 573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "pcm"); 574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgFuncTestManager::~FuncTestManager() 577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 58064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::Init() 581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((_processThread = ProcessThread::CreateProcessThread()) != NULL); 583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_processThread == NULL) 584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread->Start(); 588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create the Audio Device module 590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((_audioDevice = AudioDeviceModuleImpl::Create( 591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 555, ADM_AUDIO_LAYER)) != NULL); 592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(1, _audioDevice->AddRef()); 597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // register the Audio Device module 599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread->RegisterModule(_audioDevice); 600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // register event observer 602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioEventObserver = new AudioEventObserver(_audioDevice); 603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RegisterEventObserver(_audioEventObserver)); 604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // register audio transport 606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport = new AudioTransportImpl(_audioDevice); 607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RegisterAudioCallback(_audioTransport)); 608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::Close() 613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RegisterEventObserver(NULL)); 615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RegisterAudioCallback(NULL)); 616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->Terminate()); 617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // release the ProcessThread object 619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_processThread) 620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread->DeRegisterModule(_audioDevice); 622b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread->Stop(); 623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessThread::DestroyProcessThread(_processThread); 624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // delete the audio observer 627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioEventObserver) 628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete _audioEventObserver; 630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioEventObserver = NULL; 631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // delete the audio transport 634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioTransport) 635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete _audioTransport; 637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport = NULL; 638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // release the AudioDeviceModule object 641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice) 642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->Release()); 644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDevice = NULL; 645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // return the ThreadWrapper (singleton) 648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Trace::ReturnTrace(); 649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // PRINT_TEST_RESULTS; 651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 65564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::DoTest(const TestType testType) 656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch (testType) 658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTAll: 660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestAudioLayerSelection(); 661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestDeviceEnumeration(); 662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestDeviceSelection(); 663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestAudioTransport(); 664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestSpeakerVolume(); 665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestMicrophoneVolume(); 666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestLoopback(); 667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTAudioLayerSelection: 668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestAudioLayerSelection(); 669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTDeviceEnumeration: 671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestDeviceEnumeration(); 672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTDeviceSelection: 674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestDeviceSelection(); 675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTAudioTransport: 677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestAudioTransport(); 678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTSpeakerVolume: 680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestSpeakerVolume(); 681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTMicrophoneVolume: 683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestMicrophoneVolume(); 684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTSpeakerMute: 686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestSpeakerMute(); 687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTMicrophoneMute: 689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestMicrophoneMute(); 690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTMicrophoneBoost: 692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestMicrophoneBoost(); 693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 694b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTMicrophoneAGC: 695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestMicrophoneAGC(); 696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTLoopback: 698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestLoopback(); 699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTDeviceRemoval: 701b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestDeviceRemoval(); 702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTMobileAPI: 704b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestAdvancedMBAPI(); 705b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case TTTest: 706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestExtra(); 707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 710b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 713b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 714b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestAudioLayerSelection() 716b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 718b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Audio Layer test:\n"); 719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 722b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 726b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 729b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 730b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::AudioLayer audioLayer; 731b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->ActiveAudioLayer(&audioLayer)); 732b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 733b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioLayer == AudioDeviceModule::kWindowsWaveAudio) 734b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 735b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: kWindowsWaveAudio\n \n"); 736b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (audioLayer == AudioDeviceModule::kWindowsCoreAudio) 737b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 738b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: kWindowsCoreAudio\n \n"); 739b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (audioLayer == AudioDeviceModule::kLinuxAlsaAudio) 740b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 741b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: kLinuxAlsaAudio\n \n"); 742b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (audioLayer == AudioDeviceModule::kLinuxPulseAudio) 743b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 744b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: kLinuxPulseAudio\n \n"); 745b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 746b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 747b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: INVALID\n \n"); 748b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 749b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 750b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char ch; 751b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool tryWinWave(false); 752b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool tryWinCore(false); 753b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 754b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioLayer == AudioDeviceModule::kWindowsWaveAudio) 755b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 756b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Would you like to try kWindowsCoreAudio instead " 757b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "[requires Win Vista or Win 7] (Y/N)?\n: "); 758b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(scanf(" %c", &ch) > 0); 759b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ch = toupper(ch); 760b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ch == 'Y') 761b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 762b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tryWinCore = true; 763b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 764b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (audioLayer == AudioDeviceModule::kWindowsCoreAudio) 765b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 766b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Would you like to try kWindowsWaveAudio instead (Y/N)?\n: "); 767b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(scanf(" %c", &ch) > 0); 768b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ch = toupper(ch); 769b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ch == 'Y') 770b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 771b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tryWinWave = true; 772b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 773b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 774b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 775b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (tryWinWave || tryWinCore) 776b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 777b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ======================================= 778b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // First, close down what we have started 779b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 780b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // terminate 781b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RegisterEventObserver(NULL)); 782b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RegisterAudioCallback(NULL)); 783b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->Terminate()); 784b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 785b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // release the ProcessThread object 786b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_processThread) 787b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 788b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread->DeRegisterModule(_audioDevice); 789b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread->Stop(); 790b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessThread::DestroyProcessThread(_processThread); 791b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 792b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 793b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // delete the audio observer 794b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioEventObserver) 795b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 796b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete _audioEventObserver; 797b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioEventObserver = NULL; 798b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 799b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 800b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // delete the audio transport 801b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioTransport) 802b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 803b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete _audioTransport; 804b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport = NULL; 805b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 806b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 807b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // release the AudioDeviceModule object 808b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice) 809b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 810b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->Release()); 811b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDevice = NULL; 812b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 813b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 814b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ================================================== 815b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Next, try to make fresh start with new audio layer 816b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 817b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((_processThread = ProcessThread::CreateProcessThread()) != NULL); 818b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_processThread == NULL) 819b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 820b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 821b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 822b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread->Start(); 823b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 824b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create the Audio Device module based on selected audio layer 825b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (tryWinWave) 826b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 827b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDevice = AudioDeviceModuleImpl::Create( 828b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 555, 829b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kWindowsWaveAudio); 830b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (tryWinCore) 831b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 832b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDevice = AudioDeviceModuleImpl::Create( 833b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 555, 834b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kWindowsCoreAudio); 835b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 836b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 837b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 838b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 839b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Switch of audio layer failed!\n"); 840b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore default audio layer instead 841b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((_audioDevice = AudioDeviceModuleImpl::Create( 842b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 555, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); 843b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 844b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 845b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 846b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 847b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Failed to revert back to default audio layer!\n"); 848b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 849b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 850b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 851b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(1, _audioDevice->AddRef()); 852b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 853b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // register the Audio Device module 854b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _processThread->RegisterModule(_audioDevice); 855b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 856b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // register event observer 857b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioEventObserver = new AudioEventObserver(_audioDevice); 858b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RegisterEventObserver(_audioEventObserver)); 859b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 860b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // register audio transport 861b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport = new AudioTransportImpl(_audioDevice); 862b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RegisterAudioCallback(_audioTransport)); 863b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 864b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->ActiveAudioLayer(&audioLayer)); 865b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 866b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioLayer == AudioDeviceModule::kWindowsWaveAudio) 867b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 868b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (tryWinCore) 869b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: kWindowsWaveAudio <=> " 870b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "switch was *not* possible\n \n"); 871b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 872b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: kWindowsWaveAudio <=> " 873b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "switch was possible\n \n"); 874b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (audioLayer == AudioDeviceModule::kWindowsCoreAudio) 875b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 876b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (tryWinWave) 877b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: kWindowsCoreAudio <=> " 878b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "switch was *not* possible\n \n"); 879b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 880b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nActiveAudioLayer: kWindowsCoreAudio <=> " 881b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "switch was possible\n \n"); 882b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 8833b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org } // if (tryWinWave || tryWinCore) 884b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 885b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 886b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 887b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 888b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 889b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 89064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestDeviceEnumeration() 891b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 892b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 893b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Device Enumeration test:\n"); 894b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 895b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 896b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 897b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 898b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 899b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 900b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 901b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 902b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 903b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 904b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 905b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 906b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 907b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 908b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize]; 909b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]; 910b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 91164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const int16_t nPlayoutDevices(audioDevice->PlayoutDevices()); 912b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(nPlayoutDevices >= 0); 913b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nPlayoutDevices: %u\n \n", nPlayoutDevices); 914b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int n = 0; n < nPlayoutDevices; n++) 915b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 916b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutDeviceName(n, name, guid)); 917b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG( 918b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "PlayoutDeviceName(%d) : name=%s \n \ 919b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org guid=%s\n", 920b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org n, name, guid); 921b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 922b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 923b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 924b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // default (-1) 92522c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org // TODO(henrika): fix below test. 92622c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org#if 0 927b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutDeviceName(-1, name, guid)); 928b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("PlayoutDeviceName(%d): default name=%s \n \ 929b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default guid=%s\n", -1, name, guid); 93022c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org#endif // 0 931b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 932b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // should fail 933b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audioDevice->PlayoutDeviceName(-1, name, guid)); 934b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 935b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 93664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const int16_t nRecordingDevices(audioDevice->RecordingDevices()); 937b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(nRecordingDevices >= 0); 938b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nRecordingDevices: %u\n \n", nRecordingDevices); 939b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int n = 0; n < nRecordingDevices; n++) 940b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 941b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingDeviceName(n, name, guid)); 942b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG( 943b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "RecordingDeviceName(%d) : name=%s \n \ 944b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org guid=%s\n", 945b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org n, name, guid); 946b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 947b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 948b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 949b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // default (-1) 95022c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org // TODO(henrika): fix below test. 95122c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org#if 0 952b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingDeviceName(-1, name, guid)); 953b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("RecordingDeviceName(%d): default name=%s \n \ 954b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default guid=%s\n", -1, name, guid); 95522c283b04855b8775d323e8788a0438ce2d7c2b5henrike@webrtc.org#endif 956b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 957b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // should fail 958b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audioDevice->PlayoutDeviceName(-1, name, guid)); 959b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 960b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 961b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Terminate()); 962b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audioDevice->Initialized()); 963b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 964b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 965b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 966b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 967b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 968b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 96964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestDeviceSelection() 970b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 971b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 972b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Device Selection test:\n"); 973b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 974b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 975b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 976b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 977b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 978b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 979b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 980b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 981b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 982b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define PRINT_HEADING(a, b) \ 983b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 984b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Set" #a "Device(" #b ") => \n"); \ 985b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } \ 986b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 987b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define PRINT_HEADING_IDX(a, b,c ) \ 988b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 989b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Set" #a "Device(%d) (%s) => \n", b, c); \ 990b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } \ 991b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 992b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define PRINT_STR(a, b) \ 993b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 994b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char str[128]; \ 995b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (b == true) ? (sprintf(str, " %-17s: available\n", #a)) : (sprintf(str, " %-17s: NA\n", #a)); \ 996b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("%s", str); \ 997b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } \ 998b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 999b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 1000b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1001b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 1002b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 1003b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1004b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 100564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t nDevices(-1); 1006b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize]; 1007b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]; 1008b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1009b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ======= 1010b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Playout 1011b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1012b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nDevices = audioDevice->PlayoutDevices(); 1013b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(nDevices >= 0); 1014b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1015b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 1016b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1017b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->SetPlayoutDevice( 1018b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1019b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_HEADING(Playout, kDefaultCommunicationDevice); 1020b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1021b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Playout, available); 1022b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1023b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1024b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoPlayoutIsAvailable(&available)); 1025b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Playout, available); 1026b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1027b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1028b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1029b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Playout, false); 1030b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1031b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerVolumeIsAvailable(&available)); 1032b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Speaker Volume, available); 1033b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerMuteIsAvailable(&available)); 1034b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Speaker Mute, available); 1035b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1036b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice)); 1037b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_HEADING(Playout, kDefaultDevice); 1038b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1039b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Playout, available); 1040b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1041b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1042b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoPlayoutIsAvailable(&available)); 1043b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Playout, available); 1044b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1045b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1046b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1047b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Playout, false); 1048b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1049b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerVolumeIsAvailable(&available)); 1050b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Speaker Volume, available); 1051b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerMuteIsAvailable(&available)); 1052b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Speaker Mute, available); 1053b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 1054b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->SetPlayoutDevice( 1055b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == -1); 1056b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audioDevice->SetPlayoutDevice(AudioDeviceModule::kDefaultDevice)); 1057b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1058b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1059b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < nDevices; i++) 1060b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1061b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetPlayoutDevice(i)); 1062b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutDeviceName(i, name, guid)); 1063b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_HEADING_IDX(Playout, i, name); 1064b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1065b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Playout, available); 1066b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1067b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1068b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoPlayoutIsAvailable(&available)); 1069b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Playout, available); 1070b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1071b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1072b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Playout, false); 1073b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1074b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerVolumeIsAvailable(&available)); 1075b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Speaker Volume, available); 1076b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerMuteIsAvailable(&available)); 1077b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Speaker Mute, available); 1078b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1079b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1080b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ========= 1081b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Recording 1082b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1083b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nDevices = audioDevice->RecordingDevices(); 1084b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(nDevices >= 0); 1085b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1086b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 1087b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 1088b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->SetRecordingDevice( 1089b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == 0); 1090b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_HEADING(Recording, kDefaultCommunicationDevice); 1091b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&available)); 1092b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Recording, available); 1093b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1094b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1095b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecordingIsAvailable(&available)); 1096b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Recording, available); 1097b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1098b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1099b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // special fix to ensure that we don't log 'available' when recording is not OK 1101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Recording, false); 1102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 1104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Volume, available); 1105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneMuteIsAvailable(&available)); 1106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Mute, available); 1107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneBoostIsAvailable(&available)); 1108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Boost, available); 1109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetRecordingDevice(AudioDeviceModule::kDefaultDevice)); 1111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_HEADING(Recording, kDefaultDevice); 1112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&available)); 1113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Recording, available); 1114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecordingIsAvailable(&available)); 1117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Recording, available); 1118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // special fix to ensure that we don't log 'available' when recording is not OK 1122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Recording, false); 1123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 1125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Volume, available); 1126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneMuteIsAvailable(&available)); 1127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Mute, available); 1128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneBoostIsAvailable(&available)); 1129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Boost, available); 1130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 1131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->SetRecordingDevice( 1132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice) == -1); 1133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(-1, audioDevice->SetRecordingDevice(AudioDeviceModule::kDefaultDevice)); 1134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < nDevices; i++) 1137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetRecordingDevice(i)); 1139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingDeviceName(i, name, guid)); 1140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_HEADING_IDX(Recording, i, name); 1141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&available)); 1142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Recording, available); 1143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecordingIsAvailable(&available)); 1146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Recording, available); 1147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // special fix to ensure that we don't log 'available' when recording 1150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // is not OK 1151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Stereo Recording, false); 1152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 1154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Volume, available); 1155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneMuteIsAvailable(&available)); 1156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Mute, available); 1157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneBoostIsAvailable(&available)); 1158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_STR(Microphone Boost, available); 1159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Terminate()); 1162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audioDevice->Initialized()); 1163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 1165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 116964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestAudioTransport() 1170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 1172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Audio Transport test:\n"); 1173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 1174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 1176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 1181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 1183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 1185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 1186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool recIsAvailable(false); 1188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool playIsAvailable(false); 1189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectRecordingDevice() == -1) 1191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&recIsAvailable)); 1197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!recIsAvailable) 1198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG( 1200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "\nWARNING: Recording is not available for the selected device!\n \n"); 1201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 1204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&playIsAvailable)); 1210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (recIsAvailable && playIsAvailable) 1211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 1213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (!playIsAvailable) 1214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG( 1216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "\nWARNING: Playout is not available for the selected device!\n \n"); 1217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 122064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t samplesPerSec(0); 1221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (playIsAvailable) 1223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ========================================= 1225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start by playing out an existing PCM file 1226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerVolumeIsAvailable(&available)); 1228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 123064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 1231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MaxSpeakerVolume(&maxVolume)); 1232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetSpeakerVolume(maxVolume/2)); 1233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 1238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutSampleRate(&samplesPerSec)); 1239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (samplesPerSec == 48000) { 1240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout( 1241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, GetResource(_playoutFile48.c_str())); 1242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (samplesPerSec == 44100 || samplesPerSec == 44000) { 1243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout( 1244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, GetResource(_playoutFile44.c_str())); 1245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (samplesPerSec == 16000) { 1246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout( 1247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, GetResource(_playoutFile16.c_str())); 1248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (samplesPerSec == 8000) { 1249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout( 1250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, GetResource(_playoutFile8.c_str())); 1251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 1252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Sample rate (%u) is not supported!\n \n", 1253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org samplesPerSec); 1254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 1257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Playing()) 1259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Listen to the file being played (fs=%d) out " 1261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "and verify that the audio quality is OK.\n" 1262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop playing...\n \n", 1263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org samplesPerSec); 1264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 1265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 1268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout(false); 1271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled(false); 1274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (recIsAvailable) 1275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ==================================== 1277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Next, record from microphone to file 1278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 1280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 128264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 1283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MaxMicrophoneVolume(&maxVolume)); 1284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneVolume(maxVolume)); 1285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->StartRawInputFileRecording( 1288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetFilename(RecordedMicrophoneFile)) == 0); 1289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 1292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecording(&enabled)); 1293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enabled) 1294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensure file recording in mono 1296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelLeft)); 1297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 1299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(100); 1300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Recording()); 1302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Recording()) 1303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n \n> The microphone input signal is now being recorded " 1305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "to a PCM file.\n" 1306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Speak into the microphone to ensure that your voice is" 1307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " recorded.\n> Press any key to stop recording...\n \n"); 1308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 1309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecording(&enabled)); 1312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enabled) 1313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelBoth)); 1315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 1317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRawInputFileRecording()); 1319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (recIsAvailable && playIsAvailable) 1322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ========================== 1324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Play out the recorded file 1325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout(true, 1327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetFilename(RecordedMicrophoneFile)); 1328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 1334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 1335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(100); 1336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Playing()); 1339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Playing()) 1340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n \n> Listen to the recorded file and verify that the " 1342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "audio quality is OK.\n" 1343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop listening...\n \n"); 1344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 1345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 1348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout(false); 1351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (recIsAvailable && playIsAvailable) 1354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ============================== 1356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Finally, make full duplex test 1357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 135864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t playSamplesPerSec(0); 135964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t recSamplesPerSecRec(0); 1360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 1364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 1366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 136864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 1369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MaxMicrophoneVolume(&maxVolume)); 1370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneVolume(maxVolume)); 1371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 1374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 1375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutSampleRate(&playSamplesPerSec)); 1376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingSampleRate(&recSamplesPerSecRec)); 1377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (playSamplesPerSec != recSamplesPerSecRec) 1378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: sample rates does not match (fs_play=%u, fs_rec=%u)", 1380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org playSamplesPerSec, recSamplesPerSecRec); 1381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 1382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 1383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 1385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 1389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 1390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(100); 1391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Playing() && audioDevice->Recording()) 1393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n \n> Full duplex audio (fs=%u) is now active.\n" 1395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Speak into the microphone and verify that your voice is " 1396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "played out in loopback.\n> Press any key to stop...\n \n", 1397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org playSamplesPerSec); 1398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 1399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 1402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 1403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 1406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Terminate()); 1409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audioDevice->Initialized()); 1410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 1412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 1413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 141764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestSpeakerVolume() 1418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 1420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Speaker Volume test:\n"); 1421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 1422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 1424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 1429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 1431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 1433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 1434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 1436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 144264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t startVolume(0); 144364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t samplesPerSec(0); 1444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerVolumeIsAvailable(&available)); 1446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetSpeakerVolume(true); 1449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Volume control is not available for the selected " 1452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "device!\n \n"); 1453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // store initial volume setting 1457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitSpeaker()); 1458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerVolume(&startVolume)); 1459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // start at volume 0 1461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetSpeakerVolume(0)); 1462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ====================================== 1464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start playing out an existing PCM file 1465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 1471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutSampleRate(&samplesPerSec)); 1472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (48000 == samplesPerSec) { 1473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout( 1474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, GetResource(_playoutFile48.c_str())); 1475b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (44100 == samplesPerSec || samplesPerSec == 44000) { 1476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout( 1477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, GetResource(_playoutFile44.c_str())); 1478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (samplesPerSec == 16000) { 1479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout( 1480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, GetResource(_playoutFile16.c_str())); 1481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (samplesPerSec == 8000) { 1482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout( 1483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, GetResource(_playoutFile8.c_str())); 1484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 1485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Sample rate (%d) is not supported!\n \n", 1486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org samplesPerSec); 1487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 1490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Playing()); 1493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Playing()) 1494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Listen to the file being played out and verify that the " 1496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "selected speaker volume is varied between [~0] and [~MAX].\n" 1497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> The file shall be played out with an increasing volume level " 1498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "correlated to the speaker volume.\n" 1499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop playing...\n \n"); 1500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(10000); 1501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 1504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetSpeakerVolume(false); 1507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout(false); 1508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore volume setting 1510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetSpeakerVolume(startVolume)); 1511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 1513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 1514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 151864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestSpeakerMute() 1519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 1521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Speaker Mute test:\n"); 1522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 1523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 1525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 1530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 1532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 1534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 1535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 1537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 1543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool startMute(false); 154464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t samplesPerSec(0); 1545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerMuteIsAvailable(&available)); 1547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetSpeakerMute(true); 1550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG( 1553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "\nERROR: Mute control is not available for the selected" 1554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " device!\n \n"); 1555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1557b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // store initial mute setting 1559b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitSpeaker()); 1560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SpeakerMute(&startMute)); 1561b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // start with no mute 1563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetSpeakerMute(false)); 1564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ====================================== 1566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start playing out an existing PCM file 1567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 1573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutSampleRate(&samplesPerSec)); 1574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (48000 == samplesPerSec) 1575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout(true, _playoutFile48.c_str()); 1576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (44100 == samplesPerSec || 44000 == samplesPerSec) 1577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout(true, _playoutFile44.c_str()); 1578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Sample rate (%d) is not supported!\n \n", 1581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org samplesPerSec); 1582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 1585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Playing()); 1588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Playing()) 1589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Listen to the file being played out and verify that the" 1591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " selected speaker mute control is toggled between [MUTE ON] and" 1592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " [MUTE OFF].\n> You should only hear the file during the" 1593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " 'MUTE OFF' periods.\n" 1594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop playing...\n \n"); 1595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 1596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 1599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetSpeakerMute(false); 1602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFilePlayout(false); 1603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore mute setting 1605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetSpeakerMute(startMute)); 1606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 1608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 1609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 161364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestMicrophoneVolume() 1614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 1616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Microphone Volume test:\n"); 1617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 1618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 1620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1622b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 1625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 1627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 1629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 1630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectRecordingDevice() == -1) 1632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 1638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 1639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetMicrophoneVolume(true); 1642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Volume control is not available for the selected " 1645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "device!\n \n"); 1646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 1650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 1659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Playout is not available for the selected " 1662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "device!\n \n"); 1663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nEnable recording of microphone input to file (%s) during this" 1667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " test (Y/N)?\n: ", 1668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RecordedMicrophoneVolumeFile); 1669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char ch; 1670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool fileRecording(false); 1671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(scanf(" %c", &ch) > 0); 1672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ch = toupper(ch); 1673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ch == 'Y') 1674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fileRecording = true; 1676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 167864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t startVolume(0); 1679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled(false); 1680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // store initial volume setting 1682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitMicrophone()); 1683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolume(&startVolume)); 1684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // start at volume 0 1686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneVolume(0)); 1687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ====================================================================== 1689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start recording from the microphone while the mic volume is changed 1690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // continuously. 1691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Also, start playing out the input to enable real-time verification. 1692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fileRecording) 1694b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRawInputFileRecording(RecordedMicrophoneVolumeFile)); 1696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&available)); 1699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1701b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 1702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecording(&enabled)); 1703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enabled) 1704b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1705b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensures a mono file 1706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelRight)); 1707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 1709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1710b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1713b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 1714b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 1715b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1716b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Recording()); 1718b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Playing()); 1719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Recording() && audioDevice->Playing()) 1720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the selected " 1722b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "microphone volume is varied between [~0] and [~MAX].\n" 1723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> You should hear your own voice with an increasing volume level" 1724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " correlated to the microphone volume.\n" 1725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> After a finalized test (and if file recording was enabled) " 1726b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "verify the recorded result off line.\n" 1727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop...\n \n"); 1728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 1729b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1730b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1731b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fileRecording) 1732b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1733b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRawInputFileRecording()); 1734b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1735b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 1736b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 1737b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1738b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecordingIsAvailable(&available)); 1739b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1740b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetMicrophoneVolume(false); 1741b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 1742b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1743b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore volume setting 1744b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneVolume(startVolume)); 1745b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1746b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 1747b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 1748b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1749b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1750b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1751b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 175264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestMicrophoneMute() 1753b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1754b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 1755b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Microphone Mute test:\n"); 1756b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 1757b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1758b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 1759b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1760b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1761b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1762b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1763b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 1764b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1765b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 1766b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1767b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 1768b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 1769b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1770b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectRecordingDevice() == -1) 1771b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1772b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1773b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1774b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1775b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1776b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 1777b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneMuteIsAvailable(&available)); 1778b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1779b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1780b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetMicrophoneMute(true); 1781b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1782b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1783b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Mute control is not available for the selected" 1784b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " device!\n \n"); 1785b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1786b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1787b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1788b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 1789b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1790b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1791b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1792b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1793b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1794b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1795b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1796b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1797b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 1798b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1799b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1800b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Playout is not available for the selected " 1801b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "device!\n \n"); 1802b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1803b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1804b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1805b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nEnable recording of microphone input to file (%s) during this " 1806b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "test (Y/N)?\n: ", 1807b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RecordedMicrophoneMuteFile); 1808b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char ch; 1809b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool fileRecording(false); 1810b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(scanf(" %c", &ch) > 0); 1811b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ch = toupper(ch); 1812b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ch == 'Y') 1813b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1814b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fileRecording = true; 1815b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1816b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1817b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool startMute(false); 1818b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled(false); 1819b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1820b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // store initial volume setting 1821b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitMicrophone()); 1822b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneMute(&startMute)); 1823b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1824b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // start at no mute 1825b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneMute(false)); 1826b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1827b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ================================================================== 1828b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start recording from the microphone while the mic mute is toggled 1829b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // continuously. 1830b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Also, start playing out the input to enable real-time verification. 1831b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1832b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fileRecording) 1833b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1834b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRawInputFileRecording(RecordedMicrophoneMuteFile)); 1835b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1836b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1837b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&available)); 1838b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1839b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1840b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 1841b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecording(&enabled)); 1842b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enabled) 1843b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1844b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensure file recording in mono 1845b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelLeft)); 1846b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1847b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 1848b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1849b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1850b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1851b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1852b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 1853b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 1854b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1855b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1856b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Recording()); 1857b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Playing()); 1858b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Recording() && audioDevice->Playing()) 1859b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1860b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the selected " 1861b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "microphone mute control is toggled between [MUTE ON] and [MUTE OFF]." 1862b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "\n> You should only hear your own voice in loopback during the" 1863b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " 'MUTE OFF' periods.\n> After a finalized test (and if file " 1864b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "recording was enabled) verify the recorded result off line.\n" 1865b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop...\n \n"); 1866b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 1867b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1868b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1869b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fileRecording) 1870b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1871b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRawInputFileRecording()); 1872b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1873b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 1874b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 1875b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 1876b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1877b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetMicrophoneMute(false); 1878b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 1879b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1880b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore volume setting 1881b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneMute(startMute)); 1882b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1883b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 1884b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 1885b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1886b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1887b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1888b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 188964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestMicrophoneBoost() 1890b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1891b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 1892b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Microphone Boost test:\n"); 1893b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 1894b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1895b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 1896b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1897b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1898b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1899b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1900b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 1901b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1902b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 1903b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1904b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 1905b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 1906b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1907b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectRecordingDevice() == -1) 1908b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1909b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1910b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1911b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1912b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1913b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 1914b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneBoostIsAvailable(&available)); 1915b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1916b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1917b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetMicrophoneBoost(true); 1918b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1919b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1920b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG( 1921b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "\nERROR: Boost control is not available for the selected device!\n \n"); 1922b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1923b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1924b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1925b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 1926b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1927b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 1928b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1929b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1930b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1931b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1932b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1933b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1934b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 1935b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 1936b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1937b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Playout is not available for the selected device!\n \n"); 1938b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1939b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1940b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1941b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nEnable recording of microphone input to file (%s) during this " 1942b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "test (Y/N)?\n: ", 1943b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RecordedMicrophoneBoostFile); 1944b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char ch; 1945b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool fileRecording(false); 1946b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(scanf(" %c", &ch) > 0); 1947b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ch = toupper(ch); 1948b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ch == 'Y') 1949b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1950b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fileRecording = true; 1951b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1952b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1953b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool startBoost(false); 1954b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled(false); 1955b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1956b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // store initial volume setting 1957b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitMicrophone()); 1958b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneBoost(&startBoost)); 1959b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1960b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // start at no boost 1961b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneBoost(false)); 1962b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1963b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ================================================================== 1964b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start recording from the microphone while the mic boost is toggled 1965b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // continuously. 1966b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Also, start playing out the input to enable real-time verification. 1967b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1968b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fileRecording) 1969b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1970b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRawInputFileRecording(RecordedMicrophoneBoostFile)); 1971b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1972b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 1973b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&available)); 1974b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1975b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1976b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 1977b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecording(&enabled)); 1978b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enabled) 1979b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1980b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensure file recording in mono 1981b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelLeft)); 1982b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1983b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 1984b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1985b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 1986b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 1987b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1988b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 1989b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 1990b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1991b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1992b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Recording()); 1993b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Playing()); 1994b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Recording() && audioDevice->Playing()) 1995b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1996b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the selected " 1997b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "microphone boost control is toggled between [BOOST ON] and [BOOST OFF].\n" 1998b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> You should hear your own voice with an increased volume level " 1999b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "during the 'BOOST ON' periods.\n \n" 2000b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> After a finalized test (and if file recording was enabled) verify" 2001b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " the recorded result off line.\n" 2002b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop...\n \n"); 2003b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 2004b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2005b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2006b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fileRecording) 2007b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2008b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRawInputFileRecording()); 2009b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2010b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 2011b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 2012b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 2013b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2014b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetMicrophoneBoost(false); 2015b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 2016b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2017b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore boost setting 2018b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneBoost(startBoost)); 2019b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2020b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 2021b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 2022b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2023b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 2024b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2025b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 202664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestMicrophoneAGC() 2027b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 2028b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 2029b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Microphone AGC test:\n"); 2030b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 2031b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2032b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 2033b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2034b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2035b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2036b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2037b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 2038b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2039b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 2040b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2041b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 2042b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 2043b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2044b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectRecordingDevice() == -1) 2045b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2046b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 2047b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2048b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2049b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2050b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 2051b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 2052b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2053b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2054b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetMicrophoneAGC(true); 2055b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 2056b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2057b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: It is not possible to control the microphone volume" 2058b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " for the selected device!\n \n"); 2059b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2060b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2061b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2062b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 2063b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2064b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 2065b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2066b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2067b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2068b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 2069b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2070b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2071b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 2072b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 2073b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2074b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Playout is not available for the selected device!\n \n"); 2075b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2076b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2077b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2078b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nEnable recording of microphone input to file (%s) during " 2079b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "this test (Y/N)?\n: ", 2080b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RecordedMicrophoneAGCFile); 2081b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char ch; 2082b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool fileRecording(false); 2083b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(scanf(" %c", &ch) > 0); 2084b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ch = toupper(ch); 2085b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ch == 'Y') 2086b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2087b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fileRecording = true; 2088b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2089b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 209064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t startVolume(0); 2091b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled(false); 2092b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2093b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // store initial volume setting 2094b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitMicrophone()); 2095b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolume(&startVolume)); 2096b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2097b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ==================================================================== 2098b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start recording from the microphone while the mic volume is changed 2099b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // continuously 2100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // by the emulated AGC (implemented by our audio transport). 2101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Also, start playing out the input to enable real-time verification. 2102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fileRecording) 2104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRawInputFileRecording(RecordedMicrophoneAGCFile)); 2106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 2108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&available)); 2109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetAGC(true)); 2112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 2113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecording(&enabled)); 2114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enabled) 2115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // ensures a mono file 2117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetRecordingChannel(AudioDeviceModule::kChannelRight)); 2118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 2120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&available)); 2122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 2125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 2126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->AGC()); 2129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Recording()); 2130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Playing()); 2131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Recording() && audioDevice->Playing()) 2132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the volume of" 2134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " the selected microphone is varied between [~0] and [~MAX].\n" 2135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> You should hear your own voice with an increasing volume level" 2136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " correlated to an emulated AGC setting.\n" 2137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> After a finalized test (and if file recording was enabled) verify" 2138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " the recorded result off line.\n" 2139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop...\n \n"); 2140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 2141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fileRecording) 2144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRawInputFileRecording()); 2146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetAGC(false)); 2148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 2149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 2150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 2151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecordingIsAvailable(&available)); 2152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetMicrophoneAGC(false); 2154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 2155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // restore volume setting 2157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneVolume(startVolume)); 2158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 2160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 2161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 2163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 216564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestLoopback() 2166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 2167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 2168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Loopback measurement test:\n"); 2169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 2170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 2172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 2177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 2179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 2181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 2182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool recIsAvailable(false); 2184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool playIsAvailable(false); 218564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint8_t nPlayChannels(0); 218664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint8_t nRecChannels(0); 2187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectRecordingDevice() == -1) 2189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 2191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&recIsAvailable)); 2195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!recIsAvailable) 2196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Recording is not available for the selected device!\n \n"); 2198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 2202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 2204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&playIsAvailable)); 2208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (recIsAvailable && playIsAvailable) 2209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 2211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetLoopbackMeasurements(true); 2212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (!playIsAvailable) 2213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Playout is not available for the selected device!\n \n"); 2215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled(false); 2219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 2220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (recIsAvailable && playIsAvailable) 2222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 222364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t playSamplesPerSec(0); 222464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t recSamplesPerSecRec(0); 2225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 2227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 2229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecordingIsAvailable(&available)); 2231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetStereoRecording(true)); 2234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoPlayoutIsAvailable(&available)); 2237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetStereoPlayout(true)); 2240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 2243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 224564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 2246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MaxMicrophoneVolume(&maxVolume)); 2247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneVolume(maxVolume)); 2248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 2251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 2252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutSampleRate(&playSamplesPerSec)); 2253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingSampleRate(&recSamplesPerSecRec)); 2254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoPlayout(&enabled)); 2255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enabled ? nPlayChannels = 2 : nPlayChannels = 1; 2256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecording(&enabled)); 2257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enabled ? nRecChannels = 2 : nRecChannels = 1; 2258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 2259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 2260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Playing() && audioDevice->Recording()) 2262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n \n> Loopback audio is now active.\n" 2264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Rec : fs=%u, #channels=%u.\n" 2265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Play: fs=%u, #channels=%u.\n" 2266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Speak into the microphone and verify that your voice is" 2267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " played out in loopback.\n" 2268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop...\n \n", 2269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org recSamplesPerSecRec, nRecChannels, playSamplesPerSec, 2270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nPlayChannels); 2271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(30000); 2272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 2275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 2276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 2277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 2279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetLoopbackMeasurements(false); 2280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Terminate()); 2283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audioDevice->Initialized()); 2284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 2286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 2287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 2289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 229164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestDeviceRemoval() 2292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 2293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 2294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Device removal test:\n"); 2295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 2296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 2298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 2303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 2305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 2307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 2308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool recIsAvailable(false); 2310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool playIsAvailable(false); 231164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint8_t nPlayChannels(0); 231264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint8_t nRecChannels(0); 231364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint8_t loopCount(0); 2314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org while (loopCount < 2) 2316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectRecordingDevice() == -1) 2318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 2320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingIsAvailable(&recIsAvailable)); 2324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!recIsAvailable) 2325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Recording is not available for the selected device!\n \n"); 2327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 2331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 2333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutIsAvailable(&playIsAvailable)); 2337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (recIsAvailable && playIsAvailable) 2338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 2340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (!playIsAvailable) 2341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Playout is not available for the selected device!\n \n"); 2343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool available(false); 2347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool enabled(false); 2348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (recIsAvailable && playIsAvailable) 2350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 235164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t playSamplesPerSec(0); 235264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t recSamplesPerSecRec(0); 2353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 2355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 2357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecordingIsAvailable(&available)); 2359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetStereoRecording(true)); 2362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoPlayoutIsAvailable(&available)); 2365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetStereoPlayout(true)); 2368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MicrophoneVolumeIsAvailable(&available)); 2371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (available) 2372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 237364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVolume(0); 2374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->MaxMicrophoneVolume(&maxVolume)); 2375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetMicrophoneVolume(maxVolume)); 2376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 2379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 2380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->PlayoutSampleRate(&playSamplesPerSec)); 2381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RecordingSampleRate(&recSamplesPerSecRec)); 2382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoPlayout(&enabled)); 2383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enabled ? nPlayChannels = 2 : nPlayChannels = 1; 2384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StereoRecording(&enabled)); 2385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enabled ? nRecChannels = 2 : nRecChannels = 1; 2386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 2387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 2388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::AudioLayer audioLayer; 2390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->ActiveAudioLayer(&audioLayer)); 2391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioLayer == AudioDeviceModule::kLinuxPulseAudio) 2393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n \n> PulseAudio loopback audio is now active.\n" 2395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Rec : fs=%u, #channels=%u.\n" 2396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Play: fs=%u, #channels=%u.\n" 2397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Speak into the microphone and verify that your voice is" 2398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " played out in loopback.\n" 2399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Unplug the device and make sure that your voice is played" 2400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " out in loop back on the built-in soundcard.\n" 2401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Then press any key...\n", 2402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org recSamplesPerSecRec, nRecChannels, playSamplesPerSec, 2403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nPlayChannels); 2404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 2406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (audioDevice->Playing() && audioDevice->Recording()) 2407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (loopCount < 1) 2409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n \n> Loopback audio is now active.\n" 2411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Rec : fs=%u, #channels=%u.\n" 2412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Play: fs=%u, #channels=%u.\n" 2413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Speak into the microphone and verify that your voice" 2414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " is played out in loopback.\n" 2415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Unplug the device and wait for the error message...\n", 2416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org recSamplesPerSecRec, nRecChannels, 2417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org playSamplesPerSec, nPlayChannels); 2418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioEventObserver->_error 2420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org = (AudioDeviceObserver::ErrorCode) (-1); 2421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org while (_audioEventObserver->_error 2422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org == (AudioDeviceObserver::ErrorCode) (-1)) 2423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(500); 2425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 2427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n \n> Loopback audio is now active.\n" 2429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Rec : fs=%u, #channels=%u.\n" 2430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Play: fs=%u, #channels=%u.\n" 2431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Speak into the microphone and verify that your voice" 2432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " is played out in loopback.\n" 2433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "> Press any key to stop...\n", 2434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org recSamplesPerSecRec, nRecChannels, 2435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org playSamplesPerSec, nPlayChannels); 2436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 2438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 2442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 2443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 2444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 2446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (loopCount < 1) 2448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n \n> Stopped!\n"); 2450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("> Now reinsert device if you want to enumerate it.\n"); 2451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("> Press any key when done.\n"); 2452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 2453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org loopCount++; 2456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 24573b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org } // loopCount 2458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Terminate()); 2460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audioDevice->Initialized()); 2461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 2463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 2464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 2466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 246864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestExtra() 2469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 2470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 2471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Extra test:\n"); 2472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 2473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 2475b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 2480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 2482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 2484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 2485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Terminate()); 2487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(audioDevice->Initialized()); 2488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 2490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 2491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 2493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 249564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::SelectRecordingDevice() 2496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 249764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t nDevices = _audioDevice->RecordingDevices(); 2498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize]; 2499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]; 250064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t ret(-1); 2501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 2503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nSelect Recording Device\n \n"); 2504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" (%d) Default\n", 0); 2505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" (%d) Default Communication [Win 7]\n", 1); 2506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("- - - - - - - - - - - - - - - - - - - -\n"); 2507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < nDevices; i++) 2508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RecordingDeviceName(i, name, guid)); 2510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" (%d) Device %d (%s)\n", i+10, i, name); 2511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n: "); 2513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int sel(0); 2515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scanf("%u", &sel); 2517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (sel == 0) 2519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, (ret = _audioDevice->SetRecordingDevice(AudioDeviceModule::kDefaultDevice))); 2521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (sel == 1) 2523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((ret = _audioDevice->SetRecordingDevice( 2525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice)) == 0); 2526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (sel < (nDevices+10)) 2528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, (ret = _audioDevice->SetRecordingDevice(sel-10))); 2530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 2532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 2536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nSelect Recording Device\n \n"); 2537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < nDevices; i++) 2538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->RecordingDeviceName(i, name, guid)); 2540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" (%d) Device %d (%s)\n", i, i, name); 2541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n: "); 2543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int sel(0); 2544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(scanf("%u", &sel) > 0); 2545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (sel < (nDevices)) 2546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, (ret = _audioDevice->SetRecordingDevice(sel))); 2548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 2549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 2553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return ret; 2555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 255764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::SelectPlayoutDevice() 2558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 255964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int16_t nDevices = _audioDevice->PlayoutDevices(); 2560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize]; 2561b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]; 2562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _WIN32 2564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nSelect Playout Device\n \n"); 2565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" (%d) Default\n", 0); 2566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" (%d) Default Communication [Win 7]\n", 1); 2567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("- - - - - - - - - - - - - - - - - - - -\n"); 2568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < nDevices; i++) 2569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->PlayoutDeviceName(i, name, guid)); 2571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" (%d) Device %d (%s)\n", i+10, i, name); 2572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n: "); 2574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int sel(0); 2576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scanf("%u", &sel); 2578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 257964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t ret(0); 2580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (sel == 0) 2582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((ret = _audioDevice->SetPlayoutDevice( 2584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultDevice)) == 0); 2585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (sel == 1) 2587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE((ret = _audioDevice->SetPlayoutDevice( 2589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::kDefaultCommunicationDevice)) == 0); 2590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (sel < (nDevices+10)) 2592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, (ret = _audioDevice->SetPlayoutDevice(sel-10))); 2594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 2596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 2600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nSelect Playout Device\n \n"); 2601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < nDevices; i++) 2602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, _audioDevice->PlayoutDeviceName(i, name, guid)); 2604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" (%d) Device %d (%s)\n", i, i, name); 2605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n: "); 2607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int sel(0); 2608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(scanf("%u", &sel) > 0); 260964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t ret(0); 2610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (sel < (nDevices)) 2611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, (ret = _audioDevice->SetPlayoutDevice(sel))); 2613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 2614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 2618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return ret; 2620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 262264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t FuncTestManager::TestAdvancedMBAPI() 2623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 2624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n=======================================\n"); 2625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Advanced mobile device API test:\n"); 2626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("=======================================\n"); 2627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDevice == NULL) 2629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RESET_TEST; 2634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule* audioDevice = _audioDevice; 2636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->Init()); 2638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Initialized()); 2639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectRecordingDevice() == -1) 2641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 2643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (SelectPlayoutDevice() == -1) 2646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nERROR: Device selection failed!\n \n"); 2648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 2649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(true); 2651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetLoopbackMeasurements(true); 2652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(_audioTransport)); 2654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start recording 2655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitRecording()); 2656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartRecording()); 2657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Start playout 2658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->InitPlayout()); 2659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StartPlayout()); 2660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Recording()); 2662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(audioDevice->Playing()); 2663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32_WCE) || defined(WEBRTC_IOS) 2665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nResetAudioDevice\n \n"); 2666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Recording() && audioDevice->Playing()) 2667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the audio is good.\n\ 2669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org> Press any key to stop...\n \n"); 2670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 2671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int p=0; p<=60; p+=20) 2673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Resetting sound device several time with pause %d ms\n", p); 2675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int l=0; l<20; ++l) 2676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->ResetAudioDevice()); 2678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(p); 2679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the audio is good.\n"); 2681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SleepMs(2000); 2682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 2684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_IOS) 2686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool loudspeakerOn(false); 2687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nSet playout spaker\n \n"); 2688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->Recording() && audioDevice->Playing()) 2689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the audio is good.\n\ 2691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org> Press any key to stop...\n \n"); 2692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 2693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2694b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Set to use speaker\n"); 2696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetLoudspeakerStatus(true)); 2697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the audio is" 2698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " from the loudspeaker.\n\ 2699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org> Press any key to stop...\n \n"); 2700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 27018fb9156f2f33aee3680554d19a9ab25e5de3af0efischman@webrtc.org EXPECT_EQ(0, audioDevice->GetLoudspeakerStatus(&loudspeakerOn)); 2702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(loudspeakerOn); 2703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2704b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Set to not use speaker\n"); 2705b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->SetLoudspeakerStatus(false)); 2706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n> Speak into the microphone and verify that the audio is not" 2707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " from the loudspeaker.\n\ 2708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org> Press any key to stop...\n \n"); 2709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE(DEFAULT_PAUSE_TIME); 27108fb9156f2f33aee3680554d19a9ab25e5de3af0efischman@webrtc.org EXPECT_EQ(0, audioDevice->GetLoudspeakerStatus(&loudspeakerOn)); 2711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_FALSE(loudspeakerOn); 2712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 2713b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2714b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopRecording()); 2715b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->StopPlayout()); 2716b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, audioDevice->RegisterAudioCallback(NULL)); 2717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2718b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioTransport->SetFullDuplex(false); 2719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n"); 2721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PRINT_TEST_RESULTS; 2722b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 2724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 27263b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 2727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// EOF 2729