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#include "webrtc/voice_engine/test/auto_test/voe_cpu_test.h"
12
13#include <stdio.h>
14#include <string.h>
15#include <time.h>
16#if defined(_WIN32)
17#include <conio.h>
18#endif
19
20#include "webrtc/base/scoped_ptr.h"
21#include "webrtc/test/channel_transport/channel_transport.h"
22#include "webrtc/voice_engine/test/auto_test/voe_test_defines.h"
23
24using namespace webrtc;
25using namespace test;
26
27namespace voetest {
28
29#define CHECK(expr)                                             \
30    if (expr)                                                   \
31    {                                                           \
32        printf("Error at line: %i, %s \n", __LINE__, #expr);    \
33        printf("Error code: %i \n", base->LastError());  \
34        PAUSE												    \
35        return -1;                                              \
36    }
37
38VoECpuTest::VoECpuTest(VoETestManager& mgr)
39    : _mgr(mgr) {
40
41}
42
43int VoECpuTest::DoTest() {
44  printf("------------------------------------------------\n");
45  printf(" CPU Reference Test\n");
46  printf("------------------------------------------------\n");
47
48  VoEBase* base = _mgr.BasePtr();
49  VoEFile* file = _mgr.FilePtr();
50  VoECodec* codec = _mgr.CodecPtr();
51  VoEAudioProcessing* apm = _mgr.APMPtr();
52  VoENetwork* voe_network = _mgr.NetworkPtr();
53
54  int channel(-1);
55  CodecInst isac;
56
57  isac.pltype = 104;
58  strcpy(isac.plname, "ISAC");
59  isac.pacsize = 960;
60  isac.plfreq = 32000;
61  isac.channels = 1;
62  isac.rate = -1;
63
64  CHECK(base->Init());
65  channel = base->CreateChannel();
66
67  rtc::scoped_ptr<VoiceChannelTransport> voice_socket_transport(
68      new VoiceChannelTransport(voe_network, channel));
69
70  CHECK(voice_socket_transport->SetSendDestination("127.0.0.1", 5566));
71  CHECK(voice_socket_transport->SetLocalReceiver(5566));
72
73  CHECK(codec->SetRecPayloadType(channel, isac));
74  CHECK(codec->SetSendCodec(channel, isac));
75
76  CHECK(base->StartReceive(channel));
77  CHECK(base->StartPlayout(channel));
78  CHECK(base->StartSend(channel));
79  CHECK(file->StartPlayingFileAsMicrophone(channel, _mgr.AudioFilename(),
80          true, true));
81
82  CHECK(codec->SetVADStatus(channel, true));
83  CHECK(apm->SetAgcStatus(true, kAgcAdaptiveAnalog));
84  CHECK(apm->SetNsStatus(true, kNsModerateSuppression));
85  CHECK(apm->SetEcStatus(true, kEcAec));
86
87  TEST_LOG("\nMeasure CPU and memory while running a full-duplex"
88    " iSAC-swb call.\n\n");
89
90  PAUSE
91
92  CHECK(base->StopSend(channel));
93  CHECK(base->StopPlayout(channel));
94  CHECK(base->StopReceive(channel));
95
96  base->DeleteChannel(channel);
97  CHECK(base->Terminate());
98  return 0;
99}
100
101}  // namespace voetest
102