1/* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#ifndef WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H 12#define WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H 13 14#include <list> 15#include <string> 16 17#include "webrtc/common_audio/resampler/include/resampler.h" 18#include "webrtc/modules/audio_device/include/audio_device.h" 19#include "webrtc/modules/audio_device/test/audio_device_test_defines.h" 20#include "webrtc/system_wrappers/include/file_wrapper.h" 21#include "webrtc/typedefs.h" 22 23 24#define ADM_AUDIO_LAYER AudioDeviceModule::kPlatformDefaultAudio 25//#define ADM_AUDIO_LAYER AudioDeviceModule::kLinuxPulseAudio 26 27enum TestType 28{ 29 TTInvalid = -1, 30 TTAll = 0, 31 TTAudioLayerSelection = 1, 32 TTDeviceEnumeration = 2, 33 TTDeviceSelection = 3, 34 TTAudioTransport = 4, 35 TTSpeakerVolume = 5, 36 TTMicrophoneVolume = 6, 37 TTSpeakerMute = 7, 38 TTMicrophoneMute = 8, 39 TTMicrophoneBoost = 9, 40 TTMicrophoneAGC = 10, 41 TTLoopback = 11, 42 TTDeviceRemoval = 13, 43 TTMobileAPI = 14, 44 TTTest = 66, 45}; 46 47struct AudioPacket 48{ 49 uint8_t dataBuffer[4 * 960]; 50 size_t nSamples; 51 size_t nBytesPerSample; 52 size_t nChannels; 53 uint32_t samplesPerSec; 54}; 55 56class ProcessThread; 57 58namespace webrtc 59{ 60 61class AudioDeviceModule; 62class AudioEventObserver; 63class AudioTransport; 64 65// ---------------------------------------------------------------------------- 66// AudioEventObserver 67// ---------------------------------------------------------------------------- 68 69class AudioEventObserver: public AudioDeviceObserver 70{ 71public: 72 virtual void OnErrorIsReported(const ErrorCode error); 73 virtual void OnWarningIsReported(const WarningCode warning); 74 AudioEventObserver(AudioDeviceModule* audioDevice); 75 ~AudioEventObserver(); 76public: 77 ErrorCode _error; 78 WarningCode _warning; 79}; 80 81// ---------------------------------------------------------------------------- 82// AudioTransport 83// ---------------------------------------------------------------------------- 84 85class AudioTransportImpl: public AudioTransport 86{ 87public: 88 int32_t RecordedDataIsAvailable(const void* audioSamples, 89 const size_t nSamples, 90 const size_t nBytesPerSample, 91 const size_t nChannels, 92 const uint32_t samplesPerSec, 93 const uint32_t totalDelayMS, 94 const int32_t clockDrift, 95 const uint32_t currentMicLevel, 96 const bool keyPressed, 97 uint32_t& newMicLevel) override; 98 99 int32_t NeedMorePlayData(const size_t nSamples, 100 const size_t nBytesPerSample, 101 const size_t nChannels, 102 const uint32_t samplesPerSec, 103 void* audioSamples, 104 size_t& nSamplesOut, 105 int64_t* elapsed_time_ms, 106 int64_t* ntp_time_ms) override; 107 108 AudioTransportImpl(AudioDeviceModule* audioDevice); 109 ~AudioTransportImpl(); 110 111public: 112 int32_t SetFilePlayout(bool enable, const char* fileName = NULL); 113 void SetFullDuplex(bool enable); 114 void SetSpeakerVolume(bool enable) 115 { 116 _speakerVolume = enable; 117 } 118 ; 119 void SetSpeakerMute(bool enable) 120 { 121 _speakerMute = enable; 122 } 123 ; 124 void SetMicrophoneMute(bool enable) 125 { 126 _microphoneMute = enable; 127 } 128 ; 129 void SetMicrophoneVolume(bool enable) 130 { 131 _microphoneVolume = enable; 132 } 133 ; 134 void SetMicrophoneBoost(bool enable) 135 { 136 _microphoneBoost = enable; 137 } 138 ; 139 void SetLoopbackMeasurements(bool enable) 140 { 141 _loopBackMeasurements = enable; 142 } 143 ; 144 void SetMicrophoneAGC(bool enable) 145 { 146 _microphoneAGC = enable; 147 } 148 ; 149 150private: 151 typedef std::list<AudioPacket*> AudioPacketList; 152 AudioDeviceModule* _audioDevice; 153 154 bool _playFromFile; 155 bool _fullDuplex; 156 bool _speakerVolume; 157 bool _speakerMute; 158 bool _microphoneVolume; 159 bool _microphoneMute; 160 bool _microphoneBoost; 161 bool _microphoneAGC; 162 bool _loopBackMeasurements; 163 164 FileWrapper& _playFile; 165 166 uint32_t _recCount; 167 uint32_t _playCount; 168 AudioPacketList _audioList; 169 170 Resampler _resampler; 171}; 172 173// ---------------------------------------------------------------------------- 174// FuncTestManager 175// ---------------------------------------------------------------------------- 176 177class FuncTestManager 178{ 179public: 180 FuncTestManager(); 181 ~FuncTestManager(); 182 int32_t Init(); 183 int32_t Close(); 184 int32_t DoTest(const TestType testType); 185private: 186 int32_t TestAudioLayerSelection(); 187 int32_t TestDeviceEnumeration(); 188 int32_t TestDeviceSelection(); 189 int32_t TestAudioTransport(); 190 int32_t TestSpeakerVolume(); 191 int32_t TestMicrophoneVolume(); 192 int32_t TestSpeakerMute(); 193 int32_t TestMicrophoneMute(); 194 int32_t TestMicrophoneBoost(); 195 int32_t TestLoopback(); 196 int32_t TestDeviceRemoval(); 197 int32_t TestExtra(); 198 int32_t TestMicrophoneAGC(); 199 int32_t SelectPlayoutDevice(); 200 int32_t SelectRecordingDevice(); 201 int32_t TestAdvancedMBAPI(); 202private: 203 // Paths to where the resource files to be used for this test are located. 204 std::string _playoutFile48; 205 std::string _playoutFile44; 206 std::string _playoutFile16; 207 std::string _playoutFile8; 208 209 rtc::scoped_ptr<ProcessThread> _processThread; 210 AudioDeviceModule* _audioDevice; 211 AudioEventObserver* _audioEventObserver; 212 AudioTransportImpl* _audioTransport; 213}; 214 215} // namespace webrtc 216 217#endif // #ifndef WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H 218