/* * 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 _acmA; scoped_ptr _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_