• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_MODULES_AUDIO_CODING_TEST_APITEST_H_
12 #define WEBRTC_MODULES_AUDIO_CODING_TEST_APITEST_H_
13 
14 #include "webrtc/base/scoped_ptr.h"
15 #include "webrtc/modules/audio_coding/include/audio_coding_module.h"
16 #include "webrtc/modules/audio_coding/test/ACMTest.h"
17 #include "webrtc/modules/audio_coding/test/Channel.h"
18 #include "webrtc/modules/audio_coding/test/PCMFile.h"
19 #include "webrtc/modules/audio_coding/test/utility.h"
20 #include "webrtc/system_wrappers/include/event_wrapper.h"
21 #include "webrtc/system_wrappers/include/rw_lock_wrapper.h"
22 
23 namespace webrtc {
24 
25 class Config;
26 
27 enum APITESTAction {
28   TEST_CHANGE_CODEC_ONLY = 0,
29   DTX_TEST = 1
30 };
31 
32 class APITest : public ACMTest {
33  public:
34   explicit APITest(const Config& config);
35   ~APITest();
36 
37   void Perform();
38  private:
39   int16_t SetUp();
40 
41   static bool PushAudioThreadA(void* obj);
42   static bool PullAudioThreadA(void* obj);
43   static bool ProcessThreadA(void* obj);
44   static bool APIThreadA(void* obj);
45 
46   static bool PushAudioThreadB(void* obj);
47   static bool PullAudioThreadB(void* obj);
48   static bool ProcessThreadB(void* obj);
49   static bool APIThreadB(void* obj);
50 
51   void CheckVADStatus(char side);
52 
53   // Set Min delay, get delay, playout timestamp
54   void TestDelay(char side);
55 
56   // Unregister a codec & register again.
57   void TestRegisteration(char side);
58 
59   // Playout Mode, background noise mode.
60   // Receiver Frequency, playout frequency.
61   void TestPlayout(char receiveSide);
62 
63   //
64   void TestSendVAD(char side);
65 
66   void CurrentCodec(char side);
67 
68   void ChangeCodec(char side);
69 
70   void Wait(uint32_t waitLengthMs);
71 
72   void RunTest(char thread);
73 
74   bool PushAudioRunA();
75   bool PullAudioRunA();
76   bool ProcessRunA();
77   bool APIRunA();
78 
79   bool PullAudioRunB();
80   bool PushAudioRunB();
81   bool ProcessRunB();
82   bool APIRunB();
83 
84   //--- ACMs
85   rtc::scoped_ptr<AudioCodingModule> _acmA;
86   rtc::scoped_ptr<AudioCodingModule> _acmB;
87 
88   //--- Channels
89   Channel* _channel_A2B;
90   Channel* _channel_B2A;
91 
92   //--- I/O files
93   // A
94   PCMFile _inFileA;
95   PCMFile _outFileA;
96   // B
97   PCMFile _outFileB;
98   PCMFile _inFileB;
99 
100   //--- I/O params
101   // A
102   int32_t _outFreqHzA;
103   // B
104   int32_t _outFreqHzB;
105 
106   // Should we write to file.
107   // we might skip writing to file if we
108   // run the test for a long time.
109   bool _writeToFile;
110   //--- Events
111   // A
112   EventTimerWrapper* _pullEventA;      // pulling data from ACM
113   EventTimerWrapper* _pushEventA;      // pushing data to ACM
114   EventTimerWrapper* _processEventA;   // process
115   EventWrapper* _apiEventA;       // API calls
116   // B
117   EventTimerWrapper* _pullEventB;      // pulling data from ACM
118   EventTimerWrapper* _pushEventB;      // pushing data to ACM
119   EventTimerWrapper* _processEventB;   // process
120   EventWrapper* _apiEventB;       // API calls
121 
122   // keep track of the codec in either side.
123   uint8_t _codecCntrA;
124   uint8_t _codecCntrB;
125 
126   // Is set to true if there is no encoder in either side
127   bool _thereIsEncoderA;
128   bool _thereIsEncoderB;
129   bool _thereIsDecoderA;
130   bool _thereIsDecoderB;
131 
132   bool _sendVADA;
133   bool _sendDTXA;
134   ACMVADMode _sendVADModeA;
135 
136   bool _sendVADB;
137   bool _sendDTXB;
138   ACMVADMode _sendVADModeB;
139 
140   int32_t _minDelayA;
141   int32_t _minDelayB;
142   bool _payloadUsed[32];
143 
144   bool _verbose;
145 
146   int _dotPositionA;
147   int _dotMoveDirectionA;
148   int _dotPositionB;
149   int _dotMoveDirectionB;
150 
151   char _movingDot[41];
152 
153   VADCallback* _vadCallbackA;
154   VADCallback* _vadCallbackB;
155   RWLockWrapper& _apiTestRWLock;
156   bool _randomTest;
157   int _testNumA;
158   int _testNumB;
159 };
160 
161 }  // namespace webrtc
162 
163 #endif  // WEBRTC_MODULES_AUDIO_CODING_TEST_APITEST_H_
164