|  | /* | 
|  | *  Copyright (c) 2011 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 MODULES_AUDIO_CODING_TEST_UTILITY_H_ | 
|  | #define MODULES_AUDIO_CODING_TEST_UTILITY_H_ | 
|  |  | 
|  | #include "modules/audio_coding/include/audio_coding_module.h" | 
|  | #include "test/gtest.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | //----------------------------- | 
|  | #define CHECK_ERROR(f)                                                         \ | 
|  | do {                                                                         \ | 
|  | EXPECT_GE(f, 0) << "Error Calling API";                                    \ | 
|  | } while(0) | 
|  |  | 
|  | //----------------------------- | 
|  | #define CHECK_PROTECTED(f)                                                     \ | 
|  | do {                                                                         \ | 
|  | if (f >= 0) {                                                              \ | 
|  | ADD_FAILURE() << "Error Calling API";                                    \ | 
|  | } else {                                                                   \ | 
|  | printf("An expected error is caught.\n");                                \ | 
|  | }                                                                          \ | 
|  | } while(0) | 
|  |  | 
|  | //---------------------------- | 
|  | #define CHECK_ERROR_MT(f)                                                      \ | 
|  | do {                                                                         \ | 
|  | if (f < 0) {                                                               \ | 
|  | fprintf(stderr, "Error Calling API in file %s at line %d \n",            \ | 
|  | __FILE__, __LINE__);                                             \ | 
|  | }                                                                          \ | 
|  | } while(0) | 
|  |  | 
|  | //---------------------------- | 
|  | #define CHECK_PROTECTED_MT(f)                                                  \ | 
|  | do {                                                                         \ | 
|  | if (f >= 0) {                                                              \ | 
|  | fprintf(stderr, "Error Calling API in file %s at line %d \n",            \ | 
|  | __FILE__, __LINE__);                                             \ | 
|  | } else {                                                                   \ | 
|  | printf("An expected error is caught.\n");                                \ | 
|  | }                                                                          \ | 
|  | } while(0) | 
|  |  | 
|  | #define DELETE_POINTER(p)                                                      \ | 
|  | do {                                                                         \ | 
|  | if (p != NULL) {                                                           \ | 
|  | delete p;                                                                \ | 
|  | p = NULL;                                                                \ | 
|  | }                                                                          \ | 
|  | } while(0) | 
|  |  | 
|  | class ACMTestTimer { | 
|  | public: | 
|  | ACMTestTimer(); | 
|  | ~ACMTestTimer(); | 
|  |  | 
|  | void Reset(); | 
|  | void Tick10ms(); | 
|  | void Tick1ms(); | 
|  | void Tick100ms(); | 
|  | void Tick1sec(); | 
|  | void CurrentTimeHMS(char* currTime); | 
|  | void CurrentTime(unsigned long& h, unsigned char& m, unsigned char& s, | 
|  | unsigned short& ms); | 
|  |  | 
|  | private: | 
|  | void Adjust(); | 
|  |  | 
|  | unsigned short _msec; | 
|  | unsigned char _sec; | 
|  | unsigned char _min; | 
|  | unsigned long _hour; | 
|  | }; | 
|  |  | 
|  | // To avoid clashes with CircularBuffer in APM. | 
|  | namespace test { | 
|  |  | 
|  | class CircularBuffer { | 
|  | public: | 
|  | CircularBuffer(uint32_t len); | 
|  | ~CircularBuffer(); | 
|  |  | 
|  | void SetArithMean(bool enable); | 
|  | void SetVariance(bool enable); | 
|  |  | 
|  | void Update(const double newVal); | 
|  | void IsBufferFull(); | 
|  |  | 
|  | int16_t Variance(double& var); | 
|  | int16_t ArithMean(double& mean); | 
|  |  | 
|  | protected: | 
|  | double* _buff; | 
|  | uint32_t _idx; | 
|  | uint32_t _buffLen; | 
|  |  | 
|  | bool _buffIsFull; | 
|  | bool _calcAvg; | 
|  | bool _calcVar; | 
|  | double _sum; | 
|  | double _sumSqr; | 
|  | }; | 
|  |  | 
|  | }  // namespace test | 
|  |  | 
|  | int16_t ChooseCodec(CodecInst& codecInst); | 
|  |  | 
|  | void PrintCodecs(); | 
|  |  | 
|  | bool FixedPayloadTypeCodec(const char* payloadName); | 
|  |  | 
|  | class VADCallback : public ACMVADCallback { | 
|  | public: | 
|  | VADCallback(); | 
|  |  | 
|  | int32_t InFrameType(FrameType frame_type) override; | 
|  |  | 
|  | void PrintFrameTypes(); | 
|  | void Reset(); | 
|  |  | 
|  | private: | 
|  | uint32_t _numFrameTypes[5]; | 
|  | }; | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // MODULES_AUDIO_CODING_TEST_UTILITY_H_ |