1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_cpu_test.h" 12aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <time.h> 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <conio.h> 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 20aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 21aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org#include "webrtc/test/channel_transport/include/channel_transport.h" 228510750bf2847dcdca26d914974c6d51d1e311a7pbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_test_defines.h" 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing namespace webrtc; 25aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.orgusing namespace test; 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace voetest { 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define CHECK(expr) \ 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (expr) \ 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Error at line: %i, %s \n", __LINE__, #expr); \ 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Error code: %i \n", base->LastError()); \ 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE \ 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoECpuTest::VoECpuTest(VoETestManager& mgr) 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org : _mgr(mgr) { 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoECpuTest::DoTest() { 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("------------------------------------------------\n"); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" CPU Reference Test\n"); 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("------------------------------------------------\n"); 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEBase* base = _mgr.BasePtr(); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEFile* file = _mgr.FilePtr(); 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoECodec* codec = _mgr.CodecPtr(); 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEAudioProcessing* apm = _mgr.APMPtr(); 52aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org VoENetwork* voe_network = _mgr.NetworkPtr(); 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int channel(-1); 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecInst isac; 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org isac.pltype = 104; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org strcpy(isac.plname, "ISAC"); 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org isac.pacsize = 960; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org isac.plfreq = 32000; 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org isac.channels = 1; 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org isac.rate = -1; 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(base->Init()); 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel = base->CreateChannel(); 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 67aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org scoped_ptr<VoiceChannelTransport> voice_socket_transport( 68aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org new VoiceChannelTransport(voe_network, channel)); 69aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org 70aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org CHECK(voice_socket_transport->SetSendDestination("127.0.0.1", 5566)); 71aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org CHECK(voice_socket_transport->SetLocalReceiver(5566)); 72aa922de5772e1e2ea821517e01e5f5a2cf09a0e2pwestin@webrtc.org 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(codec->SetRecPayloadType(channel, isac)); 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(codec->SetSendCodec(channel, isac)); 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(base->StartReceive(channel)); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(base->StartPlayout(channel)); 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(base->StartSend(channel)); 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(file->StartPlayingFileAsMicrophone(channel, _mgr.AudioFilename(), 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org true, true)); 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(codec->SetVADStatus(channel, true)); 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(apm->SetAgcStatus(true, kAgcAdaptiveAnalog)); 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(apm->SetNsStatus(true, kNsModerateSuppression)); 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(apm->SetEcStatus(true, kEcAec)); 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nMeasure CPU and memory while running a full-duplex" 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org " iSAC-swb call.\n\n"); 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PAUSE 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(base->StopSend(channel)); 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(base->StopPlayout(channel)); 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(base->StopReceive(channel)); 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org base->DeleteChannel(channel); 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK(base->Terminate()); 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1013b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace voetest 102