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 // Sets up a simple VoiceEngine loopback call with the default audio devices 12 // and runs forever. Some parameters can be configured through command-line 13 // flags. 14 15 #include "gflags/gflags.h" 16 #include "gtest/gtest.h" 17 18 #include "webrtc/system_wrappers/interface/scoped_ptr.h" 19 #include "webrtc/test/channel_transport/include/channel_transport.h" 20 #include "webrtc/voice_engine/include/voe_audio_processing.h" 21 #include "webrtc/voice_engine/include/voe_base.h" 22 #include "webrtc/voice_engine/include/voe_codec.h" 23 #include "webrtc/voice_engine/include/voe_hardware.h" 24 #include "webrtc/voice_engine/include/voe_network.h" 25 26 DEFINE_string(render, "render", "render device name"); 27 DEFINE_string(codec, "ISAC", "codec name"); 28 DEFINE_int32(rate, 16000, "codec sample rate in Hz"); 29 30 namespace webrtc { 31 namespace test { 32 33 void RunHarness() { 34 VoiceEngine* voe = VoiceEngine::Create(); 35 ASSERT_TRUE(voe != NULL); 36 VoEAudioProcessing* audio = VoEAudioProcessing::GetInterface(voe); 37 ASSERT_TRUE(audio != NULL); 38 VoEBase* base = VoEBase::GetInterface(voe); 39 ASSERT_TRUE(base != NULL); 40 VoECodec* codec = VoECodec::GetInterface(voe); 41 ASSERT_TRUE(codec != NULL); 42 VoEHardware* hardware = VoEHardware::GetInterface(voe); 43 ASSERT_TRUE(hardware != NULL); 44 VoENetwork* network = VoENetwork::GetInterface(voe); 45 ASSERT_TRUE(network != NULL); 46 47 ASSERT_EQ(0, base->Init()); 48 int channel = base->CreateChannel(); 49 ASSERT_NE(-1, channel); 50 51 scoped_ptr<VoiceChannelTransport> voice_channel_transport( 52 new VoiceChannelTransport(network, channel)); 53 54 ASSERT_EQ(0, voice_channel_transport->SetSendDestination("127.0.0.1", 1234)); 55 ASSERT_EQ(0, voice_channel_transport->SetLocalReceiver(1234)); 56 57 CodecInst codec_params = {0}; 58 bool codec_found = false; 59 for (int i = 0; i < codec->NumOfCodecs(); i++) { 60 ASSERT_EQ(0, codec->GetCodec(i, codec_params)); 61 if (FLAGS_codec.compare(codec_params.plname) == 0 && 62 FLAGS_rate == codec_params.plfreq) { 63 codec_found = true; 64 break; 65 } 66 } 67 ASSERT_TRUE(codec_found); 68 ASSERT_EQ(0, codec->SetSendCodec(channel, codec_params)); 69 70 int num_devices = 0; 71 ASSERT_EQ(0, hardware->GetNumOfPlayoutDevices(num_devices)); 72 char device_name[128] = {0}; 73 char guid[128] = {0}; 74 bool device_found = false; 75 int device_index; 76 for (device_index = 0; device_index < num_devices; device_index++) { 77 ASSERT_EQ(0, hardware->GetPlayoutDeviceName(device_index, device_name, 78 guid)); 79 if (FLAGS_render.compare(device_name) == 0) { 80 device_found = true; 81 break; 82 } 83 } 84 ASSERT_TRUE(device_found); 85 ASSERT_EQ(0, hardware->SetPlayoutDevice(device_index)); 86 87 // Disable all audio processing. 88 ASSERT_EQ(0, audio->SetAgcStatus(false)); 89 ASSERT_EQ(0, audio->SetEcStatus(false)); 90 ASSERT_EQ(0, audio->EnableHighPassFilter(false)); 91 ASSERT_EQ(0, audio->SetNsStatus(false)); 92 93 ASSERT_EQ(0, base->StartReceive(channel)); 94 ASSERT_EQ(0, base->StartPlayout(channel)); 95 ASSERT_EQ(0, base->StartSend(channel)); 96 97 // Run forever... 98 while (1) { 99 } 100 } 101 102 } // namespace test 103 } // namespace webrtc 104 105 int main(int argc, char** argv) { 106 google::ParseCommandLineFlags(&argc, &argv, true); 107 webrtc::test::RunHarness(); 108 } 109