| /* |
| * 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/modules/audio_coding/main/interface/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/interface/event_wrapper.h" |
| #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h" |
| #include "webrtc/system_wrappers/interface/scoped_ptr.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 |
| scoped_ptr<AudioCodingModule> _acmA; |
| 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 |
| EventWrapper* _pullEventA; // pulling data from ACM |
| EventWrapper* _pushEventA; // pushing data to ACM |
| EventWrapper* _processEventA; // process |
| EventWrapper* _apiEventA; // API calls |
| // B |
| EventWrapper* _pullEventB; // pulling data from ACM |
| EventWrapper* _pushEventB; // pushing data to ACM |
| EventWrapper* _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]; |
| |
| AudioPlayoutMode _playoutModeA; |
| AudioPlayoutMode _playoutModeB; |
| |
| bool _verbose; |
| |
| int _dotPositionA; |
| int _dotMoveDirectionA; |
| int _dotPositionB; |
| int _dotMoveDirectionB; |
| |
| char _movingDot[41]; |
| |
| DTMFDetector* _dtmfCallback; |
| VADCallback* _vadCallbackA; |
| VADCallback* _vadCallbackB; |
| RWLockWrapper& _apiTestRWLock; |
| bool _randomTest; |
| int _testNumA; |
| int _testNumB; |
| }; |
| |
| } // namespace webrtc |
| |
| #endif // WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_APITEST_H_ |