diff options
Diffstat (limited to 'webrtc/modules/audio_coding/main/test/APITest.h')
-rw-r--r-- | webrtc/modules/audio_coding/main/test/APITest.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/webrtc/modules/audio_coding/main/test/APITest.h b/webrtc/modules/audio_coding/main/test/APITest.h new file mode 100644 index 0000000000..d4c5b1ecdd --- /dev/null +++ b/webrtc/modules/audio_coding/main/test/APITest.h @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2012 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_MODULES_AUDIO_CODING_MAIN_TEST_APITEST_H_ +#define WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_APITEST_H_ + +#include "webrtc/base/scoped_ptr.h" +#include "webrtc/modules/audio_coding/main/include/audio_coding_module.h" +#include "webrtc/modules/audio_coding/main/test/ACMTest.h" +#include "webrtc/modules/audio_coding/main/test/Channel.h" +#include "webrtc/modules/audio_coding/main/test/PCMFile.h" +#include "webrtc/modules/audio_coding/main/test/utility.h" +#include "webrtc/system_wrappers/include/event_wrapper.h" +#include "webrtc/system_wrappers/include/rw_lock_wrapper.h" + +namespace webrtc { + +class Config; + +enum APITESTAction { + TEST_CHANGE_CODEC_ONLY = 0, + DTX_TEST = 1 +}; + +class APITest : public ACMTest { + public: + explicit APITest(const Config& config); + ~APITest(); + + void Perform(); + private: + int16_t SetUp(); + + static bool PushAudioThreadA(void* obj); + static bool PullAudioThreadA(void* obj); + static bool ProcessThreadA(void* obj); + static bool APIThreadA(void* obj); + + static bool PushAudioThreadB(void* obj); + static bool PullAudioThreadB(void* obj); + static bool ProcessThreadB(void* obj); + static bool APIThreadB(void* obj); + + void CheckVADStatus(char side); + + // Set Min delay, get delay, playout timestamp + void TestDelay(char side); + + // Unregister a codec & register again. + void TestRegisteration(char side); + + // Playout Mode, background noise mode. + // Receiver Frequency, playout frequency. + void TestPlayout(char receiveSide); + + // + void TestSendVAD(char side); + + void CurrentCodec(char side); + + void ChangeCodec(char side); + + void Wait(uint32_t waitLengthMs); + + void RunTest(char thread); + + bool PushAudioRunA(); + bool PullAudioRunA(); + bool ProcessRunA(); + bool APIRunA(); + + bool PullAudioRunB(); + bool PushAudioRunB(); + bool ProcessRunB(); + bool APIRunB(); + + //--- ACMs + rtc::scoped_ptr<AudioCodingModule> _acmA; + rtc::scoped_ptr<AudioCodingModule> _acmB; + + //--- Channels + Channel* _channel_A2B; + Channel* _channel_B2A; + + //--- I/O files + // A + PCMFile _inFileA; + PCMFile _outFileA; + // B + PCMFile _outFileB; + PCMFile _inFileB; + + //--- I/O params + // A + int32_t _outFreqHzA; + // B + int32_t _outFreqHzB; + + // Should we write to file. + // we might skip writing to file if we + // run the test for a long time. + bool _writeToFile; + //--- Events + // A + EventTimerWrapper* _pullEventA; // pulling data from ACM + EventTimerWrapper* _pushEventA; // pushing data to ACM + EventTimerWrapper* _processEventA; // process + EventWrapper* _apiEventA; // API calls + // B + EventTimerWrapper* _pullEventB; // pulling data from ACM + EventTimerWrapper* _pushEventB; // pushing data to ACM + EventTimerWrapper* _processEventB; // process + EventWrapper* _apiEventB; // API calls + + // keep track of the codec in either side. + uint8_t _codecCntrA; + uint8_t _codecCntrB; + + // Is set to true if there is no encoder in either side + bool _thereIsEncoderA; + bool _thereIsEncoderB; + bool _thereIsDecoderA; + bool _thereIsDecoderB; + + bool _sendVADA; + bool _sendDTXA; + ACMVADMode _sendVADModeA; + + bool _sendVADB; + bool _sendDTXB; + ACMVADMode _sendVADModeB; + + int32_t _minDelayA; + int32_t _minDelayB; + bool _payloadUsed[32]; + + bool _verbose; + + int _dotPositionA; + int _dotMoveDirectionA; + int _dotPositionB; + int _dotMoveDirectionB; + + char _movingDot[41]; + + VADCallback* _vadCallbackA; + VADCallback* _vadCallbackB; + RWLockWrapper& _apiTestRWLock; + bool _randomTest; + int _testNumA; + int _testNumB; +}; + +} // namespace webrtc + +#endif // WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_APITEST_H_ |