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
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
14bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_utility.h"
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
16083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org#include <list>
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string>
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/common_audio/resampler/include/resampler.h"
20bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/include/audio_device.h"
21bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/test/audio_device_test_defines.h"
22bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/system_wrappers/interface/file_wrapper.h"
23bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/typedefs.h"
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_IOS) || defined(ANDROID)
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define USE_SLEEP_AS_PAUSE
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//#define USE_SLEEP_AS_PAUSE
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Sets the default pause time if using sleep as pause
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define DEFAULT_PAUSE_TIME 5000
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(USE_SLEEP_AS_PAUSE)
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define PAUSE(a) SleepMs(a);
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define PAUSE(a) AudioDeviceUtility::WaitForKey();
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define ADM_AUDIO_LAYER AudioDeviceModule::kPlatformDefaultAudio
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//#define ADM_AUDIO_LAYER AudioDeviceModule::kLinuxPulseAudio
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum TestType
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTInvalid = -1,
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTAll = 0,
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTAudioLayerSelection = 1,
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTDeviceEnumeration = 2,
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTDeviceSelection = 3,
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTAudioTransport = 4,
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTSpeakerVolume = 5,
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTMicrophoneVolume = 6,
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTSpeakerMute = 7,
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTMicrophoneMute = 8,
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTMicrophoneBoost = 9,
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTMicrophoneAGC = 10,
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTLoopback = 11,
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTDeviceRemoval = 13,
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTMobileAPI = 14,
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TTTest = 66,
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
63083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.orgstruct AudioPacket
64083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org{
65083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org    uint8_t dataBuffer[4 * 960];
66083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org    uint16_t nSamples;
67083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org    uint16_t nBytesPerSample;
68083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org    uint8_t nChannels;
69083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org    uint32_t samplesPerSec;
70083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org};
71083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ProcessThread;
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioDeviceModule;
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioEventObserver;
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioTransport;
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  AudioEventObserver
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioEventObserver: public AudioDeviceObserver
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual void OnErrorIsReported(const ErrorCode error);
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual void OnWarningIsReported(const WarningCode warning);
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioEventObserver(AudioDeviceModule* audioDevice);
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ~AudioEventObserver();
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ErrorCode _error;
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    WarningCode _warning;
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  AudioTransport
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioTransportImpl: public AudioTransport
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
10464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    virtual int32_t
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        RecordedDataIsAvailable(const void* audioSamples,
10664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                const uint32_t nSamples,
10764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                const uint8_t nBytesPerSample,
10864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                const uint8_t nChannels,
10964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                const uint32_t samplesPerSec,
11064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                const uint32_t totalDelayMS,
11164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                const int32_t clockDrift,
11264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                const uint32_t currentMicLevel,
11328832e1965ca0c22ca6a26bbd3387db4db640bedniklas.enbom@webrtc.org                                const bool keyPressed,
11464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                uint32_t& newMicLevel);
11564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org
11664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    virtual int32_t NeedMorePlayData(const uint32_t nSamples,
11764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                     const uint8_t nBytesPerSample,
11864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                     const uint8_t nChannels,
11964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                     const uint32_t samplesPerSec,
12064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                                     void* audioSamples,
12122f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org                                     uint32_t& nSamplesOut,
12281f8df9af96c6b4bf43234f2a0162146a5da6112wu@webrtc.org                                     int64_t* elapsed_time_ms,
12322f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org                                     int64_t* ntp_time_ms);
124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1250e6fa8c05cde2587e30dcf5e405132193d60dd42xians@webrtc.org    virtual int OnDataAvailable(const int voe_channels[],
12644f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                int number_of_voe_channels,
12744f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                const int16_t* audio_data,
12844f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                int sample_rate,
12944f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                int number_of_channels,
13044f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                int number_of_frames,
13144f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                int audio_delay_milliseconds,
13244f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                int current_volume,
13344f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                bool key_pressed,
13444f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org                                bool need_audio_processing);
13544f1239d9595c91f69f656e5beb1382463c4da8fxians@webrtc.org
13691d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org    virtual void PushCaptureData(int voe_channel, const void* audio_data,
13791d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org                                 int bits_per_sample, int sample_rate,
13891d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org                                 int number_of_channels,
13991d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org                                 int number_of_frames);
14091d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org
14191d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org    virtual void PullRenderData(int bits_per_sample, int sample_rate,
14291d88e1320d33fdc3648041bd941509e722f3ac4xians@webrtc.org                                int number_of_channels, int number_of_frames,
14322f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org                                void* audio_data,
14481f8df9af96c6b4bf43234f2a0162146a5da6112wu@webrtc.org                                int64_t* elapsed_time_ms,
14522f69bd27abc89979460df6d01de8685cb058aabwu@webrtc.org                                int64_t* ntp_time_ms);
14687c8b86c9f8a9929a2a564b2833244c6290e4701xians@webrtc.org
147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioTransportImpl(AudioDeviceModule* audioDevice);
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ~AudioTransportImpl();
149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
15164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SetFilePlayout(bool enable, const char* fileName = NULL);
152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void SetFullDuplex(bool enable);
153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void SetSpeakerVolume(bool enable)
154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        _speakerVolume = enable;
156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ;
158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void SetSpeakerMute(bool enable)
159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        _speakerMute = enable;
161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ;
163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void SetMicrophoneMute(bool enable)
164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        _microphoneMute = enable;
166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ;
168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void SetMicrophoneVolume(bool enable)
169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        _microphoneVolume = enable;
171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ;
173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void SetMicrophoneBoost(bool enable)
174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        _microphoneBoost = enable;
176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ;
178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void SetLoopbackMeasurements(bool enable)
179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        _loopBackMeasurements = enable;
181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ;
183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void SetMicrophoneAGC(bool enable)
184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        _microphoneAGC = enable;
186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ;
188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
190083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org    typedef std::list<AudioPacket*> AudioPacketList;
191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioDeviceModule* _audioDevice;
192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _playFromFile;
194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _fullDuplex;
195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _speakerVolume;
196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _speakerMute;
197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _microphoneVolume;
198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _microphoneMute;
199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _microphoneBoost;
200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _microphoneAGC;
201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _loopBackMeasurements;
202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    FileWrapper& _playFile;
204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
20564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    uint32_t _recCount;
20664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    uint32_t _playCount;
207083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org    AudioPacketList _audioList;
208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    Resampler _resampler;
210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  FuncTestManager
214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass FuncTestManager
217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    FuncTestManager();
220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ~FuncTestManager();
22164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t Init();
22264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t Close();
22364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t DoTest(const TestType testType);
224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
22564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestAudioLayerSelection();
22664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestDeviceEnumeration();
22764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestDeviceSelection();
22864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestAudioTransport();
22964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestSpeakerVolume();
23064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestMicrophoneVolume();
23164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestSpeakerMute();
23264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestMicrophoneMute();
23364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestMicrophoneBoost();
23464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestLoopback();
23564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestDeviceRemoval();
23664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestExtra();
23764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestMicrophoneAGC();
23864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SelectPlayoutDevice();
23964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SelectRecordingDevice();
24064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t TestAdvancedMBAPI();
241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Paths to where the resource files to be used for this test are located.
243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    std::string _playoutFile48;
244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    std::string _playoutFile44;
245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    std::string _playoutFile16;
246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    std::string _playoutFile8;
247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ProcessThread* _processThread;
249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioDeviceModule* _audioDevice;
250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioEventObserver* _audioEventObserver;
251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioTransportImpl* _audioTransport;
252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2543b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // #ifndef WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H
257