blob: 29c9ade80f79b61e9455e7e82362c8cc60c30fd1 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
andrew@webrtc.org63a50982012-05-02 23:56:37 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +000011#include "webrtc/modules/audio_coding/main/test/TestVADDTX.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000012
niklase@google.com470e71d2011-07-07 08:21:25 +000013#include <iostream>
kjellander@webrtc.org5490c712011-12-21 13:34:18 +000014
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +000015#include "webrtc/common_types.h"
16#include "webrtc/engine_configurations.h"
17#include "webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h"
18#include "webrtc/modules/audio_coding/main/test/utility.h"
turaj@webrtc.org532f3dc2013-09-19 00:12:23 +000019#include "webrtc/modules/audio_coding/main/acm2/acm_common_defs.h"
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +000020#include "webrtc/test/testsupport/fileutils.h"
21#include "webrtc/system_wrappers/interface/trace.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000022
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +000023namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000024
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000025TestVADDTX::TestVADDTX()
andrew@webrtc.org89df0922013-09-12 01:27:43 +000026 : _acmA(AudioCodingModule::Create(0)),
27 _acmB(AudioCodingModule::Create(1)),
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000028 _channelA2B(NULL) {
niklase@google.com470e71d2011-07-07 08:21:25 +000029}
30
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000031TestVADDTX::~TestVADDTX() {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000032 if (_channelA2B != NULL) {
33 delete _channelA2B;
34 _channelA2B = NULL;
35 }
niklase@google.com470e71d2011-07-07 08:21:25 +000036}
37
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000038void TestVADDTX::Perform() {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000039 const std::string file_name = webrtc::test::ResourcePath(
40 "audio_coding/testfile32kHz", "pcm");
41 _inFileA.Open(file_name, 32000, "rb");
42
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000043 EXPECT_EQ(0, _acmA->InitializeReceiver());
44 EXPECT_EQ(0, _acmB->InitializeReceiver());
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000045
46 uint8_t numEncoders = _acmA->NumberOfCodecs();
47 CodecInst myCodecParam;
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000048 for (uint8_t n = 0; n < numEncoders; n++) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000049 EXPECT_EQ(0, _acmB->Codec(n, &myCodecParam));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000050 if (!strcmp(myCodecParam.plname, "opus")) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000051 // Register Opus as mono.
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000052 myCodecParam.channels = 1;
niklase@google.com470e71d2011-07-07 08:21:25 +000053 }
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000054 EXPECT_EQ(0, _acmB->RegisterReceiveCodec(myCodecParam));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000055 }
niklase@google.com470e71d2011-07-07 08:21:25 +000056
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000057 // Create and connect the channel
58 _channelA2B = new Channel;
59 _acmA->RegisterTransportCallback(_channelA2B);
andrew@webrtc.org89df0922013-09-12 01:27:43 +000060 _channelA2B->RegisterReceiverACM(_acmB.get());
niklase@google.com470e71d2011-07-07 08:21:25 +000061
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000062 _acmA->RegisterVADCallback(&_monitor);
niklase@google.com470e71d2011-07-07 08:21:25 +000063
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000064 int16_t testCntr = 1;
niklase@google.com470e71d2011-07-07 08:21:25 +000065
66#ifdef WEBRTC_CODEC_ISAC
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000067 // Open outputfile
68 OpenOutFile(testCntr++);
niklase@google.com470e71d2011-07-07 08:21:25 +000069
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000070 // Register iSAC WB as send codec
71 char nameISAC[] = "ISAC";
72 RegisterSendCodec('A', nameISAC, 16000);
niklase@google.com470e71d2011-07-07 08:21:25 +000073
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000074 // Run the five test cased
75 runTestCases();
niklase@google.com470e71d2011-07-07 08:21:25 +000076
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000077 // Close file
78 _outFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +000079
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000080 // Open outputfile
81 OpenOutFile(testCntr++);
niklase@google.com470e71d2011-07-07 08:21:25 +000082
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000083 // Register iSAC SWB as send codec
84 RegisterSendCodec('A', nameISAC, 32000);
niklase@google.com470e71d2011-07-07 08:21:25 +000085
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000086 // Run the five test cased
87 runTestCases();
niklase@google.com470e71d2011-07-07 08:21:25 +000088
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000089 // Close file
90 _outFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +000091#endif
92#ifdef WEBRTC_CODEC_ILBC
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000093 // Open outputfile
94 OpenOutFile(testCntr++);
niklase@google.com470e71d2011-07-07 08:21:25 +000095
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000096 // Register iLBC as send codec
97 char nameILBC[] = "ilbc";
98 RegisterSendCodec('A', nameILBC);
niklase@google.com470e71d2011-07-07 08:21:25 +000099
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000100 // Run the five test cased
101 runTestCases();
niklase@google.com470e71d2011-07-07 08:21:25 +0000102
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000103 // Close file
104 _outFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +0000105
106#endif
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000107#ifdef WEBRTC_CODEC_OPUS
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000108 // Open outputfile
109 OpenOutFile(testCntr++);
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000110
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000111 // Register Opus as send codec
112 char nameOPUS[] = "opus";
113 RegisterSendCodec('A', nameOPUS);
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000114
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000115 // Run the five test cased
116 runTestCases();
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000117
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000118 // Close file
119 _outFileB.Close();
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000120
121#endif
niklase@google.com470e71d2011-07-07 08:21:25 +0000122}
123
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000124void TestVADDTX::runTestCases() {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000125 // #1 DTX = OFF, VAD = ON, VADNormal
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000126 SetVAD(false, true, VADNormal);
127 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000128 VerifyTest();
niklase@google.com470e71d2011-07-07 08:21:25 +0000129
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000130 // #2 DTX = OFF, VAD = ON, VADAggr
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000131 SetVAD(false, true, VADAggr);
132 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000133 VerifyTest();
niklase@google.com470e71d2011-07-07 08:21:25 +0000134
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000135 // #3 DTX = ON, VAD = ON, VADLowBitrate
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000136 SetVAD(true, true, VADLowBitrate);
137 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000138 VerifyTest();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000139
140 // #4 DTX = ON, VAD = ON, VADVeryAggr
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000141 SetVAD(true, true, VADVeryAggr);
142 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000143 VerifyTest();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000144
145 // #5 DTX = ON, VAD = OFF, VADNormal
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000146 SetVAD(true, false, VADNormal);
147 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000148 VerifyTest();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000149}
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000150
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000151void TestVADDTX::runTestInternalDTX(int expected_result) {
152 // #6 DTX = ON, VAD = ON, VADNormal
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000153 SetVAD(true, true, VADNormal);
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000154 EXPECT_EQ(expected_result, _acmA->ReplaceInternalDTXWithWebRtc(true));
155 if (expected_result == 0) {
156 Run();
157 VerifyTest();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000158 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000159}
160
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000161void TestVADDTX::SetVAD(bool statusDTX, bool statusVAD, int16_t vadMode) {
162 bool dtxEnabled, vadEnabled;
163 ACMVADMode vadModeSet;
niklase@google.com470e71d2011-07-07 08:21:25 +0000164
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000165 EXPECT_EQ(0, _acmA->SetVAD(statusDTX, statusVAD, (ACMVADMode) vadMode));
166 EXPECT_EQ(0, _acmA->VAD(&dtxEnabled, &vadEnabled, &vadModeSet));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000167
168 // Requested VAD/DTX settings
169 _setStruct.statusDTX = statusDTX;
170 _setStruct.statusVAD = statusVAD;
171 _setStruct.vadMode = (ACMVADMode) vadMode;
172
173 // VAD settings after setting VAD in ACM
174 _getStruct.statusDTX = dtxEnabled;
175 _getStruct.statusVAD = vadEnabled;
176 _getStruct.vadMode = vadModeSet;
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000177}
178
179VADDTXstruct TestVADDTX::GetVAD() {
180 VADDTXstruct retStruct;
181 bool dtxEnabled, vadEnabled;
182 ACMVADMode vadModeSet;
183
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000184 EXPECT_EQ(0, _acmA->VAD(&dtxEnabled, &vadEnabled, &vadModeSet));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000185
186 retStruct.statusDTX = dtxEnabled;
187 retStruct.statusVAD = vadEnabled;
188 retStruct.vadMode = vadModeSet;
189 return retStruct;
190}
191
192int16_t TestVADDTX::RegisterSendCodec(char side, char* codecName,
193 int32_t samplingFreqHz,
194 int32_t rateKbps) {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000195 std::cout << std::flush;
196 AudioCodingModule* myACM;
197 switch (side) {
198 case 'A': {
andrew@webrtc.org89df0922013-09-12 01:27:43 +0000199 myACM = _acmA.get();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000200 break;
201 }
202 case 'B': {
andrew@webrtc.org89df0922013-09-12 01:27:43 +0000203 myACM = _acmB.get();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000204 break;
205 }
206 default:
207 return -1;
208 }
209
210 if (myACM == NULL) {
211 return -1;
212 }
213
214 CodecInst myCodecParam;
215 for (int16_t codecCntr = 0; codecCntr < myACM->NumberOfCodecs();
216 codecCntr++) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000217 EXPECT_EQ(0, myACM->Codec((uint8_t) codecCntr, &myCodecParam));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000218 if (!STR_CASE_CMP(myCodecParam.plname, codecName)) {
219 if ((samplingFreqHz == -1) || (myCodecParam.plfreq == samplingFreqHz)) {
220 if ((rateKbps == -1) || (myCodecParam.rate == rateKbps)) {
221 break;
222 }
223 }
224 }
225 }
226
227 // We only allow VAD/DTX when sending mono.
228 myCodecParam.channels = 1;
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000229 EXPECT_EQ(0, myACM->RegisterSendCodec(myCodecParam));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000230
231 // initialization was succesful
232 return 0;
233}
234
235void TestVADDTX::Run() {
236 AudioFrame audioFrame;
237
238 uint16_t SamplesIn10MsecA = _inFileA.PayloadLength10Ms();
239 uint32_t timestampA = 1;
240 int32_t outFreqHzB = _outFileB.SamplingFrequency();
241
242 while (!_inFileA.EndOfFile()) {
243 _inFileA.Read10MsData(audioFrame);
244 audioFrame.timestamp_ = timestampA;
245 timestampA += SamplesIn10MsecA;
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000246 EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
247 EXPECT_GT(_acmA->Process(), -1);
248 EXPECT_EQ(0, _acmB->PlayoutData10Ms(outFreqHzB, &audioFrame));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000249 _outFileB.Write10MsData(audioFrame.data_, audioFrame.samples_per_channel_);
250 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000251#ifdef PRINT_STAT
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000252 _monitor.PrintStatistics();
niklase@google.com470e71d2011-07-07 08:21:25 +0000253#endif
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000254 _inFileA.Rewind();
255 _monitor.GetStatistics(_statCounter);
256 _monitor.ResetStatistics();
niklase@google.com470e71d2011-07-07 08:21:25 +0000257}
258
pbos@webrtc.org0946a562013-04-09 00:28:06 +0000259void TestVADDTX::OpenOutFile(int16_t test_number) {
tina.legrand@webrtc.orgba468042012-08-17 10:38:28 +0000260 std::string file_name;
261 std::stringstream file_stream;
262 file_stream << webrtc::test::OutputPath();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000263 file_stream << "testVADDTX_outFile_";
tina.legrand@webrtc.orgba468042012-08-17 10:38:28 +0000264 file_stream << test_number << ".pcm";
265 file_name = file_stream.str();
266 _outFileB.Open(file_name, 16000, "wb");
niklase@google.com470e71d2011-07-07 08:21:25 +0000267}
268
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000269int16_t TestVADDTX::VerifyTest() {
270 // Verify empty frame result
271 uint8_t statusEF = 0;
272 uint8_t vadPattern = 0;
273 uint8_t emptyFramePattern[6];
274 CodecInst myCodecParam;
275 _acmA->SendCodec(&myCodecParam);
276 bool dtxInUse = true;
277 bool isReplaced = false;
278 if ((STR_CASE_CMP(myCodecParam.plname, "G729") == 0)
279 || (STR_CASE_CMP(myCodecParam.plname, "G723") == 0)
280 || (STR_CASE_CMP(myCodecParam.plname, "AMR") == 0)
281 || (STR_CASE_CMP(myCodecParam.plname, "AMR-wb") == 0)
282 || (STR_CASE_CMP(myCodecParam.plname, "speex") == 0)) {
283 _acmA->IsInternalDTXReplacedWithWebRtc(&isReplaced);
284 if (!isReplaced) {
285 dtxInUse = false;
niklase@google.com470e71d2011-07-07 08:21:25 +0000286 }
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000287 } else if (STR_CASE_CMP(myCodecParam.plname, "opus") == 0) {
288 if (_getStruct.statusDTX != false) {
289 // DTX status doesn't match expected.
290 vadPattern |= 4;
291 } else if (_getStruct.statusVAD != false) {
292 // Mismatch in VAD setting.
293 vadPattern |= 2;
294 } else {
295 _setStruct.statusDTX = false;
296 _setStruct.statusVAD = false;
297 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000298 }
phoglund@webrtc.orgd1a860b2012-01-26 14:49:28 +0000299
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000300 // Check for error in VAD/DTX settings
301 if (_getStruct.statusDTX != _setStruct.statusDTX) {
302 // DTX status doesn't match expected
303 vadPattern |= 4;
304 }
305 if (_getStruct.statusDTX) {
306 if ((!_getStruct.statusVAD && dtxInUse)
307 || (!dtxInUse && (_getStruct.statusVAD != _setStruct.statusVAD))) {
308 // Missmatch in VAD setting
309 vadPattern |= 2;
niklase@google.com470e71d2011-07-07 08:21:25 +0000310 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000311 } else {
312 if (_getStruct.statusVAD != _setStruct.statusVAD) {
313 // VAD status doesn't match expected
314 vadPattern |= 2;
315 }
316 }
317 if (_getStruct.vadMode != _setStruct.vadMode) {
318 // VAD Mode doesn't match expected
319 vadPattern |= 1;
320 }
321
322 // Set expected empty frame pattern
323 int ii;
324 for (ii = 0; ii < 6; ii++) {
325 emptyFramePattern[ii] = 0;
326 }
327 // 0 - "kNoEncoding", not important to check.
328 // Codecs with packetsize != 80 samples will get this output.
329 // 1 - "kActiveNormalEncoded", expect to receive some frames with this label .
330 // 2 - "kPassiveNormalEncoded".
331 // 3 - "kPassiveDTXNB".
332 // 4 - "kPassiveDTXWB".
333 // 5 - "kPassiveDTXSWB".
334 emptyFramePattern[0] = 1;
335 emptyFramePattern[1] = 1;
336 emptyFramePattern[2] = (((!_getStruct.statusDTX && _getStruct.statusVAD)
337 || (!dtxInUse && _getStruct.statusDTX)));
338 emptyFramePattern[3] = ((_getStruct.statusDTX && dtxInUse
339 && (_acmA->SendFrequency() == 8000)));
340 emptyFramePattern[4] = ((_getStruct.statusDTX && dtxInUse
341 && (_acmA->SendFrequency() == 16000)));
342 emptyFramePattern[5] = ((_getStruct.statusDTX && dtxInUse
343 && (_acmA->SendFrequency() == 32000)));
344
345 // Check pattern 1-5 (skip 0)
346 for (int ii = 1; ii < 6; ii++) {
347 if (emptyFramePattern[ii]) {
348 statusEF |= (_statCounter[ii] == 0);
niklase@google.com470e71d2011-07-07 08:21:25 +0000349 } else {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000350 statusEF |= (_statCounter[ii] > 0);
niklase@google.com470e71d2011-07-07 08:21:25 +0000351 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000352 }
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000353 EXPECT_EQ(0, statusEF);
354 EXPECT_EQ(0, vadPattern);
355
356 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000357}
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +0000358
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000359ActivityMonitor::ActivityMonitor() {
360 _counter[0] = _counter[1] = _counter[2] = _counter[3] = _counter[4] =
361 _counter[5] = 0;
362}
363
364ActivityMonitor::~ActivityMonitor() {
365}
366
367int32_t ActivityMonitor::InFrameType(int16_t frameType) {
368 _counter[frameType]++;
369 return 0;
370}
371
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000372void ActivityMonitor::PrintStatistics() {
373 printf("\n");
374 printf("kActiveNormalEncoded kPassiveNormalEncoded kPassiveDTXWB ");
375 printf("kPassiveDTXNB kPassiveDTXSWB kFrameEmpty\n");
376 printf("%19u", _counter[1]);
377 printf("%22u", _counter[2]);
378 printf("%14u", _counter[3]);
379 printf("%14u", _counter[4]);
380 printf("%14u", _counter[5]);
381 printf("%11u", _counter[0]);
382 printf("\n\n");
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000383}
384
385void ActivityMonitor::ResetStatistics() {
386 _counter[0] = _counter[1] = _counter[2] = _counter[3] = _counter[4] =
387 _counter[5] = 0;
388}
389
390void ActivityMonitor::GetStatistics(uint32_t* getCounter) {
391 for (int ii = 0; ii < 6; ii++) {
392 getCounter[ii] = _counter[ii];
393 }
394}
395
396} // namespace webrtc