You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			168 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
| /*
 | |
|  *  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_
 |