Home | History | Annotate | Download | only in test
      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 
     27 enum 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 
     47 struct 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 
     56 class ProcessThread;
     57 
     58 namespace webrtc
     59 {
     60 
     61 class AudioDeviceModule;
     62 class AudioEventObserver;
     63 class AudioTransport;
     64 
     65 // ----------------------------------------------------------------------------
     66 //  AudioEventObserver
     67 // ----------------------------------------------------------------------------
     68 
     69 class AudioEventObserver: public AudioDeviceObserver
     70 {
     71 public:
     72     virtual void OnErrorIsReported(const ErrorCode error);
     73     virtual void OnWarningIsReported(const WarningCode warning);
     74     AudioEventObserver(AudioDeviceModule* audioDevice);
     75     ~AudioEventObserver();
     76 public:
     77     ErrorCode _error;
     78     WarningCode _warning;
     79 };
     80 
     81 // ----------------------------------------------------------------------------
     82 //  AudioTransport
     83 // ----------------------------------------------------------------------------
     84 
     85 class AudioTransportImpl: public AudioTransport
     86 {
     87 public:
     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 
    111 public:
    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 
    150 private:
    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 
    177 class FuncTestManager
    178 {
    179 public:
    180     FuncTestManager();
    181     ~FuncTestManager();
    182     int32_t Init();
    183     int32_t Close();
    184     int32_t DoTest(const TestType testType);
    185 private:
    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();
    202 private:
    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