blob: 5efae50593d322075999f8778fac27f4f0489037 [file] [log] [blame]
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H
#define WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H
#include "../source/audio_device_utility.h"
#include <string>
#include "typedefs.h"
#include "audio_device.h"
#include "audio_device_test_defines.h"
#include "file_wrapper.h"
#include "list_wrapper.h"
#include "resampler.h"
#if defined(MAC_IPHONE) || defined(ANDROID)
#define USE_SLEEP_AS_PAUSE
#else
//#define USE_SLEEP_AS_PAUSE
#endif
// Sets the default pause time if using sleep as pause
#define DEFAULT_PAUSE_TIME 5000
#if defined(USE_SLEEP_AS_PAUSE)
#define PAUSE(a) AudioDeviceUtility::Sleep(a);
#else
#define PAUSE(a) AudioDeviceUtility::WaitForKey();
#endif
#define SLEEP(a) AudioDeviceUtility::Sleep(a);
#define ADM_AUDIO_LAYER AudioDeviceModule::kPlatformDefaultAudio
//#define ADM_AUDIO_LAYER AudioDeviceModule::kLinuxPulseAudio
enum TestType
{
TTInvalid = -1,
TTAll = 0,
TTAudioLayerSelection = 1,
TTDeviceEnumeration = 2,
TTDeviceSelection = 3,
TTAudioTransport = 4,
TTSpeakerVolume = 5,
TTMicrophoneVolume = 6,
TTSpeakerMute = 7,
TTMicrophoneMute = 8,
TTMicrophoneBoost = 9,
TTMicrophoneAGC = 10,
TTLoopback = 11,
TTDeviceRemoval = 13,
TTMobileAPI = 14,
TTTest = 66,
};
class ProcessThread;
namespace webrtc
{
class AudioDeviceModule;
class AudioEventObserver;
class AudioTransport;
// ----------------------------------------------------------------------------
// AudioEventObserver
// ----------------------------------------------------------------------------
class AudioEventObserver: public AudioDeviceObserver
{
public:
virtual void OnErrorIsReported(const ErrorCode error);
virtual void OnWarningIsReported(const WarningCode warning);
AudioEventObserver(AudioDeviceModule* audioDevice);
~AudioEventObserver();
public:
ErrorCode _error;
WarningCode _warning;
private:
AudioDeviceModule* _audioDevice;
};
// ----------------------------------------------------------------------------
// AudioTransport
// ----------------------------------------------------------------------------
class AudioTransportImpl: public AudioTransport
{
public:
virtual WebRtc_Word32
RecordedDataIsAvailable(const WebRtc_Word8* audioSamples,
const WebRtc_UWord32 nSamples,
const WebRtc_UWord8 nBytesPerSample,
const WebRtc_UWord8 nChannels,
const WebRtc_UWord32 samplesPerSec,
const WebRtc_UWord32 totalDelayMS,
const WebRtc_Word32 clockDrift,
const WebRtc_UWord32 currentMicLevel,
WebRtc_UWord32& newMicLevel);
virtual WebRtc_Word32 NeedMorePlayData(const WebRtc_UWord32 nSamples,
const WebRtc_UWord8 nBytesPerSample,
const WebRtc_UWord8 nChannels,
const WebRtc_UWord32 samplesPerSec,
WebRtc_Word8* audioSamples,
WebRtc_UWord32& nSamplesOut);
AudioTransportImpl(AudioDeviceModule* audioDevice);
~AudioTransportImpl();
public:
WebRtc_Word32 SetFilePlayout(bool enable, const WebRtc_Word8* fileName =
NULL);
void SetFullDuplex(bool enable);
void SetSpeakerVolume(bool enable)
{
_speakerVolume = enable;
}
;
void SetSpeakerMute(bool enable)
{
_speakerMute = enable;
}
;
void SetMicrophoneMute(bool enable)
{
_microphoneMute = enable;
}
;
void SetMicrophoneVolume(bool enable)
{
_microphoneVolume = enable;
}
;
void SetMicrophoneBoost(bool enable)
{
_microphoneBoost = enable;
}
;
void SetLoopbackMeasurements(bool enable)
{
_loopBackMeasurements = enable;
}
;
void SetMicrophoneAGC(bool enable)
{
_microphoneAGC = enable;
}
;
private:
AudioDeviceModule* _audioDevice;
bool _playFromFile;
bool _fullDuplex;
bool _speakerVolume;
bool _speakerMute;
bool _microphoneVolume;
bool _microphoneMute;
bool _microphoneBoost;
bool _microphoneAGC;
bool _loopBackMeasurements;
FileWrapper& _playFile;
WebRtc_UWord32 _recCount;
WebRtc_UWord32 _playCount;
ListWrapper _audioList;
Resampler _resampler;
};
// ----------------------------------------------------------------------------
// FuncTestManager
// ----------------------------------------------------------------------------
class FuncTestManager
{
public:
FuncTestManager();
~FuncTestManager();
WebRtc_Word32 Init();
WebRtc_Word32 Close();
WebRtc_Word32 DoTest(const TestType testType);
private:
WebRtc_Word32 TestAudioLayerSelection();
WebRtc_Word32 TestDeviceEnumeration();
WebRtc_Word32 TestDeviceSelection();
WebRtc_Word32 TestAudioTransport();
WebRtc_Word32 TestSpeakerVolume();
WebRtc_Word32 TestMicrophoneVolume();
WebRtc_Word32 TestSpeakerMute();
WebRtc_Word32 TestMicrophoneMute();
WebRtc_Word32 TestMicrophoneBoost();
WebRtc_Word32 TestLoopback();
WebRtc_Word32 TestDeviceRemoval();
WebRtc_Word32 TestExtra();
WebRtc_Word32 TestMicrophoneAGC();
WebRtc_Word32 SelectPlayoutDevice();
WebRtc_Word32 SelectRecordingDevice();
WebRtc_Word32 TestAdvancedMBAPI();
private:
// Paths to where the resource files to be used for this test are located.
std::string _resourcePath;
std::string _playoutFile48;
std::string _playoutFile44;
std::string _playoutFile16;
std::string _playoutFile8;
ProcessThread* _processThread;
AudioDeviceModule* _audioDevice;
AudioEventObserver* _audioEventObserver;
AudioTransportImpl* _audioTransport;
};
} // namespace webrtc
#endif // #ifndef WEBRTC_AUDIO_DEVICE_FUNC_TEST_MANAGER_H