1 /* 2 * Copyright (c) 2011 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_UTILITY_H_ 12 #define WEBRTC_MODULES_AUDIO_CODING_TEST_UTILITY_H_ 13 14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "webrtc/modules/audio_coding/include/audio_coding_module.h" 16 17 namespace webrtc { 18 19 //----------------------------- 20 #define CHECK_ERROR(f) \ 21 do { \ 22 EXPECT_GE(f, 0) << "Error Calling API"; \ 23 } while(0) 24 25 //----------------------------- 26 #define CHECK_PROTECTED(f) \ 27 do { \ 28 if (f >= 0) { \ 29 ADD_FAILURE() << "Error Calling API"; \ 30 } else { \ 31 printf("An expected error is caught.\n"); \ 32 } \ 33 } while(0) 34 35 //---------------------------- 36 #define CHECK_ERROR_MT(f) \ 37 do { \ 38 if (f < 0) { \ 39 fprintf(stderr, "Error Calling API in file %s at line %d \n", \ 40 __FILE__, __LINE__); \ 41 } \ 42 } while(0) 43 44 //---------------------------- 45 #define CHECK_PROTECTED_MT(f) \ 46 do { \ 47 if (f >= 0) { \ 48 fprintf(stderr, "Error Calling API in file %s at line %d \n", \ 49 __FILE__, __LINE__); \ 50 } else { \ 51 printf("An expected error is caught.\n"); \ 52 } \ 53 } while(0) 54 55 #define DELETE_POINTER(p) \ 56 do { \ 57 if (p != NULL) { \ 58 delete p; \ 59 p = NULL; \ 60 } \ 61 } while(0) 62 63 class ACMTestTimer { 64 public: 65 ACMTestTimer(); 66 ~ACMTestTimer(); 67 68 void Reset(); 69 void Tick10ms(); 70 void Tick1ms(); 71 void Tick100ms(); 72 void Tick1sec(); 73 void CurrentTimeHMS(char* currTime); 74 void CurrentTime(unsigned long& h, unsigned char& m, unsigned char& s, 75 unsigned short& ms); 76 77 private: 78 void Adjust(); 79 80 unsigned short _msec; 81 unsigned char _sec; 82 unsigned char _min; 83 unsigned long _hour; 84 }; 85 86 class CircularBuffer { 87 public: 88 CircularBuffer(uint32_t len); 89 ~CircularBuffer(); 90 91 void SetArithMean(bool enable); 92 void SetVariance(bool enable); 93 94 void Update(const double newVal); 95 void IsBufferFull(); 96 97 int16_t Variance(double& var); 98 int16_t ArithMean(double& mean); 99 100 protected: 101 double* _buff; 102 uint32_t _idx; 103 uint32_t _buffLen; 104 105 bool _buffIsFull; 106 bool _calcAvg; 107 bool _calcVar; 108 double _sum; 109 double _sumSqr; 110 }; 111 112 int16_t ChooseCodec(CodecInst& codecInst); 113 114 void PrintCodecs(); 115 116 bool FixedPayloadTypeCodec(const char* payloadName); 117 118 class VADCallback : public ACMVADCallback { 119 public: 120 VADCallback(); ~VADCallback()121 ~VADCallback() { 122 } 123 124 int32_t InFrameType(FrameType frame_type); 125 126 void PrintFrameTypes(); 127 void Reset(); 128 129 private: 130 uint32_t _numFrameTypes[5]; 131 }; 132 133 void UseLegacyAcm(webrtc::Config* config); 134 135 void UseNewAcm(webrtc::Config* config); 136 137 } // namespace webrtc 138 139 #endif // WEBRTC_MODULES_AUDIO_CODING_TEST_UTILITY_H_ 140