diff --git a/webrtc/BUILD.gn b/webrtc/BUILD.gn index b2062aabdb..f979ff1147 100644 --- a/webrtc/BUILD.gn +++ b/webrtc/BUILD.gn @@ -308,7 +308,6 @@ if (!build_with_chromium) { "video:screenshare_loopback", "video:video_loopback", "video:video_tests", - "voice_engine:voe_cmd_test", "voice_engine:voice_engine_unittests", ] if (is_android) { diff --git a/webrtc/voice_engine/BUILD.gn b/webrtc/voice_engine/BUILD.gn index f58e93a7fd..847cbddb6a 100644 --- a/webrtc/voice_engine/BUILD.gn +++ b/webrtc/voice_engine/BUILD.gn @@ -308,33 +308,6 @@ if (rtc_include_tests) { } } - rtc_executable("voe_cmd_test") { - testonly = true - - deps = [ - ":channel_transport", - ":voice_engine", - "..:webrtc_common", - "../base:rtc_base_approved", - "//testing/gtest", - "//third_party/gflags", - "//webrtc/logging:rtc_event_log_api", - "//webrtc/modules/audio_processing", - "//webrtc/system_wrappers", - "//webrtc/system_wrappers:system_wrappers_default", - "//webrtc/test:test_support", - ] - - sources = [ - "test/cmd_test/voe_cmd_test.cc", - ] - - if (!build_with_chromium && is_clang) { - # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). - suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] - } - } - if (!is_ios) { rtc_executable("voe_auto_test") { testonly = true diff --git a/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc b/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc deleted file mode 100644 index 141649d60b..0000000000 --- a/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc +++ /dev/null @@ -1,790 +0,0 @@ -/* - * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include -#include -#include -#ifndef _WIN32 -#include -#endif - -#include -#include - -#include "gflags/gflags.h" -#include "webrtc/base/format_macros.h" -#include "webrtc/modules/audio_processing/include/audio_processing.h" -#include "webrtc/test/gtest.h" -#include "webrtc/test/testsupport/fileutils.h" -#include "webrtc/test/testsupport/trace_to_stderr.h" -#include "webrtc/typedefs.h" -#include "webrtc/voice_engine/include/voe_audio_processing.h" -#include "webrtc/voice_engine/include/voe_base.h" -#include "webrtc/voice_engine/include/voe_codec.h" -#include "webrtc/voice_engine/include/voe_errors.h" -#include "webrtc/voice_engine/include/voe_file.h" -#include "webrtc/voice_engine/include/voe_hardware.h" -#include "webrtc/voice_engine/include/voe_neteq_stats.h" -#include "webrtc/voice_engine/include/voe_network.h" -#include "webrtc/voice_engine/include/voe_rtp_rtcp.h" -#include "webrtc/voice_engine/include/voe_volume_control.h" -#include "webrtc/voice_engine/test/channel_transport/channel_transport.h" - -DEFINE_bool(use_log_file, false, - "Output logs to a file; by default they will be printed to stderr."); - -using namespace webrtc; -using namespace test; - -#define VALIDATE \ - if (res != 0) { \ - printf("*** Error at line %i \n", __LINE__); \ - printf("*** Error code = %i \n", base1->LastError()); \ - } - -VoiceEngine* m_voe = NULL; -VoEBase* base1 = NULL; -VoECodec* codec = NULL; -VoEVolumeControl* volume = NULL; -VoERTP_RTCP* rtp_rtcp = NULL; -VoEAudioProcessing* apm = NULL; -VoENetwork* netw = NULL; -VoEFile* file = NULL; -VoEHardware* hardware = NULL; -VoENetEqStats* neteqst = NULL; - -void RunTest(std::string out_path); - -class MyObserver : public VoiceEngineObserver { - public: - virtual void CallbackOnError(int channel, int err_code); -}; - -void MyObserver::CallbackOnError(int channel, int err_code) { - // Add printf for other error codes here - if (err_code == VE_TYPING_NOISE_WARNING) { - printf(" TYPING NOISE DETECTED \n"); - } else if (err_code == VE_TYPING_NOISE_OFF_WARNING) { - printf(" TYPING NOISE OFF DETECTED \n"); - } else if (err_code == VE_RECEIVE_PACKET_TIMEOUT) { - printf(" RECEIVE PACKET TIMEOUT \n"); - } else if (err_code == VE_PACKET_RECEIPT_RESTARTED) { - printf(" PACKET RECEIPT RESTARTED \n"); - } else if (err_code == VE_RUNTIME_PLAY_WARNING) { - printf(" RUNTIME PLAY WARNING \n"); - } else if (err_code == VE_RUNTIME_REC_WARNING) { - printf(" RUNTIME RECORD WARNING \n"); - } else if (err_code == VE_RUNTIME_PLAY_ERROR) { - printf(" RUNTIME PLAY ERROR \n"); - } else if (err_code == VE_RUNTIME_REC_ERROR) { - printf(" RUNTIME RECORD ERROR \n"); - } else if (err_code == VE_REC_DEVICE_REMOVED) { - printf(" RECORD DEVICE REMOVED \n"); - } -} - -void SetStereoIfOpus(bool use_stereo, CodecInst* codec_params) { - if (strncmp(codec_params->plname, "opus", 4) == 0) { - if (use_stereo) - codec_params->channels = 2; - else - codec_params->channels = 1; - } -} - -void PrintCodecs(bool opus_stereo) { - CodecInst codec_params; - for (int i = 0; i < codec->NumOfCodecs(); ++i) { - int res = codec->GetCodec(i, codec_params); - VALIDATE; - SetStereoIfOpus(opus_stereo, &codec_params); - printf("%2d. %3d %s/%d/%" PRIuS " \n", i, codec_params.pltype, - codec_params.plname, codec_params.plfreq, codec_params.channels); - } -} - -int main(int argc, char** argv) { - google::ParseCommandLineFlags(&argc, &argv, true); - - int res = 0; - - printf("Test started \n"); - - m_voe = VoiceEngine::Create(); - base1 = VoEBase::GetInterface(m_voe); - codec = VoECodec::GetInterface(m_voe); - apm = VoEAudioProcessing::GetInterface(m_voe); - volume = VoEVolumeControl::GetInterface(m_voe); - rtp_rtcp = VoERTP_RTCP::GetInterface(m_voe); - netw = VoENetwork::GetInterface(m_voe); - file = VoEFile::GetInterface(m_voe); - hardware = VoEHardware::GetInterface(m_voe); - neteqst = VoENetEqStats::GetInterface(m_voe); - - MyObserver my_observer; - - std::unique_ptr trace_to_stderr; - if (!FLAGS_use_log_file) { - trace_to_stderr.reset(new test::TraceToStderr); - } else { - const std::string trace_filename = test::OutputPath() + "webrtc_trace.txt"; - VoiceEngine::SetTraceFilter(kTraceAll); - res = VoiceEngine::SetTraceFile(trace_filename.c_str()); - VALIDATE; - res = VoiceEngine::SetTraceCallback(NULL); - VALIDATE; - printf("Outputting logs to file: %s\n", trace_filename.c_str()); - } - - printf("Init\n"); - res = base1->Init(); - if (res != 0) { - printf("\nError calling Init: %d\n", base1->LastError()); - fflush(NULL); - exit(1); - } - - res = base1->RegisterVoiceEngineObserver(my_observer); - VALIDATE; - - printf("Version\n"); - char tmp[1024]; - res = base1->GetVersion(tmp); - VALIDATE; - printf("%s\n", tmp); - - RunTest(test::OutputPath()); - - printf("Terminate \n"); - - base1->DeRegisterVoiceEngineObserver(); - - res = base1->Terminate(); - VALIDATE; - - if (base1) - base1->Release(); - - if (codec) - codec->Release(); - - if (volume) - volume->Release(); - - if (rtp_rtcp) - rtp_rtcp->Release(); - - if (apm) - apm->Release(); - - if (netw) - netw->Release(); - - if (file) - file->Release(); - - if (hardware) - hardware->Release(); - - if (neteqst) - neteqst->Release(); - - VoiceEngine::Delete(m_voe); - - return 0; -} - -void RunTest(std::string out_path) { - int chan, res; - CodecInst cinst; - bool enable_aec = false; - bool enable_agc = false; - bool enable_cng = false; - bool enable_ns = false; - bool typing_detection = false; - bool muted = false; - bool opus_stereo = false; - bool opus_dtx = false; - bool experimental_ns_enabled = false; - bool debug_recording_started = false; - - const std::string audio_filename = - webrtc::test::ResourcePath("voice_engine/audio_long16", "pcm"); - - const std::string play_filename = out_path + "recorded_playout.pcm"; - const std::string mic_filename = out_path + "recorded_mic.pcm"; - - chan = base1->CreateChannel(); - if (chan < 0) { - printf("************ Error code = %i\n", base1->LastError()); - fflush(NULL); - } - - VoiceChannelTransport* voice_channel_transport( - new VoiceChannelTransport(netw, chan)); - - char ip[64]; - printf("1. 127.0.0.1 \n"); - printf("2. Specify IP \n"); - int ip_selection; - ASSERT_EQ(1, scanf("%i", &ip_selection)); - - if (ip_selection == 1) { - strcpy(ip, "127.0.0.1"); - } else { - printf("Specify remote IP: "); - ASSERT_EQ(1, scanf("%s", ip)); - } - - int rPort; - printf("Specify remote port (1=1234): "); - ASSERT_EQ(1, scanf("%i", &rPort)); - if (1 == rPort) - rPort = 1234; - printf("Set Send port \n"); - - printf("Set Send IP \n"); - res = voice_channel_transport->SetSendDestination(ip, rPort); - VALIDATE; - - int lPort; - printf("Specify local port (1=1234): "); - ASSERT_EQ(1, scanf("%i", &lPort)); - if (1 == lPort) - lPort = 1234; - printf("Set Rec Port \n"); - - res = voice_channel_transport->SetLocalReceiver(lPort); - VALIDATE; - - printf("\n"); - PrintCodecs(opus_stereo); - printf("Select send codec: "); - int codec_selection; - ASSERT_EQ(1, scanf("%i", &codec_selection)); - codec->GetCodec(codec_selection, cinst); - - printf("Set primary codec\n"); - SetStereoIfOpus(opus_stereo, &cinst); - res = codec->SetSendCodec(chan, cinst); - VALIDATE; - - const int kMaxNumChannels = 8; - int channel_index = 0; - std::vector channels(kMaxNumChannels); - std::vector voice_channel_transports(kMaxNumChannels); - - for (int i = 0; i < kMaxNumChannels; ++i) { - channels[i] = base1->CreateChannel(); - int port = rPort + (i + 1) * 2; - - voice_channel_transports[i] = new VoiceChannelTransport(netw, channels[i]); - - res = voice_channel_transports[i]->SetSendDestination(ip, port); - VALIDATE; - res = voice_channel_transports[i]->SetLocalReceiver(port); - VALIDATE; - res = codec->SetSendCodec(channels[i], cinst); - VALIDATE; - } - - // Call loop - bool newcall = true; - while (newcall) { - int rd(-1), pd(-1); - res = hardware->GetNumOfRecordingDevices(rd); - VALIDATE; - res = hardware->GetNumOfPlayoutDevices(pd); - VALIDATE; - - char dn[128] = { 0 }; - char guid[128] = { 0 }; - printf("\nPlayout devices (%d): \n", pd); - for (int j = 0; j < pd; ++j) { - res = hardware->GetPlayoutDeviceName(j, dn, guid); - VALIDATE; - printf(" %d: %s \n", j, dn); - } - - printf("Recording devices (%d): \n", rd); - for (int j = 0; j < rd; ++j) { - res = hardware->GetRecordingDeviceName(j, dn, guid); - VALIDATE; - printf(" %d: %s \n", j, dn); - } - - printf("Select playout device: "); - ASSERT_EQ(1, scanf("%d", &pd)); - res = hardware->SetPlayoutDevice(pd); - VALIDATE; - printf("Select recording device: "); - ASSERT_EQ(1, scanf("%d", &rd)); - printf("Setting sound devices \n"); - res = hardware->SetRecordingDevice(rd); - VALIDATE; - - res = codec->SetVADStatus(0, enable_cng); - VALIDATE; - - res = apm->SetAgcStatus(enable_agc); - VALIDATE; - - res = apm->SetEcStatus(enable_aec); - VALIDATE; - - res = apm->SetNsStatus(enable_ns); - VALIDATE; - - printf("\n1. Send, listen and playout \n"); - printf("2. Send only \n"); - printf("3. Listen and playout only \n"); - printf("Select transfer mode: "); - int call_selection; - ASSERT_EQ(1, scanf("%i", &call_selection)); - const bool send = !(call_selection == 3); - const bool receive = !(call_selection == 2); - - if (receive) { - printf("Start Playout \n"); - res = base1->StartPlayout(chan); - VALIDATE; - } - - if (send) { - printf("Start Send \n"); - res = base1->StartSend(chan); - VALIDATE; - } - - printf("Getting mic volume \n"); - unsigned int vol = 999; - res = volume->GetMicVolume(vol); - VALIDATE; - if ((vol > 255) || (vol < 1)) { - printf("\n****ERROR in GetMicVolume"); - } - - int forever = 1; - while (forever) { - printf("\nSelect codec\n"); - PrintCodecs(opus_stereo); - printf("\nOther actions\n"); - const int num_codecs = codec->NumOfCodecs(); - int option_index = num_codecs; - printf("%i. Toggle CNG\n", option_index++); - printf("%i. Toggle AGC\n", option_index++); - printf("%i. Toggle NS\n", option_index++); - printf("%i. Toggle experimental NS\n", option_index++); - printf("%i. Toggle EC\n", option_index++); - printf("%i. Select AEC\n", option_index++); - printf("%i. Select AECM\n", option_index++); - printf("%i. Get speaker volume\n", option_index++); - printf("%i. Set speaker volume\n", option_index++); - printf("%i. Get microphone volume\n", option_index++); - printf("%i. Set microphone volume\n", option_index++); - printf("%i. Play local file (audio_long16.pcm) \n", option_index++); - printf("%i. Change playout device \n", option_index++); - printf("%i. Change recording device \n", option_index++); - printf("%i. Toggle receive-side AGC \n", option_index++); - printf("%i. Toggle receive-side NS \n", option_index++); - printf("%i. AGC status \n", option_index++); - printf("%i. Toggle microphone mute \n", option_index++); - printf("%i. Get last error code \n", option_index++); - printf("%i. Toggle typing detection \n", - option_index++); - printf("%i. Record a PCM file \n", option_index++); - printf("%i. Play a previously recorded PCM file locally \n", - option_index++); - printf("%i. Play a previously recorded PCM file as microphone \n", - option_index++); - printf("%i. Add an additional file-playing channel \n", option_index++); - printf("%i. Remove a file-playing channel \n", option_index++); - printf("%i. Toggle Opus stereo (Opus must be selected again to apply " - "the setting) \n", option_index++); - printf("%i. Set Opus maximum playback rate \n", option_index++); - printf("%i. Toggle Opus DTX \n", option_index++); - printf("%i. Set bit rate (only take effect on codecs that allow the " - "change) \n", option_index++); - printf("%i. Toggle AECdump recording \n", option_index++); - - printf("Select action or %i to stop the call: ", option_index); - int option_selection; - ASSERT_EQ(1, scanf("%i", &option_selection)); - - option_index = num_codecs; - if (option_selection < option_index) { - res = codec->GetCodec(option_selection, cinst); - VALIDATE; - SetStereoIfOpus(opus_stereo, &cinst); - printf("Set primary codec\n"); - res = codec->SetSendCodec(chan, cinst); - VALIDATE; - } else if (option_selection == option_index++) { - enable_cng = !enable_cng; - res = codec->SetVADStatus(0, enable_cng); - VALIDATE; - if (enable_cng) - printf("\n CNG is now on! \n"); - else - printf("\n CNG is now off! \n"); - } else if (option_selection == option_index++) { - enable_agc = !enable_agc; - res = apm->SetAgcStatus(enable_agc); - VALIDATE; - if (enable_agc) - printf("\n AGC is now on! \n"); - else - printf("\n AGC is now off! \n"); - } else if (option_selection == option_index++) { - enable_ns = !enable_ns; - res = apm->SetNsStatus(enable_ns); - VALIDATE; - if (enable_ns) - printf("\n NS is now on! \n"); - else - printf("\n NS is now off! \n"); - } else if (option_selection == option_index++) { - experimental_ns_enabled = !experimental_ns_enabled; - Config config; - config.Set(new ExperimentalNs(experimental_ns_enabled)); - base1->audio_processing()->SetExtraOptions(config); - if (experimental_ns_enabled) { - printf("\n Experimental NS is now on!\n"); - } else { - printf("\n Experimental NS is now off!\n"); - } - } else if (option_selection == option_index++) { - enable_aec = !enable_aec; - res = apm->SetEcStatus(enable_aec, kEcUnchanged); - VALIDATE; - if (enable_aec) - printf("\n Echo control is now on! \n"); - else - printf("\n Echo control is now off! \n"); - } else if (option_selection == option_index++) { - res = apm->SetEcStatus(enable_aec, kEcAec); - VALIDATE; - printf("\n AEC selected! \n"); - if (enable_aec) - printf(" (Echo control is on)\n"); - else - printf(" (Echo control is off)\n"); - } else if (option_selection == option_index++) { - res = apm->SetEcStatus(enable_aec, kEcAecm); - VALIDATE; - printf("\n AECM selected! \n"); - if (enable_aec) - printf(" (Echo control is on)\n"); - else - printf(" (Echo control is off)\n"); - } else if (option_selection == option_index++) { - unsigned vol(0); - res = volume->GetSpeakerVolume(vol); - VALIDATE; - printf("\n Speaker Volume is %d \n", vol); - } else if (option_selection == option_index++) { - printf("Level: "); - int level; - ASSERT_EQ(1, scanf("%i", &level)); - res = volume->SetSpeakerVolume(level); - VALIDATE; - } else if (option_selection == option_index++) { - unsigned vol(0); - res = volume->GetMicVolume(vol); - VALIDATE; - printf("\n Microphone Volume is %d \n", vol); - } else if (option_selection == option_index++) { - printf("Level: "); - int level; - ASSERT_EQ(1, scanf("%i", &level)); - res = volume->SetMicVolume(level); - VALIDATE; - } else if (option_selection == option_index++) { - res = file->StartPlayingFileLocally(0, audio_filename.c_str()); - VALIDATE; - } else if (option_selection == option_index++) { - // change the playout device with current call - int num_pd(-1); - res = hardware->GetNumOfPlayoutDevices(num_pd); - VALIDATE; - - char dn[128] = { 0 }; - char guid[128] = { 0 }; - - printf("\nPlayout devices (%d): \n", num_pd); - for (int i = 0; i < num_pd; ++i) { - res = hardware->GetPlayoutDeviceName(i, dn, guid); - VALIDATE; - printf(" %d: %s \n", i, dn); - } - printf("Select playout device: "); - ASSERT_EQ(1, scanf("%d", &num_pd)); - // Will use plughw for hardware devices - res = hardware->SetPlayoutDevice(num_pd); - VALIDATE; - } else if (option_selection == option_index++) { - // change the recording device with current call - int num_rd(-1); - - res = hardware->GetNumOfRecordingDevices(num_rd); - VALIDATE; - - char dn[128] = { 0 }; - char guid[128] = { 0 }; - - printf("Recording devices (%d): \n", num_rd); - for (int i = 0; i < num_rd; ++i) { - res = hardware->GetRecordingDeviceName(i, dn, guid); - VALIDATE; - printf(" %d: %s \n", i, dn); - } - - printf("Select recording device: "); - ASSERT_EQ(1, scanf("%d", &num_rd)); - printf("Setting sound devices \n"); - // Will use plughw for hardware devices - res = hardware->SetRecordingDevice(num_rd); - VALIDATE; - } else if (option_selection == option_index++) { - AgcModes agcmode; - bool enable; - res = apm->GetAgcStatus(enable, agcmode); - VALIDATE - printf("\n AGC enable is %d, mode is %d \n", enable, agcmode); - } else if (option_selection == option_index++) { - // Toggle Mute on Microphone - res = volume->GetInputMute(chan, muted); - VALIDATE; - muted = !muted; - res = volume->SetInputMute(chan, muted); - VALIDATE; - if (muted) - printf("\n Microphone is now on mute! \n"); - else - printf("\n Microphone is no longer on mute! \n"); - } else if (option_selection == option_index++) { - // Get the last error code and print to screen - int err_code = 0; - err_code = base1->LastError(); - if (err_code != -1) - printf("\n The last error code was %i.\n", err_code); - } else if (option_selection == option_index++) { - typing_detection= !typing_detection; - res = apm->SetTypingDetectionStatus(typing_detection); - VALIDATE; - if (typing_detection) - printf("\n Typing detection is now on!\n"); - else - printf("\n Typing detection is now off!\n"); - } else if (option_selection == option_index++) { - int stop_record = 1; - int file_source = 1; - printf("\n Select source of recorded file. "); - printf("\n 1. Record from microphone to file "); - printf("\n 2. Record from playout to file "); - printf("\n Enter your selection: \n"); - ASSERT_EQ(1, scanf("%i", &file_source)); - if (file_source == 1) { - printf("\n Start recording microphone as %s \n", - mic_filename.c_str()); - res = file->StartRecordingMicrophone(mic_filename.c_str()); - VALIDATE; - } else { - printf("\n Start recording playout as %s \n", play_filename.c_str()); - res = file->StartRecordingPlayout(chan, play_filename.c_str()); - VALIDATE; - } - while (stop_record != 0) { - printf("\n Type 0 to stop recording file \n"); - ASSERT_EQ(1, scanf("%i", &stop_record)); - } - if (file_source == 1) { - res = file->StopRecordingMicrophone(); - VALIDATE; - } else { - res = file->StopRecordingPlayout(chan); - VALIDATE; - } - printf("\n File finished recording \n"); - } else if (option_selection == option_index++) { - int file_type = 1; - int stop_play = 1; - printf("\n Select a file to play locally in a loop."); - printf("\n 1. Play %s", mic_filename.c_str()); - printf("\n 2. Play %s", play_filename.c_str()); - printf("\n Enter your selection\n"); - ASSERT_EQ(1, scanf("%i", &file_type)); - if (file_type == 1) { - printf("\n Start playing %s locally in a loop\n", - mic_filename.c_str()); - res = file->StartPlayingFileLocally(chan, mic_filename.c_str(), true); - VALIDATE; - } else { - printf("\n Start playing %s locally in a loop\n", - play_filename.c_str()); - res = file->StartPlayingFileLocally(chan, play_filename.c_str(), - true); - VALIDATE; - } - while (stop_play != 0) { - printf("\n Type 0 to stop playing file\n"); - ASSERT_EQ(1, scanf("%i", &stop_play)); - } - res = file->StopPlayingFileLocally(chan); - VALIDATE; - } else if (option_selection == option_index++) { - int file_type = 1; - int stop_play = 1; - printf("\n Select a file to play as microphone in a loop."); - printf("\n 1. Play %s", mic_filename.c_str()); - printf("\n 2. Play %s", play_filename.c_str()); - printf("\n Enter your selection\n"); - ASSERT_EQ(1, scanf("%i", &file_type)); - if (file_type == 1) { - printf("\n Start playing %s as mic in a loop\n", - mic_filename.c_str()); - res = file->StartPlayingFileAsMicrophone(chan, mic_filename.c_str(), - true); - VALIDATE; - } else { - printf("\n Start playing %s as mic in a loop\n", - play_filename.c_str()); - res = file->StartPlayingFileAsMicrophone(chan, play_filename.c_str(), - true); - VALIDATE; - } - while (stop_play != 0) { - printf("\n Type 0 to stop playing file\n"); - ASSERT_EQ(1, scanf("%i", &stop_play)); - } - res = file->StopPlayingFileAsMicrophone(chan); - VALIDATE; - } else if (option_selection == option_index++) { - if (channel_index < kMaxNumChannels) { - res = base1->StartPlayout(channels[channel_index]); - VALIDATE; - res = base1->StartSend(channels[channel_index]); - VALIDATE; - res = file->StartPlayingFileAsMicrophone(channels[channel_index], - audio_filename.c_str(), - true, - false); - VALIDATE; - channel_index++; - printf("Using %d additional channels\n", channel_index); - } else { - printf("Max number of channels reached\n"); - } - } else if (option_selection == option_index++) { - if (channel_index > 0) { - channel_index--; - res = file->StopPlayingFileAsMicrophone(channels[channel_index]); - VALIDATE; - res = base1->StopSend(channels[channel_index]); - VALIDATE; - res = base1->StopPlayout(channels[channel_index]); - VALIDATE; - printf("Using %d additional channels\n", channel_index); - } else { - printf("All additional channels stopped\n"); - } - } else if (option_selection == option_index++) { - opus_stereo = !opus_stereo; - if (opus_stereo) - printf("\n Opus stereo enabled (select Opus again to apply the " - "setting). \n"); - else - printf("\n Opus mono enabled (select Opus again to apply the " - "setting). \n"); - } else if (option_selection == option_index++) { - printf("\n Input maxium playback rate in Hz: "); - int max_playback_rate; - ASSERT_EQ(1, scanf("%i", &max_playback_rate)); - res = codec->SetOpusMaxPlaybackRate(chan, max_playback_rate); - VALIDATE; - } else if (option_selection == option_index++) { - opus_dtx = !opus_dtx; - res = codec->SetOpusDtx(chan, opus_dtx); - VALIDATE; - printf("Opus DTX %s.\n", opus_dtx ? "enabled" : "disabled"); - } else if (option_selection == option_index++) { - res = codec->GetSendCodec(chan, cinst); - VALIDATE; - printf("Current bit rate is %i bps, set to: ", cinst.rate); - int new_bitrate_bps; - ASSERT_EQ(1, scanf("%i", &new_bitrate_bps)); - res = codec->SetBitRate(chan, new_bitrate_bps); - VALIDATE; - } else if (option_selection == option_index++) { - const char* kDebugFileName = "audio.aecdump"; - if (debug_recording_started) { - apm->StopDebugRecording(); - printf("Debug recording named %s stopped\n", kDebugFileName); - } else { - apm->StartDebugRecording(kDebugFileName); - printf("Debug recording named %s started\n", kDebugFileName); - } - debug_recording_started = !debug_recording_started; - } else { - break; - } - } - - if (debug_recording_started) { - apm->StopDebugRecording(); - } - - if (send) { - printf("Stop Send \n"); - res = base1->StopSend(chan); - VALIDATE; - } - - if (receive) { - printf("Stop Playout \n"); - res = base1->StopPlayout(chan); - VALIDATE; - } - - while (channel_index > 0) { - --channel_index; - res = file->StopPlayingFileAsMicrophone(channels[channel_index]); - VALIDATE; - res = base1->StopSend(channels[channel_index]); - VALIDATE; - res = base1->StopPlayout(channels[channel_index]); - VALIDATE; - } - - printf("\n1. New call \n"); - printf("2. Quit \n"); - printf("Select action: "); - int end_option; - ASSERT_EQ(1, scanf("%i", &end_option)); - newcall = (end_option == 1); - // Call loop - } - - // Transports should be deleted before channel deletion. - delete voice_channel_transport; - for (int i = 0; i < kMaxNumChannels; ++i) { - delete voice_channel_transports[i]; - voice_channel_transports[i] = NULL; - } - - printf("Delete channels \n"); - res = base1->DeleteChannel(chan); - VALIDATE; - - for (int i = 0; i < kMaxNumChannels; ++i) { - res = base1->DeleteChannel(channels[i]); - VALIDATE; - } -}