blob: d31e1d47ad02c0a8146b166d1f9714d29f05defe [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"
turaj@webrtc.org6ea3d1c2013-10-02 21:44:33 +000017#include "webrtc/modules/audio_coding/main/acm2/acm_common_defs.h"
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +000018#include "webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h"
19#include "webrtc/modules/audio_coding/main/test/utility.h"
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +000020#include "webrtc/system_wrappers/interface/trace.h"
turaj@webrtc.org6ea3d1c2013-10-02 21:44:33 +000021#include "webrtc/test/testsupport/fileutils.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
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +000025TestVADDTX::TestVADDTX()
26 : _acmA(AudioCodingModule::Create(0)),
27 _acmB(AudioCodingModule::Create(1)),
28 _channelA2B(NULL) {}
niklase@google.com470e71d2011-07-07 08:21:25 +000029
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000030TestVADDTX::~TestVADDTX() {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000031 if (_channelA2B != NULL) {
32 delete _channelA2B;
33 _channelA2B = NULL;
34 }
niklase@google.com470e71d2011-07-07 08:21:25 +000035}
36
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000037void TestVADDTX::Perform() {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000038 const std::string file_name = webrtc::test::ResourcePath(
39 "audio_coding/testfile32kHz", "pcm");
40 _inFileA.Open(file_name, 32000, "rb");
41
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000042 EXPECT_EQ(0, _acmA->InitializeReceiver());
43 EXPECT_EQ(0, _acmB->InitializeReceiver());
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000044
45 uint8_t numEncoders = _acmA->NumberOfCodecs();
46 CodecInst myCodecParam;
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000047 for (uint8_t n = 0; n < numEncoders; n++) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000048 EXPECT_EQ(0, _acmB->Codec(n, &myCodecParam));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000049 if (!strcmp(myCodecParam.plname, "opus")) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000050 // Register Opus as mono.
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000051 myCodecParam.channels = 1;
niklase@google.com470e71d2011-07-07 08:21:25 +000052 }
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000053 EXPECT_EQ(0, _acmB->RegisterReceiveCodec(myCodecParam));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000054 }
niklase@google.com470e71d2011-07-07 08:21:25 +000055
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000056 // Create and connect the channel
57 _channelA2B = new Channel;
58 _acmA->RegisterTransportCallback(_channelA2B);
andrew@webrtc.org89df0922013-09-12 01:27:43 +000059 _channelA2B->RegisterReceiverACM(_acmB.get());
niklase@google.com470e71d2011-07-07 08:21:25 +000060
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000061 _acmA->RegisterVADCallback(&_monitor);
niklase@google.com470e71d2011-07-07 08:21:25 +000062
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000063 int16_t testCntr = 1;
niklase@google.com470e71d2011-07-07 08:21:25 +000064
65#ifdef WEBRTC_CODEC_ISAC
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000066 // Open outputfile
67 OpenOutFile(testCntr++);
niklase@google.com470e71d2011-07-07 08:21:25 +000068
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000069 // Register iSAC WB as send codec
70 char nameISAC[] = "ISAC";
71 RegisterSendCodec('A', nameISAC, 16000);
niklase@google.com470e71d2011-07-07 08:21:25 +000072
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000073 // Run the five test cased
74 runTestCases();
niklase@google.com470e71d2011-07-07 08:21:25 +000075
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000076 // Close file
77 _outFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +000078
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000079 // Open outputfile
80 OpenOutFile(testCntr++);
niklase@google.com470e71d2011-07-07 08:21:25 +000081
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000082 // Register iSAC SWB as send codec
83 RegisterSendCodec('A', nameISAC, 32000);
niklase@google.com470e71d2011-07-07 08:21:25 +000084
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000085 // Run the five test cased
86 runTestCases();
niklase@google.com470e71d2011-07-07 08:21:25 +000087
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000088 // Close file
89 _outFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +000090#endif
91#ifdef WEBRTC_CODEC_ILBC
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000092 // Open outputfile
93 OpenOutFile(testCntr++);
niklase@google.com470e71d2011-07-07 08:21:25 +000094
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000095 // Register iLBC as send codec
96 char nameILBC[] = "ilbc";
97 RegisterSendCodec('A', nameILBC);
niklase@google.com470e71d2011-07-07 08:21:25 +000098
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000099 // Run the five test cased
100 runTestCases();
niklase@google.com470e71d2011-07-07 08:21:25 +0000101
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000102 // Close file
103 _outFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +0000104
105#endif
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000106#ifdef WEBRTC_CODEC_OPUS
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000107 // Open outputfile
108 OpenOutFile(testCntr++);
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000109
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000110 // Register Opus as send codec
111 char nameOPUS[] = "opus";
112 RegisterSendCodec('A', nameOPUS);
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000113
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000114 // Run the five test cased
115 runTestCases();
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000116
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000117 // Close file
118 _outFileB.Close();
tina.legrand@webrtc.orga7d83872012-10-18 10:00:52 +0000119
120#endif
niklase@google.com470e71d2011-07-07 08:21:25 +0000121}
122
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000123void TestVADDTX::runTestCases() {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000124 // #1 DTX = OFF, VAD = ON, VADNormal
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000125 SetVAD(false, true, VADNormal);
126 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000127 VerifyTest();
niklase@google.com470e71d2011-07-07 08:21:25 +0000128
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000129 // #2 DTX = OFF, VAD = ON, VADAggr
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000130 SetVAD(false, true, VADAggr);
131 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000132 VerifyTest();
niklase@google.com470e71d2011-07-07 08:21:25 +0000133
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000134 // #3 DTX = ON, VAD = ON, VADLowBitrate
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000135 SetVAD(true, true, VADLowBitrate);
136 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000137 VerifyTest();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000138
139 // #4 DTX = ON, VAD = ON, VADVeryAggr
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000140 SetVAD(true, true, VADVeryAggr);
141 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000142 VerifyTest();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000143
144 // #5 DTX = ON, VAD = OFF, VADNormal
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000145 SetVAD(true, false, VADNormal);
146 Run();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000147 VerifyTest();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000148}
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000149
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000150void TestVADDTX::runTestInternalDTX(int expected_result) {
151 // #6 DTX = ON, VAD = ON, VADNormal
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000152 SetVAD(true, true, VADNormal);
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000153 EXPECT_EQ(expected_result, _acmA->ReplaceInternalDTXWithWebRtc(true));
154 if (expected_result == 0) {
155 Run();
156 VerifyTest();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000157 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000158}
159
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000160void TestVADDTX::SetVAD(bool statusDTX, bool statusVAD, int16_t vadMode) {
161 bool dtxEnabled, vadEnabled;
162 ACMVADMode vadModeSet;
niklase@google.com470e71d2011-07-07 08:21:25 +0000163
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000164 EXPECT_EQ(0, _acmA->SetVAD(statusDTX, statusVAD, (ACMVADMode) vadMode));
165 EXPECT_EQ(0, _acmA->VAD(&dtxEnabled, &vadEnabled, &vadModeSet));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000166
167 // Requested VAD/DTX settings
168 _setStruct.statusDTX = statusDTX;
169 _setStruct.statusVAD = statusVAD;
170 _setStruct.vadMode = (ACMVADMode) vadMode;
171
172 // VAD settings after setting VAD in ACM
173 _getStruct.statusDTX = dtxEnabled;
174 _getStruct.statusVAD = vadEnabled;
175 _getStruct.vadMode = vadModeSet;
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000176}
177
178VADDTXstruct TestVADDTX::GetVAD() {
179 VADDTXstruct retStruct;
180 bool dtxEnabled, vadEnabled;
181 ACMVADMode vadModeSet;
182
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000183 EXPECT_EQ(0, _acmA->VAD(&dtxEnabled, &vadEnabled, &vadModeSet));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000184
185 retStruct.statusDTX = dtxEnabled;
186 retStruct.statusVAD = vadEnabled;
187 retStruct.vadMode = vadModeSet;
188 return retStruct;
189}
190
191int16_t TestVADDTX::RegisterSendCodec(char side, char* codecName,
192 int32_t samplingFreqHz,
193 int32_t rateKbps) {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000194 std::cout << std::flush;
195 AudioCodingModule* myACM;
196 switch (side) {
197 case 'A': {
andrew@webrtc.org89df0922013-09-12 01:27:43 +0000198 myACM = _acmA.get();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000199 break;
200 }
201 case 'B': {
andrew@webrtc.org89df0922013-09-12 01:27:43 +0000202 myACM = _acmB.get();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000203 break;
204 }
205 default:
206 return -1;
207 }
208
209 if (myACM == NULL) {
210 return -1;
211 }
212
213 CodecInst myCodecParam;
214 for (int16_t codecCntr = 0; codecCntr < myACM->NumberOfCodecs();
215 codecCntr++) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000216 EXPECT_EQ(0, myACM->Codec((uint8_t) codecCntr, &myCodecParam));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000217 if (!STR_CASE_CMP(myCodecParam.plname, codecName)) {
218 if ((samplingFreqHz == -1) || (myCodecParam.plfreq == samplingFreqHz)) {
219 if ((rateKbps == -1) || (myCodecParam.rate == rateKbps)) {
220 break;
221 }
222 }
223 }
224 }
225
226 // We only allow VAD/DTX when sending mono.
227 myCodecParam.channels = 1;
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000228 EXPECT_EQ(0, myACM->RegisterSendCodec(myCodecParam));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000229
230 // initialization was succesful
231 return 0;
232}
233
234void TestVADDTX::Run() {
235 AudioFrame audioFrame;
236
237 uint16_t SamplesIn10MsecA = _inFileA.PayloadLength10Ms();
238 uint32_t timestampA = 1;
239 int32_t outFreqHzB = _outFileB.SamplingFrequency();
240
241 while (!_inFileA.EndOfFile()) {
242 _inFileA.Read10MsData(audioFrame);
243 audioFrame.timestamp_ = timestampA;
244 timestampA += SamplesIn10MsecA;
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000245 EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
246 EXPECT_GT(_acmA->Process(), -1);
247 EXPECT_EQ(0, _acmB->PlayoutData10Ms(outFreqHzB, &audioFrame));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000248 _outFileB.Write10MsData(audioFrame.data_, audioFrame.samples_per_channel_);
249 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000250#ifdef PRINT_STAT
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000251 _monitor.PrintStatistics();
niklase@google.com470e71d2011-07-07 08:21:25 +0000252#endif
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000253 _inFileA.Rewind();
254 _monitor.GetStatistics(_statCounter);
255 _monitor.ResetStatistics();
niklase@google.com470e71d2011-07-07 08:21:25 +0000256}
257
pbos@webrtc.org0946a562013-04-09 00:28:06 +0000258void TestVADDTX::OpenOutFile(int16_t test_number) {
tina.legrand@webrtc.orgba468042012-08-17 10:38:28 +0000259 std::string file_name;
260 std::stringstream file_stream;
261 file_stream << webrtc::test::OutputPath();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000262 file_stream << "testVADDTX_outFile_";
tina.legrand@webrtc.orgba468042012-08-17 10:38:28 +0000263 file_stream << test_number << ".pcm";
264 file_name = file_stream.str();
265 _outFileB.Open(file_name, 16000, "wb");
niklase@google.com470e71d2011-07-07 08:21:25 +0000266}
267
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000268int16_t TestVADDTX::VerifyTest() {
269 // Verify empty frame result
270 uint8_t statusEF = 0;
271 uint8_t vadPattern = 0;
272 uint8_t emptyFramePattern[6];
273 CodecInst myCodecParam;
274 _acmA->SendCodec(&myCodecParam);
275 bool dtxInUse = true;
276 bool isReplaced = false;
277 if ((STR_CASE_CMP(myCodecParam.plname, "G729") == 0)
278 || (STR_CASE_CMP(myCodecParam.plname, "G723") == 0)
279 || (STR_CASE_CMP(myCodecParam.plname, "AMR") == 0)
280 || (STR_CASE_CMP(myCodecParam.plname, "AMR-wb") == 0)
281 || (STR_CASE_CMP(myCodecParam.plname, "speex") == 0)) {
282 _acmA->IsInternalDTXReplacedWithWebRtc(&isReplaced);
283 if (!isReplaced) {
284 dtxInUse = false;
niklase@google.com470e71d2011-07-07 08:21:25 +0000285 }
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000286 } else if (STR_CASE_CMP(myCodecParam.plname, "opus") == 0) {
287 if (_getStruct.statusDTX != false) {
288 // DTX status doesn't match expected.
289 vadPattern |= 4;
290 } else if (_getStruct.statusVAD != false) {
291 // Mismatch in VAD setting.
292 vadPattern |= 2;
293 } else {
294 _setStruct.statusDTX = false;
295 _setStruct.statusVAD = false;
296 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000297 }
phoglund@webrtc.orgd1a860b2012-01-26 14:49:28 +0000298
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000299 // Check for error in VAD/DTX settings
300 if (_getStruct.statusDTX != _setStruct.statusDTX) {
301 // DTX status doesn't match expected
302 vadPattern |= 4;
303 }
304 if (_getStruct.statusDTX) {
305 if ((!_getStruct.statusVAD && dtxInUse)
306 || (!dtxInUse && (_getStruct.statusVAD != _setStruct.statusVAD))) {
307 // Missmatch in VAD setting
308 vadPattern |= 2;
niklase@google.com470e71d2011-07-07 08:21:25 +0000309 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000310 } else {
311 if (_getStruct.statusVAD != _setStruct.statusVAD) {
312 // VAD status doesn't match expected
313 vadPattern |= 2;
314 }
315 }
316 if (_getStruct.vadMode != _setStruct.vadMode) {
317 // VAD Mode doesn't match expected
318 vadPattern |= 1;
319 }
320
321 // Set expected empty frame pattern
322 int ii;
323 for (ii = 0; ii < 6; ii++) {
324 emptyFramePattern[ii] = 0;
325 }
326 // 0 - "kNoEncoding", not important to check.
327 // Codecs with packetsize != 80 samples will get this output.
328 // 1 - "kActiveNormalEncoded", expect to receive some frames with this label .
329 // 2 - "kPassiveNormalEncoded".
330 // 3 - "kPassiveDTXNB".
331 // 4 - "kPassiveDTXWB".
332 // 5 - "kPassiveDTXSWB".
333 emptyFramePattern[0] = 1;
334 emptyFramePattern[1] = 1;
335 emptyFramePattern[2] = (((!_getStruct.statusDTX && _getStruct.statusVAD)
336 || (!dtxInUse && _getStruct.statusDTX)));
337 emptyFramePattern[3] = ((_getStruct.statusDTX && dtxInUse
338 && (_acmA->SendFrequency() == 8000)));
339 emptyFramePattern[4] = ((_getStruct.statusDTX && dtxInUse
340 && (_acmA->SendFrequency() == 16000)));
341 emptyFramePattern[5] = ((_getStruct.statusDTX && dtxInUse
342 && (_acmA->SendFrequency() == 32000)));
343
344 // Check pattern 1-5 (skip 0)
345 for (int ii = 1; ii < 6; ii++) {
346 if (emptyFramePattern[ii]) {
347 statusEF |= (_statCounter[ii] == 0);
niklase@google.com470e71d2011-07-07 08:21:25 +0000348 } else {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000349 statusEF |= (_statCounter[ii] > 0);
niklase@google.com470e71d2011-07-07 08:21:25 +0000350 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000351 }
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000352 EXPECT_EQ(0, statusEF);
353 EXPECT_EQ(0, vadPattern);
354
355 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000356}
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +0000357
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000358ActivityMonitor::ActivityMonitor() {
359 _counter[0] = _counter[1] = _counter[2] = _counter[3] = _counter[4] =
360 _counter[5] = 0;
361}
362
363ActivityMonitor::~ActivityMonitor() {
364}
365
366int32_t ActivityMonitor::InFrameType(int16_t frameType) {
367 _counter[frameType]++;
368 return 0;
369}
370
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000371void ActivityMonitor::PrintStatistics() {
372 printf("\n");
373 printf("kActiveNormalEncoded kPassiveNormalEncoded kPassiveDTXWB ");
374 printf("kPassiveDTXNB kPassiveDTXSWB kFrameEmpty\n");
375 printf("%19u", _counter[1]);
376 printf("%22u", _counter[2]);
377 printf("%14u", _counter[3]);
378 printf("%14u", _counter[4]);
379 printf("%14u", _counter[5]);
380 printf("%11u", _counter[0]);
381 printf("\n\n");
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000382}
383
384void ActivityMonitor::ResetStatistics() {
385 _counter[0] = _counter[1] = _counter[2] = _counter[3] = _counter[4] =
386 _counter[5] = 0;
387}
388
389void ActivityMonitor::GetStatistics(uint32_t* getCounter) {
390 for (int ii = 0; ii < 6; ii++) {
391 getCounter[ii] = _counter[ii];
392 }
393}
394
395} // namespace webrtc